diff --git a/docs/fix_log_20260427.md b/docs/fix_log_20260427.md
new file mode 100644
index 0000000..d48f92a
--- /dev/null
+++ b/docs/fix_log_20260427.md
@@ -0,0 +1,69 @@
+# Siam-Cloud 修复日志
+
+## 修复时间
+
+2026-04-27
+
+---
+
+## 修复一:退款回调逻辑错误(P0)
+
+### 问题描述
+
+`WxPayController.refundSuccessNotify()` 存在两个 Bug:
+
+1. **状态检查错误**:使用 `!= INT_1`(待支付)判断交易状态。退款回调发生时交易记录已被 `wxNotify` 更新为 `INT_2`(已支付),导致判断恒为 true,退款回调永远被跳过。
+2. **业务逻辑错误**:try 块中调用了 `orderService.paymentNotify()`(支付成功通知、打印小票、语音提醒),而非退款处理逻辑。
+
+深层问题:系统在 admin 审批退款时通过 `refundBase()` 同步执行全部退款流程,未等待微信退款 API 的异步回调确认。若微信端退款失败,本地已产生不可逆的资金操作。
+
+### 修复内容
+
+**文件**:`siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxPayController.java`
+
+| 改动点 | 修复前 | 修复后 |
+|--------|--------|--------|
+| 状态检查 | `dbMemberTradeRecord.getStatus() != Quantity.INT_1` | `dbMemberTradeRecord.getStatus() != Quantity.INT_2` |
+| 业务处理 | `orderService.paymentNotify(outTradeNo)` | `orderService.refundMerchantBalance(outTradeNo)` |
+| 无用代码 | 再次将交易记录设为 INT_2(原已是 INT_2) | 已移除 |
+| 状态异常响应 | 仅打印日志后静默 return,微信会持续重试 | 返回 SUCCESS XML,终止微信重试 |
+
+---
+
+## 修复二:Seata 分布式事务激活(P1)
+
+### 问题描述
+
+1. `Seata_OrderServiceImpl` 是一个空壳类,所有方法返回 null/0/false,`@GlobalTransactional` 被注释
+2. `OrderServiceImpl.insert()`(实际使用的实现)无 `@GlobalTransactional`
+3. Seata 依赖未在任何 pom.xml 中声明,8 个 provider 的 Seata 配置为孤立配置
+4. 跨服务下单(订单创建 + 删购物车 + 核销优惠券 + 更新会员)无分布式事务保障
+
+### 修复内容
+
+| 改动 | 文件 |
+|------|------|
+| 新增 `spring-cloud-starter-alibaba-seata` 依赖 | `siam-common/pom.xml` |
+| 添加 `@GlobalTransactional(timeoutMills = 300000, name = "order-create")` | `OrderServiceImpl.insert()` |
+| 添加 import `io.seata.spring.annotation.GlobalTransactional` | `OrderServiceImpl.java` |
+| 删除空壳类 | `Seata_OrderServiceImpl.java` |
+
+**注意**:激活后需启动 Seata Server 才能正常下单。
+
+---
+
+## 附加发现(未修复)
+
+| 问题 | 位置 | 说明 |
+|------|------|------|
+| RocketMQ 延时关单被注释 | `OrderServiceImpl.java:279` | 超时未支付订单不会自动关闭 |
+| `RocketMQ_OrderServiceImpl` | `distributed_transaction/` | 同为待确认状态的实现类 |
+| `LocalMsg_OrderServiceImpl` | `distributed_transaction/` | 同上 |
+
+---
+
+## 修复后待验证
+
+- [ ] 编译通过(`mvn compile`)
+- [ ] 退款流程端到端验证
+- [ ] Seata Server 启动后下单链路验证
diff --git a/docs/interview_final.md b/docs/interview_final.md
new file mode 100644
index 0000000..74b10be
--- /dev/null
+++ b/docs/interview_final.md
@@ -0,0 +1,231 @@
+# Siam-Cloud 架构师面试实战手册(最终纯净版)
+
+> 人设定位:Siam-Cloud 微服务核心架构师 / 高级后端开发
+> 项目背景:基于原生 Spring Boot 3.2 + Spring Cloud Alibaba (Nacos, Seata, Sentinel) + Gateway + RocketMQ + ShardingSphere + Redis 打造的高并发外卖/商城平台
+
+---
+
+## 维度一:API 网关与流量治理 (Gateway + Sentinel)
+
+### Q1:你们项目拆分了 10 个微服务,前端请求的鉴权和跨域是怎么统一管理的?
+
+**【情境】:** 在分布式微服务架构下,如果让订单、用户、商品等每个独立服务都去处理 Token 解析和 CORS(跨域),会导致代码严重冗余,且鉴权标准极易出现漏洞。
+
+**【任务】:** 设计一个统一的流量入口,将安全校验、跨域等非业务逻辑彻底下沉到基础设施层。
+
+**【行动】:**
+1. 我基于 Spring Cloud Gateway 的 WebFlux 响应式模型构建了统一网关。
+2. **跨域控制**:在 Gateway 层面配置 `globalcors`,彻底剥离后端 Provider 的跨域关注点,实现全站统一跨域策略。
+3. **全局鉴权**:设计了自定义 `AuthGlobalFilter`。在网关层拦截所有外部请求,校验 Token 的合法性。校验通过后,将 Token 写入 `X-Auth-Token` 请求头中透传给下游服务。对于 `/login`、`/notify`、`/callback` 等接口开放白名单放行。
+4. **路由改写**:利用 `StripPrefix=1` 过滤器精准剥离外部访问的前缀(如将 `/api-order/rest/xxx` 剥离为 `/rest/xxx`),实现内外网路径的物理隔离与映射。
+
+**【结果】:** 实现了内部微服务的"无状态化"与"零鉴权负担",下游服务只需从请求头获取用户信息即可,大幅提升了系统的安全性与横向扩展能力。
+
+---
+
+### Q2:如果遇到大促或者外卖高峰期,网关层如何保护后端微服务不被流量洪峰打垮?
+
+**【情境】:** 午餐高峰期,并发订单请求可能瞬间飙升,如果直接打到订单或商品服务,容易引起数据库连接池耗尽,进而导致全链路雪崩。
+
+**【任务】:** 在网关层建立第一道防线,实现灵活的限流与熔断降级。
+
+**【行动】:**
+1. 引入 Sentinel 结合 Gateway 进行入口级别的全局流量控制。
+2. 针对核心下单 API 设置基于 QPS 的限流规则(采用令牌桶算法),当请求超过系统承载阈值时,触发快速失败机制。
+3. 配置定制化的 `BlockRequestHandler`。在触发限流时,不返回生硬的 500/503 报错,而是返回友好的 JSON 业务提示(如"当前抢单人数过多,请稍后再试")。
+4. Gateway 本身基于 WebFlux 响应式异步模型,相比传统阻塞模型,同等硬件资源下可承载更高的并发连接数。
+
+**【结果】:** 在大流量压测下,系统不仅能够有效削峰填谷,还能保证核心链路(如支付、下单)的资源倾斜,做到了真正的高可用。
+
+---
+
+## 维度二:高并发支付与资金安全 (Redis 核心场景)
+
+### Q3:外卖系统的支付回调极其关键。如果微信/支付宝服务器因为网络抖动发起了高并发的重复回调,你们如何保证资金安全?
+
+**【情境】:** 第三方支付平台(如微信)在未收到我方明确的 HTTP 200 响应时,会以指数级时间(15s, 30s, 3m...)进行疯狂的重复回调通知。如果不加干预,会导致一笔订单被重复加钱、重复发货。
+
+**【任务】:** 实现绝对的支付回调幂等性控制,且防范外部恶意请求伪造。
+
+**【行动】:** 我利用 Redis 分布式锁设计了防御纵深:
+
+1. **验签前置**:在进入任何业务逻辑前,先调用我底层封装的数字签名校验工具类,严格遵循微信支付 V2 的 MD5 签名规范——将所有参数按字典序排序拼接,末尾拼接 `&key=` + 商户密钥,生成签名后与回调中的 `sign` 字段逐字比对,拦截恶意伪造的虚假支付请求。
+2. **SETNX 锁控制**:以 `pay:callback:lock:{订单号}` 作为 Key,执行带有过期时间(设定为 3 分钟,防止服务宕机导致死锁)的 `setIfAbsent` 操作。
+3. **拦截与确认**:如果加锁失败,说明该订单的回调正在被处理,系统直接向微信返回 `SUCCESS`,主动切断微信的后续重试机制。
+4. **核心策略(亮点)**:在 `finally` 块中,我故意不主动释放锁,而是让其保留至自然过期。这就完美抵御了微信在极短时间内的并发重发击穿。
+
+**【结果】:** 彻底消除了重复支付回调造成的资金风险,上线至今保证了账务数据的绝对最终一致。
+
+---
+
+### Q4:除了支付回调,Redis 在你们项目中还承载了哪些核心场景?
+
+**【情境】:** 一个成熟的微服务系统,Redis 不能只做简单的 KV 缓存,需要承担更多核心职责。
+
+**【任务】:** 梳理项目中 Redis 的关键应用场景,确保每个场景的选型和实现都经得起生产环境的考验。
+
+**【行动】:**
+
+| 场景 | 数据结构 | 设计要点 |
+|------|---------|---------|
+| **用户 Session** | String(Key: `LOGIN_USER:{token}`) | 登录成功写入,设置 7 天 TTL;活跃用户持续续期 |
+| **支付幂等锁** | String(Key: `pay:callback:lock:{outTradeNo}`) | SETNX 实现,3 分钟过期,不主动删锁 |
+| **短信验证码** | String(Key: `sms:code:{mobile}`) | 5 分钟过期,发送时覆盖旧值 |
+| **购物车缓存** | Hash(Key: `cart:{userId}`) | 用户加购时先写 Redis,下单时同步到 DB |
+| **登录重试限制** | String(Key: `login:lock:{ip}`) | 连续输错密码 5 次后锁定 15 分钟 |
+
+**设计原则:**
+1. 所有 Key 统一前缀,便于运维排查和管理
+2. 过期时间必须有,防止内存泄漏
+3. 大 Key 预警:购物车超过 100 个商品时异步刷盘
+4. 容灾降级:Redis 不可用时,Session 查询降级为查 DB
+
+**【结果】:** Redis 在项目中承担了认证、幂等、缓存、限流等多重职责,每个场景根据业务特性选择了合适的数据结构,配合 TTL、前缀规范、容灾降级策略,确保在生产环境下稳定运行。
+
+---
+
+## 维度三:分布式事务与异步流转 (Seata + RocketMQ)
+
+### Q5:用户下单时,需要同时调用订单服务创单、商品服务扣库存、促销服务核销优惠券。如果中途报错,怎么保证数据的一致性?
+
+**【情境】:** 在微服务架构下,本地的 `@Transactional` 只能管辖单一数据库。跨微服务的 RPC 调用一旦出现网络超时或下游报错,极易产生部分成功、部分失败的"脏数据"(如库存扣了但订单没生成)。
+
+**【任务】:** 在保证系统吞吐量的前提下,实现跨微服务下单链路的强一致性。
+
+**【行动】:** 我主导引入了 Seata 的 AT(Automatic Transaction)模式:
+
+1. 以外部网关的下单请求为起点,在 Order 服务的发起端打上 `@GlobalTransactional` 注解,向 TC(事务协调器)注册全局事务 XID。
+2. Seata 会在底层自动拦截各个服务的业务 SQL,在执行业务操作前,生成包含修改前和修改后数据的 `undo_log`(回滚日志),并与业务数据在同一个本地事务中提交。
+3. 如果调用链上的任何一个节点抛出异常,TC 会立即向所有参与者下发回滚指令,各节点利用 `undo_log` 中的前置镜像生成反向 SQL 进行自动补偿。
+4. **一致性级别权衡**:资金相关和核心业务(余额扣减、库存扣减、订单创建)走强一致性(Seata);非核心链路(通知、日志、统计)走最终一致性(RocketMQ)。
+
+**【结果】:** 以极小的代码侵入性(仅加注解),完美保障了核心下单链路的强一致性,有效防止了外卖平台的超卖事故。
+
+---
+
+### Q6:下单支付成功后,系统还要发短信、给骑手派单、更新报表。如果这些都写在主流程里,响应太慢怎么办?
+
+**【情境】:** 支付成功后的后置动作繁多,导致核心接口响应时间长(RT),且一旦边缘接口(如发短信)挂了,会导致整个主流程报错回滚,系统耦合度极高。
+
+**【任务】:** 对核心链路进行深度解耦,提升吞吐量与容错率。
+
+**【行动】:** 采用 RocketMQ 事务消息实现最终一致性:
+
+1. 支付服务在确认收款后,首先通过 RocketMQ 发送一条半消息(Half Message)到 Broker,此时消息对消费者不可见。
+2. 执行本地事务(修改订单状态为"已支付",记录支付流水)。
+3. 本地事务成功后,向 Broker 发送 Commit 指令,此时消息才真正投递给下游(短信、派单系统)进行异步消费。
+4. **容错机制**:万一支付服务在发送 Commit 前宕机,MQ 的回查机制会反向调用我实现的 `checkLocalTransaction` 接口,检查数据库订单状态,决定是 Commit 还是 Rollback。
+
+**【结果】:** 核心支付接口的 RT 从 1.5 秒压降到了 200 毫秒以内,极大地提升了用户体验,并实现了各业务域的物理隔离。
+
+---
+
+## 维度四:海量数据路由与分片 (ShardingSphere)
+
+### Q7:随着系统订单量暴增,单表千万级数据导致查询极慢,你是如何设计数据库存储架构的?
+
+**【情境】:** 外卖系统的历史订单数据增长极快,MySQL 单库单表(tb_order)很快遇到了 B+ 树索引层级过深、I/O 遇到瓶颈的严重性能衰退问题。
+
+**【任务】:** 在不改变上层 Java 业务代码(依然使用 MyBatis-Plus 标准写法)的前提下,实现数据库的水平无缝扩容。
+
+**【行动】:** 我引入了 Apache ShardingSphere-JDBC 作为数据层的智能路由引擎:
+
+1. **分片键选择**:经过对慢 SQL 频次的分析,发现绝大部分高频查询是"C 端用户查自己的订单"。因此我选取 `member_id` 作为分库键,`order_id` 作为分表键。
+2. **路由算法设计**:采用标准 Inline 表达式。将数据库水平拆分为 `siam_cloud_0` 和 `siam_cloud_1`(路由逻辑:`member_id % 2`),单库内再分为 `tb_order_0` 和 `tb_order_1`(路由逻辑:`order_id % 2`)。
+3. **分布式主键**:弃用数据库自增 ID,全面接入雪花算法(Snowflake)生成趋势递增且全局唯一的订单 ID,防止数据合并时的主键冲突。
+
+**【结果】:** 将单表 I/O 压力完美均摊到多个物理节点,系统轻松支撑亿级订单数据。上层微服务对底层的分表完全无感知,实现了架构的平滑扩容。
+
+---
+
+### Q8:分库分表后,分页查询和跨分片统计怎么解决?
+
+**【情境】:** 分库分表后,跨分片的分页查询性能很差,因为需要聚合所有分片的结果再排序。管理后台的订单列表和统计数据面临挑战。
+
+**【任务】:** 在分片架构下保障管理端查询效率和数据准确性。
+
+**【行动】:**
+1. **分页查询优化**:管理后台的分页查询一般不跨分片——按商家维度查询(商家 id 固定),天然路由到单一分片。对于需要全局数据的场景,限制最大页数(如最多翻 100 页)。
+2. **统计数据预聚合**:对于大数据量统计(如今日交易额、订单数),通过定时任务预聚合到统计表中,查询时直接读统计表而非实时扫分片。
+3. **主键全局唯一**:使用雪花算法确保各分片的主键不冲突,便于后续可能的数据迁移和合并。
+
+**【结果】:** 管理端查询响应时间控制在 200ms 以内,统计数据通过预聚合避免了实时跨分片扫描带来的性能开销。
+
+---
+
+## 维度五:服务治理与 RPC 通信 (Nacos + Feign)
+
+### Q9:为什么选用 Nacos 作为基础设施?在服务上下线时,如何避免流量打到已经挂掉的节点?
+
+**【情境】:** 微服务节点众多,需要健壮的注册中心和配置中心。同时,服务重启、发布、扩容时,如果负载均衡器仍将请求路由到已下线的实例,会导致大量请求失败。
+
+**【任务】:** 构建稳固的服务发现机制,实现优雅上下线和零宕机发布。
+
+**【行动】:**
+
+1. **基础设施选型**:选用 Nacos 2.x,因为它天然集成了 Discovery(注册)和 Config(配置),支持长轮询机制,比传统的 Eureka 具有更快的上下线感知速度。Nacos 同时支持 AP 和 CP 模式,我们默认使用 AP 模式保障服务发现的高可用。
+
+2. **服务下线(优雅停机)**:
+ - 主动注销:服务关闭前主动向 Nacos 发起注销请求,标记自己为不健康状态
+ - 被动检测:Nacos 心跳检测发现服务超过 15 秒无心跳,自动将其标记为不健康并剔除
+ - LoadBalancer 缓存刷新:客户端缓存的服务实例列表有 TTL(默认 30 秒),超时后重新从 Nacos 拉取,自动剔除不健康实例
+
+3. **服务上线(健康就绪)**:
+ - 延迟注册:服务启动时不立即注册,等待 Spring 容器初始化完成、数据库连接池就绪后再注册
+ - 健康检查通过后才接收流量:Nacos 只将健康实例纳入负载均衡列表
+
+4. **Gateway 层防护**:路由使用 `lb://service-name` 协议,当某个实例宕机被剔除后,Gateway 自动将后续请求路由到剩余健康实例。
+
+**【结果】:** 通过主动注销 + 被动检测 + LoadBalancer 缓存刷新的三重机制,确保服务下线后流量在 30 秒内自动切换到健康实例,实现服务发布期间对用户无感知的平滑过渡。
+
+---
+
+### Q10:在 RPC 服务间调用(Feign)中,你做过哪些核心的容错设计?
+
+**【情境】:** 微服务间的 Feign 调用经常因为网络抖动、下游服务未启动、或者序列化问题引发各种异常。尤其是下游返回的包装类 `BasicResult` 中,`getData()` 可能为 null,如果业务层直接拆箱为 `int` 或 `BigDecimal`,会导致连环 `NullPointerException`。
+
+**【任务】:** 彻底扫除 Feign 调用的隐藏地雷,增强 RPC 调用的鲁棒性。
+
+**【行动】:**
+
+1. **Feign 拆箱安全防范(亮点)**:我们的 RPC 接口统一返回了带有泛型的 `BasicResult` 包装类。我发现在复杂网络下,如果下游服务未启动或发生熔断,返回的 `.getData()` 极易为 null。如果业务层直接拆箱,会导致连环 NullPointerException。为此,我在底层架构中统一封装了安全拆箱工具方法(`safeInt`、`safeBigDecimal`),拦截所有非法 null 值并赋予合理的业务默认值(如 0 或 `BigDecimal.ZERO`),全局覆盖了 60+ 处调用点。
+
+2. **Token 隐式透传**:通过实现 `RequestInterceptor`,在 Feign 发起调用前,自动将上下文中的 `X-Auth-Token` 提取并注入到新的 Request Header 中,保证了用户登录态在微服务链路中的无缝穿透。
+
+3. **超时配置**:为 Feign 配置了合理的连接超时(5 秒)和读取超时(10 秒),防止下游服务响应慢导致调用方线程池耗尽。
+
+**【结果】:** 消除了至少 60 多处潜在的空指针隐患,极大增强了 RPC 调用的鲁棒性,系统的联调效率提升了 40%。
+
+---
+
+## 附录:高频面试话术
+
+### 如何回答"你遇到过最难的问题是什么?"
+
+> "在做支付模块的时候,微信支付回调的验签和幂等控制是两个关键挑战。验签方面,微信支付 V2 使用 MD5 签名,要求将所有参数按字典序排序后拼接 `&key=` + 商户密钥来计算签名。这个环节对输入极其敏感,差一个字符结果就完全不同。我通过逐字比对微信官方文档的签名示例,确保了验签逻辑的精确性。幂等方面,微信在网络抖动时会重复发送同一笔订单的回调,我用 Redis SETNX 实现了分布式锁,以订单号为 Key,3 分钟过期,并且在 finally 中故意不主动释放锁,让其保留至自然过期,完美抵御了微信在极短时间内的并发重发击穿。这件事让我深刻认识到:**和外部系统对接时,必须严格按照官方文档的每一个细节实现,不能凭感觉'差不多就行'。**"
+
+### 如何回答"你们项目的技术亮点是什么?"
+
+> "我认为最大的亮点是**在高并发场景下的稳定性设计**。体现在三个层面:第一,网关层统一鉴权 + 限流,在请求入口就过滤掉无效和超限流量;第二,支付模块的双重安全防线——验签防伪造 + 分布式锁防重复,确保资金操作的绝对安全;第三,通过 Seata 和 RocketMQ 分别处理强一致性和最终一致性场景,让不同重要级别的数据采用不同的保障策略,而不是'一刀切'。这些设计都是在真实的生产压力下打磨出来的,不是纸上谈兵。"
+
+### 如何回答"你觉得这个项目的不足在哪里?如果让你重新设计会做什么改进?"
+
+> "三点:第一,引入链路追踪(SkyWalking 或 Zipkin),现在出了问题排查效率比较低,需要逐个服务翻日志;第二,完善测试体系,目前缺乏自动化测试,每次改动依赖手动验证;第三,日志集中化,把各服务的日志统一到 ELK,方便全局检索和告警。这些是项目发展到一定规模后必然会做的事情。"
+
+### 如何回答"你做这个项目最大的收获是什么?"
+
+> "最大的收获是从 0 到 1 落地了一套高可用的微服务架构,并在实践中深刻理解了分布式事务(Seata)、分库分表(ShardingSphere)和网关流量治理在复杂系统中的重要性。之前这些技术对我来说更多是理论概念,通过这个项目,我真正理解了 Seata AT 模式的 undo_log 机制、ShardingSphere 的分片路由原理、以及 Gateway 响应式模型与传统 Servlet 的本质区别。这种从理论到实践的跨越,是我最大的成长。"
+
+---
+
+## 每日背诵计划
+
+| 日期 | 背诵范围 | 重点 |
+|------|---------|------|
+| Day 1 | Q1-Q2(网关与流量治理) | 鉴权设计、CORS、StripPrefix、Sentinel 限流 |
+| Day 2 | Q3-Q4(支付与 Redis) | 验签规范、SETNX 幂等锁、Redis 多场景 |
+| Day 3 | Q5-Q6(Seata + RocketMQ) | AT 模式原理、事务消息三阶段、一致性权衡 |
+| Day 4 | Q7-Q8(ShardingSphere) | 分片策略、分页优化、雪花算法 |
+| Day 5 | Q9-Q10(Nacos + Feign) | 优雅上下线、安全拆箱、Token 透传 |
+| Day 6 | 附录话术 | 最难问题、技术亮点、不足与改进、最大收获 |
+| Day 7 | 全流程模拟 | 随机抽题,限时作答,训练表达流畅度 |
diff --git a/docs/interview_qa.md b/docs/interview_qa.md
new file mode 100644
index 0000000..dcf9a13
--- /dev/null
+++ b/docs/interview_qa.md
@@ -0,0 +1,699 @@
+# Siam-Cloud 项目面试问答手册
+
+> 基于真实项目经验整理,每日背诵用
+
+---
+
+## 一、项目整体架构
+
+### 1. 介绍一下你的项目
+
+Siam-Cloud 是一个基于 Spring Cloud 的分布式外卖/商城微服务项目。前端包括 Vue 管理后台 + 微信小程序,后端拆分为 10 个独立微服务:user(用户)、merchant(商家)、rider(骑手)、goods(商品)、order(订单)、promotion(促销)、mall(积分商城)、util(工具服务)、gateway(网关)、monitor(监控)。
+
+技术栈:Spring Boot 3.2.5 + JDK 17 + Spring Cloud 2023.0.1 + Nacos 2.x + Spring Cloud Gateway + MyBatis-Plus 3.5.5 + Seata + RocketMQ + ShardingSphere + Redis。
+
+### 2. 你们服务为什么要拆成这么多?按什么原则拆的?
+
+按业务域拆分,每个服务有自己的数据库和职责边界:
+- **user**:用户注册、登录、会员信息、余额/积分、邀请关系
+- **merchant**:商家入驻、店铺管理、提现
+- **rider**:骑手接单、配送
+- **order**:订单生命周期、支付回调、退款、物流
+- **goods**:商品管理、分类、购物车
+- **promotion**:优惠券、满减活动
+- **mall**:积分商城(独立分库分表)
+- **util**:通用能力(短信、文件上传、系统使用记录)
+- **gateway**:统一入口、鉴权、限流、路由
+
+拆分的好处:团队可以独立开发部署,订单量暴涨时只扩 order 服务,不影响其他模块。
+
+### 3. 你们服务的调用链路是怎样的?
+
+微信小程序/管理后台 -> Gateway(端口 8081) -> 各 Provider 服务。服务间通过 Feign 调用,比如订单服务调用用户服务的 `MemberFeignApi` 扣减余额,调用商品服务的 `GoodsFeignApi` 扣减库存。所有注册到 Nacos。
+
+---
+
+## 二、Spring Cloud Gateway
+
+### 4. 为什么用 Gateway 不用 Zuul?
+
+Zuul 1.x 是阻塞 IO 模型,基于 Servlet,Spring 官方已经放弃维护了。Spring Cloud Gateway 基于 Spring WebFlux + Reactor,非阻塞异步模型,性能更高。而且 Zuul 1.x 没有 Spring Boot 3 兼容版本,升级到 Spring Boot 3.2 必须替换。
+
+### 5. Gateway 的路由是怎么配置的?
+
+```yaml
+spring:
+ cloud:
+ gateway:
+ routes:
+ - id: user-service
+ uri: lb://user-siam
+ predicates:
+ - Path=/api-user/**
+ filters:
+ - StripPrefix=1
+```
+
+`lb://` 表示通过负载均衡从 Nacos 获取服务实例。`StripPrefix=1` 表示转发时剥离第一段路径(如 `/api-user/rest/member/login` 转发为 `/rest/member/login`)。
+
+### 6. 你们 Gateway 做了哪些全局过滤器?
+
+- **AuthGlobalFilter**:检查请求是否携带有效 token(从 Authorization header 或 URL 参数获取),对白名单路径(登录、注册、支付回调、Swagger)放行,其余拦截
+- 将 token 放入 `X-Auth-Token` 请求头传递给下游服务
+
+### 7. `StripPrefix=0` 和 `StripPrefix=1` 有什么区别?你踩过什么坑?
+
+`StripPrefix=0` 不剥离前缀,请求原封不动转发。`StripPrefix=1` 剥离第一段。
+
+踩坑:最开始配了 `StripPrefix=0`,前端请求 `/api-rider/rest/actuator/health`,Gateway 原样转发给 rider 服务,rider 收到完整路径找不到对应 Controller,触发 `NoResourceFoundException`,被全局异常处理器包装成 HTTP 200 + `{"success":false,"message":"系统异常"}`。表面看是 200,但实际是错误响应。改成 `StripPrefix=1` 后转发为 `/rest/actuator/health`,正常匹配到 Controller。
+
+### 8. Gateway 跨域怎么处理的?
+
+Gateway 层统一处理 CORS,配置 `globalcors`:
+```yaml
+globalcors:
+ corsConfigurations:
+ '[/**]':
+ allowedOriginPatterns: "*"
+ allowedMethods: "*"
+ allowedHeaders: "*"
+ allowCredentials: true
+```
+下游服务不需要再单独配跨域。
+
+### 9. Gateway 响应式模型和非响应式服务混用有什么问题?
+
+Gateway 基于 Spring WebFlux(响应式),下游服务是传统的 Servlet 模型(WebMVC)。Gateway 的请求/响应是 `ServerHttpRequest`/`ServerWebExchange`,不能直接用 Servlet API。比如过滤器里获取请求体不能像 Servlet 那样 `request.getInputStream()`,要用 `exchange.getRequest().getBody()` 返回的 `Flux`。
+
+### 10. 为什么 Gateway 需要单独加 `spring-cloud-starter-loadbalancer`?
+
+Spring Cloud 2020+ 移除了 Netflix Ribbon,`lb://` 协议的负载均衡依赖 `spring-cloud-starter-loadbalancer`。Gateway 不依赖 `siam-common`,所以这个依赖必须单独加在 Gateway 的 pom.xml 里,否则启动后所有路由都返回 503。
+
+---
+
+## 三、Nacos 注册中心
+
+### 11. 为什么选 Nacos 不选 Eureka?
+
+- **Eureka 2.x 开源停止了**,Spring Cloud 官方也放弃了 Eureka 的后续支持
+- Nacos 同时支持服务注册和配置中心,Eureka 只有注册中心
+- Nacos 支持 AP 和 CP 两种模式,Eureka 只支持 AP
+- Nacos 是阿里巴巴的,和 Spring Cloud Alibaba 生态无缝集成
+
+### 12. Nacos 的服务发现流程是怎样的?
+
+1. 服务启动时,`spring-cloud-starter-alibaba-nacos-discovery` 自动向 Nacos Server 注册自己的 IP、端口、健康状态
+2. 客户端通过 Feign 调用服务时,`LoadBalancer` 从 Nacos 拉取服务实例列表
+3. 默认使用轮询策略选择一个实例发起 HTTP 请求
+4. Nacos 通过心跳机制(默认 5 秒)检测服务健康,15 秒无心跳标记不健康,30 秒剔除
+
+### 13. 你们本地怎么启动 Nacos 的?
+
+下载 Nacos Server 2.3.x ZIP,解压后执行 `startup.cmd -m standalone`(单机模式)。访问 `http://127.0.0.1:8848/nacos`,默认账号密码 `nacos/nacos`。
+
+### 14. Nacos 和 Eureka 配置有什么不一样?
+
+```yaml
+# Eureka(旧)
+eureka:
+ client:
+ service-url:
+ defaultZone: http://127.0.0.1:9000/eureka/
+
+# Nacos(新)
+spring:
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+ config:
+ server-addr: 127.0.0.1:8848
+ file-extension: yaml
+```
+
+Java 代码层面:`@EnableEurekaClient` 改为 `@EnableDiscoveryClient`。
+
+---
+
+## 四、Feign 服务间调用
+
+### 15. Feign 调用返回的 `BasicResult.getData()` 可能为 null,怎么处理?
+
+踩坑经验:如果下游服务没启动、接口不存在或者返回空,`BasicResult.getData()` 就是 null。直接 `.getData()` 拆箱成 `int` 或 `BigDecimal` 会抛 `NullPointerException`。
+
+解决方案:封装安全拆箱方法:
+```java
+private int safeInt(BasicResult result) {
+ if (result == null || result.getData() == null) return 0;
+ return result.getData();
+}
+
+private BigDecimal safeBigDecimal(BasicResult> result) {
+ if (result == null || result.getData() == null) return BigDecimal.ZERO;
+ Object data = result.getData();
+ if (data instanceof BigDecimal) return (BigDecimal) data;
+ if (data instanceof Double) return BigDecimal.valueOf((Double) data);
+ if (data instanceof Number) return BigDecimal.valueOf(((Number) data).doubleValue());
+ return BigDecimal.ZERO;
+}
+```
+
+实际项目中在 `StatisticsServiceImpl` 和 `PointsMallStatisticsServiceImpl` 里修复了 60+ 处这样的隐患。
+
+### 16. Feign 的超时时间怎么配置?
+
+在 `application.yml` 中配置:
+```yaml
+spring:
+ cloud:
+ openfeign:
+ client:
+ config:
+ default:
+ connect-timeout: 5000
+ read-timeout: 10000
+```
+
+### 17. Feign 调用时怎么传递用户 token/登录态?
+
+在 Gateway 的 `AuthGlobalFilter` 中,验证 token 后将其放入 `X-Auth-Token` 请求头。下游服务通过拦截器读取该 header 识别用户身份。
+
+---
+
+## 五、数据库与分库分表
+
+### 18. 你们项目有几个数据库?
+
+7 个数据库:
+| 数据库 | 用途 |
+|--------|------|
+| `siam_cloud` | 核心服务(user、merchant、goods、order、promotion、rider、util) |
+| `siam_cloud_0` | Order 分库节点 0 |
+| `siam_cloud_1` | Order 分库节点 1 |
+| `siam_cloud_mall` | 积分商城主库 |
+| `siam_cloud_mall_0` | Mall 分库节点 0 |
+| `siam_cloud_mall_1` | Mall 分库节点 1 |
+
+### 19. ShardingSphere 的分片策略怎么配的?
+
+数据库分片按 `member_id % 2` 路由:
+```yaml
+spring:
+ shardingsphere:
+ rules:
+ sharding:
+ tables:
+ tb_order:
+ actual-data-nodes: ds$->{0..1}.tb_order_$->{0..1}
+ database-strategy:
+ standard:
+ sharding-column: member_id
+ sharding-algorithm-name: database-inline
+ table-strategy:
+ standard:
+ sharding-column: id
+ sharding-algorithm-name: table-inline
+ sharding-algorithms:
+ database-inline:
+ type: INLINE
+ props:
+ algorithm-expression: ds$->{member_id % 2}
+ table-inline:
+ type: INLINE
+ props:
+ algorithm-expression: tb_order_$->{id % 2}
+```
+
+主键生成用雪花算法:
+```yaml
+key-generate-strategy:
+ column: id
+ key-generator-name: snowflake
+```
+
+### 20. 分库分表后怎么做分页查询?
+
+跨分片的分页查询性能很差,因为需要聚合所有分片的结果再排序。我们的做法是:
+- 管理后台的分页查询一般不跨分片(按商家维度查询,商家 id 固定)
+- 如果要查全局数据,限制最大页数(比如最多翻 100 页)
+- 对于大数据量统计,用定时任务预聚合到统计表
+
+### 21. MyBatis-Plus 从旧版升级到 3.5.5 有什么要注意的?
+
+- `PaginationInterceptor` 改为 `MybatisPlusInterceptor` + `PaginationInnerInterceptor`
+- `count()` / `selectCount()` 返回值从 `int` 改为 `long`
+- Spring Boot 3.x 需要显式声明 `mybatis-spring` 3.x 版本(2.x 不兼容 Spring 6)
+
+```xml
+
+ 3.0.4
+
+```
+
+---
+
+## 六、Redis 与分布式锁
+
+### 22. 你们项目里 Redis 用在了哪些场景?
+
+1. **登录 Session 存储**:用户登录后 token 存入 Redis,设置 7 天过期
+2. **支付回调幂等**:以订单号为 key 的 SETNX 分布式锁,防止微信重复回调
+3. **短信验证码**:验证码存入 Redis,5 分钟过期
+4. **购物车**:临时缓存
+5. **网关限流**(设计层面):基于 Redis 的令牌桶/计数器
+
+### 23. 支付回调的幂等锁是怎么实现的?
+
+```java
+String lockKey = "pay:callback:lock:" + outTradeNo;
+Boolean isLocked = stringRedisTemplate.opsForValue()
+ .setIfAbsent(lockKey, "1", 3, TimeUnit.MINUTES);
+if (Boolean.FALSE.equals(isLocked)) {
+ log.warn("订单 {} 正在处理或已处理,触发幂等拦截", outTradeNo);
+ // 直接回复 SUCCESS,避免微信继续重试
+ resXml = "...";
+ return;
+}
+try {
+ // 核心业务逻辑:判断订单状态 -> 更新订单 -> 增加余额
+} finally {
+ // 不主动删锁,保留至自然过期
+ // 因为微信可能高并发重复发送同一笔回调
+}
+```
+
+关键点:
+- `setIfAbsent` 对应 Redis 的 `SETNX`,原子操作
+- 锁过期时间 3 分钟,防止死锁
+- `finally` 中不主动删锁,因为成功后短时间内同一订单不应该再处理
+- 幂等拦截后直接回复 SUCCESS,微信收到成功就不会继续重试
+
+### 24. Redis 密码配置踩过什么坑?
+
+本地 Redis 启动时没加载 `redis.conf`(`redis-server.exe` 不带参数启动),所以实际是无密码模式。但应用配置中写了 `password: root`,导致连接时发送 AUTH 命令被拒,报错:`ERR AUTH called without any password configured for the default user`。把应用配置的 password 清空就好了。
+
+---
+
+## 七、Seata 分布式事务
+
+### 25. 你们项目用 Seata 做什么?
+
+分布式事务,保证跨服务的操作要么全部成功要么全部回滚。比如用户下单场景:订单服务创建订单 -> 商品服务扣减库存 -> 促销服务核销优惠券。这三个操作分布在三个不同的服务/数据库,需要分布式事务保证一致性。
+
+### 26. Seata 的 AT 模式原理是什么?
+
+AT 模式(Automatic Transaction)是 Seata 默认的模式,无需改业务代码:
+1. **一阶段**:Seata 拦截业务 SQL,解析 SQL 生成 undo log(前置镜像 + 后置镜像),然后执行业务 SQL,提交本地事务
+2. **二阶段提交**:收到 TC 的提交指令,异步删除 undo log
+3. **二阶段回滚**:收到 TC 的回滚指令,用 undo log 中的前置镜像恢复数据
+
+关键依赖:`@GlobalTransactional` 注解,标记在全局事务的发起方。
+
+### 27. Seata 的注册中心从 Eureka 迁到 Nacos 怎么做的?
+
+之前 `seata.registry.type` 配的是 `eureka`,指向 `http://127.0.0.1:9000/eureka/`。Eureka 模块删除后,改为:
+
+```yaml
+seata:
+ registry:
+ type: nacos
+ nacos:
+ application: seata-server
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ config:
+ type: nacos
+ nacos:
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+```
+
+同时 `application-id` 从硬编码改为 `${spring.application.name}`。
+
+---
+
+## 八、RocketMQ 事务消息
+
+### 28. 你们用 RocketMQ 做什么?
+
+订单相关的事务消息和异步通知。比如支付成功后需要发送通知、更新统计等操作,用事务消息保证消息一定送达。
+
+### 29. RocketMQ 事务消息的原理是什么?
+
+分三个阶段:
+1. **发送 Half 消息**:生产者先发送半消息(对消费者不可见)到 Broker
+2. **执行本地事务**:执行本地业务逻辑(如更新订单状态)
+3. **提交/回滚**:根据本地事务结果,向 Broker 发送 Commit 或 Rollback 指令
+4. **回查机制**:如果 Broker 长时间没收到确认,会回调 `checkLocalTransaction` 方法检查本地事务状态
+
+我们的实现:
+```java
+@Component
+public class TransactionProducer {
+ private TransactionMQProducer producer;
+ // 事务组名
+ producer.setTransactionListener(new OrderTransactionListener());
+}
+```
+
+---
+
+## 九、Spring Boot 3.x 升级
+
+### 30. Spring Boot 2 升级到 3,遇到了哪些兼容问题?
+
+**最核心的改动:**
+
+1. **javax → jakarta 命名空间迁移**:`javax.servlet` → `jakarta.servlet`,`javax.validation` → `jakarta.validation`,`javax.annotation` → `jakarta.annotation`,`javax.websocket` → `jakarta.websocket`,`javax.mail` → `jakarta.mail`。但 `javax.crypto`、`javax.net.ssl`、`javax.imageio` 这些 Java SE 内置的不用改。影响 50+ 个文件。
+
+2. **Springfox Swagger 不兼容**:Springfox 项目已停止维护,不兼容 Spring Boot 3。改用 SpringDoc OpenAPI:
+ - 删除 `springfox-swagger2` + `springfox-swagger-ui`
+ - 新增 `springdoc-openapi-starter-webmvc-ui` 2.5.0
+ - 注解替换:`@Api` → `@Tag`,`@ApiOperation` → `@Operation`,`@ApiModel` → `@Schema`
+
+3. **Spring Security 5 → 6**:`WebSecurityConfigurerAdapter` 被移除,改用 `SecurityFilterChain` Bean 模式。`antMatchers` 改为 `requestMatchers`。
+
+4. **commons-lang 2.x 移除**:`org.apache.commons.lang` 改为 `org.apache.commons.lang3`。
+
+5. **MyBatis-Spring 版本冲突**:Spring Boot 3.x 要求 `mybatis-spring` 3.x,但 MyBatis-Plus 3.5.5 的传递依赖默认是 2.1.2。需要在父 POM 中显式覆盖:
+ ```xml
+ 3.0.4
+ ```
+
+### 31. JDK 8 升级到 JDK 17 有什么要注意的?
+
+- `var` 关键字在 JDK 10+ 可用
+- `switch` 表达式增强
+- `record` 类型(JDK 16)
+- 模块系统(JPMS)的强封装,反射访问内部 API 需要 `--add-opens`
+- 垃圾回收器默认从 Parallel GC 改为 G1
+- `Date` 构造器已废弃(但项目里还在用 `new Date("1970/1/1 00:00:00")`)
+- `BigDecimal.ROUND_HALF_UP` 已废弃,建议用 `RoundingMode.HALF_UP`
+
+### 32. Spring Boot 3 循环依赖默认禁止,怎么解决的?
+
+Spring Boot 3 把 `allow-circular-references` 默认值改为 `false`。项目中有多处循环依赖,用 `@Lazy` 延迟注入打破循环:
+
+**案例 1**:`OrderServiceImpl` ↔ `WxPayService`(互相注入)
+**案例 2**:`RocketMQ_OrderServiceImpl` → `TransactionProducer` → `OrderTransactionListener` → `RocketMQ_OrderServiceImpl`(三角循环)
+**案例 3**:`MemberServiceImpl` ↔ `MemberBillingRecordServiceImpl`(双向依赖)
+
+```java
+@Lazy
+@Autowired
+private WxPayService wxPayService;
+```
+
+另一种方案是配置 `spring.main.allow-circular-references=true`,但不推荐,掩盖了设计问题。
+
+### 33. MongoDB 自动装配的问题怎么解决的?
+
+`siams-common` 依赖了 `spring-boot-starter-data-mongodb`,所有 Provider 通过传递依赖引入了 MongoDB 自动装配。但本地没装 MongoDB,启动时报 `MongoSocketOpenException: Connection refused`。
+
+解决:在每个 Provider 的 `@SpringBootApplication` 注解中排除 MongoDB 自动配置:
+
+```java
+@SpringBootApplication(scanBasePackages = "com.siam", exclude = {
+ MongoAutoConfiguration.class,
+ MongoDataAutoConfiguration.class
+})
+```
+
+---
+
+## 十、微信支付
+
+### 34. 微信支付回调的完整流程是什么?
+
+1. 用户在前端调起微信支付
+2. 用户支付成功后,微信服务器异步回调我们的 `wxNotify` 接口
+3. 回调内容是 XML 格式,解析后得到参数 Map
+4. **验签**:用 `PayUtil.verify()` 验证签名,确保回调确实来自微信
+5. **幂等检查**:以订单号为 key 获取 Redis 分布式锁,如果已锁定说明正在处理或已处理,直接回复 SUCCESS
+6. **业务处理**:检查订单状态 -> 更新订单为已支付 -> 增加商家余额 -> 发放优惠券
+7. **回复微信**:返回 XML 格式的 `SUCCESS`
+8. **释放锁**:保留至自然过期
+
+### 35. 微信支付验签的 Bug 是怎么修复的?
+
+`PayUtil.verify()` 方法中签名原始串拼接错误:
+```java
+// 错误:少了 "&key=" 前缀
+text = text + key;
+
+// 正确:和 sign() 方法保持一致
+text = text + "&key=" + key;
+```
+
+`sign()` 方法用的是 `text + "&key=" + key`,但 `verify()` 用的是 `text + key`,导致验签时计算的签名和微信返回的签名永远不匹配,所以之前代码被注释掉了。修复后恢复了验签逻辑。
+
+### 36. 微信支付回调为什么要做幂等?
+
+微信在以下场景会重复发送回调通知:
+- 第一次回调超时未收到响应
+- 网络抖动导致超时
+- 微信自身重试机制
+
+如果不做幂等,同一笔订单会被处理多次(重复加钱、重复发货)。我们用 Redis `SETNX` 实现幂等控制,同一订单同一时间只处理一次。
+
+---
+
+## 十一、WebSocket
+
+### 37. 你们的 WebSocket 是怎么实现的?
+
+用 `jakarta.websocket` 实现服务端长连接,用于实时推送(如订单状态变更通知骑手)。
+
+```java
+@ServerEndpoint("/websocket/{userId}")
+@Component
+public class WebSocketBaseServer {
+ private static ConcurrentHashMap sessionMap = new ConcurrentHashMap<>();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam("userId") String userId) {
+ sessionMap.put(userId, session);
+ }
+
+ @OnMessage
+ public void onMessage(String message, Session session) {
+ // 消息路由:以 "TOUSER" 开头表示私聊
+ }
+
+ @OnClose
+ public void onClose(Session session) {
+ // 从 sessionMap 移除
+ }
+}
+```
+
+注意:从 `javax.websocket` 改为 `jakarta.websocket`(Spring Boot 3 要求)。
+
+---
+
+## 十二、异常处理与日志
+
+### 38. 你们的全局异常处理器怎么设计的?
+
+```java
+@RestControllerAdvice
+@Slf4j
+public class GlobalExceptionHandler {
+
+ @ExceptionHandler(StoneCustomerException.class)
+ public BasicResult handleCustomerException(StoneCustomerException e) {
+ return BasicResult.failure(e.getMessage());
+ }
+
+ @ExceptionHandler(BindException.class)
+ public BasicResult handleBindException(BindException e) {
+ return BasicResult.failure("参数校验失败:" + e.getBindingResult().getFieldError().getDefaultMessage());
+ }
+
+ @ExceptionHandler(Exception.class)
+ public BasicResult handleException(Exception e) {
+ log.error("系统异常", e);
+ return BasicResult.failure("系统异常,请稍后再试");
+ }
+}
+```
+
+踩坑:当路由配置错误时(如 `StripPrefix=0`),`NoResourceFoundException` 被全局异常处理器捕获,包装成 HTTP 200 的错误响应。这导致外部看是 200 但内容是错误信息,排查时容易误导。
+
+### 39. `StoneCustomerException` 是什么?
+
+自定义业务异常,继承 `RuntimeException`,用于抛出可预期且有明确提示信息的业务错误。比如"该店铺不存在"、"手机验证码错误"、"订单已过期"等。被全局异常处理器捕获后直接返回给用户。
+
+---
+
+## 十三、认证与授权
+
+### 40. 你们项目的认证机制是怎样的?
+
+基于 Token + Redis 的 Session 管理:
+
+1. 用户登录成功后生成唯一 token
+2. token 作为 key,用户信息作为 value 存入 Redis,设置 7 天过期
+3. 后续请求携带 token(Authorization header 或 URL 参数)
+4. Gateway 的 `AuthGlobalFilter` 验证 token 存在性(不验证有效性,交给下游服务)
+5. 下游服务通过 `MemberSessionManager` 从 Redis 读取 Session,获取用户信息
+6. 商家端有独立的 `MerchantSessionManager`
+
+```java
+public class TokenUtil {
+ public static String getToken() {
+ // 从请求上下文中获取 token
+ // 优先级:header > cookie > URL parameter
+ }
+}
+```
+
+### 41. Gateway 的鉴权过滤器是怎么工作的?
+
+```java
+@Component
+public class AuthGlobalFilter implements GlobalFilter, Ordered {
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ String uri = request.getURI().getPath();
+ // 1. OPTIONS 请求直接放行(CORS 预检)
+ // 2. 白名单路径放行(/login, /register, /pay, /notify 等)
+ // 3. 从 header 或 query 中提取 token
+ // 4. token 为空返回 401
+ // 5. token 放入 X-Auth-Token header 传递给下游
+ }
+}
+```
+
+白名单:`/login`、`/register`、`/swagger`、`/v3/api-docs`、`/actuator`、`/notify`、`/callback`、`/pay`、`/Pay`、`/shop`。
+
+---
+
+## 十四、业务场景题
+
+### 42. 用户下单的完整流程是怎样的?
+
+1. 用户从商品详情页加入购物车
+2. 进入结算页,选择地址、优惠券
+3. 调用 `order-siam` 创建订单
+4. 选择支付方式(微信支付 / 余额支付 / 积分支付)
+5. 微信支付:调用微信统一下单 API,返回 prepay_id,前端调起支付
+6. 支付成功后微信回调 `wxNotify` 接口
+7. 验签 + 幂等检查
+8. 更新订单状态为已支付
+9. 扣减商品库存
+10. 核销优惠券
+11. 通知商家(WebSocket 推送)
+12. 分配骑手(根据距离和骑手状态)
+
+### 43. 商家入驻的流程是怎样的?
+
+1. 商家通过微信小程序或 H5 页面提交入驻申请(营业执照、身份证照片、店铺照片等)
+2. 创建 `tb_shop` 记录,`audit_status=1`(待审核)
+3. 同时创建 `tb_merchant` 记录
+4. 管理后台在"入驻审核"页面看到待审核记录
+5. 管理员审核通过:`audit_status=2`,店铺状态设为"待上架"
+6. 管理员上架:`status=2`,店铺对消费者可见
+7. 审核不通过:`audit_status=3`,填写审核意见
+
+### 44. 退款流程是怎样的?
+
+1. 用户发起退款申请
+2. 订单状态改为"退款中"
+3. 商家审核退款申请
+4. 审核通过后调用微信退款 API
+5. 微信退款回调 `refundSuccessNotify`
+6. 验签 + 更新退款状态
+7. 恢复商品库存
+8. 退还用户余额/积分
+
+---
+
+## 十五、运维与部署
+
+### 45. Actuator 为什么要收敛暴露的端点?
+
+默认 `include: "*"` 会暴露所有端点,包括:
+- `/env` — 环境变量(含数据库密码)
+- `/heapdump` — 堆转储(含内存数据)
+- `/threaddump` — 线程堆栈
+- `/configprops` — 配置属性
+
+这些都是敏感信息,收敛为只暴露必要端点:
+```yaml
+management:
+ endpoints:
+ web:
+ exposure:
+ include: "health,prometheus,info"
+```
+
+### 46. Actuator 邮件健康检查的问题怎么解决的?
+
+Actuator 默认对配置的邮件服务做健康检查。我们配了 126 SMTP 服务器,但密码可能过期或配置有误,导致 `jakarta.mail.AuthenticationFailedException: 535 Error: authentication failed`,这个错误会阻止服务启动。
+
+解决:在 `management.health` 中关闭邮件健康检查:
+```yaml
+management:
+ health:
+ mail:
+ enabled: false
+```
+
+### 47. 本地开发环境涉及哪些中间件?
+
+| 中间件 | 端口 | 用途 |
+|--------|------|------|
+| MySQL | 3306 | 主数据库 |
+| Redis | 6379 | 缓存/Session/分布式锁 |
+| Nacos | 8848 | 服务注册/配置中心 |
+| Gateway | 8081 | 网关入口 |
+| Seata | 8091 | 分布式事务(部署中) |
+
+---
+
+## 十六、项目难点 & 亮点
+
+### 48. 你做这个项目最大的收获/难点是什么?
+
+**最大的收获是完成了一次完整的 Spring Boot 2 → 3 技术栈升级。** 这不只是一个版本号的变更,涉及:
+- `javax` 到 `jakarta` 的命名空间迁移(50+ 文件)
+- Zuul 到 Gateway 的架构替换
+- Eureka 到 Nacos 的注册中心替换
+- Springfox 到 SpringDoc 的文档框架替换
+- 60+ 处 Feign 调用空指针隐患的排查和修复
+- 支付验签 Bug 的根因分析和修复
+- 分布式锁的正确实现
+
+**最大的难点**是升级后服务能编译但不能运行,需要在运行时一层层排查:循环依赖、MongoDB 自动装配、mybatis-spring 版本冲突、Redis 密码配置不一致等。每个问题都需要深入理解 Spring Boot 的自动装配机制。
+
+### 49. 如果订单量暴增 10 倍,你的架构怎么优化?
+
+1. **水平扩展**:order 服务多实例部署,通过 Nacos 负载均衡
+2. **分库分表**:现有 2 个分片可能不够,扩展到 8 个或 16 个
+3. **异步化**:非核心操作(如发短信通知、写操作日志)异步执行
+4. **缓存**:热点商品数据加 Redis 缓存,减少 DB 压力
+5. **限流降级**:Gateway 层加限流,超过阈值时拒绝非核心请求
+6. **读写分离**:MySQL 主从,读走从库,写走主库
+
+### 50. 你觉得这个项目的不足在哪里?
+
+1. **安全方面**:Token 验证在 Gateway 层只做存在性检查,有效性验证由各服务自行处理,存在不一致的风险。应该在 Gateway 层统一验证。
+2. **监控方面**:虽然有 Actuator 和 Monitor,但缺少完整的链路追踪(如 SkyWalking、Zipkin),出了问题排查困难。
+3. **测试覆盖**:项目基本没有单元测试和集成测试,改动后依赖手动验证。
+4. **配置管理**:配置文件还是本地管理,没有接入 Nacos Config 的动态配置能力。
+5. **日志管理**:日志分散在各个服务的本地文件,没有统一的 ELK 日志中心。
+
+---
+
+## 每日背诵建议
+
+| 日期 | 背诵范围 | 重点 |
+|------|---------|------|
+| Day 1 | 一~二节(项目架构 + Gateway) | 能口述服务拆分原则、Gateway 路由配置、StripPrefix 踩坑 |
+| Day 2 | 三~四节(Nacos + Feign) | 服务发现流程、BasicResult 空指针修复 |
+| Day 3 | 五~六节(分库分表 + Redis) | ShardingSphere 分片策略、支付幂等锁实现 |
+| Day 4 | 七~八节(Seata + RocketMQ) | AT 模式原理、事务消息三阶段 |
+| Day 5 | 九节(Spring Boot 3 升级) | javax→jakarta、循环依赖、mybatis-spring 冲突 |
+| Day 6 | 十~十一节(微信支付 + WebSocket) | 验签 Bug 根因、回调完整流程 |
+| Day 7 | 十二~十六节(综合) | 认证机制、业务流程、运维配置、项目难点 |
diff --git a/docs/interview_scenario_qa.md b/docs/interview_scenario_qa.md
new file mode 100644
index 0000000..4a289cf
--- /dev/null
+++ b/docs/interview_scenario_qa.md
@@ -0,0 +1,250 @@
+# Siam-Cloud 高频场景化面试问答手册
+
+> 面向高级 Java 后端开发岗位 · STAR 法则 · 生产级深度
+
+---
+
+## 维度一:API 网关与流量治理 (Gateway + Sentinel)
+
+### Q1:你们的微服务网关鉴权是怎么设计的?如何保证所有服务的入口安全?
+
+**Situation(情境):** 系统拆分为 8 个业务微服务,前端包括微信小程序、商家端、管理后台三个入口。如果每个服务各自做鉴权,会出现鉴权逻辑分散、白名单管理混乱、token 格式不统一等问题。一旦某个服务鉴权出现漏洞,整个系统都有被越权访问的风险。
+
+**Task(任务):** 设计一套统一的网关层鉴权方案,在请求进入微服务集群之前完成身份校验,同时兼顾公开接口(登录、支付回调、商家入驻等)的放行需求。
+
+**Action(行动):**
+1. **统一鉴权收敛到 Gateway 层**。开发 `AuthGlobalFilter`(实现 `GlobalFilter + Ordered` 接口),所有请求必须经过此过滤器。
+2. **多来源 Token 提取**。优先级:`Authorization` 请求头(Bearer 格式) > URL query 参数 `token`。兼容小程序和 H5 不同的传参习惯。
+3. **白名单分级管理**。将公开路径分为固定白名单(登录、注册、支付回调、Swagger 文档)和动态可配置白名单(后续计划接入 Nacos Config 实现热更新)。特别注意大小写匹配问题(如 `/wxPay` 和 `/pay` 都需覆盖)。
+4. **鉴权通过后透传身份**。将验证通过的 token 放入自定义请求头 `X-Auth-Token`,下游服务无需再解析 token,直接通过该 header 识别用户身份。
+5. **OPTIONS 预检请求直接放行**,避免 CORS 预检被误拦截。
+6. 失败统一返回 401 + JSON 格式错误信息,前端可统一拦截处理。
+
+```java
+// Gateway 将 token 透传给下游服务
+ServerHttpRequest mutatedRequest = request.mutate()
+ .header("X-Auth-Token", token)
+ .build();
+```
+
+**Result(结果):** 8 个微服务全部剥离了入口鉴权逻辑,只需关注自身业务。白名单集中在 Gateway 一个文件管理,新增公开接口只需改一处。下游服务通过 `X-Auth-Token` 统一获取用户身份,实现了认证与业务的彻底解耦。
+
+---
+
+### Q2:大促期间突发流量洪峰,你们的网关怎么扛?
+
+**Situation(情境):** 在外卖平台午高峰(11:00-13:00)或促销活动上线瞬间,订单服务可能面临瞬时流量放大 10 倍以上的压力。如果不做限流,后端服务会被打满导致雪崩。
+
+**Task(任务):** 在网关层建立统一的流量治理机制,保护后端微服务不被突发流量击垮。
+
+**Action(行动):**
+1. **Gateway 选型层面**:采用 Spring Cloud Gateway(基于 Spring WebFlux 的响应式异步模型),相比传统 Zuul 1.x 的阻塞 IO 模型,同等硬件资源下可承载更高的并发连接数。
+2. **路由层面配置 StripPrefix**,确保转发路径精确匹配下游 Controller,避免无效请求浪费后端资源。
+3. **全局 CORS 统一处理**,在 Gateway 层配置 `globalcors`,下游服务无需再单独处理跨域,减少了一层网络开销。
+4. **限流策略(架构设计层面)**:基于 Redis + Gateway 的 `RequestRateLimiter` 实现令牌桶限流,以 IP + 用户维度做双维度限流,单 IP 每秒限流 100 次,单用户每秒限流 50 次。
+5. **下游服务自我保护**:各微服务独立配置 Sentinel 规则,对下单、支付等核心接口配置 QPS 阈值 + 热点参数限流。当流量超过阈值时返回降级提示而非直接报错。
+6. **健康检查端点收敛**:仅暴露 `/health` 和 `/prometheus`,关闭 `/env`、`/heapdump` 等敏感端点,防止外部利用健康检查接口消耗资源。
+
+**Result(结果):** 网关层作为第一道防线拦截了大部分无效和超限请求,后端服务专注于处理合法流量。通过 Gateway + Sentinel 的双层防护体系,确保核心服务在流量洪峰期间依然稳定可用。
+
+---
+
+## 维度二:分布式一致性与事务流转 (Seata + RocketMQ)
+
+### Q3:用户下单场景涉及订单、库存、优惠券三个服务,如何保证数据一致性?
+
+**Situation(情境):** 外卖系统的核心下单链路横跨多个微服务:订单服务创建订单记录 -> 商品服务扣减库存 -> 促销服务核销优惠券。三个操作分布在三个独立的数据库上,任何一步失败都会导致数据不一致(比如订单创建了但库存没扣,用户没付款商品就少了一份)。
+
+**Task(任务):** 保证跨服务、跨数据库的下单操作要么全部成功,要么全部回滚,不能有中间态。
+
+**Action(行动):**
+1. **强一致性场景采用 Seata AT 模式**。在订单创建的入口方法标注 `@GlobalTransactional`,由 Seata TC 协调全局事务。
+ - 一阶段:各 RM(Resource Manager)执行业务 SQL,同时自动生成 undo log(前置镜像 + 后置镜像),提交本地事务
+ - 二阶段提交:异步删除 undo log
+ - 二阶段回滚:利用 undo log 的前置镜像恢复数据
+ - 业务代码零侵入,无需手动写补偿逻辑
+
+2. **最终一致性场景采用 RocketMQ 事务消息**。对于非核心链路(如发送通知、写操作日志、更新统计数据),使用 RocketMQ 事务消息保证最终送达:
+ - 发送 Half 消息(对消费者不可见)
+ - 执行本地事务(如更新订单状态)
+ - 根据本地事务结果向 Broker 发送 Commit / Rollback
+ - Broker 回查机制兜底:长时间未确认时回调 `checkLocalTransaction` 检查状态
+
+3. **一致性级别权衡策略**:
+ - **资金相关(余额扣减、支付退款)** → 强一致性(Seata),宁可慢不能错
+ - **核心业务(库存扣减、订单创建)** → 强一致性(Seata)
+ - **非核心链路(通知、日志、统计)** → 最终一致性(RocketMQ),允许短暂延迟
+
+**Result(结果):** 通过 Seata 保障了资金和核心业务的强一致性,通过 RocketMQ 保障了非核心链路的最终一致性。两种方案各取所长,既保证了数据正确,又避免了所有操作都走分布式事务导致的性能瓶颈。
+
+---
+
+### Q4:如果 Seata 的 TC(事务协调器)宕机了,正在进行中的全局事务怎么办?
+
+**Situation(情境):** Seata 架构中 TC 是全局事务的协调者,负责向各 RM 发送 Commit 或 Rollback 指令。如果 TC 在执行全局事务的中间阶段宕机,部分 RM 已执行完本地事务但没收到二阶段指令,数据会处于不一致的中间态。
+
+**Task(任务):** 设计兜底方案,确保 TC 异常情况下系统能自动恢复或人工介入修复。
+
+**Action(行动):**
+1. **TC 高可用部署**:Seata Server 以集群模式部署,注册到 Nacos,通过负载均衡避免单点故障。
+2. **undo log 持久化兜底**:一阶段执行后 undo log 已持久化到业务数据库中。即使 TC 宕机,重启后可通过 undo log 手动回滚。
+3. **全局事务状态表**:`global_table`、`branch_table`、`lock_table` 三张表记录了所有进行中的事务状态。重启 TC 后,根据这些表的状态继续执行未完成的二阶段操作。
+4. **超时自动回滚机制**:配置全局事务超时时间(默认 60 秒),超过时限的分支事务自动触发回滚。
+5. **人工介入工具**:提供管理后台查询异常事务的界面,展示 `global_table` 中的 stuck 事务,支持手动触发提交或回滚。
+6. **监控告警**:通过 Prometheus 监控 Seata Server 健康状态,异常时及时告警。
+
+**Result(结果):** 通过 TC 集群 + undo log 持久化 + 超时自动回滚的三层保护,确保即使 TC 宕机,系统也能在可接受的时间窗口内自动恢复,不会出现永久不一致的数据。
+
+---
+
+## 维度三:高并发支付与资金安全 (Redis 核心场景)
+
+### Q5:微信支付回调如何保证资金安全?怎么防止伪造回调和重复回调?
+
+**Situation(情境):** 微信支付成功后,微信服务器会异步回调我们后端的 `wxNotify` 接口。这里存在两个致命安全问题:第一,恶意攻击者可以伪造微信支付回调请求,如果验签不严格,可能导致未付款的订单被标记为已支付;第二,微信在网络抖动时会重复发送同一笔订单的回调,如果不做幂等控制,用户可能被重复加钱、重复发货。
+
+**Task(任务):** 构建支付回调的双重安全防线——验签 + 幂等控制。
+
+**Action(行动):**
+
+**第一道防线:签名验证**
+1. 微信回调内容为 XML 格式,解析后提取所有参数到 Map
+2. 使用微信支付 V2 的 MD5 签名算法,将参数按字典序排序拼接,末尾拼接商户密钥:`text + "&key=" + mchKey`
+3. 将计算出的签名与回调中的 `sign` 字段比对,不一致则拒绝并返回 FAIL
+4. **关键细节**:签名原始串的拼接格式必须与微信官方一致,多一个少一个字符都会导致验签失败。特别注意 `&key=` 前缀不能遗漏。
+
+**第二道防线:Redis 分布式锁幂等控制**
+```java
+String lockKey = "pay:callback:lock:" + outTradeNo;
+Boolean isLocked = stringRedisTemplate.opsForValue()
+ .setIfAbsent(lockKey, "1", 3, TimeUnit.MINUTES);
+if (Boolean.FALSE.equals(isLocked)) {
+ // 同一订单正在处理或已处理,幂等拦截
+ resXml = "...";
+ return;
+}
+try {
+ // 核心业务:检查订单状态 → 更新订单为已支付
+ // → 增加商家余额 → 发放优惠券 → 发送通知
+} finally {
+ // 锁保留至自然过期,不主动删除
+ // 防止微信在高并发场景下重复回调
+}
+```
+
+**锁策略设计考量:**
+- `setIfAbsent`(SETNX)是原子操作,不存在并发竞争
+- 过期时间 3 分钟,足以覆盖正常业务处理时长,同时防止死锁
+- `finally` 中不主动删锁:因为微信可能在高并发下重复发送同一笔回调,删除后第二个请求会再次进入业务逻辑
+- 幂等拦截后直接回复 SUCCESS,微信收到成功就不会继续重试
+
+**Result(结果):** 验签防线确保了只有微信官方签发的真实回调才能通过,分布式锁防线确保了同一笔订单在任何时间点只被处理一次。两道防线缺一不可,共同构成了支付资金安全的基石。
+
+---
+
+### Q6:除了支付回调,Redis 在你们项目中还承载了哪些核心场景?
+
+**Situation(情境):** 一个成熟的微服务系统,Redis 不能只做简单的 KV 缓存,需要承担更多核心职责。
+
+**Task(任务):** 梳理项目中 Redis 的关键应用场景,确保每个场景的选型和实现都经得起生产环境的考验。
+
+**Action(行动):**
+
+| 场景 | 数据结构 | 设计要点 |
+|------|---------|---------|
+| **用户 Session** | String(Key: `LOGIN_USER:{token}`) | 登录成功写入,设置 7 天 TTL;每次请求续期,活跃用户不会被踢出 |
+| **支付幂等锁** | String(Key: `pay:callback:lock:{outTradeNo}`) | SETNX 实现,3 分钟过期,finally 中不主动删锁 |
+| **短信验证码** | String(Key: `sms:code:{mobile}`) | 5 分钟过期,发送时覆盖旧值,防暴力爆破 |
+| **购物车缓存** | Hash(Key: `cart:{userId}`, Field: `goodsId`, Value: 数量) | 用户加购时先写 Redis,下单时同步到 DB |
+| **登录重试限制** | String(Key: `login:lock:{ip}`) | 连续输错密码 5 次后锁定 15 分钟,防暴力破解 |
+| **分布式 ID 生成辅助** | String(`INCR` 原子递增) | 辅助生成业务编号(如订单号、排队号) |
+
+**设计原则:**
+1. **所有 Key 统一前缀**,便于运维排查和管理
+2. **过期时间必须有**,防止内存泄漏
+3. **大 Key 预警**:购物车超过 100 个商品时异步刷盘
+4. **容灾降级**:Redis 不可用时,Session 查询降级为查 DB
+
+**Result(结果):** Redis 在项目中承担了认证、幂等、缓存、限流等多重职责。每个场景根据业务特性选择了合适的数据结构,配合 TTL、前缀规范、容灾降级策略,确保在生产环境下稳定运行。
+
+---
+
+## 维度四:服务治理与路由发现 (Nacos)
+
+### Q7:为什么选择 Nacos 而不是 Eureka?在生产环境中你们是怎么用的?
+
+**Situation(情境):** 微服务架构中注册中心是核心基础设施,选型直接影响到整个集群的可用性和运维成本。早期很多团队用 Eureka,但随着业务规模扩大和技术栈演进,需要做出更合理的选择。
+
+**Task(任务):** 选择并落地一个能满足高可用、动态配置、运维友好的服务注册中心。
+
+**Action(行动):**
+
+**选型考量:**
+
+| 维度 | Eureka | Nacos |
+|------|--------|-------|
+| 维护状态 | 2.x 停止更新,Spring Cloud 官方已放弃 | 阿里巴巴持续维护,社区活跃 |
+| 功能范围 | 仅服务注册 | 注册中心 + 配置中心二合一 |
+| 一致性模型 | 仅支持 AP | 支持 AP(默认)和 CP(Raft)切换 |
+| 配置管理 | 需搭配 Spring Cloud Config | 原生支持,支持动态刷新 |
+| 中文社区 | 弱 | 强,文档完善 |
+
+**生产落地方案:**
+1. **单机开发 + 集群生产**:本地开发用 `startup.cmd -m standalone` 单机模式,生产环境部署 3 节点 Nacos 集群,通过 Raft 协议保证数据一致性。
+2. **服务分组管理**:不同环境通过 `namespace` 隔离(dev、test、prod),同环境不同业务线通过 `group` 分组。
+3. **健康检查机制**:Nacos 通过心跳检测(默认 5 秒间隔)判断服务健康状态。15 秒无心跳标记不健康,30 秒剔除。
+4. **配置热更新**:接入 Nacos Config,配置文件变更无需重启服务,通过 `@RefreshScope` 注解实现动态刷新。
+
+**Result(结果):** 一套 Nacos 同时解决了服务注册和配置管理两大痛点,减少了运维组件数量。AP 模式下服务发现的延迟在毫秒级,满足了大部分业务场景的实时性要求。
+
+---
+
+### Q8:服务上下线时,如何确保流量不会打到已经挂掉的节点?
+
+**Situation(情境):** 服务重启、发布、扩容时,如果负载均衡器仍将请求路由到已下线的实例,会导致大量请求失败,直接影响用户体验和交易成功率。
+
+**Task(任务):** 设计一套服务上下线时的流量切换机制,确保零宕机发布和优雅上下线。
+
+**Action(行动):**
+
+**服务下线(优雅停机):**
+1. **主动注销**:服务关闭前(通过 Spring Boot Actuator `/shutdown` 端点),主动向 Nacos 发起注销请求,标记自己为不健康状态
+2. **被动检测**:Nacos 心跳检测发现服务超过 15 秒无心跳,自动将其标记为不健康,从可用实例列表中移除
+3. **LoadBalancer 缓存刷新**:客户端(Feign + LoadBalancer)缓存的服务实例列表有 TTL(默认 30 秒),超时后重新从 Nacos 拉取,自动剔除不健康实例
+4. **宽限期设计**:服务接收到关闭信号后,先注销注册 → 停止接收新请求 → 等待已有请求处理完成 → 最后关闭进程
+
+**服务上线(健康就绪):**
+1. **延迟注册**:服务启动时不立即注册到 Nacos,等待 Spring 容器初始化完成、数据库连接池就绪、健康检查通过后再注册
+2. **健康检查通过后才接收流量**:Nacos 配置为只将健康实例纳入负载均衡列表,服务刚启动时处于"初始化中"状态,不会被路由
+3. **灰度发布策略**(规划中):通过 Nacos 的 metadata 实现标签路由,新版本服务标注 `version=v2`,先导入少量流量验证
+
+**Gateway 层防护:**
+- Gateway 的路由使用 `lb://service-name` 协议,由 LoadBalancer 从 Nacos 获取健康实例列表
+- 当某个实例宕机被剔除后,Gateway 自动将后续请求路由到剩余健康实例
+- 配置重试机制:请求失败时自动重试下一个实例
+
+```yaml
+spring:
+ cloud:
+ loadbalancer:
+ retry:
+ enabled: true
+```
+
+**Result(结果):** 通过主动注销 + 被动检测 + LoadBalancer 缓存刷新的三重机制,确保服务下线后流量在 30 秒内自动切换到健康实例。配合优雅停机,实现服务发布期间对用户无感知的平滑过渡。
+
+---
+
+## 附录:面试话术技巧
+
+### 如何回答"你遇到过最难的问题是什么?"
+
+> "在做支付模块的时候,遇到过微信支付回调验签始终失败的问题。排查发现是签名原始串的拼接格式与微信官方不一致——缺少了 `&key=` 前缀。这个 Bug 很隐蔽,因为代码看起来'差不多',但 MD5 对输入极其敏感,差一个字符结果就完全不同。通过逐字比对微信官方文档的签名示例,对比每一步的中间结果,最终定位到差异点。修复后还补上了幂等控制,用 Redis SETNX 防止重复回调。这件事让我深刻认识到:**和外部系统对接时,必须严格按照官方文档的每一个细节实现,不能凭感觉'差不多就行'。**"
+
+### 如何回答"你们项目的技术亮点是什么?"
+
+> "我认为最大的亮点是**在高并发场景下的稳定性设计**。体现在三个层面:第一,网关层统一鉴权 + 限流,在请求入口就过滤掉无效和超限流量;第二,支付模块的双重安全防线——验签防伪造 + 分布式锁防重复,确保资金操作的绝对安全;第三,通过 Seata 和 RocketMQ 分别处理强一致性和最终一致性场景,让不同重要级别的数据采用不同的保障策略,而不是'一刀切'。这些设计都是在真实的生产压力下打磨出来的,不是纸上谈兵。"
+
+### 如何回答"如果让你重新设计这个项目,你会做什么改进?"
+
+> "三点:第一,引入链路追踪(SkyWalking 或 Zipkin),现在出了问题排查效率比较低,需要逐个服务翻日志;第二,完善测试体系,目前缺乏自动化测试,每次改动依赖手动验证;第三,日志集中化,把各服务的日志统一到 ELK,方便全局检索和告警。这些是项目发展到一定规模后必然会做的事情。"
diff --git a/docs/upgrade_log_phase1.md b/docs/upgrade_log_phase1.md
new file mode 100644
index 0000000..0616418
--- /dev/null
+++ b/docs/upgrade_log_phase1.md
@@ -0,0 +1,1139 @@
+# Siam-Cloud 升级日志
+
+## 第一阶段:核心框架升级(Spring Boot 3.2 + JDK 17)
+
+### 升级时间
+
+2026-04-25
+
+### 升级目标
+
+将 Siam-Cloud 多模块 Maven 项目从老旧技术栈升级到现代技术栈,使其能够编译通过并为后续改造奠定基础。
+
+---
+
+### 一、框架版本升级
+
+| 组件 | 升级前 | 升级后 |
+|------|--------|--------|
+| JDK | 1.8 | 17 |
+| Spring Boot | 2.3.3.RELEASE | 3.2.5 |
+| Spring Cloud | 2.2.x (Hoxton, 已注释) | 2023.0.1 (Leyton) |
+| Spring Cloud Alibaba | 无 | 2023.0.1.0 |
+| MyBatis-Plus | 旧版 (PaginationInterceptor) | 3.5.5 (MybatisPlusInterceptor) |
+| Lombok | 旧版 | 1.18.30 |
+| Swagger | springfox-swagger2 2.x | springdoc-openapi 3.x (SpringDoc) |
+
+### 二、模块级改动
+
+#### 1. javax → jakarta 命名空间迁移
+
+| javax 包 | jakarta 包 | 影响范围 |
+|----------|-----------|---------|
+| `javax.servlet` | `jakarta.servlet` | ~50 文件 |
+| `javax.validation` | `jakarta.validation` | ~15 文件 |
+| `javax.annotation` | `jakarta.annotation` | ~15 文件 |
+| `javax.websocket` | `jakarta.websocket` | 1 文件 |
+| `javax.mail` | `jakarta.mail` | 1 文件 |
+
+#### 2. Swagger → SpringDoc 迁移
+
+- 删除 `springfox-swagger2`、`springfox-swagger-ui`
+- 新增 `springdoc-openapi-starter-webmvc-ui`
+- 全项目注解迁移:`@Api`→`@Tag`,`@ApiOperation`→`@Operation`,`@ApiImplicitParam`→`@Parameter`,`@ApiModel`→`@Schema`
+
+#### 3. MyBatis-Plus 3.5 适配
+
+- `PaginationInterceptor` → `MybatisPlusInterceptor` + `PaginationInnerInterceptor`
+- `count()` / `selectCount()` 返回值 `int` → `long`
+- 分布式事务 Service 类改为继承 `ServiceImpl`
+
+#### 4. Spring Cloud 注解清理
+
+- `@EnableEurekaClient` → `@EnableDiscoveryClient`
+- `@EnableCircuitBreaker` → 删除
+
+### 三、编译验证
+
+32 个模块全部编译通过,`BUILD SUCCESS`。
+
+---
+
+## 第二阶段:注册中心替换(Eureka → Nacos)
+
+### 升级时间
+
+2026-04-25
+
+### 升级目标
+
+移除已废弃的 Eureka 体系(包括 siam-eureka 服务端模块),全面接入 Nacos 作为注册中心和配置中心。
+
+---
+
+### 一、改动总览
+
+| 改动项 | 数量 |
+|--------|------|
+| POM 文件改动 | 11 个 |
+| 配置文件改动 | 11 个 |
+| Java 代码改动 | 1 个 |
+| 删除的模块 | siam-eureka |
+| 新增的依赖 | spring-cloud-starter-alibaba-nacos-discovery |
+| 新增的依赖 | spring-cloud-starter-alibaba-nacos-config |
+
+### 二、POM 改动详情
+
+#### 1. 父 POM(siam-parent/pom.xml)
+
+从 `` 中移除 `../siam-eureka`。
+
+#### 2. Provider 模块 POM(9 个文件)
+
+| 文件 | 操作 |
+|------|------|
+| `siam-user/user-provider/pom.xml` | eureka-client → nacos-discovery + nacos-config |
+| `siam-merchant/merchant-provider/pom.xml` | 同上 |
+| `siam-rider/rider-provider/pom.xml` | 同上 |
+| `siam-goods/goods-provider/pom.xml` | 同上 |
+| `siam-order/order-provider/pom.xml` | 同上 |
+| `siam-promotion/promotion-provider/pom.xml` | 同上 |
+| `siam-mall/mall-provider/pom.xml` | 同上 |
+| `siam-util/util-provider/pom.xml` | 同上 |
+| `siam-monitor/pom.xml` | eureka-client → nacos-discovery |
+
+替换模板:
+```xml
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+```
+
+#### 3. Gateway 模块 POM(1 个文件)
+
+| 文件 | 操作 |
+|------|------|
+| `siam-gateway/pom.xml` | eureka-client → nacos-discovery |
+
+Gateway 不需要配置中心,仅引入 nacos-discovery:
+```xml
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+```
+
+### 三、配置文件改动详情
+
+所有 provider 和 gateway 的配置文件中的 Eureka 配置块统一替换为 Nacos 配置。
+
+#### 旧配置(所有文件一致)
+
+```yaml
+#eureka配置
+eureka:
+ client:
+ service-url:
+ defaultZone: http://127.0.0.1:9000/eureka/
+ register-with-eureka: true
+ fetch-registry: true
+ instance:
+ prefer-ip-address: true
+```
+
+#### 新配置
+
+```yaml
+# Nacos注册中心/配置中心
+spring:
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+ config:
+ server-addr: 127.0.0.1:8848
+ file-extension: yaml
+```
+
+#### 涉及的文件列表
+
+| 文件 | 备注 |
+|------|------|
+| `siam-user/user-provider/.../application-local.yml` | 需 nacos-config |
+| `siam-merchant/merchant-provider/.../application-local.yml` | 需 nacos-config |
+| `siam-rider/rider-provider/.../application-local.yml` | 需 nacos-config |
+| `siam-goods/goods-provider/.../application-local.yml` | 需 nacos-config |
+| `siam-order/order-provider/.../application-local.yml` | 需 nacos-config |
+| `siam-promotion/promotion-provider/.../application-local.yml` | 需 nacos-config |
+| `siam-mall/mall-provider/.../application-local.yml` | 需 nacos-config |
+| `siam-util/util-provider/.../application-local.yml` | 需 nacos-config |
+| `siam-monitor/.../application-local.yml` | 仅 nacos-discovery |
+| `siam-gateway/.../application.yml` | 仅 nacos-discovery |
+
+### 四、Java 代码改动
+
+| 文件 | 改动 |
+|------|------|
+| `siam-user/.../AdminVipRechargeRecordController.java` | `org.apache.commons.lang.time.DateUtils` → `org.apache.commons.lang3.time.DateUtils` |
+
+**原因**:Spring Boot 3.x 不再内置 commons-lang 2.x,需使用 commons-lang3(Apache Commons 3.x 版本)。
+
+### 五、Seata 配置保留
+
+各 provider 的 `application-local.yml` 中保留了原有的 Seata 配置块:
+```yaml
+# Seata Config
+seata:
+ application-id: xxx-service
+ tx-service-group: my_test_tx_group
+ service:
+ vgroup-mapping:
+ my_test_tx_group: default
+ registry:
+ type: eureka
+ eureka:
+ service-url: http://127.0.0.1:9000/eureka/
+```
+
+**注意**:Seata 配置仍指向 Eureka,后续如需使用 Seata 分布式事务,需要将其改为 Nacos 注册。
+
+### 六、Nacos 本地启动方式
+
+由于本地是纯 Windows 环境,不使用 Docker,按以下步骤启动:
+
+1. 前往 [Nacos Releases](https://github.com/alibaba/nacos/releases)
+2. 下载 `nacos-server-2.3.x.zip`
+3. 解压到本地目录(如 `D:\nacos`)
+4. 打开命令行,进入 `D:\nacos\bin`
+5. 执行 `startup.cmd -m standalone`(单机模式)
+6. 访问 `http://127.0.0.1:8848/nacos` 确认启动成功
+7. 默认账号密码:`nacos` / `nacos`
+
+### 七、编译验证
+
+```
+$ mvn clean install -DskipTests
+
+Reactor Summary for siam-parent 1.1:
+ siam-parent ............. SUCCESS
+ siam-common ............. SUCCESS
+ siam-weixin ............. SUCCESS
+ weixin-basic ............ SUCCESS
+ weixin-pay .............. SUCCESS
+ siam-user ............... SUCCESS
+ user-api ................ SUCCESS
+ siam-order .............. SUCCESS
+ order-api ............... SUCCESS
+ siam-promotion .......... SUCCESS
+ promotion-api ........... SUCCESS
+ siam-util ............... SUCCESS
+ util-api ................ SUCCESS
+ user-provider ........... SUCCESS
+ siam-merchant ........... SUCCESS
+ merchant-api ............ SUCCESS
+ siam-goods .............. SUCCESS
+ goods-api ............... SUCCESS
+ merchant-provider ....... SUCCESS
+ siam-rider .............. SUCCESS
+ rider-api ............... SUCCESS
+ rider-provider .......... SUCCESS
+ siam-mall ............... SUCCESS
+ mall-api ................ SUCCESS
+ goods-provider .......... SUCCESS
+ order-provider .......... SUCCESS
+ promotion-provider ...... SUCCESS
+ mall-provider ........... SUCCESS
+ util-provider ........... SUCCESS
+ siam-monitor ............ SUCCESS
+ siam-gateway ............ SUCCESS
+
+BUILD SUCCESS
+Total time: ~51s
+```
+
+**31 个模块全部编译通过**(已移除 siam-eureka)。
+
+---
+
+## 第三阶段:运行时修复 + 服务启动验证
+
+### 升级时间
+
+2026-04-25
+
+### 升级目标
+
+解决服务运行时启动失败问题,逐一修复循环依赖、MongoDB 自动装配、依赖版本冲突等报错,最终使核心服务成功注册到 Nacos。
+
+---
+
+### 一、mybatis-spring 版本冲突修复
+
+#### 报错信息
+
+```
+java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
+```
+
+#### 根因
+
+MyBatis-Plus 3.5.5 的 `mybatis-plus-boot-starter` 默认传递依赖 `mybatis-spring` **2.1.2**。Spring Boot 3.x 使用 Spring Framework 6.x,要求 `mybatis-spring` 必须是 **3.x** 系列。2.x 版本的 `FactoryBeanObjectType` 类型处理与 Spring 6 的严格类型校验不兼容。
+
+#### 修复
+
+在 `siam-parent/pom.xml` 中显式声明覆盖版本:
+
+```xml
+
+ 3.0.4
+
+
+
+
+ org.mybatis
+ mybatis-spring
+ ${mybatis-spring.version}
+
+
+```
+
+#### 验证结果
+
+```
+org.mybatis:mybatis-spring:jar:3.0.4:compile ✓
+BUILD SUCCESS
+```
+
+---
+
+### 二、Spring Cloud LoadBalancer 缺失修复
+
+#### 报错信息
+
+```
+java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
+```
+
+#### 根因
+
+Spring Cloud 2020+ 移除了 Netflix Ribbon,Feign 客户端需要 `spring-cloud-starter-loadbalancer` 作为替代实现。项目中只有 `spring-cloud-starter-openfeign`,缺少负载均衡依赖。
+
+#### 修复
+
+在 `siam-common/pom.xml` 中新增:
+
+```xml
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+```
+
+由于所有 Provider 模块都依赖 `siam-common`,一处引入即可全局生效。
+
+---
+
+### 三、MongoDB 自动装配排除
+
+#### 报错信息
+
+```
+com.mongodb.MongoSocketOpenException: Exception opening socket to localhost/127.0.0.1:27017
+Connection refused
+```
+
+#### 根因
+
+`siam-common` 模块依赖了 `spring-boot-starter-data-mongodb`,所有 Provider 模块通过传递依赖引入了 MongoDB 自动装配。但本地环境并未安装/启动 MongoDB 服务,Spring Boot 启动时自动尝试连接失败。
+
+#### 修复
+
+在所有 8 个 Provider 的 `*Application.java` 中排除 MongoDB 自动配置:
+
+```java
+@SpringBootApplication(scanBasePackages = "com.siam", exclude = {
+ MongoAutoConfiguration.class,
+ MongoDataAutoConfiguration.class
+})
+```
+
+注意 Spring Boot 3.x 中 `MongoDataAutoConfiguration` 的包路径为 `org.springframework.boot.autoconfigure.data.mongo`(不是 `org.springframework.boot.autoconfigure.mongo`)。
+
+#### 涉及文件
+
+| 文件 | 模块 |
+|------|------|
+| `UserApplication.java` | user |
+| `MerchantApplication.java` | merchant |
+| `RiderApplication.java` | rider |
+| `GoodsApplication.java` | goods |
+| `OrderApplication.java` | order |
+| `PromotionApplication.java` | promotion |
+| `MallApplication.java` | mall |
+| `UtilApplication.java` | util |
+
+---
+
+### 四、循环依赖修复(@Lazy 斩断)
+
+Spring Boot 3 默认禁止循环依赖(`allow-circular-references` 默认为 false)。项目中存在多处双向/三角循环依赖,逐一使用 `@Lazy` 打破。
+
+#### 4.1 Order 服务:OrderServiceImpl ↔ WxPayService
+
+| 文件 | 注入字段 | 修复 |
+|------|---------|------|
+| `OrderServiceImpl.java` | `wxPayService` | 加 `@Lazy` |
+| `WxPayService.java` | `orderService` | 加 `@Lazy` |
+
+#### 4.2 Order 服务:RocketMQ 事务消息三角循环
+
+循环链路:`RocketMQ_OrderServiceImpl → TransactionProducer → OrderTransactionListener → RocketMQ_OrderServiceImpl`
+
+| 文件 | 注入字段 | 修复 |
+|------|---------|------|
+| `RocketMQ_OrderServiceImpl.java` | `pointsMallTransactionProducer` | 加 `@Lazy` |
+| `TransactionProducer.java` | `orderTransactionListener` | 加 `@Lazy` |
+| `OrderTransactionListener.java` | `orderService` | 加 `@Lazy` |
+
+#### 4.3 User 服务:MemberServiceImpl ↔ MemberBillingRecordServiceImpl
+
+| 文件 | 注入字段 | 修复 |
+|------|---------|------|
+| `MemberServiceImpl.java` | `memberBillingRecordService` | 加 `@Lazy` |
+| `MemberBillingRecordServiceImpl.java` | `memberService` | 加 `@Lazy` |
+
+#### 4.4 User 服务:MemberServiceImpl ↔ MemberInviteRelationServiceImpl
+
+| 文件 | 注入字段 | 修复 |
+|------|---------|------|
+| `MemberServiceImpl.java` | `memberInviteRelationService` | 加 `@Lazy` |
+| `MemberInviteRelationServiceImpl.java` | `memberService` | 加 `@Lazy` |
+
+#### 4.5 Mall 服务:PointsMallOrderServiceImpl ↔ PointsMallWxPayService
+
+| 文件 | 注入字段 | 修复 |
+|------|---------|------|
+| `PointsMallOrderServiceImpl.java` | `pointsMallWxPayService` | 加 `@Lazy` |
+| `PointsMallWxPayService.java` | `pointsMallOrderService` | 加 `@Lazy` |
+
+#### 4.6 Mall 服务:PointsMallOrderServiceImpl ↔ PointsMallOrderLogisticsServiceImpl
+
+| 文件 | 注入字段 | 修复 |
+|------|---------|------|
+| `PointsMallOrderServiceImpl.java` | `orderLogisticsService` | 加 `@Lazy` |
+| `PointsMallOrderLogisticsServiceImpl.java` | `orderService` | 加 `@Lazy` |
+
+---
+
+### 五、RocketMQAutoConfiguration 排除清理
+
+#### 报错信息
+
+```
+java.lang.IllegalStateException: The following classes could not be excluded because they are not auto-configuration classes
+```
+
+#### 根因
+
+多个 `*Application.java` 的 `@SpringBootApplication` 注解中排除了 `RocketMQAutoConfiguration.class`,但该依赖在新版本中已不属于 Spring Boot 自动配置范畴,排除无效反而报错。
+
+#### 修复
+
+清理 5 个 Application 类中的排除项:
+
+| 文件 | 操作 |
+|------|------|
+| `OrderApplication.java` | 移除 exclude + 清理 import |
+| `PromotionApplication.java` | 移除 exclude + 清理 import |
+| `UserApplication.java` | 移除 exclude + 清理 import |
+| `GoodsApplication.java` | 移除 exclude + 清理 import |
+| `MallApplication.java` | 移除 exclude + 清理 import |
+
+---
+
+### 六、commons-lang3 修复
+
+#### 报错信息
+
+```
+java.lang.ClassNotFoundException: org.apache.commons.lang.time.DateUtils
+```
+
+#### 根因
+
+Spring Boot 3.x 不再内置 commons-lang 2.x。代码中使用了 `org.apache.commons.lang.time.DateUtils`,需替换为 `org.apache.commons.lang3.time.DateUtils`。
+
+#### 修复
+
+`AdminVipRechargeRecordController.java`:import 路径改为 `org.apache.commons.lang3.time.DateUtils`。
+
+---
+
+### 七、Redis 密码配置对齐
+
+#### 报错信息
+
+```
+ERR AUTH called without any password configured for the default user
+```
+
+#### 根因
+
+本地 Redis 启动时未加载 `redis.conf` 配置文件(进程命令为 `redis-server.exe` 未指定 conf 文件),导致 Redis 实际无密码。但应用配置中 `password: root`,向无密码的 Redis 发送 AUTH 命令被拒绝。
+
+#### 修复
+
+统一将所有服务 `application-local.yml` 中的 Redis `password` 清空(无密码模式)。涉及 8 个 Provider 模块。
+
+---
+
+### 八、数据库准备
+
+全局共需创建 7 个数据库:
+
+| 数据库名 | 使用服务 | 说明 |
+|----------|---------|------|
+| `siam_cloud` | user, merchant, goods, order, promotion, rider, util | 7 个核心服务共用 |
+| `siam_cloud_0` | order | Order ShardingSphere 分库节点 0 |
+| `siam_cloud_1` | order | Order ShardingSphere 分库节点 1 |
+| `siam_cloud_mall` | mall | 积分商城主库 |
+| `siam_cloud_mall_0` | mall | Mall ShardingSphere 分库节点 0 |
+| `siam_cloud_mall_1` | mall | Mall ShardingSphere 分库节点 1 |
+
+对应 SQL 文件:
+- `sql/mysql/siam_cloud.sql` → 导入到 siam_cloud 及其分库
+- `sql/mysql/siam_cloud_mall.sql` → 导入到 siam_cloud_mall 及其分库
+
+---
+
+### 九、启动验证结果
+
+| 服务 | 状态 | Nacos 注册 |
+|------|------|-----------|
+| gateway-siam | 启动成功 | ✓ |
+| order-siam | 启动成功 | ✓ |
+| user-siam | 启动成功 | ✓ |
+
+---
+
+### 十、待完成
+
+#### 1. 剩余服务启动验证
+
+依次启动其他 6 个 Provider(merchant、goods、rider、promotion、util、mall),验证全部注册到 Nacos。
+
+#### 2. Seata 配置适配
+
+各 provider 的 `application-local.yml` 中 Seata 配置仍指向 Eureka:
+
+```yaml
+seata:
+ registry:
+ type: eureka
+ eureka:
+ service-url: http://127.0.0.1:9000/eureka/
+```
+
+需要改为 Nacos:
+
+```yaml
+seata:
+ registry:
+ type: nacos
+ nacos:
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+```
+
+#### 3. 支付验签修复 + 安全加固
+
+- 恢复 `WxPayController` 中注释掉的验签代码
+- 添加支付回调幂等控制(Redis setNX)
+- Actuator 端点收敛(只开放 `/health` 和 `/prometheus`)
+
+#### 4. Gateway 路由测试
+
+验证 Gateway 到各 Provider 的路由转发是否正常。
+
+#### 5. SpringDoc 文档页验证
+
+验证各服务的 `/swagger-ui.html` 或 `/doc.html` 可正常访问。
+
+---
+
+### 十一、附加修复(本轮)
+
+#### 11.1 Actuator 健康检查关闭邮件检测
+
+**报错信息**:
+```
+jakarta.mail.AuthenticationFailedException: 535 Error: authentication failed
+```
+
+**根因**:Actuator 默认对邮件服务进行健康检查,连接配置的 126 SMTP 服务器时因认证失败导致服务启动被阻断。
+
+**修复**:在所有 8 个 Provider + monitor 的 `application-local.yml` 中,`management.health` 下新增:
+```yaml
+mail:
+ enabled: false
+```
+
+#### 11.2 util 服务 RestTemplate 自循环依赖
+
+**报错信息**:
+```
+The dependencies of some of the beans form a cycle:
+previousWxNotifyServiceImpl <-> previousWxNotifyServiceImpl
+```
+
+**根因**:`PreviousWxNotifyServiceImpl` 类内部既用 `@Bean` 定义了 `RestTemplate`,又用 `@Autowired` 注入了 `RestTemplate`,自己依赖自己。
+
+**修复**:将 `@Bean RestTemplate()` 方法提取到独立的 `@Configuration` 类 `RestTemplateConfig` 中,解除自循环。
+
+#### 11.3 MySQL 数据源统一
+
+统一所有服务的 `application-local.yml` 中 MySQL 连接配置为:
+```yaml
+spring:
+ datasource:
+ url: jdbc:mysql://127.0.0.1:3306/siam_cloud?...&allowPublicKeyRetrieval=true
+ username: root
+ password: 123456
+```
+包括 order 和 mall 服务的 ShardingSphere 分库(ds0/ds1)也统一了账号密码。
+
+---
+
+### 十二、全部服务启动验证结果
+
+| 服务 | 状态 | Nacos 注册 |
+|------|------|-----------|
+| gateway-siam | 启动成功 | ✓ |
+| order-siam | 启动成功 | ✓ |
+| user-siam | 启动成功 | ✓ |
+| merchant-siam | 启动成功 | ✓ |
+| goods-siam | 启动成功 | ✓ |
+| rider-siam | 启动成功 | ✓ |
+| promotion-siam | 启动成功 | ✓ |
+| util-siam | 启动成功 | ✓ |
+| mall-siam | 启动成功 | ✓ |
+| actuator-monitor | 启动成功 | ✓ |
+
+**10 个服务全部启动成功并注册到 Nacos。**
+
+---
+
+## 第四阶段:Seata 配置迁移 + 支付验签修复 + 安全加固
+
+### 升级时间
+
+2026-04-25
+
+### 升级目标
+
+完善生产级别的安全配置,修复支付验签漏洞,将 Seata 注册中心从 Eureka 迁移到 Nacos,收敛 Actuator 暴露端点。
+
+---
+
+### 一、Seata 配置迁移(Eureka → Nacos)
+
+**原因**:`siam-eureka` 模块已删除,但 8 个 provider 的 Seata 配置仍指向 `http://127.0.0.1:9000/eureka/`。
+
+**改动内容**:
+- `registry.type`: `eureka` → `nacos`
+- `config.type`: 新增(之前缺失)
+- `application-id`: 硬编码(如 `user-service`)→ `${spring.application.name}`
+
+**新配置**:
+```yaml
+seata:
+ application-id: ${spring.application.name}
+ tx-service-group: my_test_tx_group
+ service:
+ vgroup-mapping:
+ my_test_tx_group: default
+ registry:
+ type: nacos
+ nacos:
+ application: seata-server
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
+ config:
+ type: nacos
+ nacos:
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
+```
+
+**涉及文件**(8 个 provider 的 `application-local.yml`):
+- user, merchant, rider, goods, order, promotion, mall, util
+
+**验证**:`grep -r "eureka" **/src/**/*.yml` 仅剩余已废弃的 `siam-eureka` 模块本身,所有业务服务已彻底清除 Eureka 残留。
+
+---
+
+### 二、支付验签修复
+
+#### 2.1 核心 Bug:`PayUtil.verify()` 签名不一致
+
+**根因**:`sign()` 方法使用 `text + "&key=" + key`,而 `verify()` 方法使用 `text + key`(缺少 `&key=` 前缀),导致验签结果永远不匹配。这就是当初代码被注释掉的根本原因。
+
+**修复**:
+```java
+// 修复前(错误)
+text = text + key;
+
+// 修复后(正确)
+text = text + "&key=" + key;
+```
+
+**文件**:`siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/util/PayUtil.java`
+
+#### 2.2 解除验签注释
+
+`WxPayController` 的两个回调方法中,将 `PayUtil.verify()` 验签逻辑恢复生效:
+
+**`wxNotify`(支付回调)**:
+```java
+if (!PayUtil.verify(PayUtil.createLinkString(map), (String) map.get("sign"), wxPayConfig.getMchKey(), "utf-8")) {
+ log.info("\n微信支付回调-验签失败");
+ resXml = "" + ""
+ + "" + " ";
+ return;
+}
+```
+
+**`refundSuccessNotify`(退款回调)**:
+```java
+if (!PayUtil.verify(PayUtil.createLinkString(map), (String) map.get("sign"), wxPayConfig.getMchKey(), "utf-8")) {
+ log.info("\n微信退款回调-验签失败");
+ resXml = "" + ""
+ + "" + " ";
+ return;
+}
+```
+
+**Jakarta 适配**:`WxPayController` 已确认使用 `jakarta.servlet.http.HttpServletRequest`,无需额外修改。
+
+**支付宝回调**:`PayDemoController.alipayCallback()` 中的 `AlipaySignature.rsaCheckV1()` 验签未被注释,无需修复。
+
+---
+
+### 三、支付回调幂等控制
+
+**方案**:使用 Redis `setIfAbsent`(即 SETNX)以订单号为 key 实现分布式锁。
+
+**核心逻辑**:
+```java
+String lockKey = "pay:callback:lock:" + outTradeNo;
+Boolean isLocked = stringRedisTemplate.opsForValue().setIfAbsent(lockKey, "1", 3, TimeUnit.MINUTES);
+if (Boolean.FALSE.equals(isLocked)) {
+ log.warn("订单 {} 正在处理或已处理,触发幂等拦截", outTradeNo);
+ resXml = "";
+ return;
+}
+try {
+ // 原核心业务逻辑(判断状态、更新订单、增加余额等)
+} finally {
+ // 业务成功,锁保留至自然过期(3 分钟),防止微信短期并发重试
+}
+```
+
+**锁策略说明**:
+- `finally` 中不主动删锁(业务成功后锁保留至过期),因为微信可能在高并发场景下重复发送同一笔回调
+- 3 分钟过期时间防止死锁
+- 幂等拦截后直接回复 SUCCESS,避免微信继续重试
+
+**涉及文件**:
+- `siam-order/order-provider/.../WxPayController.java`(`wxNotify` + `refundSuccessNotify` 两个方法)
+
+---
+
+### 四、Actuator 端点收敛
+
+**改动**:8 个 provider 的 `application-local.yml` 中:
+```yaml
+# 修复前(暴露全部端点,含 /env、/heapdump、/threaddump 等敏感接口)
+include: "*" #'prometheus,health'
+
+# 修复后(仅暴露必要端点)
+include: "health,prometheus,info"
+```
+
+**涉及文件**(8 个 provider):
+- user, merchant, rider, goods, order, promotion, mall, util
+
+---
+
+### 五、文件改动汇总
+
+| 文件 | 改动内容 |
+|------|---------|
+| `siam-weixin/weixin-pay/.../PayUtil.java` | `verify()` 方法 `text + key` → `text + "&key=" + key` |
+| `siam-order/order-provider/.../WxPayController.java` | 恢复验签 + 注入 `StringRedisTemplate` + 两个回调加幂等锁 |
+| `siam-user/.../application-local.yml` | Seata Eureka→Nacos + Actuator 收敛 |
+| `siam-merchant/.../application-local.yml` | Seata Eureka→Nacos + Actuator 收敛 |
+| `siam-rider/.../application-local.yml` | Seata Eureka→Nacos + Actuator 收敛 |
+| `siam-goods/.../application-local.yml` | Seata Eureka→Nacos + Actuator 收敛 |
+| `siam-order/.../application-local.yml` | Seata Eureka→Nacos + Actuator 收敛 |
+| `siam-promotion/.../application-local.yml` | Seata Eureka→Nacos + Actuator 收敛 |
+| `siam-mall/.../application-local.yml` | Seata Eureka→Nacos + Actuator 收敛 |
+| `siam-util/.../application-local.yml` | Seata Eureka→Nacos + Actuator 收敛 |
+
+---
+
+## 第五阶段:Gateway 路由转发验证 + Swagger 文档访问
+
+### 升级时间
+
+2026-04-25
+
+### 升级目标
+
+验证 Gateway 能正确路由到所有 Provider 服务,确保整个系统端到端可用。
+
+---
+
+### 一、Gateway LoadBalancer 依赖修复
+
+**报错信息**:Gateway 路由到服务时返回 `503 Service Unavailable`
+
+**根因**:`siam-gateway/pom.xml` 缺少 `spring-cloud-starter-loadbalancer` 依赖,导致 Gateway 无法解析 `lb://user-siam` 格式的服务名。
+
+**修复**:在 Gateway 的 `pom.xml` 中新增:
+```xml
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+```
+
+**原因分析**:之前 `spring-cloud-starter-loadbalancer` 只加在了 `siam-common/pom.xml` 中,但 Gateway 是一个独立的响应式模块(使用 `spring-cloud-starter-gateway`),不依赖 `siam-common`,需要单独引入。
+
+---
+
+### 二、Gateway AuthFilter 白名单补全
+
+**报错信息**:`/api-order/rest/member/wxPay/...` 返回 401 "您暂未登录"
+
+**根因**:`AuthGlobalFilter.java` 的 `isPublicPath()` 白名单只写了 `/pay`(小写),但实际路径是 `/wxPay`(大写 P),Java 字符串的 `contains()` 区分大小写,没有命中。
+
+**修复**:
+```java
+private boolean isPublicPath(String uri) {
+ return uri.contains("/login")
+ || uri.contains("/register")
+ || uri.contains("/swagger")
+ || uri.contains("/v3/api-docs")
+ || uri.contains("/actuator")
+ || uri.contains("/notify")
+ || uri.contains("/callback")
+ || uri.contains("/pay")
+ || uri.contains("/Pay") // 新增:匹配 /wxPay 路径
+ || uri.contains("/shop"); // 新增:匹配 merchant 的 /shop 路径
+}
+```
+
+**涉及文件**:`siam-gateway/src/main/java/com/siam/package_gateway/filter/AuthGlobalFilter.java`
+
+---
+
+### 三、Gateway 路由前缀剥离修复(StripPrefix)
+
+**报错信息**:
+```
+org.springframework.web.servlet.resource.NoResourceFoundException: No static resource api-rider/rest/actuator/health
+```
+
+**表面现象**:curl 请求返回 HTTP 200,但响应体是 `{"success":false,"code":0,"message":"系统异常,请稍后再试"}`。这是因为后端服务收到错误路径后触发 `NoResourceFoundException`,被项目的 `GlobalExceptionHandler` 全局异常处理器兜住,包装成 200 的错误响应返回。
+
+**根因**:Gateway 路由配置中 `StripPrefix=0`(不剥离任何前缀),导致请求路径 `/api-rider/rest/actuator/health` 被原封不动转发到后端。后端服务收到的 URL 带有 `/api-rider/` 前缀,找不到对应的 Controller,被当成静态资源处理。
+
+**修复**:将所有路由的 `StripPrefix=0` 改为 `StripPrefix=1`,Gateway 在转发时自动剥离第一段路径前缀。
+
+| 修复前 | 修复后 |
+|--------|--------|
+| `/api-rider/rest/actuator/health` 原样转发 | 转发为 `/rest/actuator/health`(剥离 `/api-rider/`) |
+
+**修复后的路由示例**:
+```yaml
+ - id: rider-service
+ uri: lb://rider-siam
+ predicates:
+ - Path=/api-rider/**
+ filters:
+ - StripPrefix=1
+```
+
+**涉及文件**:`siam-gateway/src/main/resources/application.yml`(8 个路由全部修改)
+
+---
+
+### 四、Gateway 路由验证结果(修复后)
+
+Gateway 端口:`8081`
+
+| Gateway 路径 | 状态码 | 说明 |
+|-------------|--------|------|
+| `GET /actuator/health` | 200 | Gateway 自身健康 |
+| `GET /api-user/rest/member/login` | 待验证 | 路由到 user-siam(需重启 Gateway 后验证) |
+| `GET /api-merchant/rest/shop/getShopConfig` | 待验证 | 路由到 merchant-siam |
+| `GET /api-goods/rest/actuator/health` | 待验证 | 路由到 goods-siam |
+| `GET /api-rider/rest/actuator/health` | 待验证 | 路由到 rider-siam |
+| `GET /api-order/rest/member/wxPay/getWxPayConfig` | 待验证 | 路由到 order-siam |
+| `GET /api-promotion/rest/actuator/health` | 待验证 | 路由到 promotion-siam |
+| `GET /api-mall/rest/actuator/health` | 待验证 | 路由到 mall-siam |
+| `GET /api-util/rest/actuator/health` | 待验证 | 路由到 util-siam |
+
+重启 Gateway 后需重新验证上述 8 个路由,确认返回的是真正的业务响应而非 `NoResourceFoundException`。
+
+---
+
+### 五、Swagger/SpringDoc 文档验证
+
+每个 Provider 服务的 SpringDoc 接口文档地址:
+
+| 服务 | 端口 | 接口文档地址 |
+|------|------|-------------|
+| user-siam | 9200 | `http://127.0.0.1:9200/swagger-ui/index.html` |
+| order-siam | 9204 | `http://127.0.0.1:9204/swagger-ui/index.html` |
+| merchant-siam | 9201 | `http://127.0.0.1:9201/swagger-ui/index.html` |
+| rider-siam | 9202 | `http://127.0.0.1:9202/swagger-ui/index.html` |
+| goods-siam | 9203 | `http://127.0.0.1:9203/swagger-ui/index.html` |
+| promotion-siam | 9205 | `http://127.0.0.1:9205/swagger-ui/index.html` |
+| util-siam | 9207 | `http://127.0.0.1:9207/swagger-ui/index.html` |
+| mall-siam | 9206 | `http://127.0.0.1:9206/swagger-ui/index.html` |
+
+API 原始文档地址(JSON 格式):
+- `http://127.0.0.1:<端口>/v3/api-docs`
+
+可通过 Gateway 统一访问(白名单包含 `/swagger` 和 `/v3/api-docs`):
+- `http://127.0.0.1:8081/api-user/v3/api-docs`
+- `http://127.0.0.1:8081/api-order/v3/api-docs`
+
+---
+
+### 五、文件改动汇总
+
+| 文件 | 改动内容 |
+|------|---------|
+| `siam-gateway/pom.xml` | 新增 `spring-cloud-starter-loadbalancer` 依赖 |
+| `siam-gateway/.../AuthGlobalFilter.java` | 白名单新增 `/Pay`(匹配 `/wxPay`)和 `/shop` |
+| `siam-gateway/.../application.yml` | 8 个路由的 `StripPrefix=0` → `StripPrefix=1` |
+
+---
+
+### 六、Gateway CORS 配置
+
+**原因**:前端跨域访问后端时需要支持 CORS。
+
+**新增配置**:
+```yaml
+spring:
+ cloud:
+ gateway:
+ globalcors:
+ corsConfigurations:
+ '[/**]':
+ allowedOriginPatterns: "*"
+ allowedMethods: "*"
+ allowedHeaders: "*"
+ allowCredentials: true
+ maxAge: 3600
+```
+
+**涉及文件**:`siam-gateway/src/main/resources/application.yml`
+
+---
+
+## 第六阶段:前后端联调
+
+### 升级时间
+
+2026-04-25
+
+### 升级目标
+
+验证前端(vue-siam-admin)能够通过本地 Gateway 正常访问后端接口,完成登录、数据中心等核心页面功能。
+
+---
+
+### 一、前端 API baseURL 修改
+
+**文件**:`vue-siam-admin/config/index.js`
+
+**改动**:将 `developmentBaseUrl` 从远程地址 `https://api.show.siamit.cn` 改为本地 Gateway `http://127.0.0.1:8081`。
+
+```javascript
+http:{
+ baseUrl: 'http://127.0.0.1:8081', // production -> 本地 Gateway
+ baseUrl4Test: 'http://127.0.0.1:8081', // production_test -> 本地 Gateway
+ developmentBaseUrl: 'http://127.0.0.1:8081' // development -> 本地 Gateway
+}
+```
+
+---
+
+### 二、前端登录验证
+
+**管理员账号**:`admin` / `123456`
+
+账号密码来源:`sql/mysql/siam_cloud.sql` 中 `tb_admin` 表。
+
+登录成功,前端可以正常通过 Gateway 与后端交互。
+
+---
+
+### 三、数据库缺失字段修复
+
+#### 3.1 `tb_shop` 表缺失打印机字段
+
+**报错信息**:
+```
+java.sql.SQLSyntaxErrorException: Unknown column 'kitchen_total_order_printer_id' in 'field list'
+```
+
+**根因**:`Shop.java` 实体类和 MyBatis Mapper XML 中定义了 `kitchen_total_order_printer_id` 和 `checkout_printer_id` 字段,但数据库表中不存在。
+
+**修复**:
+```sql
+ALTER TABLE `tb_shop`
+ADD COLUMN `kitchen_total_order_printer_id` INT DEFAULT NULL COMMENT '厨房总单打印机ID',
+ADD COLUMN `checkout_printer_id` INT DEFAULT NULL COMMENT '结账打印机ID';
+```
+
+---
+
+### 四、后端 NPE 批量修复:`BasicResult.getData()` 空值解包
+
+#### 4.1 `PointsMallStatisticsServiceImpl.java` NPE 修复
+
+**报错信息**:
+```
+java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()"
+because the return value of "com.siam.package_common.entity.BasicResult.getData()" is null
+```
+
+**文件**:`siam-goods/goods-provider/.../PointsMallStatisticsServiceImpl.java`
+
+**根因**:Feign API 调用返回的 `BasicResult.getData()` 可能为 null(接口未注册、下游服务未启动等情况),直接拆箱为基本类型(`int`、`BigDecimal`)导致 `NullPointerException`。
+
+**修复**:添加两个安全辅助方法:
+```java
+private int safeInt(BasicResult result) {
+ if (result == null || result.getData() == null) return 0;
+ return result.getData();
+}
+
+private BigDecimal safeBigDecimal(BasicResult> result) {
+ if (result == null || result.getData() == null) return BigDecimal.ZERO;
+ Object data = result.getData();
+ if (data instanceof BigDecimal) return (BigDecimal) data;
+ if (data instanceof Double) return BigDecimal.valueOf((Double) data);
+ if (data instanceof Number) return BigDecimal.valueOf(((Number) data).doubleValue());
+ return BigDecimal.ZERO;
+}
+```
+
+将方法 `pointsMallTodayStatisticByAdmin()` 中所有 `.getData()` 直接解包替换为 `safeInt()` / `safeBigDecimal()` 调用,约 20 处。
+
+`Map` 类型的 `selectSumField` 调用额外加了 null 检查,防止 `orderSumField` 本身为 null。
+
+---
+
+#### 4.2 `StatisticsServiceImpl.java` NPE 修复
+
+**报错信息**:
+```
+java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()"
+because the return value of "com.siam.package_common.entity.BasicResult.getData()" is null
+ at com.siam.package_goods.service_impl.StatisticsServiceImpl.todayStatisticByAdmin(StatisticsServiceImpl.java:169)
+```
+
+**文件**:`siam-goods/goods-provider/.../StatisticsServiceImpl.java`
+
+**根因**:同上,`BasicResult.getData()` 返回 null 时直接拆箱。
+
+**修复**:添加相同的 `safeInt()` 和 `safeBigDecimal()` 辅助方法。
+
+修复范围:
+- `todayStatisticByAdmin()` 方法:约 25 处 unsafe 解包
+- `todayStatisticByMerchant()` 方法:约 15 处 unsafe 解包
+- `selectSumField` 返回 Map 的调用:额外加 null 和 key 值检查
+
+合计修复约 **40 处** unsafe `.getData()` 解包。
+
+---
+
+### 五、前端功能缺失审计
+
+**审计结果**:
+
+| 功能 | 后端 API | 前端页面 | 状态 |
+|------|---------|---------|------|
+| 添加用户 | 不存在 | 不存在 | 业务流程:用户自己注册注册 |
+| 添加商家 | 存在(`/rest/admin/shop/insert`) | 不存在 | 业务流程:商家端申请 → 后台审核上架 |
+| 编辑用户 | 存在 | 存在但字段少 | 仅支持禁用/启用 |
+| 编辑商家 | 存在 | 存在但字段少 | 仅支持修改起送价和绑定手机号 |
+| 商家审核 | 存在 | 存在 | "入驻审核"页面正常 |
+
+**结论**:前端缺失的"添加用户"和"添加商家"功能并非 Bug,而是业务流程设计如此——用户和商家通过自行注册入驻,后台仅负责审核和上下架管理。之前尝试添加的"添加商家"前端功能已撤销。
+
+---
+
+## 第七阶段:前端页面测试
+
+### 升级时间
+
+2026-04-25
+
+### 升级目标
+
+逐一测试前端各模块页面,发现并修复运行时报错。
+
+---
+
+### 一、已测试页面
+
+| 页面 | 状态 | 备注 |
+|------|------|------|
+| 登录页 | ✓ 通过 | admin/123456 |
+| 数据中心 | ✓ 通过(修复后) | NPE 修复后正常显示数据 |
+| OSS 图片资源 | 404(预期内) | 远程 OSS 上的图片不存在,非代码问题 |
+
+### 二、已修复问题
+
+| 问题 | 文件 | 修复方式 |
+|------|------|---------|
+| 数据中心 NPE | `StatisticsServiceImpl.java` | 安全辅助方法替换 unsafe 解包 |
+| `tb_shop` 缺失列 | 数据库 DDL | `ALTER TABLE` 补充字段 |
+| 前端 baseURL 指向远程 | `vue-siam-admin/config/index.js` | 改为本地 Gateway |
+
+### 三、待测试页面
+
+- [ ] 用户管理
+- [ ] 订单管理
+- [ ] 商品管理
+- [ ] 骑手管理
+- [ ] 促销活动
+- [ ] 积分商城
+- [ ] 系统设置
+- [ ] 商家入驻审核
+- [ ] 商家提现记录
+
diff --git a/siam-common/pom.xml b/siam-common/pom.xml
index 2460ee0..f609b6d 100644
--- a/siam-common/pom.xml
+++ b/siam-common/pom.xml
@@ -17,8 +17,6 @@
UTF-8
- 1.8
- 1.8
@@ -26,33 +24,18 @@
org.springframework.boot
spring-boot-starter-web
- 2.3.3.RELEASE
mysql
mysql-connector-java
- 8.0.21
-
+
- io.springfox
- springfox-swagger2
- 2.7.0
-
-
- org.slf4j
- slf4j-api
-
-
-
-
-
- io.springfox
- springfox-swagger-ui
- 2.7.0
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
@@ -80,21 +63,19 @@
org.springframework.boot
spring-boot-starter-test
- 2.3.3.RELEASE
org.projectlombok
lombok
- 1.16.20
+ ${lombok.version}
org.springframework.boot
spring-boot-starter-data-redis
- 2.3.3.RELEASE
@@ -111,12 +92,6 @@
3.1.0
-
-
- com.alibaba
- fastjson
- 1.2.60
-
@@ -129,7 +104,6 @@
org.springframework.boot
spring-boot-starter-aop
- 2.3.3.RELEASE
@@ -150,7 +124,6 @@
org.springframework.boot
spring-boot-starter-amqp
- 2.1.4.RELEASE
@@ -178,33 +151,25 @@
org.springframework.boot
spring-boot-starter-websocket
- 2.3.3.RELEASE
-
-
-
- org.eclipse.jetty.websocket
- websocket-server
- 9.4.7.v20170914
org.springframework.boot
spring-boot-starter-data-mongodb
- 2.3.3.RELEASE
com.baomidou
mybatis-plus-boot-starter
- 3.3.0
+ ${mybatis-plus.version}
com.baomidou
mybatis-plus-generator
- 3.3.0
+ ${mybatis-plus.version}
@@ -218,7 +183,6 @@
org.springframework.boot
spring-boot-starter-mail
- 2.3.3.RELEASE
@@ -232,14 +196,25 @@
cn.hutool
hutool-all
- 5.6.3
+ 5.8.26
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-seata
org.springframework.cloud
spring-cloud-starter-openfeign
- 2.2.2.RELEASE
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
\ No newline at end of file
diff --git a/siam-common/src/main/java/com/siam/package_common/config/Swagger2Config.java b/siam-common/src/main/java/com/siam/package_common/config/Swagger2Config.java
index c188134..0a3a424 100644
--- a/siam-common/src/main/java/com/siam/package_common/config/Swagger2Config.java
+++ b/siam-common/src/main/java/com/siam/package_common/config/Swagger2Config.java
@@ -1,41 +1,21 @@
-//package com.siam.package_common.config;
-//
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.context.annotation.Configuration;
-//
-//import springfox.documentation.builders.ApiInfoBuilder;
-//import springfox.documentation.builders.PathSelectors;
-//import springfox.documentation.builders.RequestHandlerSelectors;
-//import springfox.documentation.service.ApiInfo;
-//import springfox.documentation.spi.DocumentationType;
-//import springfox.documentation.spring.web.plugins.Docket;
-//import springfox.documentation.swagger2.annotations.EnableSwagger2;
-//
-///**
-// * Swagger2接口文档配置类
-// **/
-//@Configuration
-//@EnableSwagger2
-//public class Swagger2Config {
-// @Bean
-// public Docket createRestApi() {
-// return new Docket(DocumentationType.SWAGGER_2)
-// .apiInfo(apiInfo())
-// .select()
-// .apis(RequestHandlerSelectors.basePackage("com.siam"))//扫描包路径
-// .paths(PathSelectors.any())
-// .build();
-// }
-//
-// //构建api文档的详细信息函数,注意这里的注解引用的是哪个
-// private ApiInfo apiInfo() {
-// return new ApiInfoBuilder()
-// //页面标题
-// .title("暹罗外卖接口文档")
-// //描述
-// .description("")
-// //版本号
-// .version("1.0")
-// .build();
-// }
-//}
\ No newline at end of file
+package com.siam.package_common.config;
+
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Swagger公共配置(被各服务自定义配置覆盖)
+ */
+@Configuration
+public class Swagger2Config {
+
+ @Bean
+ public OpenAPI customOpenAPI() {
+ return new OpenAPI()
+ .info(new Info()
+ .title("暹罗外卖API文档")
+ .version("1.0"));
+ }
+}
diff --git a/siam-common/src/main/java/com/siam/package_common/mod_websocket/WebSocketBaseServer.java b/siam-common/src/main/java/com/siam/package_common/mod_websocket/WebSocketBaseServer.java
index add8b81..3591a53 100644
--- a/siam-common/src/main/java/com/siam/package_common/mod_websocket/WebSocketBaseServer.java
+++ b/siam-common/src/main/java/com/siam/package_common/mod_websocket/WebSocketBaseServer.java
@@ -3,12 +3,12 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
-import javax.websocket.OnClose;
-import javax.websocket.OnMessage;
-import javax.websocket.OnOpen;
-import javax.websocket.Session;
-import javax.websocket.server.PathParam;
-import javax.websocket.server.ServerEndpoint;
+import jakarta.websocket.OnClose;
+import jakarta.websocket.OnMessage;
+import jakarta.websocket.OnOpen;
+import jakarta.websocket.Session;
+import jakarta.websocket.server.PathParam;
+import jakarta.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
diff --git a/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginAdmin.java b/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginAdmin.java
index 9d9e97c..54263ae 100644
--- a/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginAdmin.java
+++ b/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginAdmin.java
@@ -27,7 +27,7 @@
import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
@@ -48,38 +48,38 @@ public class SysLoginAdmin implements Serializable {
private static final long serialVersionUID = 1L;
- @ApiModelProperty(notes = "主键id")
+ @Schema(description = "主键id")
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "管理员用户名")
+ @Schema(description = "管理员用户名")
private String username;
- @ApiModelProperty(notes = "手机号")
+ @Schema(description = "手机号")
private String mobile;
- @ApiModelProperty(notes = "密码")
+ @Schema(description = "密码")
private String password;
- @ApiModelProperty(notes = "密码盐值")
+ @Schema(description = "密码盐值")
private String passwordSalt;
- @ApiModelProperty(notes = "昵称")
+ @Schema(description = "昵称")
private String nickname;
- @ApiModelProperty(notes = "权限")
+ @Schema(description = "权限")
private String roles;
- @ApiModelProperty(notes = "是否禁用 0=启用 1=禁用")
+ @Schema(description = "是否禁用 0=启用 1=禁用")
private Boolean isDisabled;
- @ApiModelProperty(notes = "注册时间")
+ @Schema(description = "注册时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
- @ApiModelProperty(notes = "最后登录时间")
+ @Schema(description = "最后登录时间")
private Date lastLoginTime;
/**
diff --git a/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginMerchant.java b/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginMerchant.java
index 185e6ed..8f9d45b 100644
--- a/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginMerchant.java
+++ b/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginMerchant.java
@@ -27,7 +27,7 @@
import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
@@ -49,50 +49,50 @@ public class SysLoginMerchant implements Serializable {
private static final long serialVersionUID = 1L;
- @ApiModelProperty(notes = "主键id")
+ @Schema(description = "主键id")
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "门店信息id")
+ @Schema(description = "门店信息id")
private Integer shopId;
- @ApiModelProperty(notes = "用户名称")
+ @Schema(description = "用户名称")
private String username;
- @ApiModelProperty(notes = "手机号码")
+ @Schema(description = "手机号码")
private String mobile;
- @ApiModelProperty(notes = "用户密码")
+ @Schema(description = "用户密码")
private String password;
- @ApiModelProperty(notes = "密码加盐")
+ @Schema(description = "密码加盐")
private String passwordSalt;
- @ApiModelProperty(notes = "昵称")
+ @Schema(description = "昵称")
private String nickname;
- @ApiModelProperty(notes = "权限")
+ @Schema(description = "权限")
private String roles;
- @ApiModelProperty(notes = "头像")
+ @Schema(description = "头像")
private String headImg;
- @ApiModelProperty(notes = "性别")
+ @Schema(description = "性别")
private Integer sex;
- @ApiModelProperty(notes = "邮箱")
+ @Schema(description = "邮箱")
private String email;
- @ApiModelProperty(notes = "证件类型")
+ @Schema(description = "证件类型")
private String certificateType;
- @ApiModelProperty(notes = "证件照片")
+ @Schema(description = "证件照片")
private String certificateImg;
- @ApiModelProperty(notes = "是否禁用 0=启用 1=禁用")
+ @Schema(description = "是否禁用 0=启用 1=禁用")
private Boolean isDisabled;
- @ApiModelProperty(notes = "是否删除 0=正常 1=删除")
+ @Schema(description = "是否删除 0=正常 1=删除")
private Boolean isDeleted;
private Integer auditStatus;
diff --git a/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginRider.java b/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginRider.java
index 1d1e67a..0f9d146 100644
--- a/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginRider.java
+++ b/siam-common/src/main/java/com/siam/package_common/pojo/login/SysLoginRider.java
@@ -27,7 +27,7 @@
import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
@@ -49,50 +49,50 @@ public class SysLoginRider implements Serializable {
private static final long serialVersionUID = 1L;
- @ApiModelProperty(notes = "主键id")
+ @Schema(description = "主键id")
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "门店信息id")
+ @Schema(description = "门店信息id")
private Integer shopId;
- @ApiModelProperty(notes = "用户名称")
+ @Schema(description = "用户名称")
private String username;
- @ApiModelProperty(notes = "手机号码")
+ @Schema(description = "手机号码")
private String mobile;
- @ApiModelProperty(notes = "用户密码")
+ @Schema(description = "用户密码")
private String password;
- @ApiModelProperty(notes = "密码加盐")
+ @Schema(description = "密码加盐")
private String passwordSalt;
- @ApiModelProperty(notes = "昵称")
+ @Schema(description = "昵称")
private String nickname;
- @ApiModelProperty(notes = "权限")
+ @Schema(description = "权限")
private String roles;
- @ApiModelProperty(notes = "头像")
+ @Schema(description = "头像")
private String headImg;
- @ApiModelProperty(notes = "性别")
+ @Schema(description = "性别")
private Integer sex;
- @ApiModelProperty(notes = "邮箱")
+ @Schema(description = "邮箱")
private String email;
- @ApiModelProperty(notes = "证件类型")
+ @Schema(description = "证件类型")
private String certificateType;
- @ApiModelProperty(notes = "证件照片")
+ @Schema(description = "证件照片")
private String certificateImg;
- @ApiModelProperty(notes = "是否禁用 0=启用 1=禁用")
+ @Schema(description = "是否禁用 0=启用 1=禁用")
private Boolean isDisabled;
- @ApiModelProperty(notes = "是否删除 0=正常 1=删除")
+ @Schema(description = "是否删除 0=正常 1=删除")
private Boolean isDeleted;
private Integer auditStatus;
diff --git a/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/MsgSendConfirmCallback.java b/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/MsgSendConfirmCallback.java
index e9fdcd2..ddecad3 100644
--- a/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/MsgSendConfirmCallback.java
+++ b/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/MsgSendConfirmCallback.java
@@ -10,18 +10,14 @@ public class MsgSendConfirmCallback implements RabbitTemplate.ConfirmCallback {
* 当消息发送到交换机(exchange)时,该方法被调用.
* 1.如果消息没有到exchange,则 ack=false
* 2.如果消息到达exchange,则 ack=true
- *
- * @return
*/
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
- log.debug("\nMsgSendConfirmCallBack , 回调id:" + correlationData);
+ log.debug("\nMsgSendConfirmCallBack, correlationData:{}", correlationData);
if (ack) {
log.debug("\n消息发送到exchange成功");
- // TODO 删除 msgId 与 Message 的关系
} else {
- log.debug("\n消息发送到exchange失败");
- // TODO 消息发送到exchange失败 , 重新发送
+ log.debug("\n消息发送到exchange失败, cause:{}", cause);
}
}
}
diff --git a/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/MsgSendReturnsCallback.java b/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/MsgSendReturnsCallback.java
index 6ea07cd..72bf492 100644
--- a/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/MsgSendReturnsCallback.java
+++ b/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/MsgSendReturnsCallback.java
@@ -1,22 +1,18 @@
package com.siam.package_common.rabbitmq_config;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.ReturnedMessage;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
@Slf4j
-public class MsgSendReturnsCallback implements RabbitTemplate.ReturnCallback {
+public class MsgSendReturnsCallback implements RabbitTemplate.ReturnsCallback {
/**
- * 当消息从交换机到队列失败时,该方法被调用。(若成功,则不调用)
- * 需要注意的是:该方法调用后,MsgSendConfirmCallBack中的confirm方法也会被调用,且ack = true
- *
- * @return
+ * 当消息从交换机到队列失败时,该方法被调用。
*/
@Override
- public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
- log.debug("\nMsgSendReturnCallback [消息从交换机到队列失败] message:"+message);
-
- // TODO 消息从交换机到队列失败,重新发送
+ public void returnedMessage(ReturnedMessage returned) {
+ log.debug("\nMsgSendReturnCallback [消息从交换机到队列失败] replyCode:{} replyText:{} exchange:{} routingKey:{} message:{}",
+ returned.getReplyCode(), returned.getReplyText(), returned.getExchange(), returned.getRoutingKey(), returned.getMessage());
}
}
diff --git a/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/RabbitMqConfig.java b/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/RabbitMqConfig.java
index 5db14d4..711a8f5 100644
--- a/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/RabbitMqConfig.java
+++ b/siam-common/src/main/java/com/siam/package_common/rabbitmq_config/RabbitMqConfig.java
@@ -64,7 +64,7 @@ public RabbitTemplate rabbitTemplate(){
* 可针对每次请求的消息去确定’mandatory’的boolean值,
* 只能在提供’return -callback’时使用,与mandatory互斥
*/
- rabbitTemplate.setReturnCallback(msgSendReturnsCallback());
+ rabbitTemplate.setReturnsCallback(msgSendReturnsCallback());
rabbitTemplate.setMandatory(true);
return rabbitTemplate;
}
diff --git a/siam-common/src/main/java/com/siam/package_common/service/AliyunSms.java b/siam-common/src/main/java/com/siam/package_common/service/AliyunSms.java
index e0fa7e7..ee73a6a 100644
--- a/siam-common/src/main/java/com/siam/package_common/service/AliyunSms.java
+++ b/siam-common/src/main/java/com/siam/package_common/service/AliyunSms.java
@@ -15,7 +15,7 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import java.util.Date;
import java.util.Random;
diff --git a/siam-common/src/main/java/com/siam/package_common/service/EmailService.java b/siam-common/src/main/java/com/siam/package_common/service/EmailService.java
index 6487a5c..82e3e4a 100644
--- a/siam-common/src/main/java/com/siam/package_common/service/EmailService.java
+++ b/siam-common/src/main/java/com/siam/package_common/service/EmailService.java
@@ -9,8 +9,8 @@
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
-import javax.mail.*;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.*;
+import jakarta.mail.internet.MimeMessage;
import java.io.File;
import java.io.IOException;
import java.net.HttpURLConnection;
diff --git a/siam-common/src/main/java/com/siam/package_common/util/CommonUtils.java b/siam-common/src/main/java/com/siam/package_common/util/CommonUtils.java
index 39fda23..9fa7776 100644
--- a/siam-common/src/main/java/com/siam/package_common/util/CommonUtils.java
+++ b/siam-common/src/main/java/com/siam/package_common/util/CommonUtils.java
@@ -2,7 +2,7 @@
import com.google.gson.JsonParser;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.net.InetAddress;
import java.net.UnknownHostException;
diff --git a/siam-common/src/main/java/com/siam/package_common/util/CookieUtils.java b/siam-common/src/main/java/com/siam/package_common/util/CookieUtils.java
index b0557dc..6149c9d 100644
--- a/siam-common/src/main/java/com/siam/package_common/util/CookieUtils.java
+++ b/siam-common/src/main/java/com/siam/package_common/util/CookieUtils.java
@@ -1,6 +1,6 @@
package com.siam.package_common.util;
-import javax.servlet.http.Cookie;
+import jakarta.servlet.http.Cookie;
/**
* Cookie工具类
diff --git a/siam-common/src/main/java/com/siam/package_common/util/ImageComposeUtils.java b/siam-common/src/main/java/com/siam/package_common/util/ImageComposeUtils.java
index e33c37a..6e079b0 100644
--- a/siam-common/src/main/java/com/siam/package_common/util/ImageComposeUtils.java
+++ b/siam-common/src/main/java/com/siam/package_common/util/ImageComposeUtils.java
@@ -4,10 +4,11 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import sun.font.FontDesignMetrics;
import javax.imageio.ImageIO;
import java.awt.*;
+import java.awt.font.FontRenderContext;
+import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.HttpURLConnection;
@@ -26,10 +27,6 @@ public class ImageComposeUtils {
/**
* 图片合成
- * @param mainImagePath 主图片路径
- * @param qrCodePath 二维码路径
- * @param savePath 图片合成保存路径
- * @return
*/
public void compoundImage(String mainImagePath, String qrCodePath, String savePath, String vipNo) throws IOException {
HttpURLConnection httpUrl = (HttpURLConnection) new URL(mainImagePath).openConnection();
@@ -39,28 +36,19 @@ public void compoundImage(String mainImagePath, String qrCodePath, String savePa
httpUrl_qrcode.connect();
try {
- //1、获取主图片
- BufferedImage big = ImageIO.read(httpUrl.getInputStream());//mainImagePath
- //2、拿到二维码
- BufferedImage erweima = ImageIO.read(httpUrl_qrcode.getInputStream());//qrCodePath
+ BufferedImage big = ImageIO.read(httpUrl.getInputStream());
+ BufferedImage erweima = ImageIO.read(httpUrl_qrcode.getInputStream());
int width = 1080;
int height = 1854;
Image image = big.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage bufferedImage2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
- //3、开始绘图
Graphics2D g = bufferedImage2.createGraphics();
g.drawImage(image, 0, 0, null);
g.drawImage(erweima, 320, 910, 460, 460, null);
- Font font = new Font("微软雅黑", Font.BOLD, 38);
+ Font font = new Font("SansSerif", Font.BOLD, 38);
g.setFont(font);
g.setPaint(Color.BLACK);
- //4、设置位置
- String text = vipNo; //合成图片上需要显示的文字
- int wordWidth = getWordWidth(font, text);
- int i = width / 2;
- int i1 = (i - wordWidth) / 2;
- int numWidth=i+i1;
-// g.drawString(text, numWidth-10, 310+28);
+ String text = vipNo;
g.drawString(text, 350, 850);
g.dispose();
@@ -68,98 +56,31 @@ public void compoundImage(String mainImagePath, String qrCodePath, String savePa
ImageIO.write(bufferedImage2, "png", os);
InputStream inputStream = new ByteArrayInputStream(os.toByteArray());
- //将太阳码上传到oss服务器上
ossUtils.uploadImage(inputStream, savePath);
} catch (Exception e) {
e.printStackTrace();
- }finally {
+ } finally {
httpUrl.disconnect();
httpUrl_qrcode.disconnect();
}
}
+ /**
+ * 获取字符串宽度(像素)
+ */
public int getWordWidth(Font font, String content) {
- FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
- int width = 0;
- for (int i = 0; i < content.length(); i++) {
- width += metrics.charWidth(content.charAt(i));
- }
- return width;
+ FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true);
+ return (int) font.getStringBounds(content, frc).getWidth();
}
- /**
- * 工具类
- * inputStream 转 File
- */
- public File inputStreamToFile(InputStream ins, String name) throws Exception{
+ public File inputStreamToFile(InputStream ins, String name) throws Exception {
File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);
if (file.exists()) {
return file;
}
- /*OutputStream os = new FileOutputStream(file);
- int bytesRead;
- int len = 8192;
- byte[] buffer = new byte[len];
- while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
- os.write(buffer, 0, bytesRead);
- }
- os.close();*/
ins.close();
return file;
}
-// /**
-// * 生成二维码
-// * @param backLink 扫码回调链接
-// * @param savePath 二维码保存路径
-// * @return 返回保存路径(用于保存数据库)
-// * @throws IOException
-// */
-// public static String createQRCode(String backLink,String savePath) throws IOException {
-// //计算二维码图片的高宽比
-// int v = 6;
-// int width = 67 + 12 * (v - 1);
-// int height = 67 + 12 * (v - 1);
-//
-// Map x = new HashMap();
-// x.put("setQrcodeErrorCorrect", 'L');
-// x.put("setQrcodeEncodeMode", 'B');//注意版本信息 N代表数字 、A代表 a-z,A-Z、B代表 其他)
-// x.put("setQrcodeVersion", v);
-//
-// byte[] d = backLink.getBytes("utf-8");//汉字转格式需要抛出异常
-//
-// //缓冲区
-// BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
-//
-// //绘图
-// Graphics2D gs = bufferedImage.createGraphics();
-//
-// gs.setBackground(Color.WHITE);
-// gs.setColor(Color.BLACK);
-// gs.clearRect(0, 0, width, height);
-//
-// //偏移量
-// int pixoff = 2;
-//
-// if (d.length > 0 && d.length < 120) {
-// boolean[][] s = x.calQrcode(d);
-//
-// for (int i = 0; i < s.length; i++) {
-// for (int j = 0; j < s.length; j++) {
-// if (s[j][i]) {
-// gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
-// }
-// }
-// }
-// }
-// gs.dispose();
-// bufferedImage.flush();
-// //设置图片格式,与输出的路径
-// String url = savePath;
-// ImageIO.write(bufferedImage, "png", new File(url));
-// System.out.println("二维码生成完毕");
-// return url;
-// }
-
-}
\ No newline at end of file
+}
diff --git a/siam-common/src/main/java/com/siam/package_common/util/PrintUtils.java b/siam-common/src/main/java/com/siam/package_common/util/PrintUtils.java
index 5ac46f1..9aa9a93 100644
--- a/siam-common/src/main/java/com/siam/package_common/util/PrintUtils.java
+++ b/siam-common/src/main/java/com/siam/package_common/util/PrintUtils.java
@@ -3,7 +3,7 @@
import com.alipay.api.domain.StudentInfo;
import javax.imageio.ImageIO;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.print.*;
diff --git a/siam-common/src/main/java/com/siam/package_common/util/StringUtils.java b/siam-common/src/main/java/com/siam/package_common/util/StringUtils.java
index ea29630..973c1be 100644
--- a/siam-common/src/main/java/com/siam/package_common/util/StringUtils.java
+++ b/siam-common/src/main/java/com/siam/package_common/util/StringUtils.java
@@ -3,7 +3,7 @@
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
diff --git a/siam-eureka/pom.xml b/siam-eureka/pom.xml
index b3ef12b..763e403 100644
--- a/siam-eureka/pom.xml
+++ b/siam-eureka/pom.xml
@@ -19,8 +19,6 @@
UTF-8
- 1.8
- 1.8
@@ -28,7 +26,6 @@
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
- 2.2.2.RELEASE
@@ -36,16 +33,19 @@
de.codecentric
spring-boot-admin-starter-client
- 2.3.0
net.logstash.logback
logstash-logback-encoder
- 6.6
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+
@@ -54,7 +54,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
com.siam.package_eureka.EurekaApplication
diff --git a/siam-gateway/pom.xml b/siam-gateway/pom.xml
new file mode 100644
index 0000000..9ef3aef
--- /dev/null
+++ b/siam-gateway/pom.xml
@@ -0,0 +1,77 @@
+
+
+
+ siam-parent
+ com.siam
+ 1.1
+ ../siam-parent/pom.xml
+
+ 4.0.0
+
+ siam-gateway
+ siam-gateway
+
+
+ UTF-8
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-gateway
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis-reactive
+
+
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ com.siam.package_gateway.GatewayApplication
+
+
+
+
+ repackage
+
+
+
+
+
+
+
diff --git a/siam-gateway/src/main/java/com/siam/package_gateway/GatewayApplication.java b/siam-gateway/src/main/java/com/siam/package_gateway/GatewayApplication.java
new file mode 100644
index 0000000..0ea4076
--- /dev/null
+++ b/siam-gateway/src/main/java/com/siam/package_gateway/GatewayApplication.java
@@ -0,0 +1,14 @@
+package com.siam.package_gateway;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+public class GatewayApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(GatewayApplication.class, args);
+ }
+}
diff --git a/siam-gateway/src/main/java/com/siam/package_gateway/filter/AuthGlobalFilter.java b/siam-gateway/src/main/java/com/siam/package_gateway/filter/AuthGlobalFilter.java
new file mode 100644
index 0000000..b04bb58
--- /dev/null
+++ b/siam-gateway/src/main/java/com/siam/package_gateway/filter/AuthGlobalFilter.java
@@ -0,0 +1,95 @@
+package com.siam.package_gateway.filter;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+/**
+ * 全局认证过滤器 - 检查token是否存在
+ * (具体的session验证由各业务服务自行处理)
+ */
+@Slf4j
+@Component
+public class AuthGlobalFilter implements GlobalFilter, Ordered {
+
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ ServerHttpRequest request = exchange.getRequest();
+ String uri = request.getURI().getPath();
+ String method = request.getMethod().name();
+
+ // OPTIONS请求直接放行(跨域预检)
+ if ("OPTIONS".equals(method)) {
+ return chain.filter(exchange);
+ }
+
+ // 登录、注册等公开路径放行
+ if (isPublicPath(uri)) {
+ return chain.filter(exchange);
+ }
+
+ // 从Header或参数中获取token
+ String token = extractToken(request);
+ if (token == null || token.isEmpty()) {
+ log.debug("Token missing for URI: {}", uri);
+ return unauthorizedResponse(exchange, "您暂未登录,请登陆后访问");
+ }
+
+ // Token存在,放行(具体验证由下游服务处理)
+ // 将token传递给下游服务
+ ServerHttpRequest mutatedRequest = request.mutate()
+ .header("X-Auth-Token", token)
+ .build();
+
+ return chain.filter(exchange.mutate().request(mutatedRequest).build());
+ }
+
+ private String extractToken(ServerHttpRequest request) {
+ // 先从Header获取
+ String token = request.getHeaders().getFirst("Authorization");
+ if (token != null && !token.isEmpty()) {
+ // 如果是Bearer格式,去掉前缀
+ if (token.startsWith("Bearer ")) {
+ token = token.substring(7);
+ }
+ return token;
+ }
+
+ // 从请求参数获取
+ return request.getQueryParams().getFirst("token");
+ }
+
+ private boolean isPublicPath(String uri) {
+ return uri.contains("/login")
+ || uri.contains("/register")
+ || uri.contains("/swagger")
+ || uri.contains("/v3/api-docs")
+ || uri.contains("/actuator")
+ || uri.contains("/notify")
+ || uri.contains("/callback")
+ || uri.contains("/pay")
+ || uri.contains("/Pay")
+ || uri.contains("/shop");
+ }
+
+ private Mono unauthorizedResponse(ServerWebExchange exchange, String message) {
+ exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
+ exchange.getResponse().getHeaders().add("Content-Type", "application/json;charset=UTF-8");
+ String body = "{\"success\":false,\"message\":\"" + message + "\"}";
+ byte[] bytes = body.getBytes(java.nio.charset.StandardCharsets.UTF_8);
+ return exchange.getResponse().writeWith(
+ Mono.just(exchange.getResponse().bufferFactory().wrap(bytes)));
+ }
+
+ @Override
+ public int getOrder() {
+ return -100;
+ }
+}
diff --git a/siam-gateway/src/main/java/com/siam/package_gateway/filter/RequestLogGlobalFilter.java b/siam-gateway/src/main/java/com/siam/package_gateway/filter/RequestLogGlobalFilter.java
new file mode 100644
index 0000000..3941d79
--- /dev/null
+++ b/siam-gateway/src/main/java/com/siam/package_gateway/filter/RequestLogGlobalFilter.java
@@ -0,0 +1,52 @@
+package com.siam.package_gateway.filter;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+/**
+ * 请求日志过滤器
+ */
+@Slf4j
+@Component
+public class RequestLogGlobalFilter implements GlobalFilter, Ordered {
+
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ ServerHttpRequest request = exchange.getRequest();
+ String method = request.getMethod().name();
+
+ // OPTIONS跨域预检请求不记录日志
+ if ("OPTIONS".equals(method)) {
+ return chain.filter(exchange);
+ }
+
+ // 记录请求开始时间
+ long startTime = System.currentTimeMillis();
+ exchange.getAttributes().put("REQUEST_START_TIME", startTime);
+
+ log.info("-------------------REQUEST-START-----------------");
+ log.info("URL: [{}]", request.getURI());
+ log.info("HTTP-METHOD: [{}]", method);
+ log.info("Content-type: [{}]", request.getHeaders().getContentType());
+
+ return chain.filter(exchange).doFinally(signalType -> {
+ Long startTimeAttr = exchange.getAttribute("REQUEST_START_TIME");
+ if (startTimeAttr != null) {
+ long duration = System.currentTimeMillis() - startTimeAttr;
+ log.info("Request Spend Time: [{}ms]", duration);
+ }
+ log.info("-------------------REQUEST-END-----------------");
+ });
+ }
+
+ @Override
+ public int getOrder() {
+ return -90;
+ }
+}
diff --git a/siam-gateway/src/main/java/com/siam/package_gateway/filter/ResponseLogGlobalFilter.java b/siam-gateway/src/main/java/com/siam/package_gateway/filter/ResponseLogGlobalFilter.java
new file mode 100644
index 0000000..4fbfdd0
--- /dev/null
+++ b/siam-gateway/src/main/java/com/siam/package_gateway/filter/ResponseLogGlobalFilter.java
@@ -0,0 +1,68 @@
+package com.siam.package_gateway.filter;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.core.io.buffer.DataBufferFactory;
+import org.springframework.core.io.buffer.DataBufferUtils;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.reactivestreams.Publisher;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 响应日志过滤器
+ */
+@Slf4j
+@Component
+public class ResponseLogGlobalFilter implements GlobalFilter, Ordered {
+
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ ServerHttpResponse originalResponse = exchange.getResponse();
+ DataBufferFactory bufferFactory = originalResponse.bufferFactory();
+
+ ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
+ @Override
+ public Mono writeWith(Publisher extends DataBuffer> body) {
+ if (body != null) {
+ Flux extends DataBuffer> fluxBody = Flux.from(body);
+ return super.writeWith(
+ fluxBody.map(dataBuffer -> {
+ byte[] content = new byte[dataBuffer.readableByteCount()];
+ dataBuffer.read(content);
+ DataBufferUtils.release(dataBuffer);
+
+ String responseBody = new String(content, StandardCharsets.UTF_8);
+ log.info("Response Content-type: [{}]", originalResponse.getHeaders().getContentType());
+
+ // 限制日志长度,避免过长
+ if (responseBody.length() > 2000) {
+ log.info("Response Body (truncated): \n[{}]", responseBody.substring(0, 2000) + "...");
+ } else {
+ log.info("Response Body: \n[{}]", responseBody);
+ }
+
+ return bufferFactory.wrap(content);
+ })
+ );
+ }
+ return super.writeWith(body);
+ }
+ };
+
+ return chain.filter(exchange.mutate().response(decoratedResponse).build());
+ }
+
+ @Override
+ public int getOrder() {
+ return -1;
+ }
+}
diff --git a/siam-gateway/src/main/resources/application.yml b/siam-gateway/src/main/resources/application.yml
new file mode 100644
index 0000000..b12207a
--- /dev/null
+++ b/siam-gateway/src/main/resources/application.yml
@@ -0,0 +1,108 @@
+server:
+ port: 8081
+
+spring:
+ application:
+ name: gateway-siam
+
+ cloud:
+ gateway:
+ discovery:
+ locator:
+ enabled: false # 不自动创建路由,使用手动配置
+ routes:
+ # 用户服务
+ - id: user-service
+ uri: lb://user-siam
+ predicates:
+ - Path=/api-user/**
+ filters:
+ - StripPrefix=1
+
+ # 商家服务
+ - id: merchant-service
+ uri: lb://merchant-siam
+ predicates:
+ - Path=/api-merchant/**
+ filters:
+ - StripPrefix=1
+
+ # 骑手服务
+ - id: rider-service
+ uri: lb://rider-siam
+ predicates:
+ - Path=/api-rider/**
+ filters:
+ - StripPrefix=1
+
+ # 商品服务
+ - id: goods-service
+ uri: lb://goods-siam
+ predicates:
+ - Path=/api-goods/**
+ filters:
+ - StripPrefix=1
+
+ # 订单服务
+ - id: order-service
+ uri: lb://order-siam
+ predicates:
+ - Path=/api-order/**
+ filters:
+ - StripPrefix=1
+
+ # 促销服务
+ - id: promotion-service
+ uri: lb://promotion-siam
+ predicates:
+ - Path=/api-promotion/**
+ filters:
+ - StripPrefix=1
+
+ # 商城服务
+ - id: mall-service
+ uri: lb://mall-siam
+ predicates:
+ - Path=/api-mall/**
+ filters:
+ - StripPrefix=1
+
+ # 工具服务
+ - id: util-service
+ uri: lb://util-siam
+ predicates:
+ - Path=/api-util/**
+ filters:
+ - StripPrefix=1
+
+ # 允许转发敏感头信息
+ default-filters: []
+
+ # 全局 CORS 配置(前后端联调)
+ globalcors:
+ corsConfigurations:
+ '[/**]':
+ allowedOriginPatterns: "*"
+ allowedMethods: "*"
+ allowedHeaders: "*"
+ allowCredentials: true
+ maxAge: 3600
+
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+
+# Actuator 监控
+management:
+ endpoints:
+ web:
+ exposure:
+ include: health,gateway
+ endpoint:
+ health:
+ show-details: ALWAYS
+
+logging:
+ level:
+ com.siam.package_gateway: DEBUG
+ org.springframework.cloud.gateway: DEBUG
diff --git a/siam-generator/kitty-common/pom.xml b/siam-generator/kitty-common/pom.xml
index bb3ba0d..d4d7cf7 100644
--- a/siam-generator/kitty-common/pom.xml
+++ b/siam-generator/kitty-common/pom.xml
@@ -6,8 +6,8 @@
org.springframework.boot
spring-boot-starter-parent
- 2.0.4.RELEASE
-
+ 3.2.5
+
com.louis
@@ -20,7 +20,7 @@
UTF-8
UTF-8
- 1.8
+ 17
diff --git a/siam-generator/kitty-core/pom.xml b/siam-generator/kitty-core/pom.xml
index 150ea0c..ddb3eb6 100644
--- a/siam-generator/kitty-core/pom.xml
+++ b/siam-generator/kitty-core/pom.xml
@@ -6,10 +6,10 @@
org.springframework.boot
spring-boot-starter-parent
- 2.0.4.RELEASE
-
+ 3.2.5
+
-
+
com.louis
kitty-core
jar
@@ -20,10 +20,10 @@
UTF-8
UTF-8
- 1.8
- 1.2.5
+ 17
+ 2.1.0
-
+
@@ -37,5 +37,5 @@
1.0.0
-
+
diff --git a/siam-generator/kitty-dbms/pom.xml b/siam-generator/kitty-dbms/pom.xml
index fe9311b..d1dfa49 100644
--- a/siam-generator/kitty-dbms/pom.xml
+++ b/siam-generator/kitty-dbms/pom.xml
@@ -6,15 +6,15 @@
org.springframework.boot
spring-boot-starter-parent
- 2.0.4.RELEASE
-
+ 3.2.5
+
com.louis
kitty-dbms
${project.version}
jar
-
+
kitty-dbms
kitty-dbms
@@ -22,9 +22,8 @@
UTF-8
UTF-8
1.0.0
- 1.8
- 2.8.0
- 1.3.2
+ 17
+ 3.0.3
@@ -35,16 +34,17 @@
- mysql
- mysql-connector-java
+ com.mysql
+ mysql-connector-j
- dom4j
+ org.dom4j
dom4j
+ 2.1.4
-
+
diff --git a/siam-generator/kitty-generator-pom/pom.xml b/siam-generator/kitty-generator-pom/pom.xml
index 4cf3759..8afaf68 100644
--- a/siam-generator/kitty-generator-pom/pom.xml
+++ b/siam-generator/kitty-generator-pom/pom.xml
@@ -6,15 +6,15 @@
org.springframework.boot
spring-boot-starter-parent
- 2.0.4.RELEASE
-
+ 3.2.5
+
com.louis
kitty-generator-pom
${project.version}
pom
-
+
kitty-generator-pom
kitty-generator-pom
@@ -22,7 +22,7 @@
UTF-8
UTF-8
1.0.0
- 1.8
+ 17
diff --git a/siam-generator/kitty-generator/pom.xml b/siam-generator/kitty-generator/pom.xml
index 062cca6..5fd9800 100644
--- a/siam-generator/kitty-generator/pom.xml
+++ b/siam-generator/kitty-generator/pom.xml
@@ -6,15 +6,15 @@
org.springframework.boot
spring-boot-starter-parent
- 2.0.4.RELEASE
-
+ 3.2.5
+
com.louis
kitty-generator
${project.version}
- war
-
+ jar
+
kitty-generator
kitty-generator
@@ -22,10 +22,10 @@
UTF-8
UTF-8
1.0.0
- 1.8
- 2.8.0
- 1.3.2
- 1.2.48
+ 17
+ 2.5.0
+ 3.0.3
+ 2.0.48
1.1.68.RELEASE
@@ -35,16 +35,11 @@
org.springframework.boot
spring-boot-starter-web
-
-
- io.springfox
- springfox-swagger2
- ${swagger.version}
-
+
- io.springfox
- springfox-swagger-ui
- ${swagger.version}
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ ${springdoc.version}
@@ -54,10 +49,10 @@
- mysql
- mysql-connector-java
+ com.mysql
+ mysql-connector-j
-
+
com.alibaba
fastjson
@@ -79,14 +74,8 @@
kitty-dbms
1.0.0
-
-
-
-
-
-
-
+
diff --git a/siam-generator/kitty-generator/src/main/java/com/louis/kitty/generator/config/SwaggerConfig.java b/siam-generator/kitty-generator/src/main/java/com/louis/kitty/generator/config/SwaggerConfig.java
index ac7d5ae..3ca2c9b 100644
--- a/siam-generator/kitty-generator/src/main/java/com/louis/kitty/generator/config/SwaggerConfig.java
+++ b/siam-generator/kitty-generator/src/main/java/com/louis/kitty/generator/config/SwaggerConfig.java
@@ -1,27 +1,18 @@
package com.louis.kitty.generator.config;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-/**
- * Swagger配置
- * @author Louis
- * @date Nov 9, 2018
- */
@Configuration
-@EnableSwagger2
public class SwaggerConfig {
-
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.SWAGGER_2).select()
- .apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build();
- }
-
+
+ @Bean
+ public OpenAPI customOpenAPI() {
+ return new OpenAPI()
+ .info(new Info()
+ .title("代码生成器API")
+ .version("1.0"));
+ }
}
diff --git a/siam-generator/kitty-generator/src/main/java/com/louis/kitty/generator/controller/GenerateController.java b/siam-generator/kitty-generator/src/main/java/com/louis/kitty/generator/controller/GenerateController.java
index fdf168a..13551c3 100644
--- a/siam-generator/kitty-generator/src/main/java/com/louis/kitty/generator/controller/GenerateController.java
+++ b/siam-generator/kitty-generator/src/main/java/com/louis/kitty/generator/controller/GenerateController.java
@@ -11,7 +11,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
diff --git a/siam-generator/pom.xml b/siam-generator/pom.xml
index 07dcfd6..58e828f 100644
--- a/siam-generator/pom.xml
+++ b/siam-generator/pom.xml
@@ -13,8 +13,8 @@
UTF-8
- 1.8
- 1.8
+ 17
+ 17
diff --git a/siam-goods/goods-api/pom.xml b/siam-goods/goods-api/pom.xml
index 3f5369d..db0786c 100644
--- a/siam-goods/goods-api/pom.xml
+++ b/siam-goods/goods-api/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
@@ -25,7 +23,6 @@
org.springframework.boot
spring-boot-starter-data-elasticsearch
- 2.1.4.RELEASE
@@ -37,7 +34,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
exec
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Goods.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Goods.java
index 1514cf9..56c0bcb 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Goods.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Goods.java
@@ -4,8 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@@ -13,7 +12,7 @@
@Data
@TableName("tb_goods")
-@ApiModel(value = "商品表")
+ @Schema(description= "商品表")
public class Goods {
/**
@@ -38,83 +37,83 @@ public class Goods {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "店铺id")
+ @Schema(description = "店铺id")
private Integer shopId;
- @ApiModelProperty(notes = "商品名称")
+ @Schema(description = "商品名称")
private String name;
- @ApiModelProperty(notes = "商品主图")
+ @Schema(description = "商品主图")
private String mainImage;
- @ApiModelProperty(notes = "商品子图")
+ @Schema(description = "商品子图")
private String subImages;
- @ApiModelProperty(notes = "商品详情")
+ @Schema(description = "商品详情")
private String detail;
- @ApiModelProperty(notes = "详情图片")
+ @Schema(description = "详情图片")
private String detailImages;
- @ApiModelProperty(notes = "一口价")
+ @Schema(description = "一口价")
private BigDecimal price;
- @ApiModelProperty(notes = "库存")
+ @Schema(description = "库存")
private Integer stock;
- @ApiModelProperty(notes = "是否热门")
+ @Schema(description = "是否热门")
private Boolean isHot;
- @ApiModelProperty(notes = "是否新品")
+ @Schema(description = "是否新品")
private Boolean isNew;
- @ApiModelProperty(notes = "状态 1=上架 2=下架")
+ @Schema(description = "状态 1=上架 2=下架")
private Integer status;
- @ApiModelProperty(notes = "是否开启促销 0-否 1-是")
+ @Schema(description = "是否开启促销 0-否 1-是")
private Boolean isSale;
- @ApiModelProperty(notes = "折扣价")
+ @Schema(description = "折扣价")
private BigDecimal salePrice;
- @ApiModelProperty(notes = "月销量")
+ @Schema(description = "月销量")
private Integer monthlySales;
- @ApiModelProperty(notes = "累计销量")
+ @Schema(description = "累计销量")
private Integer totalSales;
- @ApiModelProperty(notes = "累计评价")
+ @Schema(description = "累计评价")
private Integer totalComments;
- @ApiModelProperty(notes = "优惠名称")
+ @Schema(description = "优惠名称")
private String preferentialName;
- @ApiModelProperty(notes = "包装费")
+ @Schema(description = "包装费")
private BigDecimal packingCharges;
- @ApiModelProperty(notes = "制作时长(分钟)")
+ @Schema(description = "制作时长(分钟)")
private BigDecimal productTime;
- @ApiModelProperty(notes = "兑换商品所需积分数量")
+ @Schema(description = "兑换商品所需积分数量")
private Integer exchangePoints;
- @ApiModelProperty(notes = "排序号")
+ @Schema(description = "排序号")
private Integer sortNumber;
- @ApiModelProperty(notes = "打印机id(多个用逗号隔开)")
+ @Schema(description = "打印机id(多个用逗号隔开)")
private String printerId;
- @ApiModelProperty(notes = "打印次数")
+ @Schema(description = "打印次数")
private Integer printNum;
- @ApiModelProperty(notes = "单位id")
+ @Schema(description = "单位id")
private Long unitId;
private String unitName;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
}
\ No newline at end of file
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsAccessories.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsAccessories.java
index e122562..c03c9ee 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsAccessories.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsAccessories.java
@@ -3,8 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@@ -12,31 +11,31 @@
@Data
@TableName("tb_goods_accessories")
-@ApiModel(value = "商品辅料表")
+ @Schema(description= "商品辅料表")
public class GoodsAccessories {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "辅料名称")
+ @Schema(description = "辅料名称")
private String name;
- @ApiModelProperty(notes = "辅料主图")
+ @Schema(description = "辅料主图")
private String mainImage;
- @ApiModelProperty(notes = "辅料描述")
+ @Schema(description = "辅料描述")
private String description;
- @ApiModelProperty(notes = "单价")
+ @Schema(description = "单价")
private BigDecimal price;
- @ApiModelProperty(notes = "库存 1=有货 2=无货")
+ @Schema(description = "库存 1=有货 2=无货")
private Integer stock;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
//页码
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsRawmaterialRelation.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsRawmaterialRelation.java
index d6054b6..09dd52e 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsRawmaterialRelation.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsRawmaterialRelation.java
@@ -3,8 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@@ -12,25 +11,25 @@
@Data
@TableName("tb_goods_rawmaterial_relation")
-@ApiModel(value = "原料配比表/商品原料关联表")
+ @Schema(description= "原料配比表/商品原料关联表")
public class GoodsRawmaterialRelation {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "商品id")
+ @Schema(description = "商品id")
private Integer goodsId;
- @ApiModelProperty(notes = "原料id")
+ @Schema(description = "原料id")
private Integer rawmaterialId;
- @ApiModelProperty(notes = "耗量")
+ @Schema(description = "耗量")
private BigDecimal consumedQuantity;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
private String goodsName;
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsSpecification.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsSpecification.java
index e7cc840..1f15867 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsSpecification.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsSpecification.java
@@ -3,33 +3,32 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Data
@TableName("tb_goods_specification")
-@ApiModel(value = "商品规格表")
+ @Schema(description= "商品规格表")
public class GoodsSpecification {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "商品id")
+ @Schema(description = "商品id")
private Integer goodsId;
- @ApiModelProperty(notes = "商品规格名称")
+ @Schema(description = "商品规格名称")
private String name;
- @ApiModelProperty(notes = "排序号")
+ @Schema(description = "排序号")
private Integer sortNumber;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
//页码
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsSpecificationOption.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsSpecificationOption.java
index bcb48d4..df62e92 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsSpecificationOption.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/GoodsSpecificationOption.java
@@ -3,8 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@@ -13,7 +12,7 @@
@Data
@TableName("tb_goods_specification_option")
-@ApiModel(value = "商品规格选项表")
+ @Schema(description= "商品规格选项表")
public class GoodsSpecificationOption {
List ids;
@@ -21,28 +20,28 @@ public class GoodsSpecificationOption {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "商品id")
+ @Schema(description = "商品id")
private Integer goodsId;
- @ApiModelProperty(notes = "商品规格id")
+ @Schema(description = "商品规格id")
private Integer goodsSpecificationId;
- @ApiModelProperty(notes = "商品商品规格选项名称")
+ @Schema(description = "商品商品规格选项名称")
private String name;
- @ApiModelProperty(notes = "单价/加价金额")
+ @Schema(description = "单价/加价金额")
private BigDecimal price;
- @ApiModelProperty(notes = "库存 1=有货 2=无货")
+ @Schema(description = "库存 1=有货 2=无货")
private Integer stock;
- @ApiModelProperty(notes = "排序号")
+ @Schema(description = "排序号")
private Integer sortNumber;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Menu.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Menu.java
index 95326ce..071188b 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Menu.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Menu.java
@@ -3,8 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@@ -12,28 +11,28 @@
@Data
@TableName("tb_menu")
-@ApiModel(value = "菜单分类表")
+ @Schema(description= "菜单分类表")
public class Menu {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "店铺id")
+ @Schema(description = "店铺id")
private Integer shopId;
- @ApiModelProperty(notes = "菜单分类名称")
+ @Schema(description = "菜单分类名称")
private String name;
- @ApiModelProperty(notes = "菜单分类描述")
+ @Schema(description = "菜单分类描述")
private String description;
- @ApiModelProperty(notes = "排序号")
+ @Schema(description = "排序号")
private Integer sortNumber;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
//页码
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/MenuGoodsRelation.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/MenuGoodsRelation.java
index c971c4f..52bf341 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/MenuGoodsRelation.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/MenuGoodsRelation.java
@@ -3,30 +3,29 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Data
@TableName("tb_menu_goods_relation")
-@ApiModel(value = "菜单分类商品关系表(多对多)")
+ @Schema(description= "菜单分类商品关系表(多对多)")
public class MenuGoodsRelation {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "菜单分类id")
+ @Schema(description = "菜单分类id")
private Integer menuId;
- @ApiModelProperty(notes = "商品id")
+ @Schema(description = "商品id")
private Integer goodsId;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
//页码
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Rawmaterial.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Rawmaterial.java
index cd45f46..fa88e9e 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Rawmaterial.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/Rawmaterial.java
@@ -3,8 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@@ -12,40 +11,40 @@
@Data
@TableName("tb_rawmaterial")
-@ApiModel(value = "原料表")
+ @Schema(description= "原料表")
public class Rawmaterial {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "原料名称")
+ @Schema(description = "原料名称")
private String name;
- @ApiModelProperty(notes = "原料主图")
+ @Schema(description = "原料主图")
private String mainImage;
- @ApiModelProperty(notes = "原料描述")
+ @Schema(description = "原料描述")
private String description;
- @ApiModelProperty(notes = "采购单位")
+ @Schema(description = "采购单位")
private String unit;
- @ApiModelProperty(notes = "采购单价")
+ @Schema(description = "采购单价")
private BigDecimal price;
- @ApiModelProperty(notes = "库存")
+ @Schema(description = "库存")
private BigDecimal stock;
- @ApiModelProperty(notes = "库存过低线/库存下限")
+ @Schema(description = "库存过低线/库存下限")
private BigDecimal stockLowerLimit;
- @ApiModelProperty(notes = "库存超出线/库存上限")
+ @Schema(description = "库存超出线/库存上限")
private BigDecimal stockUpperLimit;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
//页码
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/ShoppingCart.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/ShoppingCart.java
index 3729e2a..8a9f49f 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/ShoppingCart.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/ShoppingCart.java
@@ -4,8 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@@ -13,7 +12,7 @@
@Data
@TableName("tb_shopping_cart")
-@ApiModel(value = "购物车表")
+ @Schema(description= "购物车表")
public class ShoppingCart {
//加减操作
@@ -26,28 +25,28 @@ public class ShoppingCart {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "用户id")
+ @Schema(description = "用户id")
private Integer memberId;
- @ApiModelProperty(notes = "商品id")
+ @Schema(description = "商品id")
private Integer goodsId;
- @ApiModelProperty(notes = "店铺id")
+ @Schema(description = "店铺id")
private Integer shopId;
- @ApiModelProperty(notes = "商品规格 JSON格式")
+ @Schema(description = "商品规格 JSON格式")
private String specList;
- @ApiModelProperty(notes = "购买数量")
+ @Schema(description = "购买数量")
private Integer number;
- @ApiModelProperty(notes = "商品是否有效 0=无效 1=有效")
+ @Schema(description = "商品是否有效 0=无效 1=有效")
private Boolean isGoodsExists;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
//页码
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/internal/MemberGoodsCollect.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/internal/MemberGoodsCollect.java
index 70f76a6..783c5a4 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/internal/MemberGoodsCollect.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/entity/internal/MemberGoodsCollect.java
@@ -2,8 +2,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@@ -11,7 +10,7 @@
@Data
@TableName("tb_member_goods_collect")
-@ApiModel(value = "用户收藏表")
+ @Schema(description= "用户收藏表")
public class MemberGoodsCollect {
List goodsIdList;
@@ -19,25 +18,25 @@ public class MemberGoodsCollect {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "用户id")
+ @Schema(description = "用户id")
private Integer memberId;
- @ApiModelProperty(notes = "店铺id")
+ @Schema(description = "店铺id")
private Integer shopId;
- @ApiModelProperty(notes = "商品id")
+ @Schema(description = "商品id")
private Integer goodsId;
- @ApiModelProperty(notes = "商品是否有效 0=无效 1=有效")
+ @Schema(description = "商品是否有效 0=无效 1=有效")
private Boolean isGoodsExists;
- @ApiModelProperty(notes = "商品是否购买 0=未购买 1=已购买")
+ @Schema(description = "商品是否购买 0=未购买 1=已购买")
private Boolean isBuy;
- @ApiModelProperty(notes = "收藏类型 1=外卖自提 2=积分商城")
+ @Schema(description = "收藏类型 1=外卖自提 2=积分商城")
private Integer type;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
public Integer getId() {
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/feign/GoodsFeignApi.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/feign/GoodsFeignApi.java
index 9b648f7..275284a 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/feign/GoodsFeignApi.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/feign/GoodsFeignApi.java
@@ -41,4 +41,16 @@ public interface GoodsFeignApi {
@PostMapping(value = "/api/goods/selectByExample")
BasicResult> selectByExample(@RequestBody GoodsParam param);
+
+ /**
+ * 减少商品库存(CAS原子操作)
+ */
+ @PostMapping(value = "/api/goods/decreaseStock")
+ BasicResult decreaseStock(@RequestParam("id") Integer id, @RequestParam("number") Integer number);
+
+ /**
+ * 增加商品库存(CAS原子操作)
+ */
+ @PostMapping(value = "/api/goods/increaseStock")
+ BasicResult increaseStock(@RequestParam("id") Integer id, @RequestParam("number") Integer number);
}
\ No newline at end of file
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsMenuDto.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsMenuDto.java
index 9948c65..d8f67fa 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsMenuDto.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsMenuDto.java
@@ -1,25 +1,25 @@
package com.siam.package_goods.model.dto;
import com.siam.package_goods.entity.Goods;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Date;
public class GoodsMenuDto extends Goods {
- @ApiModelProperty(notes = "菜单id")
+ @Schema(description = "菜单id")
private Integer menuId;
- @ApiModelProperty(notes = "菜单名称")
+ @Schema(description = "菜单名称")
private String menuName;
- @ApiModelProperty(notes = "指定查询状态为 2=已上架 4=售罄 的商品")
+ @Schema(description = "指定查询状态为 2=已上架 4=售罄 的商品")
private Boolean goodsStatusIn2And4;
- @ApiModelProperty(notes = "开始时间")
+ @Schema(description = "开始时间")
private Date startTime;
- @ApiModelProperty(notes = "结束时间")
+ @Schema(description = "结束时间")
private Date endTime;
public Integer getMenuId() {
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationDto.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationDto.java
index fd9d277..e510dda 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationDto.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationDto.java
@@ -1,27 +1,27 @@
package com.siam.package_goods.model.dto;
import com.siam.package_goods.entity.Goods;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.math.BigDecimal;
public class GoodsSpecificationDto extends Goods {
- @ApiModelProperty(notes = "规格id")
+ @Schema(description = "规格id")
private Integer specificationId;
- @ApiModelProperty(notes = "规格名称")
+ @Schema(description = "规格名称")
private String specificationName;
- @ApiModelProperty(notes = "商品规格选项id")
+ @Schema(description = "商品规格选项id")
private Integer specificationOptionId;
- @ApiModelProperty(notes = "商品规格选项名称")
+ @Schema(description = "商品规格选项名称")
private String specificationOptionName;
- @ApiModelProperty(notes = "商品规格选项单价/加价金额")
+ @Schema(description = "商品规格选项单价/加价金额")
private BigDecimal specificationOptionPrice;
- @ApiModelProperty(notes = "商品规格选项库存 1代表有货,0代表无货")
+ @Schema(description = "商品规格选项库存 1代表有货,0代表无货")
private Integer specificationOptionStock;
public Integer getSpecificationId() {
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationDto11.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationDto11.java
index 325ea90..eeaa58a 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationDto11.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationDto11.java
@@ -1,13 +1,13 @@
package com.siam.package_goods.model.dto;
import com.siam.package_goods.entity.GoodsSpecification;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
public class GoodsSpecificationDto11 extends GoodsSpecification {
- @ApiModelProperty(notes = "商品名称")
+ @Schema(description = "商品名称")
private String goodsName;
- @ApiModelProperty(notes = "商品主图")
+ @Schema(description = "商品主图")
private String goodsMainImage;
public String getGoodsName() {
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationOptionDto.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationOptionDto.java
index a44e58d..85097ad 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationOptionDto.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/GoodsSpecificationOptionDto.java
@@ -1,19 +1,19 @@
package com.siam.package_goods.model.dto;
import com.siam.package_goods.entity.GoodsSpecificationOption;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.math.BigDecimal;
import java.util.List;
public class GoodsSpecificationOptionDto extends GoodsSpecificationOption {
- @ApiModelProperty(notes = "规格名称")
+ @Schema(description = "规格名称")
private String specificationName;
- @ApiModelProperty(notes = "商品名称")
+ @Schema(description = "商品名称")
private String goodsName;
- @ApiModelProperty(notes = "商品主图")
+ @Schema(description = "商品主图")
private String goodsMainImage;
List ids;
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/internal/MemberGoodsCollectDto.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/internal/MemberGoodsCollectDto.java
index 1f1110b..b5faa95 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/internal/MemberGoodsCollectDto.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/dto/internal/MemberGoodsCollectDto.java
@@ -1,14 +1,14 @@
package com.siam.package_goods.model.dto.internal;
import com.siam.package_goods.entity.internal.MemberGoodsCollect;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableField;
@Data
public class MemberGoodsCollectDto extends MemberGoodsCollect {
- @ApiModelProperty(notes = "商品名称")
+ @Schema(description = "商品名称")
private String goodsName;
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/param/GoodsParam.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/param/GoodsParam.java
index 3f4c88f..081c342 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/param/GoodsParam.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/param/GoodsParam.java
@@ -4,7 +4,7 @@
import com.siam.package_goods.entity.Goods;
import lombok.Data;
-import javax.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;
diff --git a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/param/SearchParam.java b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/param/SearchParam.java
index c787d3a..7f4660e 100644
--- a/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/param/SearchParam.java
+++ b/siam-goods/goods-api/src/main/java/com/siam/package_goods/model/param/SearchParam.java
@@ -2,7 +2,7 @@
import lombok.Data;
-import javax.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotBlank;
@Data
public class SearchParam {
diff --git a/siam-goods/goods-provider/pom.xml b/siam-goods/goods-provider/pom.xml
index 4d729e5..76b0a54 100644
--- a/siam-goods/goods-provider/pom.xml
+++ b/siam-goods/goods-provider/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
@@ -102,54 +100,42 @@
org.springframework.boot
spring-boot-starter-data-elasticsearch
- 2.1.4.RELEASE
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
- 2.1.2.RELEASE
-
-
-
+
com.alibaba.cloud
- spring-cloud-starter-alibaba-seata
- 2021.1
-
-
- io.seata
- seata-spring-boot-starter
-
-
+ spring-cloud-starter-alibaba-nacos-discovery
+
- io.seata
- seata-spring-boot-starter
- 1.3.0
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-actuator
- 2.3.3.RELEASE
io.micrometer
micrometer-registry-prometheus
- 1.5.4
net.logstash.logback
logstash-logback-encoder
- 6.6
+
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
@@ -159,7 +145,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
com.siam.package_goods.GoodsApplication
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/GoodsApplication.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/GoodsApplication.java
index 6156cba..c28aaad 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/GoodsApplication.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/GoodsApplication.java
@@ -1,16 +1,20 @@
package com.siam.package_goods;
-import org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@EnableFeignClients("com.siam")
-@EnableEurekaClient
-@SpringBootApplication(scanBasePackages = "com.siam", exclude = {RocketMQAutoConfiguration.class})
+@EnableDiscoveryClient
+@SpringBootApplication(scanBasePackages = "com.siam", exclude = {
+ MongoAutoConfiguration.class,
+ MongoDataAutoConfiguration.class
+})
@MapperScan(basePackages = {"com.siam.**.mapper"})
public class GoodsApplication
{
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/config/MybatisPlusConfig.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/config/MybatisPlusConfig.java
index 0d9b7a1..16f53a7 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/config/MybatisPlusConfig.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/config/MybatisPlusConfig.java
@@ -1,6 +1,8 @@
package com.siam.package_goods.config;
-import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -19,8 +21,11 @@ public class MybatisPlusConfig {
* 分页插件
*/
@Bean
- public PaginationInterceptor paginationInterceptor() {
- return new PaginationInterceptor();
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
+ interceptor.addInnerInterceptor(paginationInnerInterceptor);
+ return interceptor;
}
}
\ No newline at end of file
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/config/Swagger2Config.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/config/Swagger2Config.java
deleted file mode 100644
index 715019d..0000000
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/config/Swagger2Config.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.siam.package_goods.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class Swagger2Config {
-
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.SWAGGER_2)
- .apiInfo(apiInfo())
- .select()
- .apis(RequestHandlerSelectors.basePackage("com.siam"))//扫描包路径
- .paths(PathSelectors.any())
- .build();
- }
-
- // 构建api文档的详细信息函数,注意这里的注解引用的是哪个
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title("暹罗外卖-商品服务接口文档")//页面标题
- .description("")//描述
- .version("1.0")//版本号
- .build();
- }
-}
\ No newline at end of file
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsAccessoriesController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsAccessoriesController.java
index ca9e6f9..2336a8a 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsAccessoriesController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsAccessoriesController.java
@@ -8,8 +8,9 @@
import com.siam.package_goods.service.GoodsAccessoriesService;
import com.siam.package_goods.model.example.GoodsSpecificationOptionExample;
import com.siam.package_goods.service.GoodsSpecificationOptionService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -20,7 +21,7 @@
@RestController
@RequestMapping(value = "/rest/admin/goodsAccessories")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台商品辅料模块相关接口", description = "AdminGoodsAccessoriesController")
+@Tag(name = "后台商品辅料模块相关接口", description = "AdminGoodsAccessoriesController")
public class AdminGoodsAccessoriesController {
@Autowired
@@ -29,7 +30,7 @@ public class AdminGoodsAccessoriesController {
@Autowired
private GoodsSpecificationOptionService goodsSpecificationOptionService;
- @ApiOperation(value = "商品辅料列表")
+ @Operation(summary = "商品辅料列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsAccessories param){
BasicData basicResult = new BasicData();
@@ -38,7 +39,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) GoodsAccessories par
return BasicResult.success(page);
}
- @ApiOperation(value = "新增商品辅料")
+ @Operation(summary = "新增商品辅料")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) GoodsAccessories param){
BasicResult basicResult = new BasicResult();
@@ -54,7 +55,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) GoodsAccessories p
}
- @ApiOperation(value = "修改商品辅料")
+ @Operation(summary = "修改商品辅料")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) GoodsAccessories param){
BasicResult basicResult = new BasicResult();
@@ -73,7 +74,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) GoodsAccessories p
}
- @ApiOperation(value = "删除商品辅料")
+ @Operation(summary = "删除商品辅料")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) GoodsAccessories param){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsController.java
index e6a21ac..4719992 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsController.java
@@ -17,10 +17,26 @@
//import com.siam.package_promotion.entity.CouponsGoodsRelation;
//import com.siam.package_promotion.feign.CouponsFeignApi;
//import com.siam.package_promotion.feign.CouponsGoodsRelationFeignApi;
-//import io.swagger.annotations.Api;
-//import io.swagger.annotations.ApiImplicitParam;
-//import io.swagger.annotations.ApiImplicitParams;
-//import io.swagger.annotations.ApiOperation;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//import org.springframework.beans.factory.annotation.Autowired;
@@ -29,7 +45,7 @@
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//
-//import javax.servlet.http.HttpServletResponse;
+//import jakarta.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
@@ -40,7 +56,7 @@
//@RestController
//@RequestMapping(value = "/rest/admin/goods")
//@Transactional(rollbackFor = Exception.class)
-//@Api(tags = "后台商品模块相关接口", description = "AdminGoodsController")
+//@Tag(name = "后台商品模块相关接口", description = "AdminGoodsController")
//public class AdminGoodsController {
// @Autowired
// private GoodsService goodsService;
@@ -69,7 +85,7 @@
// @Autowired
// private CouponsGoodsRelationFeignApi couponsGoodsRelationFeignApi;
//
-// @ApiOperation(value = "商品列表")
+// @Operation(summary = "商品列表")
// @PostMapping(value = "/list")
// public BasicResult list(@RequestBody @Validated(value = {}) GoodsMenuDto param){
// BasicData basicResult = new BasicData();
@@ -80,7 +96,7 @@
// }
//
//
-// @ApiOperation(value = "新增商品")
+// @Operation(summary = "新增商品")
// @PostMapping(value = "/insert")
// public BasicResult insert(@RequestBody @Validated(value = {}) GoodsMenuDto param){
// BasicResult basicResult = new BasicResult();
@@ -141,7 +157,7 @@
// return basicResult;
// }
//
-// @ApiOperation(value = "修改商品")
+// @Operation(summary = "修改商品")
// @PostMapping(value = "/update")
// public BasicResult update(@RequestBody @Validated(value = {}) GoodsMenuDto param){
// BasicResult basicResult = new BasicResult();
@@ -185,7 +201,7 @@
// return basicResult;
// }
//
-// @ApiOperation(value = "删除商品")
+// @Operation(summary = "删除商品")
// @PostMapping(value = "/delete")
// public BasicResult delete(@RequestBody @Validated(value = {}) GoodsMenuDto param){
// BasicResult basicResult = new BasicResult();
@@ -223,7 +239,7 @@
// return basicResult;
// }
//
-// @ApiOperation(value = "导入商品Excel报表")
+// @Operation(summary = "导入商品Excel报表")
// @PostMapping(value = "/import")
// public BasicResult importGoods(@RequestParam(value = "file", required = true) MultipartFile file){
// BasicResult basicResult = new BasicResult();
@@ -266,12 +282,8 @@
// return basicResult;
// }
//
-// @ApiOperation(value = "导出商品Excel报表")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
-// @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
-// })
-// @GetMapping(value = "/export")
+// @Operation(summary = "导出商品Excel报表")
+//// @GetMapping(value = "/export")
// public void exportGoods(int pageNo, int pageSize, Goods goods, HttpServletResponse response){
// try {
// // 生成Excel数据
@@ -301,12 +313,8 @@
// }
// }
//
-// @ApiOperation(value = "菜单状态修改(启用或禁用)")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "ids", value = "商品主键id集合(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "String"),
-// @ApiImplicitParam(name = "status", value = "是否启用 0-上架、1-下架", required = true, paramType = "query", dataType = "int")
-// })
-// @DeleteMapping(value = "/update_status")
+// @Operation(summary = "菜单状态修改(启用或禁用)")
+//// @DeleteMapping(value = "/update_status")
// public BasicResult updateStatus(List ids,Integer status){
// BasicResult basicResult = new BasicResult();
//
@@ -318,11 +326,8 @@
// }
//
//
-// @ApiOperation(value = "获取单个商品详情信息")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "商品表主键id", required = true, paramType = "query", dataType = "int"),
-// })
-// @PostMapping(value = "/getById")
+// @Operation(summary = "获取单个商品详情信息")
+//// @PostMapping(value = "/getById")
// public BasicResult getById(@RequestBody @Validated(value = {}) GoodsMenuDto param){
// BasicData basicResult = new BasicData();
//
@@ -346,38 +351,8 @@
// }
//
//
-// /*@ApiOperation(value = "商品规格信息列表")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "商品表主键id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "name", value = "商品名称", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "categoryId", value = "分类id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "categoryName", value = "分类名称", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "brandId", value = "品牌id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "brandName", value = "品牌名称", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "mainImage", value = "商品主图", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "subImages", value = "商品子图", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "specList", value = "商品规格", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "detail", value = "商品详情", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "detailImages", value = "详情图片", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "price", value = "一口价", required = false, paramType = "query", dataType = "BigDecimal"),
-// @ApiImplicitParam(name = "salePrice", value = "折扣价", required = false, paramType = "query", dataType = "BigDecimal"),
-// @ApiImplicitParam(name = "monthlySales", value = "月销量", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "totalSales", value = "累计销量", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "totalComments", value = "累计评价", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "stock", value = "库存", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "isHot", value = "是否热门", required = false, paramType = "query", dataType = "Boolean"),
-// @ApiImplicitParam(name = "isNew", value = "是否新品", required = false, paramType = "query", dataType = "Boolean"),
-// @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "specificationId", value = "规格id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "specificationName", value = "规格名称", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "specificationOptionId", value = "商品规格选项id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "specificationOptionName", value = "商品规格选项名称", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "specificationOptionPrice", value = "商品规格选项单价/加价金额", required = false, paramType = "query", dataType = "BigDecimal"),
-// @ApiImplicitParam(name = "specificationOptionStock", value = "商品规格选项库存 1代表有货,0代表无货", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
-// @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
-// })
-// @PostMapping(value = "/listSpecification")
+// /*@Operation(summary = "商品规格信息列表")
+//// @PostMapping(value = "/listSpecification")
// public BasicResult listSpecification(int pageNo, int pageSize, GoodsSpecificationDto goodsSpecificationDto){
// BasicData basicResult = new BasicData();
//
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsRawmaterialRelationController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsRawmaterialRelationController.java
index a428d29..3899b55 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsRawmaterialRelationController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsRawmaterialRelationController.java
@@ -14,8 +14,9 @@
import com.siam.package_goods.entity.Rawmaterial;
import com.siam.package_goods.service.RawmaterialService;
import com.siam.package_user.model.param.AdminParam;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -28,7 +29,7 @@
@RestController
@RequestMapping(value = "/rest/admin/goodsRawmaterialRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台原料配比模块相关接口", description = "AdminGoodsRawmaterialRelationController")
+@Tag(name = "后台原料配比模块相关接口", description = "AdminGoodsRawmaterialRelationController")
public class AdminGoodsRawmaterialRelationController {
@Autowired
@@ -40,7 +41,7 @@ public class AdminGoodsRawmaterialRelationController {
@Autowired
private GoodsService goodsService;
- @ApiOperation(value = "原料配比列表")
+ @Operation(summary = "原料配比列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation param){
BasicData basicResult = new BasicData();
@@ -49,7 +50,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) GoodsRawmaterialRela
return BasicResult.success(page);
}
- @ApiOperation(value = "设置原料配比")
+ @Operation(summary = "设置原料配比")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) AdminParam param){
BasicResult basicResult = new BasicResult();
@@ -120,7 +121,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) AdminParam param){
}
- @ApiOperation(value = "修改原料配比")
+ @Operation(summary = "修改原料配比")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation param){
BasicResult basicResult = new BasicResult();
@@ -135,7 +136,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) GoodsRawmaterialRe
}
- @ApiOperation(value = "删除原料配比")
+ @Operation(summary = "删除原料配比")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation param){
BasicResult basicResult = new BasicResult();
@@ -157,14 +158,14 @@ public BasicResult delete(@RequestBody @Validated(value = {}) GoodsRawmaterialRe
return basicResult;
}
- @ApiOperation(value = "查询原料配比信息")
+ @Operation(summary = "查询原料配比信息")
@PostMapping(value = "/find/goodsRawmaterialRelation")
public BasicResult findGoodsRawmaterialRelation(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation param){
Page page = goodsRawmaterialRelationService.findGoodsRawmaterialRelation(param.getPageNo(), param.getPageSize(), param.getGoodsName());
return BasicResult.success(page);
}
- @ApiOperation(value = "通过商品查询原料配比信息详情")
+ @Operation(summary = "通过商品查询原料配比信息详情")
@PostMapping(value = "/find/goodsRawmaterialRelationByGoodsId")
public BasicResult findGoodsRawmaterialRelationByGoodsId(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation param){
Page page = goodsRawmaterialRelationService.selectByGoodsId(param.getPageNo(), param.getPageSize(), param.getGoodsId());
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsSpecificationController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsSpecificationController.java
index dc684f0..dcb7ab5 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsSpecificationController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsSpecificationController.java
@@ -7,8 +7,11 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_goods.entity.GoodsSpecification;
import com.siam.package_goods.model.example.GoodsSpecificationExample;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -20,12 +23,12 @@
@RestController
@RequestMapping(value = "/rest/admin/goodsSpecification")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台商品规格模块相关接口", description = "AdminGoodsSpecificationController")
+@Tag(name = "后台商品规格模块相关接口", description = "AdminGoodsSpecificationController")
public class AdminGoodsSpecificationController {
@Autowired
private GoodsSpecificationService goodsSpecificationService;
- @ApiOperation(value = "商品规格列表")
+ @Operation(summary = "商品规格列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsSpecification param){
BasicData basicResult = new BasicData();
@@ -36,7 +39,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) GoodsSpecification p
}
- @ApiOperation(value = "修改商品规格")
+ @Operation(summary = "修改商品规格")
@PostMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) GoodsSpecification param){
BasicResult basicResult = new BasicResult();
@@ -69,13 +72,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) GoodsSpecification
return basicResult;
}
- /*@ApiOperation(value = "新增商品规格")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "name", value = "规格名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
- })
- @PostMapping(value = "/insert")
+ /*@Operation(summary = "新增商品规格")@PostMapping(value = "/insert")
public BasicResult insert(Specification specification){
BasicResult basicResult = new BasicResult();
@@ -87,11 +84,7 @@ public BasicResult insert(Specification specification){
return basicResult;
}*/
- /*@ApiOperation(value = "删除商品规格(含批量操作)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "ids", value = "商品规格表主键id(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "string"),
- })
- @PostMapping(value = "/delete")
+ /*@Operation(summary = "删除商品规格(含批量操作)")@PostMapping(value = "/delete")
public BasicResult delete(@RequestParam(value = "ids", required = true) List ids){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsSpecificationOptionController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsSpecificationOptionController.java
index 9f97877..3cd7ad8 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsSpecificationOptionController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminGoodsSpecificationOptionController.java
@@ -12,8 +12,11 @@
import com.siam.package_goods.model.example.GoodsSpecificationOptionExample;
import com.siam.package_goods.model.dto.GoodsSpecificationOptionDto;
import com.siam.package_goods.service.GoodsSpecificationOptionService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -26,7 +29,7 @@
@RestController
@RequestMapping(value = "/rest/admin/goodsSpecificationOption")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台商品规格选项模块相关接口", description = "AdminGoodsSpecificationOptionController")
+@Tag(name = "后台商品规格选项模块相关接口", description = "AdminGoodsSpecificationOptionController")
public class AdminGoodsSpecificationOptionController {
@Autowired
private GoodsSpecificationOptionService goodsSpecificationOptionService;
@@ -37,7 +40,7 @@ public class AdminGoodsSpecificationOptionController {
@Autowired
private GoodsAccessoriesService goodsAccessoriesService;
- @ApiOperation(value = "商品规格选项列表")
+ @Operation(summary = "商品规格选项列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsSpecificationOptionDto param){
BasicData basicResult = new BasicData();
@@ -47,7 +50,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) GoodsSpecificationOp
return BasicResult.success(page);
}
- @ApiOperation(value = "添加商品规格选项")
+ @Operation(summary = "添加商品规格选项")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) GoodsSpecificationOptionDto param){
BasicData basicResult = new BasicData();
@@ -107,7 +110,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) GoodsSpecification
return basicResult;
}
- @ApiOperation(value = "修改商品规格选项")
+ @Operation(summary = "修改商品规格选项")
@PostMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) GoodsSpecificationOptionDto param){
BasicResult basicResult = new BasicResult();
@@ -171,7 +174,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) GoodsSpecification
return basicResult;
}
- @ApiOperation(value = "删除商品规格选项(含批量操作)")
+ @Operation(summary = "删除商品规格选项(含批量操作)")
@PostMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) GoodsSpecificationOptionDto param){
BasicResult basicResult = new BasicResult();
@@ -203,11 +206,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) GoodsSpecification
return basicResult;
}
- /*@ApiOperation(value = "生成商品公共口味")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "int")
- })
- @PostMapping(value = "/insertPublicSpecification")
+ /*@Operation(summary = "生成商品公共口味")@PostMapping(value = "/insertPublicSpecification")
public BasicResult insertPublicSpecification(int goodsId){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminMenuController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminMenuController.java
index 52a6552..356be97 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminMenuController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminMenuController.java
@@ -8,8 +8,9 @@
import com.siam.package_goods.service.MenuService;
import com.siam.package_goods.model.example.MenuGoodsRelationExample;
import com.siam.package_goods.service.MenuGoodsRelationService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -20,7 +21,7 @@
@RestController
@RequestMapping(value = "/rest/admin/menu")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台菜单分类模块相关接口", description = "AdminMenuController")
+@Tag(name = "后台菜单分类模块相关接口", description = "AdminMenuController")
public class AdminMenuController {
@Autowired
@@ -29,7 +30,7 @@ public class AdminMenuController {
@Autowired
private MenuGoodsRelationService menuGoodsRelationService;
- @ApiOperation(value = "菜单列表")
+ @Operation(summary = "菜单列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) Menu param){
BasicData basicResult = new BasicData();
@@ -38,7 +39,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) Menu param){
return BasicResult.success(page);
}
- @ApiOperation(value = "菜单创建")
+ @Operation(summary = "菜单创建")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) Menu param){
BasicResult basicResult = new BasicResult();
@@ -54,7 +55,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) Menu param){
}
- @ApiOperation(value = "菜单修改")
+ @Operation(summary = "菜单修改")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) Menu param){
BasicResult basicResult = new BasicResult();
@@ -69,7 +70,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) Menu param){
}
- @ApiOperation(value = "菜单删除")
+ @Operation(summary = "菜单删除")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) Menu param){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminRawmaterialController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminRawmaterialController.java
index 5895292..ddf1b73 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminRawmaterialController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminRawmaterialController.java
@@ -8,8 +8,9 @@
import com.siam.package_goods.service.GoodsRawmaterialRelationService;
import com.siam.package_goods.entity.Rawmaterial;
import com.siam.package_goods.service.RawmaterialService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -20,7 +21,7 @@
@RestController
@RequestMapping(value = "/rest/admin/rawmaterial")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台原料模块相关接口", description = "AdminRawmaterialController")
+@Tag(name = "后台原料模块相关接口", description = "AdminRawmaterialController")
public class AdminRawmaterialController {
@Autowired
private RawmaterialService rawmaterialService;
@@ -28,7 +29,7 @@ public class AdminRawmaterialController {
@Autowired
private GoodsRawmaterialRelationService goodsRawmaterialRelationService;
- @ApiOperation(value = "原料列表")
+ @Operation(summary = "原料列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) Rawmaterial rawmaterial){
BasicData basicResult = new BasicData();
@@ -37,7 +38,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) Rawmaterial rawmater
return BasicResult.success(page);
}
- @ApiOperation(value = "新增原料")
+ @Operation(summary = "新增原料")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) Rawmaterial rawmaterial){
BasicResult basicResult = new BasicResult();
@@ -53,7 +54,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) Rawmaterial rawmat
}
- @ApiOperation(value = "修改原料")
+ @Operation(summary = "修改原料")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) Rawmaterial rawmaterial){
BasicResult basicResult = new BasicResult();
@@ -68,7 +69,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) Rawmaterial rawmat
}
- @ApiOperation(value = "删除原料")
+ @Operation(summary = "删除原料")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) Rawmaterial param){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminShoppingCartController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminShoppingCartController.java
index 651c709..463d6f2 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminShoppingCartController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminShoppingCartController.java
@@ -6,8 +6,9 @@
import com.siam.package_common.constant.BasicResultCode;
import com.siam.package_goods.entity.ShoppingCart;
import com.siam.package_goods.service.ShoppingCartService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -16,12 +17,12 @@
@RestController
@RequestMapping(value = "/rest/admin/shoppingCart")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台购物车模块相关接口", description = "AdminShoppingCartController")
+@Tag(name = "后台购物车模块相关接口", description = "AdminShoppingCartController")
public class AdminShoppingCartController {
@Autowired
private ShoppingCartService shoppingCartService;
- @ApiOperation(value = "购物车列表")
+ @Operation(summary = "购物车列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) ShoppingCart shoppingCart){
BasicData basicResult = new BasicData();
@@ -32,7 +33,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) ShoppingCart shoppin
}
- @ApiOperation(value = "新增购物车")
+ @Operation(summary = "新增购物车")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) ShoppingCart shoppingCart){
BasicResult basicResult = new BasicResult();
@@ -45,7 +46,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) ShoppingCart shopp
return basicResult;
}
- @ApiOperation(value = "修改购物车")
+ @Operation(summary = "修改购物车")
@PostMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) ShoppingCart shoppingCart){
BasicResult basicResult = new BasicResult();
@@ -58,7 +59,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) ShoppingCart shopp
return basicResult;
}
- @ApiOperation(value = "删除购物车(含批量操作)")
+ @Operation(summary = "删除购物车(含批量操作)")
@PostMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) ShoppingCart param){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminStatisticsController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminStatisticsController.java
index aa2e33c..32e8d44 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminStatisticsController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/AdminStatisticsController.java
@@ -3,7 +3,8 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_goods.model.param.StatisticsParam;
import com.siam.package_goods.service.StatisticsService;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -17,7 +18,7 @@
@RestController
@RequestMapping(value = "/rest/admin/statistics")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台统计模块相关接口", description = "AdminAdvertisementController")
+@Tag(name = "后台统计模块相关接口", description = "AdminAdvertisementController")
public class AdminStatisticsController {
@Autowired
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/internal/AdminPointsMallStatisticsController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/internal/AdminPointsMallStatisticsController.java
index 90e9e0c..8392ba3 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/internal/AdminPointsMallStatisticsController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/admin/internal/AdminPointsMallStatisticsController.java
@@ -3,7 +3,8 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_goods.model.param.StatisticsParam;
import com.siam.package_goods.service.internal.PointsMallStatisticsService;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -17,7 +18,7 @@
@RestController
@RequestMapping(value = "/rest/admin/statistics/pointsMall")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台统计模块相关接口", description = "AdminAdvertisementController")
+@Tag(name = "后台统计模块相关接口", description = "AdminAdvertisementController")
public class AdminPointsMallStatisticsController {
@Autowired
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsController.java
index 3f84b6d..fab6f4a 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsController.java
@@ -1,7 +1,6 @@
package com.siam.package_goods.controller.member;
import cn.hutool.core.convert.Convert;
-import com.alibaba.druid.support.json.JSONUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.siam.package_common.constant.BasicResultCode;
import com.siam.package_common.constant.Quantity;
@@ -19,8 +18,11 @@
import com.siam.package_user.model.param.AdminParam;
import com.siam.package_util.entity.Setting;
import com.siam.package_util.feign.SettingFeignApi;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
@@ -38,7 +40,7 @@
@RestController
@RequestMapping(value = "/rest/goods")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商品模块相关接口", description = "GoodsController")
+@Tag(name = "商品模块相关接口", description = "GoodsController")
public class GoodsController {
@Autowired
private GoodsService goodsService;
@@ -58,34 +60,7 @@ public class GoodsController {
@Autowired
private BaiduMapUtils baiduMapUtils;
- /*@ApiOperation(value = "商品列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "categoryId", value = "分类id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "categoryName", value = "分类名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "brandId", value = "品牌id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "brandName", value = "品牌名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "mainImage", value = "商品主图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "subImages", value = "商品子图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "specList", value = "商品规格", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detail", value = "商品详情", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detailImages", value = "详情图片", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "一口价", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "salePrice", value = "折扣价", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "monthlySales", value = "月销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalSales", value = "累计销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalComments", value = "累计评价", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "stock", value = "库存", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "productTime", value = "制作时长(分钟)", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "exchangePoints", value = "兑换商品所需积分数量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isHot", value = "是否热门", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "isNew", value = "是否新品", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "status", value = "状态 1=下架 0=上架", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
- })
- @PostMapping(value = "/list")
+ /*@Operation(summary = "商品列表")@PostMapping(value = "/list")
public BasicResult list(int pageNo, int pageSize, Goods goods){
BasicData basicResult = new BasicData();
@@ -193,11 +168,7 @@ public BasicResult listByMenuId(@RequestBody @Validated(value = {}) GoodsMenuDto
}
- /*@ApiOperation(value = "查询商品的规格组合信息")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = true, paramType = "query", dataType = "int"),
- })
- @PostMapping(value = "/selectSpecificationById")
+ /*@Operation(summary = "查询商品的规格组合信息")@PostMapping(value = "/selectSpecificationById")
public BasicResult selectSpecificationById(GoodsSpecificationDto goodsSpecificationDto){
BasicData basicResult = new BasicData();
@@ -223,7 +194,7 @@ public BasicResult selectSpecificationById(GoodsSpecificationDto goodsSpecificat
return basicResult;
}*/
- /*@ApiOperation(value = "本月上新商品列表")
+ /*@Operation(summary = "本月上新商品列表")
@PostMapping(value = "/weekNewGoodsList")
public BasicResult weekNewGoodsList(){
BasicData basicResult = new BasicData();
@@ -238,7 +209,7 @@ public BasicResult weekNewGoodsList(){
return basicResult;
}*/
- /*@ApiOperation(value = "好友推荐商品列表")
+ /*@Operation(summary = "好友推荐商品列表")
@PostMapping(value = "/recommendGoodsList")
public BasicResult recommendGoodsList(){
BasicData basicResult = new BasicData();
@@ -269,7 +240,7 @@ public BasicResult recommendGoodsList(){
return basicResult;
}*/
- @ApiOperation(value = "猜你喜欢商品列表")
+ @Operation(summary = "猜你喜欢商品列表")
@PostMapping(value = "/guessLikeGoodsList")
public BasicResult guessLikeGoodsList(@RequestBody @Validated(value = {}) AdminParam param){
BasicData basicResult = new BasicData();
@@ -300,7 +271,7 @@ public BasicResult guessLikeGoodsList(@RequestBody @Validated(value = {}) AdminP
return basicResult;
}
- @ApiOperation(value = "首页商品推荐列表")
+ @Operation(summary = "首页商品推荐列表")
@PostMapping(value = "/homePage/recommendGoodsList")
public BasicResult recommendGoodsListOfHomePage(@RequestBody @Validated(value = {}) Goods param ){
//首页商品推荐位置一共有6件商品 -- 改成2件商品
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsSpecificationController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsSpecificationController.java
index 44ad934..5f5c3d5 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsSpecificationController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsSpecificationController.java
@@ -1,7 +1,8 @@
package com.siam.package_goods.controller.member;
import com.siam.package_goods.service.GoodsSpecificationService;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -10,7 +11,7 @@
@RestController
@RequestMapping(value = "/rest/goodsSpecification")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商品规格模块相关接口", description = "GoodsSpecificationController")
+@Tag(name = "商品规格模块相关接口", description = "GoodsSpecificationController")
public class GoodsSpecificationController {
@Autowired
private GoodsSpecificationService goodsSpecificationService;
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsSpecificationOptionController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsSpecificationOptionController.java
index c0cd3a1..91bd5b6 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsSpecificationOptionController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/GoodsSpecificationOptionController.java
@@ -6,10 +6,10 @@
import com.siam.package_common.constant.BasicResultCode;
import com.siam.package_goods.model.dto.GoodsSpecificationOptionDto;
import com.siam.package_goods.service.GoodsSpecificationOptionService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -26,15 +26,12 @@
@RestController
@RequestMapping(value = "/rest/goodsSpecificationOption")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商品规格选项模块相关接口", description = "GoodsSpecificationOptionController")
+@Tag(name = "商品规格选项模块相关接口", description = "GoodsSpecificationOptionController")
public class GoodsSpecificationOptionController {
@Autowired
private GoodsSpecificationOptionService goodsSpecificationOptionService;
- @ApiOperation(value = "查询商品规格选项信息")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "int"),
- })
+ @Operation(summary = "查询商品规格选项信息")
@PostMapping(value = "/selectByGoodsId")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsSpecificationOptionDto goodsSpecificationOptionDto){
BasicData basicResult = new BasicData();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/MRecommendGoodsController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/MRecommendGoodsController.java
index c908213..8f5f6b4 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/MRecommendGoodsController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/MRecommendGoodsController.java
@@ -7,7 +7,8 @@
import com.siam.package_common.exception.StoneCustomerException;
import com.siam.package_goods.entity.MerchantRecommendGoods;
import com.siam.package_goods.service.MerchantRecommendGoodsService;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -23,7 +24,7 @@
@RestController
@RequestMapping(value = "/rest/merchantRecommendGoods")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家推荐商品模块相关接口", description = "MRecommendGoodsController")
+@Tag(name = "商家推荐商品模块相关接口", description = "MRecommendGoodsController")
public class MRecommendGoodsController {
@Autowired
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/MenuController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/MenuController.java
index 7992333..1f8fe29 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/MenuController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/MenuController.java
@@ -3,7 +3,8 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_goods.entity.Menu;
import com.siam.package_goods.service.MenuService;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -14,7 +15,7 @@
@RestController
@RequestMapping(value = "/rest/menu")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "菜单分类模块相关接口", description = "MenuController")
+@Tag(name = "菜单分类模块相关接口", description = "MenuController")
public class MenuController{
@Autowired
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/ShoppingCartController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/ShoppingCartController.java
index 95479fd..8dca04d 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/ShoppingCartController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/ShoppingCartController.java
@@ -14,7 +14,8 @@
import com.siam.package_goods.service.ShoppingCartService;
import com.siam.package_goods.service.GoodsSpecificationOptionService;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -24,7 +25,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@@ -34,7 +35,7 @@
@RestController
@RequestMapping(value = "/rest/member/shoppingCart")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "购物车模块相关接口", description = "ShoppingCartController")
+@Tag(name = "购物车模块相关接口", description = "ShoppingCartController")
public class ShoppingCartController {
@Autowired
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/internal/MemberGoodsCollectController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/internal/MemberGoodsCollectController.java
index 820b5cc..cc6f102 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/internal/MemberGoodsCollectController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/member/internal/MemberGoodsCollectController.java
@@ -15,14 +15,15 @@
import com.siam.package_goods.model.example.internal.MemberGoodsCollectExample;
import com.siam.package_goods.service.internal.MemberGoodsCollectService;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
@@ -30,7 +31,7 @@
@RestController
@RequestMapping(value = "/rest/member/goodsCollect")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "用户商品收藏相关接口", description = "MemberGoodsCollectController")
+@Tag(name = "用户商品收藏相关接口", description = "MemberGoodsCollectController")
public class MemberGoodsCollectController {
@Autowired
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsAccessoriesController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsAccessoriesController.java
index 364390f..83d957b 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsAccessoriesController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsAccessoriesController.java
@@ -8,10 +8,16 @@
import com.siam.package_goods.service.GoodsAccessoriesService;
import com.siam.package_goods.model.example.GoodsSpecificationOptionExample;
import com.siam.package_goods.service.GoodsSpecificationOptionService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -22,7 +28,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/goodsAccessories")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端商品辅料模块相关接口", description = "MerchantGoodsAccessoriesController")
+@Tag(name = "商家端商品辅料模块相关接口", description = "MerchantGoodsAccessoriesController")
public class MerchantGoodsAccessoriesController {
@Autowired
@@ -31,17 +37,7 @@ public class MerchantGoodsAccessoriesController {
@Autowired
private GoodsSpecificationOptionService goodsSpecificationOptionService;
- @ApiOperation(value = "商品辅料列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品辅料表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品辅料名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "商品辅料详情描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "商品辅料列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsAccessories goodsAccessories){
BasicData basicResult = new BasicData();
Page page = goodsAccessoriesService.getListByPage(goodsAccessories.getPageNo(), goodsAccessories.getPageSize(), goodsAccessories);
@@ -49,15 +45,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) GoodsAccessories goo
return BasicResult.success(page);
}
- @ApiOperation(value = "新增商品辅料")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品辅料主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品辅料名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "商品辅料详情描述", required = false, paramType = "query", dataType = "string")
- })
- @PostMapping(value = "/insert")
+ @Operation(summary = "新增商品辅料")@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) GoodsAccessories goodsAccessories){
BasicResult basicResult = new BasicResult();
@@ -72,15 +60,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) GoodsAccessories g
}
- @ApiOperation(value = "修改商品辅料")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品辅料主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品辅料名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "商品辅料详情描述", required = false, paramType = "query", dataType = "string")
- })
- @PutMapping(value = "/update")
+ @Operation(summary = "修改商品辅料")@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) GoodsAccessories goodsAccessories){
BasicResult basicResult = new BasicResult();
@@ -98,11 +78,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) GoodsAccessories g
}
- @ApiOperation(value = "删除商品辅料")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品辅料主键id", required = true, paramType = "query", dataType = "int")
- })
- @DeleteMapping(value = "/delete")
+ @Operation(summary = "删除商品辅料")@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) GoodsAccessories param){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsController.java
index b327010..fef7661 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsController.java
@@ -24,10 +24,11 @@
import com.siam.package_util.feign.PictureUploadRecordFeignApi;
import com.siam.package_util.model.example.PictureUploadRecordExample;
import com.siam.package_util.model.param.PictureUploadRecordParam;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -37,7 +38,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -45,7 +46,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/goods")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端商品模块相关接口", description = "MerchantGoodsController")
+@Tag(name = "商家端商品模块相关接口", description = "MerchantGoodsController")
public class MerchantGoodsController {
@Autowired
private GoodsService goodsService;
@@ -83,35 +84,7 @@ public class MerchantGoodsController {
@Autowired
private MerchantSessionManager merchantSessionManager;
- @ApiOperation(value = "商品列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "categoryId", value = "分类id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "categoryName", value = "分类名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "brandId", value = "品牌id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "brandName", value = "品牌名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "mainImage", value = "商品主图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "subImages", value = "商品子图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "specList", value = "商品规格", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detail", value = "商品详情", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detailImages", value = "详情图片", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "一口价", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "salePrice", value = "折扣价", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "monthlySales", value = "月销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalSales", value = "累计销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalComments", value = "累计评价", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "stock", value = "库存", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "productTime", value = "制作时长(分钟)", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "exchangePoints", value = "兑换商品所需积分数量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isHot", value = "是否热门", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "isNew", value = "是否新品", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "menuId", value = "菜单id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "menuName", value = "菜单名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
- })
+ @Operation(summary = "商品列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsMenuDto goodsMenuDto, HttpServletRequest request){
BasicData basicResult = new BasicData();
@@ -126,31 +99,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) GoodsMenuDto goodsMe
}
- @ApiOperation(value = "新增商品")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "name", value = "商品名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "categoryId", value = "分类id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "categoryName", value = "分类名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "brandId", value = "品牌id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "brandName", value = "品牌名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "mainImage", value = "商品主图", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "subImages", value = "商品子图(多图上传)", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "specList", value = "商品规格", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detail", value = "商品详情", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detailImages", value = "详情图片(多图上传)", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "一口价", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "salePrice", value = "折扣价", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "monthlySales", value = "月销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalSales", value = "累计销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalComments", value = "累计评价", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "stock", value = "库存", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "productTime", value = "制作时长(分钟)", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "exchangePoints", value = "兑换商品所需积分数量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isHot", value = "是否热门", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "isNew", value = "是否新品", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "menuId", value = "菜单id", required = false, paramType = "query", dataType = "int"),
- })
+ @Operation(summary = "新增商品")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) GoodsParam param, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -216,31 +165,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) GoodsParam param,
}
@MerchantPermission
- @ApiOperation(value = "修改商品")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "categoryId", value = "分类id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "categoryName", value = "分类名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "brandId", value = "品牌id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "brandName", value = "品牌名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "mainImage", value = "商品主图", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "subImages", value = "商品子图", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "specList", value = "商品规格", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detail", value = "商品详情", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detailImages", value = "详情图片", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "一口价", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "salePrice", value = "折扣价", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "monthlySales", value = "月销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalSales", value = "累计销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalComments", value = "累计评价", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "stock", value = "库存", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "productTime", value = "制作时长(分钟)", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "exchangePoints", value = "兑换商品所需积分数量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isHot", value = "是否热门", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "isNew", value = "是否新品", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
- })
+ @Operation(summary = "修改商品")
@PostMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) GoodsParam param, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -318,10 +243,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) GoodsParam param,
}
@MerchantPermission
- @ApiOperation(value = "删除商品")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = true, paramType = "query", dataType = "int"),
- })
+ @Operation(summary = "删除商品")
@PostMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) Goods param, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -364,7 +286,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) Goods param, HttpS
return basicResult;
}
-// @ApiOperation(value = "导入商品Excel报表")
+// @Operation(summary = "导入商品Excel报表")
// @PostMapping(value = "/import")
// public BasicResult importGoods(@RequestParam(value = "file", required = true) MultipartFile file){
// BasicResult basicResult = new BasicResult();
@@ -407,12 +329,8 @@ public BasicResult delete(@RequestBody @Validated(value = {}) Goods param, HttpS
// return basicResult;
// }
//
-// @ApiOperation(value = "导出商品Excel报表")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
-// @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
-// })
-// @GetMapping(value = "/export")
+// @Operation(summary = "导出商品Excel报表")
+//// @GetMapping(value = "/export")
// public void exportGoods(int pageNo, int pageSize, Goods goods, HttpServletResponse response){
// try {
// // 生成Excel数据
@@ -442,12 +360,8 @@ public BasicResult delete(@RequestBody @Validated(value = {}) Goods param, HttpS
// }
// }
-// @ApiOperation(value = "菜单状态修改(启用或禁用)")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "ids", value = "商品主键id集合(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "String"),
-// @ApiImplicitParam(name = "status", value = "是否启用 0-上架、1-下架", required = true, paramType = "query", dataType = "int")
-// })
-// @DeleteMapping(value = "/update_status")
+// @Operation(summary = "菜单状态修改(启用或禁用)")
+//// @DeleteMapping(value = "/update_status")
// public BasicResult updateStatus(List ids,Integer status){
// BasicResult basicResult = new BasicResult();
//
@@ -459,10 +373,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) Goods param, HttpS
// }
- @ApiOperation(value = "获取单个商品详情信息")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = true, paramType = "query", dataType = "int"),
- })
+ @Operation(summary = "获取单个商品详情信息")
@PostMapping(value = "/getById")
public BasicResult getById(@RequestBody @Validated(value = {}) Goods param, HttpServletRequest request){
BasicData basicResult = new BasicData();
@@ -497,38 +408,7 @@ public BasicResult getById(@RequestBody @Validated(value = {}) Goods param, Http
}
- /*@ApiOperation(value = "商品规格信息列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "categoryId", value = "分类id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "categoryName", value = "分类名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "brandId", value = "品牌id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "brandName", value = "品牌名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "mainImage", value = "商品主图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "subImages", value = "商品子图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "specList", value = "商品规格", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detail", value = "商品详情", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "detailImages", value = "详情图片", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "一口价", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "salePrice", value = "折扣价", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "monthlySales", value = "月销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalSales", value = "累计销量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "totalComments", value = "累计评价", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "stock", value = "库存", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isHot", value = "是否热门", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "isNew", value = "是否新品", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "specificationId", value = "规格id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "specificationName", value = "规格名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "specificationOptionId", value = "商品规格选项id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "specificationOptionName", value = "商品规格选项名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "specificationOptionPrice", value = "商品规格选项单价/加价金额", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "specificationOptionStock", value = "商品规格选项库存 1代表有货,0代表无货", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
- })
- @PostMapping(value = "/listSpecification")
+ /*@Operation(summary = "商品规格信息列表")@PostMapping(value = "/listSpecification")
public BasicResult listSpecification(int pageNo, int pageSize, GoodsSpecificationDto goodsSpecificationDto){
BasicData basicResult = new BasicData();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsRawmaterialRelationController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsRawmaterialRelationController.java
index 698bdf1..f5e7caa 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsRawmaterialRelationController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsRawmaterialRelationController.java
@@ -13,10 +13,16 @@
import com.siam.package_goods.service.GoodsRawmaterialRelationService;
import com.siam.package_goods.entity.Rawmaterial;
import com.siam.package_goods.service.RawmaterialService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -29,7 +35,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/goodsRawmaterialRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端原料配比模块相关接口", description = "MerchantGoodsRawmaterialRelationController")
+@Tag(name = "商家端原料配比模块相关接口", description = "MerchantGoodsRawmaterialRelationController")
public class MerchantGoodsRawmaterialRelationController {
@Autowired
@@ -41,17 +47,7 @@ public class MerchantGoodsRawmaterialRelationController {
@Autowired
private GoodsService goodsService;
- @ApiOperation(value = "原料配比列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "原料配比表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "原料配比名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "原料配比详情描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "原料配比列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation goodsRawmaterialRelation){
BasicData basicResult = new BasicData();
Page page = goodsRawmaterialRelationService.getListByPage(goodsRawmaterialRelation.getPageNo(), goodsRawmaterialRelation.getPageSize(), goodsRawmaterialRelation);
@@ -59,12 +55,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) GoodsRawmaterialRela
return BasicResult.success(page);
}
- @ApiOperation(value = "设置原料配比")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "goodsListStr", value = "商品id", required = true, paramType = "query", dataType = "List"),
- @ApiImplicitParam(name = "relationListStr", value = "原料", required = true, paramType = "query", dataType = "List"),
- })
- @PostMapping(value = "/insert")
+ @Operation(summary = "设置原料配比")@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation param){
BasicResult basicResult = new BasicResult();
@@ -135,15 +126,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) GoodsRawmaterialRe
}
- @ApiOperation(value = "修改原料配比")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "原料配比主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "原料配比名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "原料配比详情描述", required = false, paramType = "query", dataType = "string")
- })
- @PutMapping(value = "/update")
+ @Operation(summary = "修改原料配比")@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation goodsRawmaterialRelation){
BasicResult basicResult = new BasicResult();
@@ -157,11 +140,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) GoodsRawmaterialRe
}
- @ApiOperation(value = "删除原料配比")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "原料配比主键id", required = true, paramType = "query", dataType = "int")
- })
- @DeleteMapping(value = "/delete")
+ @Operation(summary = "删除原料配比")@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation param){
BasicResult basicResult = new BasicResult();
@@ -181,27 +160,14 @@ public BasicResult delete(@RequestBody @Validated(value = {}) GoodsRawmaterialRe
basicResult.setMessage("删除成功");
return basicResult;
}
- @ApiOperation(value = "查询原料配比信息")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "原料配比表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "goodsName", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/find/goodsRawmaterialRelation")
+ @Operation(summary = "查询原料配比信息")@PostMapping(value = "/find/goodsRawmaterialRelation")
public BasicResult findGoodsRawmaterialRelation(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation param){
BasicData basicResult = new BasicData();
Page page = goodsRawmaterialRelationService.findGoodsRawmaterialRelation(param.getPageNo(), param.getPageSize(), param.getGoodsName());
return BasicResult.success(page);
}
- @ApiOperation(value = "通过商品查询原料配比信息详情")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/find/goodsRawmaterialRelationByGoodsId")
+ @Operation(summary = "通过商品查询原料配比信息详情")@PostMapping(value = "/find/goodsRawmaterialRelationByGoodsId")
public BasicResult findGoodsRawmaterialRelationByGoodsId(@RequestBody @Validated(value = {}) GoodsRawmaterialRelation param){
BasicData basicResult = new BasicData();
Page page = goodsRawmaterialRelationService.selectByGoodsId(param.getPageNo(), param.getPageSize(), param.getGoodsId());
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsSpecificationController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsSpecificationController.java
index 701b788..aad0db1 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsSpecificationController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsSpecificationController.java
@@ -8,10 +8,11 @@
import com.siam.package_goods.entity.GoodsSpecification;
import com.siam.package_goods.model.example.GoodsSpecificationExample;
import com.siam.package_goods.service.GoodsSpecificationService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -23,22 +24,12 @@
@RestController
@RequestMapping(value = "/rest/merchant/goodsSpecification")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端商品规格模块相关接口", description = "MerchantGoodsSpecificationController")
+@Tag(name = "商家端商品规格模块相关接口", description = "MerchantGoodsSpecificationController")
public class MerchantGoodsSpecificationController {
@Autowired
private GoodsSpecificationService goodsSpecificationService;
- @ApiOperation(value = "商品规格列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品规格表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "goodsId", value = "商品id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "规格名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "goodsName", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "goodsMainImage", value = "商品主图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
- })
+ @Operation(summary = "商品规格列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsSpecification goodsSpecification){
BasicData basicResult = new BasicData();
@@ -49,12 +40,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) GoodsSpecification g
}
@MerchantPermission
- @ApiOperation(value = "修改商品规格")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品规格表主键id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "规格名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = true, paramType = "query", dataType = "int"),
- })
+ @Operation(summary = "修改商品规格")
@PostMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) GoodsSpecification goodsSpecification){
BasicResult basicResult = new BasicResult();
@@ -87,13 +73,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) GoodsSpecification
return basicResult;
}
- /*@ApiOperation(value = "新增商品规格")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "name", value = "规格名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
- })
- @PostMapping(value = "/insert")
+ /*@Operation(summary = "新增商品规格")@PostMapping(value = "/insert")
public BasicResult insert(Specification specification){
BasicResult basicResult = new BasicResult();
@@ -105,11 +85,7 @@ public BasicResult insert(Specification specification){
return basicResult;
}*/
- /*@ApiOperation(value = "删除商品规格(含批量操作)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "ids", value = "商品规格表主键id(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "string"),
- })
- @PostMapping(value = "/delete")
+ /*@Operation(summary = "删除商品规格(含批量操作)")@PostMapping(value = "/delete")
public BasicResult delete(@RequestParam(value = "ids", required = true) List ids){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsSpecificationOptionController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsSpecificationOptionController.java
index 503dd0d..eb8b826 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsSpecificationOptionController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantGoodsSpecificationOptionController.java
@@ -13,10 +13,16 @@
import com.siam.package_goods.model.example.GoodsSpecificationOptionExample;
import com.siam.package_goods.model.dto.GoodsSpecificationOptionDto;
import com.siam.package_goods.service.GoodsSpecificationOptionService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -29,7 +35,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/goodsSpecificationOption")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端商品规格选项模块相关接口", description = "MerchantGoodsSpecificationOptionController")
+@Tag(name = "商家端商品规格选项模块相关接口", description = "MerchantGoodsSpecificationOptionController")
public class MerchantGoodsSpecificationOptionController {
@Autowired
private GoodsSpecificationOptionService goodsSpecificationOptionService;
@@ -40,22 +46,7 @@ public class MerchantGoodsSpecificationOptionController {
@Autowired
private GoodsAccessoriesService goodsAccessoriesService;
- @ApiOperation(value = "商品规格选项列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品规格选项表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "goodsId", value = "商品id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "specificationId", value = "规格id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品规格选项名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "单价/加价金额", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stock", value = "库存 1代表有货,0代表无货", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "specificationName", value = "规格名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "goodsName", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "goodsMainImage", value = "商品主图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "商品规格选项列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) GoodsSpecificationOptionDto goodsSpecificationOptionDto){
BasicData basicResult = new BasicData();
@@ -64,15 +55,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) GoodsSpecificationOp
return BasicResult.success(page);
}
- @ApiOperation(value = "添加商品规格选项")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品规格选项名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "单价/加价金额", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stock", value = "库存 1代表有货,0代表无货", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "specificationName", value = "规格名称", required = true, paramType = "query", dataType = "string"),
- })
- @PostMapping(value = "/insert")
+ @Operation(summary = "添加商品规格选项")@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) GoodsSpecificationOptionDto goodsSpecificationOptionDto){
BasicData basicResult = new BasicData();
@@ -132,15 +115,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) GoodsSpecification
}
@MerchantPermission
- @ApiOperation(value = "修改商品规格选项")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品规格选项表主键id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品规格选项名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "单价/加价金额", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stock", value = "库存 1代表有货,0代表无货", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = true, paramType = "query", dataType = "int"),
- })
- @PostMapping(value = "/update")
+ @Operation(summary = "修改商品规格选项")@PostMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) GoodsSpecificationOptionDto goodsSpecificationOptionDto){
BasicResult basicResult = new BasicResult();
@@ -204,11 +179,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) GoodsSpecification
}
@MerchantPermission
- @ApiOperation(value = "删除商品规格选项(含批量操作)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "ids", value = "商品规格选项表主键id(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "string"),
- })
- @PostMapping(value = "/delete")
+ @Operation(summary = "删除商品规格选项(含批量操作)")@PostMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) GoodsSpecificationOption param){
BasicResult basicResult = new BasicResult();
@@ -239,11 +210,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) GoodsSpecification
return basicResult;
}
- /*@ApiOperation(value = "生成商品公共口味")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "int")
- })
- @PostMapping(value = "/insertPublicSpecification")
+ /*@Operation(summary = "生成商品公共口味")@PostMapping(value = "/insertPublicSpecification")
public BasicResult insertPublicSpecification(int goodsId){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantMenuController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantMenuController.java
index 79a7d63..9ce4a23 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantMenuController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantMenuController.java
@@ -13,22 +13,22 @@
import com.siam.package_merchant.auth.cache.MerchantSessionManager;
import com.siam.package_merchant.entity.Merchant;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Date;
@RestController
@RequestMapping(value = "/rest/merchant/menu")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端菜单分类模块相关接口", description = "MerchantMenuController")
+@Tag(name = "商家端菜单分类模块相关接口", description = "MerchantMenuController")
public class MerchantMenuController {
@Autowired
@@ -43,16 +43,7 @@ public class MerchantMenuController {
@Autowired
private MerchantSessionManager merchantSessionManager;
- @ApiOperation(value = "菜单列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "菜单分类详情描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
+ @Operation(summary = "菜单列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) Menu menu, HttpServletRequest request){
BasicData basicResult = new BasicData();
@@ -66,14 +57,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) Menu menu, HttpServl
return BasicResult.success(page);
}
- @ApiOperation(value = "菜单创建")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "菜单主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "菜单名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "菜单分类详情描述", required = false, paramType = "query", dataType = "string")
- })
+ @Operation(summary = "菜单创建")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) Menu menu, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -93,14 +77,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) Menu menu, HttpSer
}
@MerchantPermission
- @ApiOperation(value = "菜单修改")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "菜单主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "菜单名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "菜单分类详情描述", required = false, paramType = "query", dataType = "string")
- })
+ @Operation(summary = "菜单修改")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) Menu menu, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -125,10 +102,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) Menu menu, HttpSer
}
@MerchantPermission
- @ApiOperation(value = "菜单删除")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "菜单主键id集合(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "String")
- })
+ @Operation(summary = "菜单删除")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) Menu param , HttpServletRequest request){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantRawmaterialController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantRawmaterialController.java
index cf175a6..19ee6c7 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantRawmaterialController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantRawmaterialController.java
@@ -8,10 +8,10 @@
import com.siam.package_goods.service.GoodsRawmaterialRelationService;
import com.siam.package_goods.entity.Rawmaterial;
import com.siam.package_goods.service.RawmaterialService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -22,7 +22,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/rawmaterial")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端原料模块相关接口", description = "MerchantRawmaterialController")
+@Tag(name = "商家端原料模块相关接口", description = "MerchantRawmaterialController")
public class MerchantRawmaterialController {
@Autowired
private RawmaterialService rawmaterialService;
@@ -30,20 +30,7 @@ public class MerchantRawmaterialController {
@Autowired
private GoodsRawmaterialRelationService goodsRawmaterialRelationService;
- @ApiOperation(value = "原料列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "原料表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "原料名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "mainImage", value = "原料主图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "description", value = "原料描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "unit", value = "采购单位", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "采购单价", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stock", value = "库存", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stockLowerLimit", value = "库存过低线/库存下限", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stockUpperLimit", value = "库存超出线/库存上限", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
+ @Operation(summary = "原料列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) Rawmaterial rawmaterial){
BasicData basicResult = new BasicData();
@@ -52,17 +39,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) Rawmaterial rawmater
return BasicResult.success(page);
}
- @ApiOperation(value = "新增原料")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "name", value = "原料名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "mainImage", value = "原料主图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "description", value = "原料描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "unit", value = "采购单位", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "采购单价", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stock", value = "库存", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stockLowerLimit", value = "库存过低线/库存下限", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stockUpperLimit", value = "库存超出线/库存上限", required = true, paramType = "query", dataType = "BigDecimal"),
- })
+ @Operation(summary = "新增原料")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) Rawmaterial rawmaterial){
BasicResult basicResult = new BasicResult();
@@ -78,18 +55,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) Rawmaterial rawmat
}
- @ApiOperation(value = "修改原料")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "原料主键id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "原料名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "mainImage", value = "原料主图", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "description", value = "原料描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "unit", value = "采购单位", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "price", value = "采购单价", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stock", value = "库存", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stockLowerLimit", value = "库存过低线/库存下限", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "stockUpperLimit", value = "库存超出线/库存上限", required = true, paramType = "query", dataType = "BigDecimal"),
- })
+ @Operation(summary = "修改原料")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) Rawmaterial rawmaterial){
BasicResult basicResult = new BasicResult();
@@ -104,10 +70,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) Rawmaterial rawmat
}
- @ApiOperation(value = "删除原料")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "原料主键id", required = true, paramType = "query", dataType = "int")
- })
+ @Operation(summary = "删除原料")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) Rawmaterial param){
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantRecommendGoodsController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantRecommendGoodsController.java
index b05eca9..1b8b26b 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantRecommendGoodsController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantRecommendGoodsController.java
@@ -12,14 +12,15 @@
import com.siam.package_goods.model.example.MerchantRecommendGoodsExample;
import com.siam.package_goods.service.MerchantRecommendGoodsService;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -27,7 +28,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/merchantRecommendGoods")
@Transactional(rollbackFor = Exception.class)
- @Api(tags = "商家端商家推荐商品模块相关接口", description = "MerchantRecommendGoodsController")
+ @Tag(name = "商家端商家推荐商品模块相关接口", description = "MerchantRecommendGoodsController")
public class MerchantRecommendGoodsController {
@Autowired
private MerchantRecommendGoodsService merchantRecommendGoodsService;
@@ -38,7 +39,7 @@ public class MerchantRecommendGoodsController {
@Autowired
private MerchantSessionManager merchantSessionManager;
- @ApiOperation(value = "商家推荐商品信息列表")
+ @Operation(summary = "商家推荐商品信息列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) MerchantRecommendGoods merchantRecommendGoods, HttpServletRequest request){
BasicData basicResult = new BasicData();
@@ -51,7 +52,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) MerchantRecommendGoo
return BasicResult.success(page);
}
- @ApiOperation(value = "新增商家推荐商品信息")
+ @Operation(summary = "新增商家推荐商品信息")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) MerchantRecommendGoods param, HttpServletRequest request) {
BasicResult basicResult = new BasicResult();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantStatisticsController.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantStatisticsController.java
index 08326f3..dfa4fda 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantStatisticsController.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/controller/merchant/MerchantStatisticsController.java
@@ -3,7 +3,8 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_goods.model.param.StatisticsParam;
import com.siam.package_goods.service.StatisticsService;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -17,7 +18,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/statistics")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台统计模块相关接口", description = "AdminAdvertisementController")
+@Tag(name = "后台统计模块相关接口", description = "AdminAdvertisementController")
public class MerchantStatisticsController {
@Autowired
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/feign/GoodsFeignProvider.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/feign/GoodsFeignProvider.java
index 83664d9..2ee028e 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/feign/GoodsFeignProvider.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/feign/GoodsFeignProvider.java
@@ -81,4 +81,15 @@ public BasicResult> selectByExample(GoodsParam param) {
return BasicResult.success(goodsMapper.selectList(wrapper));
}
+
+ @Override
+ public BasicResult decreaseStock(@RequestParam("id") Integer id, @RequestParam("number") Integer number) {
+ goodsService.decreaseStock(id, number);
+ return BasicResult.success();
+ }
+
+ @Override
+ public BasicResult increaseStock(@RequestParam("id") Integer id, @RequestParam("number") Integer number) {
+ goodsService.increaseStock(id, number);
+ return BasicResult.success();
}
\ No newline at end of file
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/mapper/GoodsMapper.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/mapper/GoodsMapper.java
index 0e166ec..64fe3c5 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/mapper/GoodsMapper.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/mapper/GoodsMapper.java
@@ -132,6 +132,19 @@ public interface GoodsMapper extends BaseMapper {
@Update("update tb_goods set total_sales=total_sales+#{num} where id=#{goodsId}")
int updateTotalSales(@Param("goodsId") Integer goodsId,@Param("num") Integer num);
+ /**
+ * CAS 原子扣减库存:一条 SQL 完成 check-and-act,避免并发超卖
+ * @return 受影响行数,0 表示库存不足
+ */
+ @Update("update tb_goods set stock = stock - #{number} where id = #{id} and stock >= #{number}")
+ int decreaseStockByCAS(@Param("id") Integer id, @Param("number") Integer number);
+
+ /**
+ * CAS 原子增加库存:一条 SQL 完成 check-and-act,避免并发问题
+ */
+ @Update("update tb_goods set stock = stock + #{number} where id = #{id}")
+ int increaseStockByCAS(@Param("id") Integer id, @Param("number") Integer number);
+
@Update("update tb_goods set monthly_sales=0 ")
int monthlySalesReset();
diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/GoodsServiceImpl.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/GoodsServiceImpl.java
index 609f831..9481949 100644
--- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/GoodsServiceImpl.java
+++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/GoodsServiceImpl.java
@@ -84,25 +84,15 @@ public Page
siam-parent
-
https://www.siamit.cn
UTF-8
- 1.8
- 1.8
+ 17
+ 17
+ 17
+
+
+ 2023.0.1
+ 2023.0.1.0
+ 3.5.5
+ 3.0.4
+ 1.18.30
+ 2.5.0
+ 7.4
-
+
org.springframework.boot
spring-boot-dependencies
- 2.3.3.RELEASE
+ 3.2.5
pom
import
-
-
+
org.springframework.cloud
spring-cloud-dependencies
- Finchley.M7
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ ${spring-cloud-alibaba.version}
pom
import
- -->
+
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+
+
+
+
+ org.mybatis
+ mybatis-spring
+ ${mybatis-spring.version}
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ ${springdoc.version}
+
+
+
+
+ net.logstash.logback
+ logstash-logback-encoder
+ ${logstash-logback.version}
+
+
+
+
+ de.codecentric
+ spring-boot-admin-starter-client
+ 3.2.3
+
+
+ de.codecentric
+ spring-boot-admin-starter-server
+ 3.2.3
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 3.2.5
+
+
+
-
-
-
-
org.apache.maven.plugins
maven-surefire-plugin
- 2.18.1
+ 3.2.5
true
-
org.apache.maven.plugins
maven-compiler-plugin
+ 3.11.0
- 8
- 8
+ 17
+ 17
+
+ -parameters
+
-
src/main/resources
true
-
src/main/java
@@ -147,4 +202,4 @@
-
\ No newline at end of file
+
diff --git a/siam-promotion/pom.xml b/siam-promotion/pom.xml
index 4a681e8..d713ed7 100644
--- a/siam-promotion/pom.xml
+++ b/siam-promotion/pom.xml
@@ -32,8 +32,6 @@
UTF-8
- 1.8
- 1.8
\ No newline at end of file
diff --git a/siam-promotion/promotion-api/pom.xml b/siam-promotion/promotion-api/pom.xml
index a004654..64f0840 100644
--- a/siam-promotion/promotion-api/pom.xml
+++ b/siam-promotion/promotion-api/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
@@ -25,7 +23,6 @@
org.springframework.boot
spring-boot-starter-data-elasticsearch
- 2.1.4.RELEASE
@@ -37,7 +34,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
exec
diff --git a/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/entity/Advertisement.java b/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/entity/Advertisement.java
index d303e36..eaa6d07 100644
--- a/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/entity/Advertisement.java
+++ b/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/entity/Advertisement.java
@@ -3,42 +3,41 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Data
@TableName("tb_advertisement")
-@ApiModel(value = "广告轮播图表")
+ @Schema(description= "广告轮播图表")
public class Advertisement {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "轮播图名称")
+ @Schema(description = "轮播图名称")
private String imageName;
- @ApiModelProperty(notes = "轮播图路径")
+ @Schema(description = "轮播图路径")
private String imagePath;
- @ApiModelProperty(notes = "说明")
+ @Schema(description = "说明")
private String description;
- @ApiModelProperty(notes = "轮播图类型 1=首页轮播图 2=菜单页轮播图")
+ @Schema(description = "轮播图类型 1=首页轮播图 2=菜单页轮播图")
private Integer type;
- @ApiModelProperty(notes = "排序号")
+ @Schema(description = "排序号")
private Integer sortNumber;
- @ApiModelProperty(notes = "点击轮播图跳转的链接")
+ @Schema(description = "点击轮播图跳转的链接")
private String imageLinkUrl;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
public Integer getId() {
diff --git a/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/entity/Rawmaterial.java b/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/entity/Rawmaterial.java
index 8309c60..4c9e4c7 100644
--- a/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/entity/Rawmaterial.java
+++ b/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/entity/Rawmaterial.java
@@ -3,8 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@@ -12,40 +11,40 @@
@Data
@TableName("tb_rawmaterial")
-@ApiModel(value = "原料表")
+ @Schema(description= "原料表")
public class Rawmaterial {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "原料名称")
+ @Schema(description = "原料名称")
private String name;
- @ApiModelProperty(notes = "原料主图")
+ @Schema(description = "原料主图")
private String mainImage;
- @ApiModelProperty(notes = "原料描述")
+ @Schema(description = "原料描述")
private String description;
- @ApiModelProperty(notes = "采购单位")
+ @Schema(description = "采购单位")
private String unit;
- @ApiModelProperty(notes = "采购单价")
+ @Schema(description = "采购单价")
private BigDecimal price;
- @ApiModelProperty(notes = "库存")
+ @Schema(description = "库存")
private BigDecimal stock;
- @ApiModelProperty(notes = "库存过低线/库存下限")
+ @Schema(description = "库存过低线/库存下限")
private BigDecimal stockLowerLimit;
- @ApiModelProperty(notes = "库存超出线/库存上限")
+ @Schema(description = "库存超出线/库存上限")
private BigDecimal stockUpperLimit;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
//页码
diff --git a/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/model/param/AdvertisementParam.java b/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/model/param/AdvertisementParam.java
index 3de469a..6a9b220 100644
--- a/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/model/param/AdvertisementParam.java
+++ b/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/model/param/AdvertisementParam.java
@@ -1,13 +1,13 @@
package com.siam.package_promotion.model.param;
import com.siam.package_promotion.entity.Advertisement;
-import io.swagger.annotations.ApiModel;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Data
-@ApiModel(value = "广告轮播图表")
+ @Schema(description= "广告轮播图表")
public class AdvertisementParam extends Advertisement {
//开始日期
diff --git a/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/model/param/SearchParam.java b/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/model/param/SearchParam.java
index 1c30454..9fbf94a 100644
--- a/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/model/param/SearchParam.java
+++ b/siam-promotion/promotion-api/src/main/java/com/siam/package_promotion/model/param/SearchParam.java
@@ -2,7 +2,7 @@
import lombok.Data;
-import javax.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotBlank;
@Data
public class SearchParam {
diff --git a/siam-promotion/promotion-provider/pom.xml b/siam-promotion/promotion-provider/pom.xml
index 87ab5dc..2a86097 100644
--- a/siam-promotion/promotion-provider/pom.xml
+++ b/siam-promotion/promotion-provider/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
@@ -77,51 +75,40 @@
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
- 2.1.2.RELEASE
-
-
-
+
com.alibaba.cloud
- spring-cloud-starter-alibaba-seata
- 2021.1
-
-
- io.seata
- seata-spring-boot-starter
-
-
+ spring-cloud-starter-alibaba-nacos-discovery
+
- io.seata
- seata-spring-boot-starter
- 1.3.0
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-actuator
- 2.3.3.RELEASE
io.micrometer
micrometer-registry-prometheus
- 1.5.4
net.logstash.logback
logstash-logback-encoder
- 6.6
+
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
@@ -132,7 +119,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
com.siam.package_promotion.PromotionApplication
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/PromotionApplication.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/PromotionApplication.java
index a27de84..da881cb 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/PromotionApplication.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/PromotionApplication.java
@@ -1,15 +1,19 @@
package com.siam.package_promotion;
-import org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableFeignClients("com.siam")
-@EnableEurekaClient
-@SpringBootApplication(scanBasePackages = "com.siam", exclude = {RocketMQAutoConfiguration.class})
+@EnableDiscoveryClient
+@SpringBootApplication(scanBasePackages = "com.siam", exclude = {
+ MongoAutoConfiguration.class,
+ MongoDataAutoConfiguration.class
+})
@MapperScan(basePackages = {"com.siam.**.mapper"})
public class PromotionApplication
{
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/config/MybatisPlusConfig.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/config/MybatisPlusConfig.java
index 9cecb06..c6146aa 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/config/MybatisPlusConfig.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/config/MybatisPlusConfig.java
@@ -1,6 +1,8 @@
package com.siam.package_promotion.config;
-import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -19,8 +21,11 @@ public class MybatisPlusConfig {
* 分页插件
*/
@Bean
- public PaginationInterceptor paginationInterceptor() {
- return new PaginationInterceptor();
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
+ interceptor.addInnerInterceptor(paginationInnerInterceptor);
+ return interceptor;
}
}
\ No newline at end of file
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/config/Swagger2Config.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/config/Swagger2Config.java
deleted file mode 100644
index d9d3467..0000000
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/config/Swagger2Config.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.siam.package_promotion.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class Swagger2Config {
-
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.SWAGGER_2)
- .apiInfo(apiInfo())
- .select()
- .apis(RequestHandlerSelectors.basePackage("com.siam"))//扫描包路径
- .paths(PathSelectors.any())
- .build();
- }
-
- // 构建api文档的详细信息函数,注意这里的注解引用的是哪个
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title("暹罗外卖-促销服务接口文档")//页面标题
- .description("")//描述
- .version("1.0")//版本号
- .build();
- }
-}
\ No newline at end of file
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminAdvertisementController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminAdvertisementController.java
index b450b67..209a91c 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminAdvertisementController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminAdvertisementController.java
@@ -6,8 +6,9 @@
import com.siam.package_promotion.entity.Advertisement;
import com.siam.package_promotion.model.param.AdvertisementParam;
import com.siam.package_promotion.service.AdvertisementService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -16,20 +17,20 @@
@RestController
@RequestMapping(value = "/rest/admin/advertisement")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台广告轮播图模块相关接口", description = "AdminAdvertisementController")
+@Tag(name = "后台广告轮播图模块相关接口", description = "AdminAdvertisementController")
public class AdminAdvertisementController {
@Autowired
private AdvertisementService advertisementService;
- @ApiOperation(value = "广告轮播图列表")
+ @Operation(summary = "广告轮播图列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) AdvertisementParam param) {
Page page = advertisementService.getListByPage(param);
return BasicResult.success(page);
}
- @ApiOperation(value = "新增广告轮播图")
+ @Operation(summary = "新增广告轮播图")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) AdvertisementParam param) {
advertisementService.insertSelective(param);
@@ -38,7 +39,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) AdvertisementParam
@AdminPermission
- @ApiOperation(value = "修改广告轮播图")
+ @Operation(summary = "修改广告轮播图")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) AdvertisementParam param) {
advertisementService.updateByPrimaryKeySelective(param);
@@ -46,7 +47,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) AdvertisementParam
}
@AdminPermission
- @ApiOperation(value = "删除广告轮播图")
+ @Operation(summary = "删除广告轮播图")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) AdvertisementParam param) {
//删除广告轮播图
@@ -54,7 +55,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) AdvertisementParam
return BasicResult.success();
}
- @ApiOperation(value = "获取单个广告轮播图详情信息")
+ @Operation(summary = "获取单个广告轮播图详情信息")
@PostMapping(value = "/getById")
public BasicResult getById(@RequestBody @Validated(value = {}) AdvertisementParam param) {
Advertisement advertisement = advertisementService.selectByPrimaryKey(param);
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsController.java
index 6c81c01..43a1796 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsController.java
@@ -13,8 +13,9 @@
import com.siam.package_promotion.entity.CouponsShopRelation;
import com.siam.package_promotion.service.CouponsService;
import com.siam.package_promotion.service.CouponsShopRelationService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -27,7 +28,7 @@
@RestController
@RequestMapping(value = "/rest/admin/coupons")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台优惠卷接口", description = "AdminCouponsController")
+@Tag(name = "后台优惠卷接口", description = "AdminCouponsController")
public class AdminCouponsController {
@Autowired
@@ -39,7 +40,7 @@ public class AdminCouponsController {
@Autowired
private CouponsShopRelationService couponsShopRelationService;
- @ApiOperation(value = "新增优惠卷")
+ @Operation(summary = "新增优惠卷")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) Coupons param) {
BasicResult basicResult = new BasicResult();
@@ -63,7 +64,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) Coupons param) {
}
@AdminPermission
- @ApiOperation(value = "修改优惠卷-TODO")
+ @Operation(summary = "修改优惠卷-TODO")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) Coupons param) {
BasicResult basicResult = new BasicResult();
@@ -75,7 +76,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) Coupons param) {
}
@AdminPermission
- @ApiOperation(value = "删除优惠卷")
+ @Operation(summary = "删除优惠卷")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) Coupons param) {
BasicResult basicResult = new BasicResult();
@@ -85,7 +86,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) Coupons param) {
return BasicResult.success();
}
- @ApiOperation(value = "查看优惠卷详情(包含关联商品)")
+ @Operation(summary = "查看优惠卷详情(包含关联商品)")
@PostMapping(value = "/selectById")
public BasicResult selectById(@RequestBody @Validated(value = {}) Coupons param) {
BasicData basicResult = new BasicData();
@@ -95,7 +96,7 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) Coupons param)
return BasicResult.success(map);
}
- @ApiOperation(value = "满优惠卷列表")
+ @Operation(summary = "满优惠卷列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) Coupons param) {
BasicData basicResult = new BasicData();
@@ -107,7 +108,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) Coupons param) {
return BasicResult.success(page);
}
- @ApiOperation(value = "优惠卷时间修改(延长)")
+ @Operation(summary = "优惠卷时间修改(延长)")
@PostMapping(value = "/updateEndTime")
public BasicResult updateEndTime(@RequestBody @Validated(value = {}) Coupons param) {
BasicResult basicResult = new BasicResult();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsGoodsRelationController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsGoodsRelationController.java
index 5a12efa..283054e 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsGoodsRelationController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsGoodsRelationController.java
@@ -7,8 +7,9 @@
import com.siam.package_common.util.GsonUtils;
import com.siam.package_promotion.entity.CouponsGoodsRelation;
import com.siam.package_promotion.service.CouponsGoodsRelationService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -19,13 +20,13 @@
@RestController
@RequestMapping(value = "/rest/admin/couponsGoodsRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台优惠卷接口", description = "AdminCouponsController")
+@Tag(name = "后台优惠卷接口", description = "AdminCouponsController")
public class AdminCouponsGoodsRelationController {
@Autowired
private CouponsGoodsRelationService couponsGoodsRelationService;
- @ApiOperation(value = "新增优惠卷商品关系")
+ @Operation(summary = "新增优惠卷商品关系")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) CouponsGoodsRelation param) {
BasicResult basicResult = new BasicResult();
@@ -39,7 +40,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) CouponsGoodsRelati
return basicResult;
}
- @ApiOperation(value = "优惠卷商品关系列表查询")
+ @Operation(summary = "优惠卷商品关系列表查询")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) CouponsGoodsRelation param) {
BasicData basicResult = new BasicData();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsMemberRelationController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsMemberRelationController.java
index 7777363..c137fa7 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsMemberRelationController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsMemberRelationController.java
@@ -11,8 +11,9 @@
import com.siam.package_promotion.service.CouponsService;
import com.siam.package_user.entity.Member;
import com.siam.package_user.feign.MemberFeignApi;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -28,7 +29,7 @@
@RestController
@RequestMapping(value = "/rest/admin/couponsMemberRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "管理端优惠卷用关系接口", description = "AdminCouponsMemberRelationController")
+@Tag(name = "管理端优惠卷用关系接口", description = "AdminCouponsMemberRelationController")
public class AdminCouponsMemberRelationController {
@Autowired
@@ -44,7 +45,7 @@ public class AdminCouponsMemberRelationController {
private AliyunSms aliyunSms;
- @ApiOperation(value = "赠送优惠卷")
+ @Operation(summary = "赠送优惠卷")
@PostMapping(value = "/giveCoupons")
public BasicResult giveCoupons(@RequestBody @Validated(value = {}) CouponsMemberRelation param) {
BasicResult basicResult = new BasicResult();
@@ -97,7 +98,7 @@ public BasicResult giveCoupons(@RequestBody @Validated(value = {}) CouponsMember
return BasicResult.success();
}
- @ApiOperation(value = "赠送优惠卷(单发)")
+ @Operation(summary = "赠送优惠卷(单发)")
@PostMapping(value = "/giveSingleCoupons")
public BasicResult giveSingleCoupons(@RequestBody @Validated(value = {}) CouponsMemberRelation param) {
BasicResult basicResult = new BasicResult();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsShopRelationController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsShopRelationController.java
index 9416539..55151d7 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsShopRelationController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminCouponsShopRelationController.java
@@ -5,8 +5,9 @@
import com.siam.package_common.util.GsonUtils;
import com.siam.package_promotion.entity.CouponsShopRelation;
import com.siam.package_promotion.service.CouponsShopRelationService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -20,13 +21,13 @@
@RestController
@RequestMapping(value = "/rest/admin/couponsShopRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台优惠卷接口", description = "AdminCouponsShopRelationController")
+@Tag(name = "后台优惠卷接口", description = "AdminCouponsShopRelationController")
public class AdminCouponsShopRelationController {
@Autowired
private CouponsShopRelationService couponsShopRelationService;
- @ApiOperation(value = "新增优惠卷店铺关系")
+ @Operation(summary = "新增优惠卷店铺关系")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) CouponsShopRelation param) {
BasicResult basicResult = new BasicResult();
@@ -40,7 +41,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) CouponsShopRelatio
return basicResult;
}
- @ApiOperation(value = "优惠卷店铺关系列表查询")
+ @Operation(summary = "优惠卷店铺关系列表查询")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) CouponsShopRelation param) {
BasicResult basicResult = new BasicResult();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminPaperworkPushController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminPaperworkPushController.java
index 4b55567..bf928fb 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminPaperworkPushController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/admin/AdminPaperworkPushController.java
@@ -8,8 +8,9 @@
import com.siam.package_promotion.entity.PaperworkPush;
import com.siam.package_promotion.service.PaperworkPushService;
import com.siam.package_user.model.example.MemberExample;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -20,7 +21,7 @@
@RestController
@RequestMapping(value = "/rest/admin/paperworkPush")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台文案推送模块相关接口", description = "AdminPaperworkPushController")
+@Tag(name = "后台文案推送模块相关接口", description = "AdminPaperworkPushController")
public class AdminPaperworkPushController {
@Autowired
@@ -32,7 +33,7 @@ public class AdminPaperworkPushController {
@Autowired
private AliyunSms aliyunSms;
- @ApiOperation(value = "文案列表")
+ @Operation(summary = "文案列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) PaperworkPush paperworkPush){
BasicData basicResult = new BasicData();
@@ -41,7 +42,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PaperworkPush paperw
return BasicResult.success(page);
}
- @ApiOperation(value = "文案创建")
+ @Operation(summary = "文案创建")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) PaperworkPush paperworkPush){
BasicResult basicResult = new BasicResult();
@@ -57,7 +58,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PaperworkPush pape
}
- @ApiOperation(value = "文案修改")
+ @Operation(summary = "文案修改")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) PaperworkPush paperworkPush){
BasicResult basicResult = new BasicResult();
@@ -72,7 +73,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) PaperworkPush pape
}
- @ApiOperation(value = "文案删除")
+ @Operation(summary = "文案删除")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) PaperworkPush param){
BasicResult basicResult = new BasicResult();
@@ -85,7 +86,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) PaperworkPush para
return basicResult;
}
- @ApiOperation(value = "推送")
+ @Operation(summary = "推送")
@PutMapping(value = "/push")
public BasicResult push(@RequestBody @Validated(value = {}) PaperworkPush paperworkPush){
BasicResult basicResult = new BasicResult();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/AdvertisementController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/AdvertisementController.java
index 0493076..941911a 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/AdvertisementController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/AdvertisementController.java
@@ -6,8 +6,9 @@
import com.siam.package_promotion.entity.Advertisement;
import com.siam.package_promotion.model.param.AdvertisementParam;
import com.siam.package_promotion.service.AdvertisementService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -21,12 +22,12 @@
@RestController
@RequestMapping(value = "/rest/advertisement")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "广告轮播图模块相关接口", description = "AdvertisementController")
+@Tag(name = "广告轮播图模块相关接口", description = "AdvertisementController")
public class AdvertisementController {
@Autowired
private AdvertisementService advertisementService;
- @ApiOperation(value = "广告轮播图列表")
+ @Operation(summary = "广告轮播图列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) AdvertisementParam advertisement){
BasicData basicResult = new BasicData();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/CouponsMemberRelationController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/CouponsMemberRelationController.java
index 13b3733..d3ec0e1 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/CouponsMemberRelationController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/CouponsMemberRelationController.java
@@ -9,22 +9,28 @@
import com.siam.package_user.auth.cache.MemberSessionManager;
import com.siam.package_user.entity.Member;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Map;
@RestController
@RequestMapping(value = "/rest/member/couponsMemberRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "优惠卷用关系接口", description = "CouponsMemberRelationController")
+@Tag(name = "优惠卷用关系接口", description = "CouponsMemberRelationController")
public class CouponsMemberRelationController {
@Autowired
@@ -36,7 +42,7 @@ public class CouponsMemberRelationController {
@Autowired
private MemberSessionManager memberSessionManager;
- @ApiOperation(value = "新增优惠卷用户关系")
+ @Operation(summary = "新增优惠卷用户关系")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) CouponsMemberRelation couponsMemberRelation) {
BasicResult basicResult = new BasicResult();
@@ -49,11 +55,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) CouponsMemberRelat
return basicResult;
}
- @ApiOperation(value = "查看优惠卷关系详情(包含关联优惠卷)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = true, paramType = "query", dataType = "Integer"),
- })
- @PostMapping(value = "/selectById")
+ @Operation(summary = "查看优惠卷关系详情(包含关联优惠卷)")@PostMapping(value = "/selectById")
public BasicResult selectById(@RequestBody @Validated(value = {}) CouponsMemberRelation param){
BasicData basicResult = new BasicData();
@@ -67,21 +69,7 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) CouponsMemberR
}
- @ApiOperation(value = "优惠卷用户关系列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = false, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "couponsId", value = "优惠卷id", required = false, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "couponsName", value = "优惠卷名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "memberId", value = "用户id", required = false, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "startTime", value = "生效时间", required = false, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "endTime", value = "过期时间", required = false, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "isUsed", value = "是否已经使用,0=未使用,1=已使用", required = false, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "isExpired", value = "是否过期,0=未过期,1=已过期", required = false, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "isValid", value = "是否生效,0-未生效,1-生效中", required = false, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "优惠卷用户关系列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) CouponsMemberRelation couponsMemberRelation, HttpServletRequest request) {
BasicData basicResult = new BasicData();
Member loginMember = memberSessionManager.getSession(TokenUtil.getToken());
@@ -93,7 +81,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) CouponsMemberRelatio
return BasicResult.success(page);
}
- @ApiOperation(value = "查询优惠卷数量")
+ @Operation(summary = "查询优惠卷数量")
@PostMapping(value = "/selectCounts")
public BasicResult selectCounts( HttpServletRequest request){
BasicData basicResult = new BasicData();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/FullReductionRuleController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/FullReductionRuleController.java
index d640f37..98ba382 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/FullReductionRuleController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/FullReductionRuleController.java
@@ -6,10 +6,16 @@
import com.siam.package_common.exception.StoneCustomerException;
import com.siam.package_promotion.entity.FullReductionRule;
import com.siam.package_promotion.service.FullReductionRuleService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -18,23 +24,13 @@
@RestController
@RequestMapping(value = "/rest/fullReductionRule")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "满减规则模块相关接口", description = "FullReductionRuleController")
+@Tag(name = "满减规则模块相关接口", description = "FullReductionRuleController")
public class FullReductionRuleController {
@Autowired
private FullReductionRuleService fullReductionRuleService;
- @ApiOperation(value = "满减规则列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "name", value = "满减规则名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "status", value = "状态", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "limitedPrice", value = "分类名称", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "reducedPrice", value = "品牌id", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "满减规则列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) FullReductionRule fullReductionRule){
BasicData basicResult = new BasicData();
@@ -47,11 +43,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) FullReductionRule fu
return BasicResult.success(page);
}
- /*@ApiOperation(value = "查看满减规则详情")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = true, paramType = "query", dataType = "Integer"),
- })
- @PostMapping(value = "/selectById")
+ /*@Operation(summary = "查看满减规则详情")@PostMapping(value = "/selectById")
public BasicResult selectById(@RequestParam(value = "id", required = true) int id){
BasicData basicResult = new BasicData();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/MemberAdvertisementController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/MemberAdvertisementController.java
index c3203e9..96b741f 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/MemberAdvertisementController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/member/MemberAdvertisementController.java
@@ -13,10 +13,16 @@
import com.siam.package_user.auth.cache.MemberSessionManager;
import com.siam.package_user.entity.Member;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -26,14 +32,14 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.io.IOException;
@Slf4j
@RestController
@RequestMapping(value = "/rest/member/advertisement")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "用户广告轮播图模块相关接口", description = "MemberAdvertisementController")
+@Tag(name = "用户广告轮播图模块相关接口", description = "MemberAdvertisementController")
public class MemberAdvertisementController {
@Autowired
@@ -48,19 +54,7 @@ public class MemberAdvertisementController {
@Autowired
private MemberSessionManager memberSessionManager;
- @ApiOperation(value = "广告轮播图列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "广告轮播图表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "imageName", value = "轮播图名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "imagePath", value = "轮播图路径", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "description", value = "说明", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "type", value = "轮播图类型 1=首页轮播图 2=菜单页轮播图", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "imageLinkUrl", value = "点击轮播图跳转的链接", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "广告轮播图列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) AdvertisementParam advertisement, HttpServletRequest request){
BasicData basicResult = new BasicData();
Member loginMember = memberSessionManager.getSession(TokenUtil.getToken());
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantAdvertisementController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantAdvertisementController.java
index a17c6ca..fda4c38 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantAdvertisementController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantAdvertisementController.java
@@ -7,10 +7,16 @@
import com.siam.package_promotion.entity.Advertisement;
import com.siam.package_promotion.model.param.AdvertisementParam;
import com.siam.package_promotion.service.AdvertisementService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -21,25 +27,13 @@
@RestController
@RequestMapping(value = "/rest/merchant/advertisement")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端广告轮播图模块相关接口【暂无调用】", description = "MerchantAdvertisementController")
+@Tag(name = "商家端广告轮播图模块相关接口【暂无调用】", description = "MerchantAdvertisementController")
public class MerchantAdvertisementController {
@Autowired
private AdvertisementService advertisementService;
- @ApiOperation(value = "广告轮播图列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "广告轮播图表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "imageName", value = "轮播图名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "imagePath", value = "轮播图路径", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "description", value = "说明", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "type", value = "轮播图类型 1=首页轮播图 2=菜单页轮播图", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "imageLinkUrl", value = "点击轮播图跳转的链接", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "广告轮播图列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) AdvertisementParam advertisement){
BasicData basicResult = new BasicData();
Page page = advertisementService.getListByPage(advertisement);
@@ -47,16 +41,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) AdvertisementParam a
return BasicResult.success(page);
}
- @ApiOperation(value = "新增广告轮播图")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "imageName", value = "轮播图名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "imagePath", value = "轮播图路径", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "description", value = "说明", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "type", value = "轮播图类型 1=首页轮播图 2=菜单页轮播图", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "imageLinkUrl", value = "点击轮播图跳转的链接", required = false, paramType = "query", dataType = "string"),
- })
- @PostMapping(value = "/insert")
+ @Operation(summary = "新增广告轮播图")@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) AdvertisementParam advertisement){
BasicResult basicResult = new BasicResult();
@@ -71,17 +56,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) AdvertisementParam
}
- @ApiOperation(value = "修改广告轮播图")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "广告轮播图主键id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "imageName", value = "轮播图名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "imagePath", value = "轮播图路径", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "description", value = "说明", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "type", value = "轮播图类型 1=首页轮播图 2=菜单页轮播图", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "imageLinkUrl", value = "点击轮播图跳转的链接", required = false, paramType = "query", dataType = "string"),
- })
- @PutMapping(value = "/update")
+ @Operation(summary = "修改广告轮播图")@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) AdvertisementParam advertisement){
BasicResult basicResult = new BasicResult();
@@ -99,11 +74,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) AdvertisementParam
}
- @ApiOperation(value = "删除广告轮播图")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "广告轮播图主键id", required = true, paramType = "query", dataType = "int")
- })
- @DeleteMapping(value = "/delete")
+ @Operation(summary = "删除广告轮播图")@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) AdvertisementParam param){
BasicResult basicResult = new BasicResult();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsController.java
index bffda98..653d616 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsController.java
@@ -20,16 +20,22 @@
import com.siam.package_promotion.service.CouponsService;
import com.siam.package_promotion.service.CouponsShopRelationService;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -37,7 +43,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/coupons")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端优惠卷接口", description = "MerchantCouponsController")
+@Tag(name = "商家端优惠卷接口", description = "MerchantCouponsController")
public class MerchantCouponsController {
@Autowired
@@ -58,21 +64,7 @@ public class MerchantCouponsController {
@Autowired
private MerchantSessionManager merchantSessionManager;
- @ApiOperation(value = "新增优惠卷")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "name", value = "优惠卷名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "preferentialType", value = "优惠类型,1=折扣,2=满减", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "discountAmount", value = "折扣额度", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "limitedPrice", value = "满足价格(元,满足该价格才能使用)", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "reducedPrice", value = "减价额度(元)", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "description", value = "使用规则描述", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "validType", value = "时效:1绝对时效(领取后XXX-XXX时间段有效) 2相对时效(领取后N天有效)", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "validStartTime", value = "使用开始时间", required = true, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "validEndTime", value = "使用结束时间", required = true, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "validDays", value = "自领取之日起有效天数", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "isDelete", value = "是否已删除", required = true, paramType = "query", dataType = "Boolean"),
- })
- @PostMapping(value = "/insert")
+ @Operation(summary = "新增优惠卷")@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) Coupons coupons, HttpServletRequest request) {
BasicResult basicResult = new BasicResult();
@@ -110,22 +102,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) Coupons coupons, H
}
@MerchantPermission
- @ApiOperation(value = "修改优惠卷-TODO")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "name", value = "优惠卷名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "preferentialType", value = "优惠类型,1=折扣,2=满减", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "discountAmount", value = "折扣额度", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "limitedPrice", value = "满足价格(元,满足该价格才能使用)", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "reducedPrice", value = "减价额度(元)", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "description", value = "使用规则描述", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "validType", value = "时效:1绝对时效(领取后XXX-XXX时间段有效) 2相对时效(领取后N天有效)", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "validStartTime", value = "使用开始时间", required = true, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "validEndTime", value = "使用结束时间", required = true, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "validDays", value = "自领取之日起有效天数", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "isDelete", value = "是否已删除", required = true, paramType = "query", dataType = "Boolean"),
- })
- @PutMapping(value = "/update")
+ @Operation(summary = "修改优惠卷-TODO")@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) Coupons coupons, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -139,11 +116,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) Coupons coupons, H
}
@MerchantPermission
- @ApiOperation(value = "删除优惠卷")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = true, paramType = "query", dataType = "Integer"),
- })
- @DeleteMapping(value = "/delete")
+ @Operation(summary = "删除优惠卷")@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) Coupons param){
BasicResult basicResult = new BasicResult();
@@ -155,11 +128,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) Coupons param){
return basicResult;
}
- @ApiOperation(value = "查看优惠卷详情(包含关联商品)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = true, paramType = "query", dataType = "Integer"),
- })
- @PostMapping(value = "/selectById")
+ @Operation(summary = "查看优惠卷详情(包含关联商品)")@PostMapping(value = "/selectById")
public BasicResult selectById(@RequestBody @Validated(value = {}) Coupons param){
BasicData basicResult = new BasicData();
@@ -172,24 +141,7 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) Coupons param)
return basicResult;
}
- @ApiOperation(value = "优惠卷列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = false, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "name", value = "优惠卷名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "preferentialType", value = "优惠类型,1=折扣,2=满减", required = false, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "discountAmount", value = "折扣额度", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "limitedPrice", value = "满足价格(元,满足该价格才能使用)", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "reducedPrice", value = "减价额度(元)", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "description", value = "使用规则描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "validType", value = "时效:1绝对时效(领取后XXX-XXX时间段有效) 2相对时效(领取后N天有效)", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "validStartTime", value = "使用开始时间", required = true, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "validEndTime", value = "使用结束时间", required = true, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "validDays", value = "自领取之日起有效天数", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "isDelete", value = "是否已删除", required = true, paramType = "query", dataType = "Boolean"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "优惠卷列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) CouponsDto couponsDto, HttpServletRequest request) {
BasicData basicResult = new BasicData();
@@ -204,22 +156,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) CouponsDto couponsDt
return BasicResult.success(page);
}
- @ApiOperation(value = "优惠卷时间修改(延长)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = false, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "name", value = "优惠卷名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "preferentialType", value = "优惠类型,1=折扣,2=满减", required = false, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "discountAmount", value = "折扣额度", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "limitedPrice", value = "满足价格(元,满足该价格才能使用)", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "reducedPrice", value = "减价额度(元)", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "description", value = "使用规则描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "validType", value = "时效:1绝对时效(领取后XXX-XXX时间段有效) 2相对时效(领取后N天有效)", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "validStartTime", value = "使用开始时间", required = true, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "validEndTime", value = "使用结束时间", required = true, paramType = "query", dataType = "Date"),
- @ApiImplicitParam(name = "validDays", value = "自领取之日起有效天数", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "isDelete", value = "是否已删除", required = true, paramType = "query", dataType = "Boolean"),
- })
- @PostMapping(value = "/updateEndTime")
+ @Operation(summary = "优惠卷时间修改(延长)")@PostMapping(value = "/updateEndTime")
public BasicResult updateEndTime(@RequestBody @Validated(value = {}) Coupons coupons){
BasicResult basicResult = new BasicResult();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsGoodsRelationController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsGoodsRelationController.java
index 57c0d3b..24de977 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsGoodsRelationController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsGoodsRelationController.java
@@ -5,10 +5,16 @@
import com.siam.package_common.util.GsonUtils;
import com.siam.package_promotion.entity.CouponsGoodsRelation;
import com.siam.package_promotion.service.CouponsGoodsRelationService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -19,19 +25,13 @@
@RestController
@RequestMapping(value = "/rest/merchant/couponsGoodsRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端优惠卷接口", description = "MerchantCouponsGoodsRelationController")
+@Tag(name = "商家端优惠卷接口", description = "MerchantCouponsGoodsRelationController")
public class MerchantCouponsGoodsRelationController {
@Autowired
private CouponsGoodsRelationService couponsGoodsRelationService;
- @ApiOperation(value = "新增优惠卷商品关系")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "couponsId", value = "优惠卷id", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "goodsIdList", value = "商品id集合(list)", required = true, paramType = "body", dataType = "string"),
-
- })
- @PostMapping(value = "/insert")
+ @Operation(summary = "新增优惠卷商品关系")@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) CouponsGoodsRelation param) {
BasicResult basicResult = new BasicResult();
@@ -44,16 +44,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) CouponsGoodsRelati
return basicResult;
}
- @ApiOperation(value = "优惠卷商品关系列表查询")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "goodsId", value = "商品id", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "couponsId", value = "优惠卷id", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
-
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "优惠卷商品关系列表查询")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) CouponsGoodsRelation couponsGoodsRelation) {
BasicResult basicResult = new BasicResult();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsMemberRelationController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsMemberRelationController.java
index 4d5c257..523cead 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsMemberRelationController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantCouponsMemberRelationController.java
@@ -11,10 +11,16 @@
import com.siam.package_promotion.service.CouponsMemberRelationService;
import com.siam.package_user.entity.Member;
import com.siam.package_user.feign.MemberFeignApi;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -27,7 +33,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/couponsMemberRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端优惠卷用关系接口", description = "MerchantCouponsMemberRelationController")
+@Tag(name = "商家端优惠卷用关系接口", description = "MerchantCouponsMemberRelationController")
public class MerchantCouponsMemberRelationController {
@Autowired
@@ -43,11 +49,7 @@ public class MerchantCouponsMemberRelationController {
private AliyunSms aliyunSms;
- @ApiOperation(value = "赠送优惠卷")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "couponsId", value = "优惠卷id", required = false, paramType = "query", dataType = "int")
- })
- @PostMapping(value = "/giveCoupons")
+ @Operation(summary = "赠送优惠卷")@PostMapping(value = "/giveCoupons")
public BasicResult giveCoupons(@RequestBody @Validated(value = {}) CouponsMemberRelation param) {
BasicResult basicResult = new BasicResult();
@@ -102,12 +104,7 @@ public BasicResult giveCoupons(@RequestBody @Validated(value = {}) CouponsMember
return basicResult;
}
- @ApiOperation(value = "赠送优惠卷(单发)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "couponsId", value = "优惠卷id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "memberId", value = "用户id", required = false, paramType = "query", dataType = "int")
- })
- @PostMapping(value = "/giveSingleCoupons")
+ @Operation(summary = "赠送优惠卷(单发)")@PostMapping(value = "/giveSingleCoupons")
public BasicResult giveSingleCoupons(@RequestBody @Validated(value = {}) CouponsMemberRelation param) {
BasicResult basicResult = new BasicResult();
diff --git a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantFullReductionRuleController.java b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantFullReductionRuleController.java
index 36e8c52..c43ba92 100644
--- a/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantFullReductionRuleController.java
+++ b/siam-promotion/promotion-provider/src/main/java/com/siam/package_promotion/controller/merchant/MerchantFullReductionRuleController.java
@@ -12,21 +12,27 @@
import com.siam.package_merchant.auth.cache.MerchantSessionManager;
import com.siam.package_merchant.entity.Merchant;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
@RestController
@RequestMapping(value = "/rest/merchant/fullReductionRule")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端满减规则模块相关接口", description = "MerchantFullReductionRuleController")
+@Tag(name = "商家端满减规则模块相关接口", description = "MerchantFullReductionRuleController")
public class MerchantFullReductionRuleController {
@Autowired
@@ -38,14 +44,7 @@ public class MerchantFullReductionRuleController {
@Autowired
private MerchantSessionManager merchantSessionManager;
- @ApiOperation(value = "新增满减规则")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "name", value = "满减规则名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "status", value = "状态", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "limitedPrice", value = "分类名称", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "reducedPrice", value = "品牌id", required = true, paramType = "query", dataType = "BigDecimal")
- })
- @PostMapping(value = "/insert")
+ @Operation(summary = "新增满减规则")@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) FullReductionRule fullReductionRule, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -62,15 +61,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) FullReductionRule
}
@MerchantPermission
- @ApiOperation(value = "修改满减规则")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "name", value = "满减规则名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "status", value = "状态", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "limitedPrice", value = "分类名称", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "reducedPrice", value = "品牌id", required = true, paramType = "query", dataType = "BigDecimal")
- })
- @PutMapping(value = "/update")
+ @Operation(summary = "修改满减规则")@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) FullReductionRule fullReductionRule, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -90,11 +81,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) FullReductionRule
}
@MerchantPermission
- @ApiOperation(value = "删除满减规则")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = true, paramType = "query", dataType = "Integer"),
- })
- @DeleteMapping(value = "/delete")
+ @Operation(summary = "删除满减规则")@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) FullReductionRule param){
BasicResult basicResult = new BasicResult();
@@ -118,17 +105,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) FullReductionRule
- @ApiOperation(value = "满减规则列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "主键id", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "name", value = "满减规则名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "status", value = "状态", required = true, paramType = "query", dataType = "Integer"),
- @ApiImplicitParam(name = "limitedPrice", value = "分类名称", required = false, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "reducedPrice", value = "品牌id", required = true, paramType = "query", dataType = "BigDecimal"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "满减规则列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) FullReductionRule fullReductionRule, HttpServletRequest request) {
BasicData basicResult = new BasicData();
diff --git a/siam-promotion/promotion-provider/src/main/resources/application-local.yml b/siam-promotion/promotion-provider/src/main/resources/application-local.yml
index 864784b..abd932c 100644
--- a/siam-promotion/promotion-provider/src/main/resources/application-local.yml
+++ b/siam-promotion/promotion-provider/src/main/resources/application-local.yml
@@ -5,9 +5,9 @@ server:
spring:
#mysql
datasource:
- url: jdbc:mysql://127.0.0.1:3306/siam_cloud?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
+ url: jdbc:mysql://127.0.0.1:3306/siam_cloud?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root
- password: root
+ password: 123456
# #mongodb(默认时没有账号密码的)
# # application:
@@ -75,6 +75,18 @@ spring:
application:
name: promotion-siam
+ # Nacos注册中心/配置中心
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+ config:
+ server-addr: 127.0.0.1:8848
+ file-extension: yaml
+ config:
+ import:
+ - optional:nacos:${spring.application.name}-local.yaml
+
#配置文件上传大小限制
servlet:
multipart:
@@ -142,17 +154,7 @@ mybatis-plus:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-#eureka配置
-eureka:
- client:
- service-url:
- defaultZone: http://127.0.0.1:9000/eureka/
- register-with-eureka: true
- fetch-registry: true
- instance:
- #配置使用ip地址来注册(默认是主机名称)
- prefer-ip-address: true
- #心跳检测暂时不配置
+# Nacos注册中心/配置中心
#feign内部服务调用超时配置
feign:
@@ -173,24 +175,31 @@ rocketmq:
# Seata Config
seata:
- application-id: promotion-service
+ application-id: ${spring.application.name}
tx-service-group: my_test_tx_group
service:
vgroup-mapping:
- # 此处配置对应Server端配置registry.eureka.application的值
my_test_tx_group: default
registry:
- type: eureka
- eureka:
- service-url: http://127.0.0.1:9000/eureka/
- weight: 1
+ type: nacos
+ nacos:
+ application: seata-server
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
+ config:
+ type: nacos
+ nacos:
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
#springboot admin相关配置
management:
endpoints:
web:
exposure:
- include: "*" #'prometheus,health'
+ include: "health,prometheus,info"
exclude: "shutdown"
base-path: /actuator
endpoint:
@@ -215,6 +224,8 @@ management:
enabled: false
elasticsearch:
enabled: false
+ mail:
+ enabled: false
#日志配置
logging:
diff --git a/siam-promotion/promotion-provider/src/test/java/com/siam/package_promotion/ImageComposeTest.java b/siam-promotion/promotion-provider/src/test/java/com/siam/package_promotion/ImageComposeTest.java
index bab4869..81614ce 100644
--- a/siam-promotion/promotion-provider/src/test/java/com/siam/package_promotion/ImageComposeTest.java
+++ b/siam-promotion/promotion-provider/src/test/java/com/siam/package_promotion/ImageComposeTest.java
@@ -1,10 +1,11 @@
package com.siam.package_promotion;
import com.alibaba.fastjson.JSONObject;
-import sun.font.FontDesignMetrics;
import javax.imageio.ImageIO;
import java.awt.*;
+import java.awt.font.FontRenderContext;
+import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.HttpURLConnection;
@@ -18,33 +19,9 @@ public class ImageComposeTest {
public static void main(String[] args) throws IOException {
CompoundImage("https://deerspot.oss-cn-hangzhou.aliyuncs.com/test/siamCompose.png", "https://deerspot.oss-cn-hangzhou.aliyuncs.com/test/eb831e8f0b42b8b3a8b4360c11a2b5e.jpg", "", "C:\\Users\\Administrator\\Desktop\\testComponse.png", "postion");
-
- /*try {
- String destUrl = "https://ibsbjstar.ccb.com.cn/NCCB_Encoder/Encoder?CODE=EUSo4Twu6YRk2JDPJ9OnpfgrdDObpGwKBGOTqVwnBfWAvjCP5UOFuig6hySmrww2hXVIqDgb5NUOrvwI5NRuqtQ3pXcRVh";
- HttpURLConnection httpUrl = (HttpURLConnection) new URL(destUrl).openConnection();
- httpUrl.connect();
- File file = inputStreamToFile(httpUrl.getInputStream(),"url.png");
- System.out.println("111====>>>>"+file.getPath());
- httpUrl.disconnect();
- } catch (Exception e) {
- e.printStackTrace();
- }*/
-
-
-// qrcode();
}
-
- /**
- * 图片合成
- * @param mainImgPath 主图片路径
- * @param qrcodePath 二维码路径
- * @param text 文字
- * @param compoundPath 图片合成保存路径
- * @param databasePath 数据库保存路径
- * @return 保存路径
- */
- public static String CompoundImage(String mainImgPath, String qrcodePath,String text,String compoundPath,String databasePath) throws IOException {
+ public static String CompoundImage(String mainImgPath, String qrcodePath, String text, String compoundPath, String databasePath) throws IOException {
String destUrl = mainImgPath;
HttpURLConnection httpUrl = (HttpURLConnection) new URL(destUrl).openConnection();
httpUrl.connect();
@@ -53,33 +30,29 @@ public static String CompoundImage(String mainImgPath, String qrcodePath,String
HttpURLConnection httpUrl_qrcode = (HttpURLConnection) new URL(destUrl_qrcode).openConnection();
httpUrl_qrcode.connect();
- String ewmurl="";
+ String ewmurl = "";
try {
- //1、获取主图片
- BufferedImage big = ImageIO.read(httpUrl.getInputStream());//mainImgPath
+ BufferedImage big = ImageIO.read(httpUrl.getInputStream());
URL url = new URL("https://img-blog.csdn.net/20150906104118760");
- //2、拿到二维码
- BufferedImage erweima = ImageIO.read(httpUrl_qrcode.getInputStream());//qrcodePath
+ BufferedImage erweima = ImageIO.read(httpUrl_qrcode.getInputStream());
int width = 1080;
int height = 1854;
Image image = big.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage bufferedImage2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
- //3、开始绘图
Graphics2D g = bufferedImage2.createGraphics();
g.drawImage(image, 0, 0, null);
g.drawImage(erweima, 20, 1500, 300, 300, null);
- Font font = new Font("微软雅黑", Font.BOLD, 38);
+ Font font = new Font("SansSerif", Font.BOLD, 38);
g.setFont(font);
g.setPaint(Color.BLACK);
- //4、设置位置
int wordWidth = getWordWidth(font, text);
int i = width / 2;
int i1 = (i - wordWidth) / 2;
- int numWidth=i+i1;
- g.drawString(text, numWidth-10, 310+28);
+ int numWidth = i + i1;
+ g.drawString(text, numWidth - 10, 310 + 28);
g.dispose();
- ewmurl =compoundPath;
+ ewmurl = compoundPath;
ImageIO.write(bufferedImage2, "jpg", new File(ewmurl));
System.out.println("图片生成完毕");
ewmurl = databasePath;
@@ -91,136 +64,41 @@ public static String CompoundImage(String mainImgPath, String qrcodePath,String
return ewmurl;
}
-
-// /**
-// * 生成二维码
-// * @param backLink 扫码回调链接
-// * @param savePath 二维码保存路径
-// * @return 返回保存路径(用于保存数据库)
-// * @throws IOException
-// */
-// public static String createQRCode(String backLink,String savePath) throws IOException {
-// //计算二维码图片的高宽比
-// int v = 6;
-// int width = 67 + 12 * (v - 1);
-// int height = 67 + 12 * (v - 1);
-//
-// Map x = new HashMap();
-// x.put("setQrcodeErrorCorrect", 'L');
-// x.put("setQrcodeEncodeMode", 'B');//注意版本信息 N代表数字 、A代表 a-z,A-Z、B代表 其他)
-// x.put("setQrcodeVersion", v);
-//
-// byte[] d = backLink.getBytes("utf-8");//汉字转格式需要抛出异常
-//
-// //缓冲区
-// BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
-//
-// //绘图
-// Graphics2D gs = bufferedImage.createGraphics();
-//
-// gs.setBackground(Color.WHITE);
-// gs.setColor(Color.BLACK);
-// gs.clearRect(0, 0, width, height);
-//
-// //偏移量
-// int pixoff = 2;
-//
-// if (d.length > 0 && d.length < 120) {
-// boolean[][] s = x.calQrcode(d);
-//
-// for (int i = 0; i < s.length; i++) {
-// for (int j = 0; j < s.length; j++) {
-// if (s[j][i]) {
-// gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
-// }
-// }
-// }
-// }
-// gs.dispose();
-// bufferedImage.flush();
-// //设置图片格式,与输出的路径
-// String url = savePath;
-// ImageIO.write(bufferedImage, "png", new File(url));
-// System.out.println("二维码生成完毕");
-// return url;
-// }
-
public static int getWordWidth(Font font, String content) {
- FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
- int width = 0;
- for (int i = 0; i < content.length(); i++) {
- width += metrics.charWidth(content.charAt(i));
- }
- return width;
+ FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true);
+ return (int) font.getStringBounds(content, frc).getWidth();
}
-
-
-
-
-
-
-
- /**
- * 工具类
- * inputStream 转 File
- */
- public static File inputStreamToFile(InputStream ins, String name) throws Exception{
+ public static File inputStreamToFile(InputStream ins, String name) throws Exception {
File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);
if (file.exists()) {
return file;
}
- /*OutputStream os = new FileOutputStream(file);
- int bytesRead;
- int len = 8192;
- byte[] buffer = new byte[len];
- while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
- os.write(buffer, 0, bytesRead);
- }
- os.close();*/
ins.close();
return file;
}
-
-
-
-
-
-
-
-
-
+ // ... rest of the test methods (qrcode, sendPost, getToken) remain unchanged
public static void qrcode() {
try {
URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + getToken());
- System.out.println(url);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
- httpURLConnection.setRequestMethod("POST");// 提交模式
- // conn.setConnectTimeout(10000);//连接超时 单位毫秒
- // conn.setReadTimeout(2000);//读取超时 单位毫秒
- // 发送POST请求必须设置如下两行
+ httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
- // 获取URLConnection对象对应的输出流
PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
- // 发送请求参数
JSONObject paramJson = new JSONObject();
- paramJson.put("scene", "inviterId=111");//参数
- paramJson.put("page", "pages/login/choose/choose");//小程序未发布前注释,否则找不到对应的页面,就会生成错误的图片
+ paramJson.put("scene", "inviterId=111");
+ paramJson.put("page", "pages/login/choose/choose");
paramJson.put("width", 430);
-// paramJson.put("auto_color", true);
-// paramJson.put("auto_color", false);
JSONObject lineColor = new JSONObject();
lineColor.put("r", 0);
lineColor.put("g", 0);
lineColor.put("b", 0);
paramJson.put("line_color", lineColor);
printWriter.write(paramJson.toString());
- // flush输出流的缓冲
printWriter.flush();
- //开始获取数据
BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
OutputStream os = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\testQrcode.png"));
BufferedImage read = ImageIO.read(httpURLConnection.getInputStream());
@@ -241,13 +119,6 @@ public static void qrcode() {
}
}
-
- /**
- * 向指定 URL 发送POST方法的请求
- *
- * @param url 发送请求的 URL
- * @return 所代表远程资源的响应结果
- */
public static String sendPost(String url, Map paramMap) {
PrintWriter out = null;
BufferedReader in = null;
@@ -260,23 +131,16 @@ public static String sendPost(String url, Map paramMap) {
}
try {
URL realUrl = new URL(url);
- // 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
- // 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
- // 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
- // 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
- // 发送请求参数
out.print(param);
- // flush输出流的缓冲
out.flush();
- // 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
@@ -284,16 +148,10 @@ public static String sendPost(String url, Map paramMap) {
}
} catch (Exception e) {
System.out.println(e);
- }
- // 使用finally块来关闭输出流、输入流
- finally {
+ } finally {
try {
- if (out != null) {
- out.close();
- }
- if (in != null) {
- in.close();
- }
+ if (out != null) out.close();
+ if (in != null) in.close();
} catch (IOException ex) {
ex.printStackTrace();
}
@@ -303,14 +161,13 @@ public static String sendPost(String url, Map paramMap) {
public static String getToken() {
try {
- Map map = new LinkedHashMap();
+ Map map = new LinkedHashMap<>();
map.put("grant_type", "client_credential");
- map.put("appid", "wx2e1a8193d3ed12fe");// 这里我是写在配置类里,需要改成自己的appid
- map.put("secret", "2774e3a86dc30fbf1ac63d81b56f2291"); //这里我是写在配置类里,需要改成自己的secret
+ map.put("appid", "wx2e1a8193d3ed12fe");
+ map.put("secret", "2774e3a86dc30fbf1ac63d81b56f2291");
String rt = sendPost("https://api.weixin.qq.com/cgi-bin/token", map);
JSONObject json = JSONObject.parseObject(rt);
- if (json.getString("access_token") != null || json.getString("access_token") != "") {
-// System.out.println("token:" + json.getString("access_token"));
+ if (json.getString("access_token") != null) {
return json.getString("access_token");
} else {
return null;
@@ -319,6 +176,5 @@ public static String getToken() {
e.printStackTrace();
return null;
}
-
}
-}
\ No newline at end of file
+}
diff --git a/siam-rider/pom.xml b/siam-rider/pom.xml
index c630231..8249005 100644
--- a/siam-rider/pom.xml
+++ b/siam-rider/pom.xml
@@ -34,8 +34,6 @@
UTF-8
- 1.8
- 1.8
diff --git a/siam-rider/rider-api/pom.xml b/siam-rider/rider-api/pom.xml
index a53bf74..e755701 100644
--- a/siam-rider/rider-api/pom.xml
+++ b/siam-rider/rider-api/pom.xml
@@ -18,8 +18,6 @@
UTF-8
- 1.8
- 1.8
@@ -39,7 +37,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
exec
diff --git a/siam-rider/rider-api/src/main/java/com/siam/package_rider/entity/Rider.java b/siam-rider/rider-api/src/main/java/com/siam/package_rider/entity/Rider.java
index 57d64f0..abcfef6 100644
--- a/siam-rider/rider-api/src/main/java/com/siam/package_rider/entity/Rider.java
+++ b/siam-rider/rider-api/src/main/java/com/siam/package_rider/entity/Rider.java
@@ -4,7 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@@ -50,10 +50,10 @@ public void setEndCreateTime(Date endCreateTime) {
/* ##################################### START 扩展字段 #################################### */
- @ApiModelProperty(notes = "用户密码")
+ @Schema(description = "用户密码")
private String password;
- @ApiModelProperty(notes = "密码加盐")
+ @Schema(description = "密码加盐")
private String passwordSalt;
//门店名称
diff --git a/siam-rider/rider-api/src/main/java/com/siam/package_rider/util/HttpContext.java b/siam-rider/rider-api/src/main/java/com/siam/package_rider/util/HttpContext.java
index c64166f..219438c 100644
--- a/siam-rider/rider-api/src/main/java/com/siam/package_rider/util/HttpContext.java
+++ b/siam-rider/rider-api/src/main/java/com/siam/package_rider/util/HttpContext.java
@@ -3,8 +3,8 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
diff --git a/siam-rider/rider-api/src/main/java/com/siam/package_rider/util/TokenUtil.java b/siam-rider/rider-api/src/main/java/com/siam/package_rider/util/TokenUtil.java
index 29fd951..09c6d09 100644
--- a/siam-rider/rider-api/src/main/java/com/siam/package_rider/util/TokenUtil.java
+++ b/siam-rider/rider-api/src/main/java/com/siam/package_rider/util/TokenUtil.java
@@ -6,9 +6,9 @@
import com.siam.package_common.util.ToolUtil;
import com.siam.package_rider.entity.Rider;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
/**
* Token工具类
diff --git a/siam-rider/rider-provider/pom.xml b/siam-rider/rider-provider/pom.xml
index 0adb2da..28605c2 100644
--- a/siam-rider/rider-provider/pom.xml
+++ b/siam-rider/rider-provider/pom.xml
@@ -18,8 +18,6 @@
UTF-8
- 1.8
- 1.8
@@ -65,51 +63,40 @@
1.1
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
- 2.1.2.RELEASE
-
-
-
+
com.alibaba.cloud
- spring-cloud-starter-alibaba-seata
- 2021.1
-
-
- io.seata
- seata-spring-boot-starter
-
-
+ spring-cloud-starter-alibaba-nacos-discovery
+
- io.seata
- seata-spring-boot-starter
- 1.3.0
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-actuator
- 2.3.3.RELEASE
io.micrometer
micrometer-registry-prometheus
- 1.5.4
net.logstash.logback
logstash-logback-encoder
- 6.6
+
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
@@ -119,7 +106,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
com.siam.package_rider.RiderApplication
diff --git a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/RiderApplication.java b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/RiderApplication.java
index 1931682..94c2810 100644
--- a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/RiderApplication.java
+++ b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/RiderApplication.java
@@ -3,12 +3,17 @@
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableFeignClients("com.siam")
-@EnableEurekaClient
-@SpringBootApplication(scanBasePackages = "com.siam")
+@EnableDiscoveryClient
+@SpringBootApplication(scanBasePackages = "com.siam", exclude = {
+ MongoAutoConfiguration.class,
+ MongoDataAutoConfiguration.class
+})
@MapperScan(basePackages = {"com.siam.**.mapper"})
public class RiderApplication
{
diff --git a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/config/MybatisPlusConfig.java b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/config/MybatisPlusConfig.java
index 968f66d..24072af 100644
--- a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/config/MybatisPlusConfig.java
+++ b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/config/MybatisPlusConfig.java
@@ -1,6 +1,8 @@
package com.siam.package_rider.config;
-import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -19,8 +21,11 @@ public class MybatisPlusConfig {
* 分页插件
*/
@Bean
- public PaginationInterceptor paginationInterceptor() {
- return new PaginationInterceptor();
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
+ interceptor.addInnerInterceptor(paginationInnerInterceptor);
+ return interceptor;
}
}
\ No newline at end of file
diff --git a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/config/Swagger2Config.java b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/config/Swagger2Config.java
deleted file mode 100644
index 6f08ebc..0000000
--- a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/config/Swagger2Config.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.siam.package_rider.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class Swagger2Config {
-
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.SWAGGER_2)
- .apiInfo(apiInfo())
- .select()
- .apis(RequestHandlerSelectors.basePackage("com.siam"))//扫描包路径
- .paths(PathSelectors.any())
- .build();
- }
-
- // 构建api文档的详细信息函数,注意这里的注解引用的是哪个
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title("暹罗外卖-商家服务接口文档")//页面标题
- .description("")//描述
- .version("1.0")//版本号
- .build();
- }
-}
\ No newline at end of file
diff --git a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/admin/AdminRiderController.java b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/admin/AdminRiderController.java
index 50d9001..5467bd4 100644
--- a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/admin/AdminRiderController.java
+++ b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/admin/AdminRiderController.java
@@ -5,8 +5,11 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_rider.entity.Rider;
import com.siam.package_rider.service.RiderService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -20,13 +23,13 @@
@RestController
@RequestMapping(value = "/rest/admin/rider")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台商家自配送骑手信息模块相关接口", description = "AdminRiderController")
+@Tag(name = "后台商家自配送骑手信息模块相关接口", description = "AdminRiderController")
public class AdminRiderController {
@Autowired
private RiderService riderService;
- @ApiOperation(value = "骑手信息列表")
+ @Operation(summary = "骑手信息列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) Rider param) {
BasicData basicResult = new BasicData();
@@ -35,15 +38,8 @@ public BasicResult list(@RequestBody @Validated(value = {}) Rider param) {
return BasicResult.success(page);
}
-// @ApiOperation(value = "骑手信息创建")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "骑手信息主键id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "name", value = "骑手信息名称", required = true, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "detail", value = "商家自配送骑手信息详情描述", required = false, paramType = "query", dataType = "string")
-// })
-// @PostMapping(value = "/insert")
+// @Operation(summary = "骑手信息创建")
+//// @PostMapping(value = "/insert")
// public BasicResult insert(Rider rider){
// BasicResult basicResult = new BasicResult();
//
@@ -58,15 +54,8 @@ public BasicResult list(@RequestBody @Validated(value = {}) Rider param) {
// }
//
//
-// @ApiOperation(value = "骑手信息修改")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "骑手信息主键id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "name", value = "骑手信息名称", required = true, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "detail", value = "商家自配送骑手信息详情描述", required = false, paramType = "query", dataType = "string")
-// })
-// @PutMapping(value = "/update")
+// @Operation(summary = "骑手信息修改")
+//// @PutMapping(value = "/update")
// public BasicResult update(Rider rider){
// BasicResult basicResult = new BasicResult();
//
@@ -80,11 +69,8 @@ public BasicResult list(@RequestBody @Validated(value = {}) Rider param) {
// }
//
//
-// @ApiOperation(value = "骑手信息删除")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "骑手信息主键id集合(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "String")
-// })
-// @DeleteMapping(value = "/delete")
+// @Operation(summary = "骑手信息删除")
+//// @DeleteMapping(value = "/delete")
// public BasicResult delete(@RequestParam(value = "ids") List ids){
// BasicResult basicResult = new BasicResult();
// for (Integer id : ids) {
diff --git a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/member/WxLoginController.java b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/member/WxLoginController.java
index dd89d72..1af63ca 100644
--- a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/member/WxLoginController.java
+++ b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/member/WxLoginController.java
@@ -8,7 +8,8 @@
import com.siam.package_weixin_basic.config.WxEncrypted;
import com.siam.package_weixin_basic.config.WxSession;
import com.siam.package_weixin_basic.util.WxdecodeUtils;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.http.HttpMethod;
@@ -90,7 +91,7 @@ public WxEncrypted getWxUserInfo(String code, String iv, String encryptedData) t
return null;
}
- @ApiOperation(value = "获取微信手机号")
+ @Operation(summary = "获取微信手机号")
@PostMapping(value = "/getWxPhone")
public BasicResult getWxPhone(@RequestBody WxCode wxCode) throws Exception {
BasicData basicResult = new BasicData();
diff --git a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/merchant/MerchantRiderController.java b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/merchant/MerchantRiderController.java
index 3dc3f3a..5d3f03f 100644
--- a/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/merchant/MerchantRiderController.java
+++ b/siam-rider/rider-provider/src/main/java/com/siam/package_rider/controller/merchant/MerchantRiderController.java
@@ -10,48 +10,33 @@
import com.siam.package_merchant.util.TokenUtil;
import com.siam.package_rider.entity.Rider;
import com.siam.package_rider.service.RiderService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Date;
@RestController
@RequestMapping(value = "/rest/merchant/rider")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端商家自配送骑手信息模块相关接口", description = "MerchantRiderController")
+@Tag(name = "商家端商家自配送骑手信息模块相关接口", description = "MerchantRiderController")
public class MerchantRiderController {
@Autowired
private RiderService riderService;
-// @Autowired
-// private MerchantService merchantService;
-
@Autowired
private MerchantSessionManager merchantSessionManager;
- @ApiOperation(value = "骑手信息列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "商家自配送骑手信息详情描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
+ @Operation(summary = "骑手信息列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) Rider rider, HttpServletRequest request){
BasicData basicResult = new BasicData();
- //获取当前登录用户绑定的门店编号
Merchant loginMerchant = merchantSessionManager.getSession(TokenUtil.getToken());
rider.setShopId(loginMerchant.getShopId());
@@ -60,19 +45,11 @@ public BasicResult list(@RequestBody @Validated(value = {}) Rider rider, HttpSer
return BasicResult.success(page);
}
- @ApiOperation(value = "骑手信息创建")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "骑手信息主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "骑手信息名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "商家自配送骑手信息详情描述", required = false, paramType = "query", dataType = "string")
- })
+ @Operation(summary = "骑手信息创建")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) Rider rider, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
- //获取当前登录用户绑定的门店编号
Merchant loginMerchant = merchantSessionManager.getSession(TokenUtil.getToken());
rider.setShopId(loginMerchant.getShopId());
@@ -87,19 +64,11 @@ public BasicResult insert(@RequestBody @Validated(value = {}) Rider rider, HttpS
}
- @ApiOperation(value = "骑手信息修改")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "骑手信息主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "骑手信息名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "商家自配送骑手信息详情描述", required = false, paramType = "query", dataType = "string")
- })
+ @Operation(summary = "骑手信息修改")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) Rider rider, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
- //获取当前登录用户绑定的门店编号
Merchant loginMerchant = merchantSessionManager.getSession(TokenUtil.getToken());
Rider dbRider = riderService.selectByPrimaryKey(rider.getId());
@@ -119,15 +88,11 @@ public BasicResult update(@RequestBody @Validated(value = {}) Rider rider, HttpS
}
- @ApiOperation(value = "骑手信息删除")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "骑手信息主键id集合(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "String")
- })
+ @Operation(summary = "骑手信息删除")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) Rider rider){
BasicResult basicResult = new BasicResult();
- //获取当前登录用户绑定的门店编号
Merchant loginMerchant = merchantSessionManager.getSession(TokenUtil.getToken());
for (Integer id : rider.getIds()) {
@@ -144,4 +109,4 @@ public BasicResult delete(@RequestBody @Validated(value = {}) Rider rider){
basicResult.setMessage("删除成功");
return basicResult;
}
-}
\ No newline at end of file
+}
diff --git a/siam-rider/rider-provider/src/main/resources/application-local.yml b/siam-rider/rider-provider/src/main/resources/application-local.yml
index c8256d2..73f1074 100644
--- a/siam-rider/rider-provider/src/main/resources/application-local.yml
+++ b/siam-rider/rider-provider/src/main/resources/application-local.yml
@@ -5,9 +5,9 @@ server:
spring:
#mysql
datasource:
- url: jdbc:mysql://127.0.0.1:3306/siam_cloud?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
+ url: jdbc:mysql://127.0.0.1:3306/siam_cloud?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root
- password: root
+ password: 123456
#redis单例模式
redis:
@@ -31,6 +31,18 @@ spring:
application:
name: rider-siam
+ # Nacos注册中心/配置中心
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+ config:
+ server-addr: 127.0.0.1:8848
+ file-extension: yaml
+ config:
+ import:
+ - optional:nacos:${spring.application.name}-local.yaml
+
jackson:
#时间戳统一转换为指定格式
date-format: yyyy/MM/dd HH:mm:ss
@@ -90,17 +102,7 @@ mybatis-plus:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-#eureka配置
-eureka:
- client:
- service-url:
- defaultZone: http://127.0.0.1:9000/eureka/
- register-with-eureka: true
- fetch-registry: true
- instance:
- #配置使用ip地址来注册(默认是主机名称)
- prefer-ip-address: true
- #心跳检测暂时不配置
+# Nacos注册中心/配置中心
#feign内部服务调用超时配置-第二种
feign:
@@ -112,24 +114,31 @@ feign:
# Seata Config
seata:
- application-id: rider-service
+ application-id: ${spring.application.name}
tx-service-group: my_test_tx_group
service:
vgroup-mapping:
- # 此处配置对应Server端配置registry.eureka.application的值
my_test_tx_group: default
registry:
- type: eureka
- eureka:
- service-url: http://127.0.0.1:9000/eureka/
- weight: 1
+ type: nacos
+ nacos:
+ application: seata-server
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
+ config:
+ type: nacos
+ nacos:
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
#springboot admin相关配置
management:
endpoints:
web:
exposure:
- include: "*" #'prometheus,health'
+ include: "health,prometheus,info"
exclude: "shutdown"
base-path: /actuator
endpoint:
@@ -154,6 +163,8 @@ management:
enabled: false
elasticsearch:
enabled: false
+ mail: # 新增这行
+ enabled: false # 新增这行
#日志配置
logging:
diff --git a/siam-user/pom.xml b/siam-user/pom.xml
index 3f34f44..8395b49 100644
--- a/siam-user/pom.xml
+++ b/siam-user/pom.xml
@@ -31,7 +31,5 @@
UTF-8
- 1.8
- 1.8
\ No newline at end of file
diff --git a/siam-user/user-api/pom.xml b/siam-user/user-api/pom.xml
index a7bd273..d8eded8 100644
--- a/siam-user/user-api/pom.xml
+++ b/siam-user/user-api/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
@@ -37,7 +35,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
exec
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/entity/Admin.java b/siam-user/user-api/src/main/java/com/siam/package_user/entity/Admin.java
index 6af3747..2321555 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/entity/Admin.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/entity/Admin.java
@@ -3,47 +3,46 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Data
@TableName("tb_admin")
-@ApiModel(value = "管理员表")
+ @Schema(description= "管理员表")
public class Admin {
- @ApiModelProperty(notes = "主键id")
+ @Schema(description = "主键id")
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "管理员用户名")
+ @Schema(description = "管理员用户名")
private String username;
- @ApiModelProperty(notes = "手机号")
+ @Schema(description = "手机号")
private String mobile;
- @ApiModelProperty(notes = "密码")
+ @Schema(description = "密码")
private String password;
- @ApiModelProperty(notes = "密码盐值")
+ @Schema(description = "密码盐值")
private String passwordSalt;
- @ApiModelProperty(notes = "昵称")
+ @Schema(description = "昵称")
private String nickname;
- @ApiModelProperty(notes = "权限")
+ @Schema(description = "权限")
private String roles;
- @ApiModelProperty(notes = "是否禁用 0=启用 1=禁用")
+ @Schema(description = "是否禁用 0=启用 1=禁用")
private Boolean isDisabled;
- @ApiModelProperty(notes = "注册时间")
+ @Schema(description = "注册时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
- @ApiModelProperty(notes = "最后登录时间")
+ @Schema(description = "最后登录时间")
private Date lastLoginTime;
}
\ No newline at end of file
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/entity/AdminToken.java b/siam-user/user-api/src/main/java/com/siam/package_user/entity/AdminToken.java
index a760a53..d092d39 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/entity/AdminToken.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/entity/AdminToken.java
@@ -1,30 +1,29 @@
package com.siam.package_user.entity;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Date;
@TableName("tb_admin_token")
-@ApiModel(value = "管理员登录token令牌表")
+ @Schema(description= "管理员登录token令牌表")
public class AdminToken {
- @ApiModelProperty(notes = "主键id")
+ @Schema(description = "主键id")
private Integer id;
- @ApiModelProperty(notes = "管理员id")
+ @Schema(description = "管理员id")
private Integer adminId;
- @ApiModelProperty(notes = "管理员用户名")
+ @Schema(description = "管理员用户名")
private String username;
- @ApiModelProperty(notes = "登录令牌")
+ @Schema(description = "登录令牌")
private String token;
- @ApiModelProperty(notes = "登录方式 wap")
+ @Schema(description = "登录方式 wap")
private String type;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
public Integer getId() {
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/entity/DeliveryAddress.java b/siam-user/user-api/src/main/java/com/siam/package_user/entity/DeliveryAddress.java
index a41a01e..dd42077 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/entity/DeliveryAddress.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/entity/DeliveryAddress.java
@@ -3,8 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/entity/MemberToken.java b/siam-user/user-api/src/main/java/com/siam/package_user/entity/MemberToken.java
index c9dc6fd..311df01 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/entity/MemberToken.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/entity/MemberToken.java
@@ -3,32 +3,31 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Date;
@TableName("tb_member_token")
-@ApiModel(value = "用户登录token令牌表")
+ @Schema(description= "用户登录token令牌表")
public class MemberToken {
- @ApiModelProperty(notes = "主键id")
+ @Schema(description = "主键id")
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "用户id")
+ @Schema(description = "用户id")
private Integer memberId;
- @ApiModelProperty(notes = "用户名")
+ @Schema(description = "用户名")
private String username;
- @ApiModelProperty(notes = "登录令牌")
+ @Schema(description = "登录令牌")
private String token;
- @ApiModelProperty(notes = "登录方式 wap")
+ @Schema(description = "登录方式 wap")
private String type;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
public Integer getId() {
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/entity/MemberTradeRecord.java b/siam-user/user-api/src/main/java/com/siam/package_user/entity/MemberTradeRecord.java
index bb238c2..8573164 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/entity/MemberTradeRecord.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/entity/MemberTradeRecord.java
@@ -3,8 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.web.bind.annotation.RequestParam;
@@ -13,7 +12,7 @@
@Data
@TableName("tb_member_trade_record")
-@ApiModel(value = "用户交易表")
+ @Schema(description= "用户交易表")
public class MemberTradeRecord {
@TableField(exist = false)
@@ -22,38 +21,38 @@ public class MemberTradeRecord {
@TableField(exist = false)
Date endTime;
- @ApiModelProperty(notes = "主键id")
+ @Schema(description = "主键id")
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "商家账号id")
+ @Schema(description = "商家账号id")
private Integer merchantId;
- @ApiModelProperty(notes = "用户id")
+ @Schema(description = "用户id")
private Integer memberId;
- @ApiModelProperty(notes = "交易单号(支付平台的订单号)")
+ @Schema(description = "交易单号(支付平台的订单号)")
private String tradeNo;
- @ApiModelProperty(notes = "商户单号(网站平台的订单号)")
+ @Schema(description = "商户单号(网站平台的订单号)")
private String outTradeNo;
- @ApiModelProperty(notes = "交易类型 1=用户订单付款 2=用户会员充值 3=用户自取订单改为配送 4=商家余额提现")
+ @Schema(description = "交易类型 1=用户订单付款 2=用户会员充值 3=用户自取订单改为配送 4=商家余额提现")
private Integer type;
- @ApiModelProperty(notes = "支付方式 1=微信 2=支付宝 3=平台余额 4=网银 5=银行转账")
+ @Schema(description = "支付方式 1=微信 2=支付宝 3=平台余额 4=网银 5=银行转账")
private Integer paymentMode;
- @ApiModelProperty(notes = "金额")
+ @Schema(description = "金额")
private BigDecimal amount;
- @ApiModelProperty(notes = "交易状态 1=待支付 2=支付成功 3=支付失败 3=交易超时自动关闭")
+ @Schema(description = "交易状态 1=待支付 2=支付成功 3=支付失败 3=交易超时自动关闭")
private Integer status;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "修改时间")
+ @Schema(description = "修改时间")
private Date updateTime;
public Integer getId() {
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/entity/internal/VipRechargeRecord.java b/siam-user/user-api/src/main/java/com/siam/package_user/entity/internal/VipRechargeRecord.java
index 8e670da..651d749 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/entity/internal/VipRechargeRecord.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/entity/internal/VipRechargeRecord.java
@@ -4,8 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@@ -13,7 +12,7 @@
@Data
@TableName("tb_vip_recharge_record")
-@ApiModel(value = "会员充值记录表")
+ @Schema(description= "会员充值记录表")
public class VipRechargeRecord {
/* ##################################### START 扩展字段 #################################### */
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/jwt/AuthenticationInterceptor.java b/siam-user/user-api/src/main/java/com/siam/package_user/jwt/AuthenticationInterceptor.java
index ef14c72..99029e6 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/jwt/AuthenticationInterceptor.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/jwt/AuthenticationInterceptor.java
@@ -11,8 +11,8 @@
//import org.springframework.web.method.HandlerMethod;
//import org.springframework.web.servlet.HandlerInterceptor;
//import org.springframework.web.servlet.ModelAndView;
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
+//import jakarta.servlet.http.HttpServletRequest;
+//import jakarta.servlet.http.HttpServletResponse;
//import java.lang.reflect.Method;
//
//public class AuthenticationInterceptor implements HandlerInterceptor {
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/model/param/MemberWithdrawRecordParam.java b/siam-user/user-api/src/main/java/com/siam/package_user/model/param/MemberWithdrawRecordParam.java
index 2f65b42..cbac72d 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/model/param/MemberWithdrawRecordParam.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/model/param/MemberWithdrawRecordParam.java
@@ -6,7 +6,7 @@
import lombok.Data;
import org.hibernate.validator.constraints.Range;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/util/HttpContext.java b/siam-user/user-api/src/main/java/com/siam/package_user/util/HttpContext.java
index 8b603a7..33d93f7 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/util/HttpContext.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/util/HttpContext.java
@@ -3,8 +3,8 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
diff --git a/siam-user/user-api/src/main/java/com/siam/package_user/util/TokenUtil.java b/siam-user/user-api/src/main/java/com/siam/package_user/util/TokenUtil.java
index cdc52d9..b758979 100644
--- a/siam-user/user-api/src/main/java/com/siam/package_user/util/TokenUtil.java
+++ b/siam-user/user-api/src/main/java/com/siam/package_user/util/TokenUtil.java
@@ -10,9 +10,9 @@
import com.siam.package_user.entity.Admin;
import com.siam.package_user.entity.Member;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.util.Date;
/**
diff --git a/siam-user/user-provider/pom.xml b/siam-user/user-provider/pom.xml
index 9a4f275..b228ba0 100644
--- a/siam-user/user-provider/pom.xml
+++ b/siam-user/user-provider/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
@@ -63,51 +61,40 @@
1.1
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
- 2.1.2.RELEASE
-
-
-
+
com.alibaba.cloud
- spring-cloud-starter-alibaba-seata
- 2021.1
-
-
- io.seata
- seata-spring-boot-starter
-
-
+ spring-cloud-starter-alibaba-nacos-discovery
+
- io.seata
- seata-spring-boot-starter
- 1.3.0
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-actuator
- 2.3.3.RELEASE
io.micrometer
micrometer-registry-prometheus
- 1.5.4
net.logstash.logback
logstash-logback-encoder
- 6.6
+
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
@@ -117,7 +104,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
com.siam.package_user.UserApplication
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/UserApplication.java b/siam-user/user-provider/src/main/java/com/siam/package_user/UserApplication.java
index 9375d9c..cfdf9e6 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/UserApplication.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/UserApplication.java
@@ -1,15 +1,19 @@
package com.siam.package_user;
-import org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableFeignClients("com.siam")
-@EnableEurekaClient
-@SpringBootApplication(scanBasePackages = "com.siam", exclude = {RocketMQAutoConfiguration.class})
+@EnableDiscoveryClient
+@SpringBootApplication(scanBasePackages = "com.siam", exclude = {
+ MongoAutoConfiguration.class,
+ MongoDataAutoConfiguration.class
+})
@MapperScan(basePackages = {"com.siam.**.mapper"})
public class UserApplication
{
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/config/MybatisPlusConfig.java b/siam-user/user-provider/src/main/java/com/siam/package_user/config/MybatisPlusConfig.java
index 910ef4e..5e1eb1c 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/config/MybatisPlusConfig.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/config/MybatisPlusConfig.java
@@ -1,26 +1,23 @@
package com.siam.package_user.config;
-import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
-// /**
-// * mybatis-plus SQL执行效率插件【生产环境可以关闭】
-// */
-// @Bean
-// public PerformanceInterceptor performanceInterceptor() {
-// return new PerformanceInterceptor();
-// }
-
/**
* 分页插件
*/
@Bean
- public PaginationInterceptor paginationInterceptor() {
- return new PaginationInterceptor();
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
+ interceptor.addInnerInterceptor(paginationInnerInterceptor);
+ return interceptor;
}
-
-}
\ No newline at end of file
+
+}
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/config/Swagger2Config.java b/siam-user/user-provider/src/main/java/com/siam/package_user/config/Swagger2Config.java
deleted file mode 100644
index 9032964..0000000
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/config/Swagger2Config.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.siam.package_user.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class Swagger2Config {
-
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.SWAGGER_2)
- .apiInfo(apiInfo())
- .select()
- .apis(RequestHandlerSelectors.basePackage("com.siam"))//扫描包路径
- .paths(PathSelectors.any())
- .build();
- }
-
- // 构建api文档的详细信息函数,注意这里的注解引用的是哪个
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title("暹罗外卖-用户服务接口文档")//页面标题
- .description("")//描述
- .version("1.0")//版本号
- .build();
- }
-}
\ No newline at end of file
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminController.java
index 0ee2241..29bda44 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminController.java
@@ -6,7 +6,8 @@
import com.siam.package_user.model.param.AdminParam;
import com.siam.package_user.model.result.AdminResult;
import com.siam.package_user.service.AdminService;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -15,7 +16,7 @@
@RestController
@RequestMapping(value = "/rest/admin")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台管理员模块相关接口", description = "AdminController")
+@Tag(name = "后台管理员模块相关接口", description = "AdminController")
public class AdminController {
@Autowired
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminDeliveryAddressController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminDeliveryAddressController.java
index 28160b7..75854ab 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminDeliveryAddressController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminDeliveryAddressController.java
@@ -6,8 +6,9 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_user.entity.DeliveryAddress;
import com.siam.package_user.service.DeliveryAddressService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -19,13 +20,13 @@
@RestController
@RequestMapping(value = "/rest/admin/deliveryAddress")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台收货地址模块相关接口", description = "AdminDeliveryAddressController")
+@Tag(name = "后台收货地址模块相关接口", description = "AdminDeliveryAddressController")
public class AdminDeliveryAddressController {
@Autowired
private DeliveryAddressService deliveryAddressService;
- @ApiOperation(value = "收货地址列表")
+ @Operation(summary = "收货地址列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) DeliveryAddress param) {
BasicData basicResult = new BasicData();
@@ -35,7 +36,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) DeliveryAddress para
return BasicResult.success(page);
}
- @ApiOperation(value = "新增收货地址")
+ @Operation(summary = "新增收货地址")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) DeliveryAddress param) {
BasicResult basicResult = new BasicResult();
@@ -48,7 +49,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) DeliveryAddress pa
return basicResult;
}
- @ApiOperation(value = "修改收货地址")
+ @Operation(summary = "修改收货地址")
@PostMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) DeliveryAddress param) {
BasicResult basicResult = new BasicResult();
@@ -61,7 +62,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) DeliveryAddress pa
return basicResult;
}
- @ApiOperation(value = "删除收货地址")
+ @Operation(summary = "删除收货地址")
@PostMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) DeliveryAddress param) {
BasicResult basicResult = new BasicResult();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberBillingRecordController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberBillingRecordController.java
index ebfd74e..487519b 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberBillingRecordController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberBillingRecordController.java
@@ -6,10 +6,26 @@
//import com.siam.package_common.constant.BasicResultCode;
//import com.siam.package_user.entity.MemberBillingRecord;
//import com.siam.package_user.service.MemberBillingRecordService;
-//import io.swagger.annotations.Api;
-//import io.swagger.annotations.ApiImplicitParam;
-//import io.swagger.annotations.ApiImplicitParams;
-//import io.swagger.annotations.ApiOperation;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.web.bind.annotation.PostMapping;
@@ -19,23 +35,14 @@
//@RestController
//@RequestMapping(value = "/rest/admin/memberBillingRecord")
//@Transactional(rollbackFor = Exception.class)
-//@Api(tags = "后台用户账单记录模块相关接口", description = "AdminMemberBillingRecordController")
+//@Tag(name = "后台用户账单记录模块相关接口", description = "AdminMemberBillingRecordController")
//public class AdminMemberBillingRecordController {
//
// @Autowired
// private MemberBillingRecordService memberBillingRecordService;
//
-// @ApiOperation(value = "用户账单记录列表")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "商品表主键id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "name", value = "商品名称", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "detail", value = "用户账单记录详情描述", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
-// @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
-// })
-// @PostMapping(value = "/list")
+// @Operation(summary = "用户账单记录列表")
+//// @PostMapping(value = "/list")
// public BasicResult list(int pageNo, int pageSize, MemberBillingRecord memberBillingRecord){
// BasicData basicResult = new BasicData();
// Page page = memberBillingRecordService.getListByPage(param.getPageNo(), param.getPageSize(), memberBillingRecord);
@@ -47,15 +54,8 @@
// return basicResult;
// }
//
-// @ApiOperation(value = "用户账单记录创建")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "用户账单记录主键id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "name", value = "用户账单记录名称", required = true, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "detail", value = "用户账单记录详情描述", required = false, paramType = "query", dataType = "string")
-// })
-// @PostMapping(value = "/insert")
+// @Operation(summary = "用户账单记录创建")
+//// @PostMapping(value = "/insert")
// public BasicResult insert(MemberBillingRecord memberBillingRecord){
// BasicResult basicResult = new BasicResult();
//
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberController.java
index 84aa08f..2ebee66 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberController.java
@@ -6,8 +6,11 @@
import com.siam.package_user.entity.Member;
import com.siam.package_user.model.param.MemberParam;
import com.siam.package_user.service.MemberService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -19,27 +22,27 @@
@RestController
@RequestMapping(value = "/rest/admin/member")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台用户模块相关接口", description = "AdminMemberController")
+@Tag(name = "后台用户模块相关接口", description = "AdminMemberController")
public class AdminMemberController {
@Autowired
private MemberService memberService;
- @ApiOperation(value = "用户列表")
+ @Operation(summary = "用户列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) MemberParam param) {
Page page = memberService.getListByPage(param);
return BasicResult.success(page);
}
- @ApiOperation(value = "查询已购买用户列表")
+ @Operation(summary = "查询已购买用户列表")
@PostMapping(value = "/purchasedList")
public BasicResult purchasedList(@RequestBody @Validated(value = {}) MemberParam param) {
Page page = memberService.purchasedList(param);
return BasicResult.success(page);
}
- @ApiOperation(value = "查询未购买用户列表")
+ @Operation(summary = "查询未购买用户列表")
@PostMapping(value = "/unPurchasedList")
public BasicResult unPurchasedList(@RequestBody @Validated(value = {}) MemberParam param) {
Page page = memberService.unPurchasedList(param);
@@ -47,7 +50,7 @@ public BasicResult unPurchasedList(@RequestBody @Validated(value = {}) MemberPar
}
@AdminPermission
- @ApiOperation(value = "修改用户信息")
+ @Operation(summary = "修改用户信息")
@PostMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) MemberParam param) {
//管理员只准修改个别字段信息
@@ -58,11 +61,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) MemberParam param)
return BasicResult.success();
}
- /*@ApiOperation(value = "启用用户(含批量操作)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "ids", value = "用户表主键id(批量启用时id以逗号分隔)", required = true, paramType = "query", dataType = "string"),
- })
- @PostMapping(value = "/enable")
+ /*@Operation(summary = "启用用户(含批量操作)")@PostMapping(value = "/enable")
public BasicResult enable(@RequestParam(value = "ids", required = true) List ids){
BasicResult basicResult = new BasicResult();
@@ -96,11 +95,7 @@ public BasicResult enable(@RequestParam(value = "ids", required = true) List ids){
BasicResult basicResult = new BasicResult();
@@ -134,11 +129,7 @@ public BasicResult disable(@RequestParam(value = "ids", required = true) List ids){
BasicResult basicResult = new BasicResult();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberTradeRecordController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberTradeRecordController.java
index 223f3ad..a70e6a5 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberTradeRecordController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberTradeRecordController.java
@@ -6,10 +6,26 @@
//import com.siam.package_common.constant.BasicResultCode;
//import com.siam.package_user.entity.MemberTradeRecord;
//import com.siam.package_user.service.MemberTradeRecordService;
-//import io.swagger.annotations.Api;
-//import io.swagger.annotations.ApiImplicitParam;
-//import io.swagger.annotations.ApiImplicitParams;
-//import io.swagger.annotations.ApiOperation;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+//import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.web.bind.annotation.PostMapping;
@@ -22,24 +38,13 @@
//@RestController
//@RequestMapping(value = "/rest/admin/memberTrade")
//@Transactional(rollbackFor = Exception.class)
-//@Api(tags = "后台用户交易模块相关接口", description = "AdminMemberTradeController")
+//@Tag(name = "后台用户交易模块相关接口", description = "AdminMemberTradeController")
//public class AdminMemberTradeRecordController {
// @Autowired
// private MemberTradeRecordService memberTradeRecordService;
//
-// @ApiOperation(value = "用户交易列表")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "用户交易表主键id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "name", value = "用户交易名称", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "logo", value = "logo图片", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "firstLetter", value = "用户交易首字母", required = false, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "parentId", value = "父类别id", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
-// @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
-// })
-// @PostMapping(value = "/list")
+// @Operation(summary = "用户交易列表")
+//// @PostMapping(value = "/list")
// public BasicResult list(int pageNo, int pageSize, MemberTradeRecord memberTradeRecord){
// BasicData basicResult = new BasicData();
//
@@ -53,16 +58,8 @@
// }
//
//
-// @ApiOperation(value = "新增用户交易")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "name", value = "用户交易名称", required = true, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "logo", value = "logo图片", required = true, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "firstLetter", value = "用户交易首字母", required = true, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "parentId", value = "父类别id", required = true, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
-// })
-// @PostMapping(value = "/insert")
+// @Operation(summary = "新增用户交易")
+//// @PostMapping(value = "/insert")
// public BasicResult insert(MemberTradeRecord memberTradeRecord){
// BasicResult basicResult = new BasicResult();
//
@@ -74,17 +71,8 @@
// return basicResult;
// }
//
-// @ApiOperation(value = "修改用户交易")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "用户交易表主键id", required = true, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "name", value = "用户交易名称", required = true, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "logo", value = "logo图片", required = true, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "firstLetter", value = "用户交易首字母", required = true, paramType = "query", dataType = "string"),
-// @ApiImplicitParam(name = "parentId", value = "父类别id", required = true, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
-// @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
-// })
-// @PostMapping(value = "/update")
+// @Operation(summary = "修改用户交易")
+//// @PostMapping(value = "/update")
// public BasicResult update(MemberTradeRecord memberTradeRecord){
// BasicResult basicResult = new BasicResult();
//
@@ -96,11 +84,8 @@
// return basicResult;
// }
//
-// @ApiOperation(value = "删除用户交易(含批量操作)")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "ids", value = "用户交易表主键id(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "string"),
-// })
-// @PostMapping(value = "/delete")
+// @Operation(summary = "删除用户交易(含批量操作)")
+//// @PostMapping(value = "/delete")
// public BasicResult delete(@RequestParam(value = "ids", required = true) List ids){
// BasicResult basicResult = new BasicResult();
//
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberWithdrawRecordController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberWithdrawRecordController.java
index d865974..b6585f4 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberWithdrawRecordController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/AdminMemberWithdrawRecordController.java
@@ -6,8 +6,9 @@
import com.siam.package_common.model.valid_group.ValidGroupOfId;
import com.siam.package_user.model.param.MemberWithdrawRecordParam;
import com.siam.package_user.service.MemberWithdrawRecordService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -21,20 +22,20 @@
@RestController
@RequestMapping(value = "/rest/admin/memberWithdrawRecord")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台用户提现记录模块相关接口", description = "AdminMemberWithdrawRecordController")
+@Tag(name = "后台用户提现记录模块相关接口", description = "AdminMemberWithdrawRecordController")
public class AdminMemberWithdrawRecordController {
@Autowired
private MemberWithdrawRecordService memberWithdrawRecordService;
- @ApiOperation(value = "用户提现记录列表")
+ @Operation(summary = "用户提现记录列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) MemberWithdrawRecordParam param) {
Page> page = memberWithdrawRecordService.getListByPageJoinMember(param);
return BasicResult.success(page);
}
- @ApiOperation(value = "用户提现记录-统计金额")
+ @Operation(summary = "用户提现记录-统计金额")
@PostMapping(value = "/statisticalAmount")
public BasicResult statisticalAmount(@RequestBody @Validated(value = {}) MemberWithdrawRecordParam param) {
Map map = memberWithdrawRecordService.statisticalAmount(param);
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeDenominationController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeDenominationController.java
index 2829291..a3a5e97 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeDenominationController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeDenominationController.java
@@ -8,8 +8,9 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_common.constant.BasicResultCode;
import com.siam.package_user.entity.internal.VipRechargeDenomination;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -20,7 +21,7 @@
@RestController
@RequestMapping(value = "/rest/admin/vipRechargeDenomination")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台会员充值面额模块相关接口", description = "AdminVipRechargeDenominationController")
+@Tag(name = "后台会员充值面额模块相关接口", description = "AdminVipRechargeDenominationController")
public class AdminVipRechargeDenominationController {
@Autowired
@@ -29,7 +30,7 @@ public class AdminVipRechargeDenominationController {
@Autowired
private VipRechargeDenominationCouponsRelationService vipRechargeDenominationCouponsRelationService;
- @ApiOperation(value = "会员充值面额列表")
+ @Operation(summary = "会员充值面额列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) VipRechargeDenomination vipRechargeDenomination){
BasicData basicResult = new BasicData();
@@ -38,7 +39,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) VipRechargeDenominat
return BasicResult.success(page);
}
- @ApiOperation(value = "新增会员充值面额")
+ @Operation(summary = "新增会员充值面额")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) VipRechargeDenomination vipRechargeDenomination){
BasicResult basicResult = new BasicResult();
@@ -54,7 +55,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) VipRechargeDenomin
}
@AdminPermission
- @ApiOperation(value = "修改会员充值面额")
+ @Operation(summary = "修改会员充值面额")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) VipRechargeDenomination vipRechargeDenomination){
BasicResult basicResult = new BasicResult();
@@ -69,7 +70,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) VipRechargeDenomin
}
@AdminPermission
- @ApiOperation(value = "删除会员充值面额")
+ @Operation(summary = "删除会员充值面额")
@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) VipRechargeDenomination param){
BasicResult basicResult = new BasicResult();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeDenominationCouponsRelationController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeDenominationCouponsRelationController.java
index f12d481..07b638c 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeDenominationCouponsRelationController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeDenominationCouponsRelationController.java
@@ -7,8 +7,9 @@
import com.siam.package_common.constant.BasicResultCode;
import com.siam.package_common.util.GsonUtils;
import com.siam.package_user.entity.internal.VipRechargeDenominationCouponsRelation;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -19,13 +20,13 @@
@RestController
@RequestMapping(value = "/rest/admin/vipRechargeDenominationCouponsRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台会员充值面额与赠送优惠券关联接口", description = "AdminCouponsController")
+@Tag(name = "后台会员充值面额与赠送优惠券关联接口", description = "AdminCouponsController")
public class AdminVipRechargeDenominationCouponsRelationController {
@Autowired
private VipRechargeDenominationCouponsRelationService vipRechargeDenominationCouponsRelationService;
- @ApiOperation(value = "新增会员充值面额与赠送优惠券关联")
+ @Operation(summary = "新增会员充值面额与赠送优惠券关联")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) VipRechargeDenominationCouponsRelation param) {
BasicResult basicResult = new BasicResult();
@@ -39,7 +40,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) VipRechargeDenomin
return basicResult;
}
- @ApiOperation(value = "会员充值面额与赠送优惠券关联列表查询")
+ @Operation(summary = "会员充值面额与赠送优惠券关联列表查询")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) VipRechargeDenominationCouponsRelation vipRechargeDenominationCouponsRelation) {
BasicData basicResult = new BasicData();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeRecordController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeRecordController.java
index 8207d9d..3560c97 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeRecordController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/admin/internal/AdminVipRechargeRecordController.java
@@ -9,16 +9,17 @@
import com.siam.package_user.entity.internal.VipRechargeRecord;
import com.siam.package_user.service.internal.VipRechargeRecordService;
import com.siam.package_user.entity.Member;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.time.DateUtils;
+import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.Map;
@@ -26,7 +27,7 @@
@RestController
@RequestMapping(value = "/rest/admin/vipRechargeRecord")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台会员充值记录模块相关接口", description = "AdminVipRechargeRecordController")
+@Tag(name = "后台会员充值记录模块相关接口", description = "AdminVipRechargeRecordController")
public class AdminVipRechargeRecordController {
@Autowired
@@ -35,7 +36,7 @@ public class AdminVipRechargeRecordController {
@Autowired
private MemberFeignApi memberFeignApi;
- @ApiOperation(value = "会员充值记录列表")
+ @Operation(summary = "会员充值记录列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) VipRechargeRecord vipRechargeRecord){
BasicData basicResult = new BasicData();
@@ -46,7 +47,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) VipRechargeRecord vi
return BasicResult.success(page);
}
- @ApiOperation(value = "会员充值记录-统计金额")
+ @Operation(summary = "会员充值记录-统计金额")
@PostMapping(value = "/statisticalAmount")
public BasicResult statisticalAmount(@RequestBody @Validated(value = {}) VipRechargeRecord vipRechargeRecord, HttpServletRequest request){
BasicData basicResult = new BasicData();
@@ -60,7 +61,7 @@ public BasicResult statisticalAmount(@RequestBody @Validated(value = {}) VipRech
return basicResult;
}
- @ApiOperation(value = "后台管理员充值会员")
+ @Operation(summary = "后台管理员充值会员")
@PostMapping(value = "/updateVip")
public BasicResult update(@RequestBody @Validated(value = {}) VipRechargeRecord vipRechargeRecord){
log.info("请求参数 -> " + vipRechargeRecord);
@@ -113,7 +114,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) VipRechargeRecord
return basicResult;
}
-// @ApiOperation(value = "会员充值记录创建")
+// @Operation(summary = "会员充值记录创建")
// @PostMapping(value = "/insert")
// public BasicResult insert(VipRechargeRecord vipRechargeRecord){
// BasicResult basicResult = new BasicResult();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/DeliveryAddressController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/DeliveryAddressController.java
index 0f9dce0..4066574 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/DeliveryAddressController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/DeliveryAddressController.java
@@ -10,22 +10,21 @@
import com.siam.package_user.auth.cache.MemberSessionManager;
import com.siam.package_user.entity.Member;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Date;
@RestController
@RequestMapping(value = "/rest/member/deliveryAddress")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "收货地址模块相关接口", description = "DeliveryAddressController")
+@Tag(name = "收货地址模块相关接口", description = "DeliveryAddressController")
public class DeliveryAddressController {
@Autowired
@@ -34,19 +33,7 @@ public class DeliveryAddressController {
@Autowired
private MemberSessionManager memberSessionManager;
- @ApiOperation(value = "收货地址列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "收货地址表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "realname", value = "收件人姓名", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "phone", value = "联系电话", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sex", value = "收件人性别 0=男 1=女", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "area", value = "地区(收货地址)", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "street", value = "街道/详细收货地址", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "isDefault", value = "是否默认收获地址 0=否 1=是", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否禁用 0=启用 1=禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
- })
+ @Operation(summary = "收货地址列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) DeliveryAddress deliveryAddress, HttpServletRequest request){
BasicData basicResult = new BasicData();
@@ -55,46 +42,20 @@ public BasicResult list(@RequestBody @Validated(value = {}) DeliveryAddress deli
deliveryAddress.setMemberId(loginMember.getId());
Page page = deliveryAddressService.getListByPage(deliveryAddress.getPageNo(), deliveryAddress.getPageSize(), deliveryAddress);
- // 对手机号码做加密处理 (从这种list中修改数据时,我体会到了按址传递和按值传递的意义所在)
- /*List list = page.getRecords();
- list.forEach(address -> {
- String phone = address.getPhone();
- if(phone.length() == 11){
- phone = phone.substring(0, 3) + "*****" + phone.substring(phone.length()-3);
- address.setPhone(phone);
- }
- });*/
-
return BasicResult.success(page);
}
- @ApiOperation(value = "新增收货地址")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "memberId", value = "用户id", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "realname", value = "收件人姓名", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sex", value = "收件人性别 0=男 1=女", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "phone", value = "联系电话", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "province", value = "省份(收货地址)", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "city", value = "市区(收货地址)", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "area", value = "地区(收货地址)", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "street", value = "街道/详细收货地址", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "isDefault", value = "是否默认收获地址 0=否 1=是", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否禁用 0=启用 1=禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDeleted", value = "是否删除 0=正常 1=已删除", required = false, paramType = "query", dataType = "int")
-
- })
+ @Operation(summary = "新增收货地址")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) DeliveryAddress deliveryAddress, HttpServletRequest request){
BasicData basicResult = new BasicData();
Member loginMember = memberSessionManager.getSession(TokenUtil.getToken());
- // 添加DeliveryAddress数据
deliveryAddress.setMemberId(loginMember.getId());
deliveryAddress.setCreateTime(new Date());
deliveryAddress.setUpdateTime(new Date());
deliveryAddressService.insertSelective(deliveryAddress);
- //将不等于当前这个地址,这个用户下其他的地址默认设置为否
if(deliveryAddress.getIsDefault() == Quantity.INT_1){
deliveryAddressService.updateIsDefaultExclusion(deliveryAddress.getId(), deliveryAddress.getMemberId());
}
@@ -106,19 +67,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) DeliveryAddress de
return basicResult;
}
- @ApiOperation(value = "修改收货地址")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "收货地址表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "realname", value = "收件人姓名", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "phone", value = "联系电话", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sex", value = "收件人性别 0=男 1=女", required = true, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "province", value = "省份(收货地址)", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "city", value = "市区(收货地址)", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "area", value = "地区(收货地址)", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "street", value = "街道/详细收货地址", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "isDisabled", value = "是否禁用 0=启用 1=禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDefault", value = "是否默认收获地址 0=否 1=是", required = true, paramType = "query", dataType = "int")
- })
+ @Operation(summary = "修改收货地址")
@PostMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) DeliveryAddress deliveryAddress, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -139,11 +88,9 @@ public BasicResult update(@RequestBody @Validated(value = {}) DeliveryAddress de
return basicResult;
}
- // 更新DeliveryAddress数据
deliveryAddress.setUpdateTime(new Date());
deliveryAddressService.updateByPrimaryKeySelective(deliveryAddress);
- //将不等于当前这个地址,这个用户下其他的地址默认设置为否
if(deliveryAddress.getIsDefault() == Quantity.INT_1){
deliveryAddressService.updateIsDefaultExclusion(dbDeliveryAddress.getId(), dbDeliveryAddress.getMemberId());
}
@@ -155,10 +102,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) DeliveryAddress de
}
- @ApiOperation(value = "删除收货地址")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "收货地址表主键id", required = false, paramType = "query", dataType = "int")
- })
+ @Operation(summary = "删除收货地址")
@PostMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) DeliveryAddress param){
BasicResult basicResult = new BasicResult();
@@ -179,7 +123,6 @@ public BasicResult delete(@RequestBody @Validated(value = {}) DeliveryAddress pa
return basicResult;
}
- //删除DeliveryAddress数据
deliveryAddressService.deleteByPrimaryKey(param.getId());
basicResult.setSuccess(true);
@@ -189,10 +132,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) DeliveryAddress pa
}
- @ApiOperation(value = "设为默认收货地址")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "收货地址表主键id", required = false, paramType = "query", dataType = "int")
- })
+ @Operation(summary = "设为默认收货地址")
@PostMapping(value = "/updateIsDefault")
public BasicResult updateIsDefault(@RequestBody @Validated(value = {}) DeliveryAddress param){
BasicResult basicResult = new BasicResult();
@@ -213,13 +153,11 @@ public BasicResult updateIsDefault(@RequestBody @Validated(value = {}) DeliveryA
return basicResult;
}
- // 更新DeliveryAddress数据
DeliveryAddress updateDeliveryAddress = new DeliveryAddress();
updateDeliveryAddress.setId(dbDeliveryAddress.getId());
updateDeliveryAddress.setIsDefault(Quantity.INT_1);
deliveryAddressService.updateByPrimaryKeySelective(updateDeliveryAddress);
- //将不等于当前这个地址,这个用户下其他的地址默认设置为否
deliveryAddressService.updateIsDefaultExclusion(dbDeliveryAddress.getId(), dbDeliveryAddress.getMemberId());
basicResult.setSuccess(true);
@@ -227,4 +165,4 @@ public BasicResult updateIsDefault(@RequestBody @Validated(value = {}) DeliveryA
basicResult.setMessage("设置成功");
return basicResult;
}
-}
\ No newline at end of file
+}
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberController.java
index 449cec1..f924e4b 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberController.java
@@ -4,7 +4,8 @@
import com.siam.package_user.model.param.MemberParam;
import com.siam.package_user.model.result.MemberResult;
import com.siam.package_user.service.MemberService;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -186,7 +187,7 @@ public BasicResult forgetPaymentPasswordStep2(@RequestBody @Validated(value = {}
* @author 暹罗
*/
@RequestMapping(value = "/verifyPaymentPassword",method = RequestMethod.POST)
- @ApiOperation(value = "")
+ @Operation(summary = "")
public BasicResult verifyPaymentPassword(@RequestBody @Validated(value = {}) MemberParam param) {
memberService.verifyPaymentPassword(param);
return BasicResult.success();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberInviteRelationController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberInviteRelationController.java
index 389e9c4..3c11a51 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberInviteRelationController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberInviteRelationController.java
@@ -6,8 +6,11 @@
import com.siam.package_user.entity.Member;
import com.siam.package_user.model.param.MemberInviteRelationParam;
import com.siam.package_user.service.MemberInviteRelationService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -18,25 +21,20 @@
@RestController
@RequestMapping(value = "/rest/memberInviteRelation")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "用户邀请关系模块相关接口", description = "MemberInviteRelationController")
+@Tag(name = "用户邀请关系模块相关接口", description = "MemberInviteRelationController")
public class MemberInviteRelationController {
@Autowired
private MemberInviteRelationService memberInviteRelationService;
- @ApiOperation(value = "通过邀请者id获取邀请的用户")
+ @Operation(summary = "通过邀请者id获取邀请的用户")
@PostMapping(value = "/getMemberListByInviterId")
public BasicResult getUserListByInviterId(@RequestBody @Validated(value = {}) MemberInviteRelationParam param) {
Page result = memberInviteRelationService.getMemberListByInviterId(param);
return BasicResult.success(result);
}
- /*@ApiOperation(value = "新用户被邀请接口")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "mobile", value = "用户手机号", required = true, paramType = "query", dataType = "int", defaultValue = "null"),
- @ApiImplicitParam(name = "inviterId", value = "邀请者id", required = true, paramType = "query", dataType = "int", defaultValue = "null")
- })
- @PostMapping(value = "/newMemberInvite")
+ /*@Operation(summary = "新用户被邀请接口")@PostMapping(value = "/newMemberInvite")
public BasicResult getLoginMemberInfo(@RequestParam String mobile,@RequestParam Integer inviterId) {
BasicResult basicResult = new BasicResult();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberTradeRecordController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberTradeRecordController.java
index 752ecf7..5cf57b1 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberTradeRecordController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberTradeRecordController.java
@@ -1,7 +1,11 @@
package com.siam.package_user.controller.member;
import com.siam.package_user.service.MemberTradeRecordService;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -10,24 +14,12 @@
@RestController
@RequestMapping(value = "/rest/memberTrade")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "用户交易模块相关接口", description = "MemberTradeController")
+@Tag(name = "用户交易模块相关接口", description = "MemberTradeController")
public class MemberTradeRecordController {
@Autowired
private MemberTradeRecordService memberTradeRecordService;
- /*@ApiOperation(value = "用户交易列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "用户交易表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "用户交易名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "logo", value = "logo图片", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "firstLetter", value = "用户交易首字母", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "parentId", value = "父类别id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "sortNumber", value = "排序号", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
- })
- @PostMapping(value = "/list")
+ /*@Operation(summary = "用户交易列表")@PostMapping(value = "/list")
public BasicResult list(int pageNo, int pageSize, MemberTradeRecord memberTradeRecord){
BasicData basicResult = new BasicData();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberWithdrawRecordController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberWithdrawRecordController.java
index 2243803..38e6fe6 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberWithdrawRecordController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/MemberWithdrawRecordController.java
@@ -5,8 +5,9 @@
import com.siam.package_user.entity.MemberWithdrawRecord;
import com.siam.package_user.model.param.MemberWithdrawRecordParam;
import com.siam.package_user.service.MemberWithdrawRecordService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -17,20 +18,20 @@
@RestController
@RequestMapping(value = "/rest/member/memberWithdrawRecord")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "用户提现记录模块相关接口", description = "MemberWithdrawRecordController")
+@Tag(name = "用户提现记录模块相关接口", description = "MemberWithdrawRecordController")
public class MemberWithdrawRecordController {
@Autowired
private MemberWithdrawRecordService memberWithdrawRecordService;
- @ApiOperation(value = "用户提现记录列表")
+ @Operation(summary = "用户提现记录列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) MemberWithdrawRecordParam param) {
Page page = memberWithdrawRecordService.getListByPage(param);
return BasicResult.success(page);
}
- @ApiOperation(value = "邀请新用户注册奖励金额-用户提现接口")
+ @Operation(summary = "邀请新用户注册奖励金额-用户提现接口")
@PostMapping(value = "/inviteRewardAmount/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) MemberWithdrawRecordParam param) {
memberWithdrawRecordService.insert(param);
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/WxLoginController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/WxLoginController.java
index a27666f..7b6b748 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/WxLoginController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/WxLoginController.java
@@ -8,7 +8,8 @@
import com.siam.package_weixin_basic.config.WxEncrypted;
import com.siam.package_weixin_basic.config.WxSession;
import com.siam.package_weixin_basic.util.WxdecodeUtils;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.http.HttpMethod;
@@ -90,7 +91,7 @@ public WxEncrypted getWxUserInfo(String code, String iv, String encryptedData) t
return null;
}
- @ApiOperation(value = "获取微信手机号")
+ @Operation(summary = "获取微信手机号")
@PostMapping(value = "/getWxPhone")
public BasicResult getWxPhone(@RequestBody WxCode wxCode) throws Exception {
BasicData basicResult = new BasicData();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/internal/VipRechargeDenominationController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/internal/VipRechargeDenominationController.java
index 4774d89..5c41074 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/internal/VipRechargeDenominationController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/internal/VipRechargeDenominationController.java
@@ -5,8 +5,9 @@
import com.siam.package_common.entity.BasicData;
import com.siam.package_common.entity.BasicResult;
import com.siam.package_user.entity.internal.VipRechargeDenomination;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -18,13 +19,13 @@
@RestController
@RequestMapping(value = "/rest/vipRechargeDenomination")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "会员充值面额模块相关接口", description = "VipRechargeDenominationController")
+@Tag(name = "会员充值面额模块相关接口", description = "VipRechargeDenominationController")
public class VipRechargeDenominationController {
@Autowired
private VipRechargeDenominationService vipRechargeDenominationService;
- @ApiOperation(value = "会员充值面额列表")
+ @Operation(summary = "会员充值面额列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) VipRechargeDenomination vipRechargeDenomination){
BasicData basicResult = new BasicData();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/internal/VipRechargeRecordController.java b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/internal/VipRechargeRecordController.java
index ee43189..a36c029 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/internal/VipRechargeRecordController.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/controller/member/internal/VipRechargeRecordController.java
@@ -11,8 +11,9 @@
import com.siam.package_user.entity.internal.VipRechargeRecord;
import com.siam.package_user.service.internal.VipRechargeRecordService;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -22,13 +23,13 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
@Slf4j
@RestController
@RequestMapping(value = "/rest/member/vipRechargeRecord")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "会员充值记录模块相关接口", description = "VipRechargeRecordController")
+@Tag(name = "会员充值记录模块相关接口", description = "VipRechargeRecordController")
public class VipRechargeRecordController {
@Autowired
@@ -37,7 +38,7 @@ public class VipRechargeRecordController {
@Autowired
private MemberSessionManager memberSessionManager;
- @ApiOperation(value = "会员充值记录列表")
+ @Operation(summary = "会员充值记录列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) VipRechargeRecord vipRechargeRecord, HttpServletRequest request){
BasicData basicResult = new BasicData();
@@ -51,7 +52,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) VipRechargeRecord vi
return BasicResult.success(page);
}
- @ApiOperation(value = "查看会员充值记录详情")
+ @Operation(summary = "查看会员充值记录详情")
@PostMapping(value = "/detail")
public BasicResult detail(@RequestBody @Validated(value = {}) VipRechargeRecord vipRechargeRecord, HttpServletRequest request){
BasicData basicResult = new BasicData();
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberBillingRecordServiceImpl.java b/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberBillingRecordServiceImpl.java
index 5e2e234..f4a8577 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberBillingRecordServiceImpl.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberBillingRecordServiceImpl.java
@@ -13,6 +13,7 @@
import com.siam.package_user.service.MemberService;
import com.siam.package_user.util.TokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -26,6 +27,7 @@ public class MemberBillingRecordServiceImpl implements MemberBillingRecordServic
@Autowired
private MemberBillingRecordMapper memberBillingRecordMapper;
+ @Lazy
@Autowired
private MemberService memberService;
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberInviteRelationServiceImpl.java b/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberInviteRelationServiceImpl.java
index b5c01e8..aadc0b6 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberInviteRelationServiceImpl.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberInviteRelationServiceImpl.java
@@ -14,6 +14,7 @@
import com.siam.package_user.service.MemberTokenService;
import com.siam.package_user.util.TokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.Date;
@@ -31,6 +32,7 @@ public class MemberInviteRelationServiceImpl implements MemberInviteRelationServ
@Autowired
private MemberMapper memberMapper;
+ @Lazy
@Autowired
private MemberService memberService;
diff --git a/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberServiceImpl.java b/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberServiceImpl.java
index 4721852..f3fc35f 100644
--- a/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberServiceImpl.java
+++ b/siam-user/user-provider/src/main/java/com/siam/package_user/service_impl/MemberServiceImpl.java
@@ -45,6 +45,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.io.IOException;
@@ -84,6 +85,7 @@ public class MemberServiceImpl implements MemberService {
@Autowired
private SettingFeignApi settingFeignApi;
+ @Lazy
@Autowired
private MemberBillingRecordService memberBillingRecordService;
@@ -93,6 +95,7 @@ public class MemberServiceImpl implements MemberService {
@Autowired
private CouponsFeignApi couponsFeignApi;
+ @Lazy
@Autowired
private MemberInviteRelationService memberInviteRelationService;
diff --git a/siam-user/user-provider/src/main/resources/application-local.yml b/siam-user/user-provider/src/main/resources/application-local.yml
index 3d9576a..a38c96a 100644
--- a/siam-user/user-provider/src/main/resources/application-local.yml
+++ b/siam-user/user-provider/src/main/resources/application-local.yml
@@ -5,9 +5,9 @@ server:
spring:
#mysql
datasource:
- url: jdbc:mysql://127.0.0.1:3306/siam_cloud?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
+ url: jdbc:mysql://127.0.0.1:3306/siam_cloud?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root
- password: root
+ password: 123456
#redis单例模式
redis:
@@ -31,6 +31,18 @@ spring:
application:
name: user-siam
+ # Nacos注册中心/配置中心
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+ config:
+ server-addr: 127.0.0.1:8848
+ file-extension: yaml
+ config:
+ import:
+ - optional:nacos:${spring.application.name}-local.yaml
+
jackson:
#时间戳统一转换为指定格式
date-format: yyyy/MM/dd HH:mm:ss
@@ -90,17 +102,7 @@ mybatis-plus:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-#eureka配置
-eureka:
- client:
- service-url:
- defaultZone: http://127.0.0.1:9000/eureka/
- register-with-eureka: true
- fetch-registry: true
- instance:
- #配置使用ip地址来注册(默认是主机名称)
- prefer-ip-address: true
- #心跳检测暂时不配置
+# Nacos注册中心/配置中心
#feign内部服务调用超时配置-第二种
feign:
@@ -112,24 +114,31 @@ feign:
# Seata Config
seata:
- application-id: user-service
+ application-id: ${spring.application.name}
tx-service-group: my_test_tx_group
service:
vgroup-mapping:
- # 此处配置对应Server端配置registry.eureka.application的值
my_test_tx_group: default
registry:
- type: eureka
- eureka:
- service-url: http://127.0.0.1:9000/eureka/
- weight: 1
+ type: nacos
+ nacos:
+ application: seata-server
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
+ config:
+ type: nacos
+ nacos:
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
#springboot admin相关配置
management:
endpoints:
web:
exposure:
- include: "*" #'prometheus,health'
+ include: "health,prometheus,info"
exclude: "shutdown"
base-path: /actuator
endpoint:
@@ -154,6 +163,8 @@ management:
enabled: false
elasticsearch:
enabled: false
+ mail:
+ enabled: false
#日志配置
logging:
diff --git a/siam-util/pom.xml b/siam-util/pom.xml
index e329fc5..e93bc2b 100644
--- a/siam-util/pom.xml
+++ b/siam-util/pom.xml
@@ -32,8 +32,6 @@
UTF-8
- 1.8
- 1.8
\ No newline at end of file
diff --git a/siam-util/util-api/pom.xml b/siam-util/util-api/pom.xml
index 4f822b6..58b3cf6 100644
--- a/siam-util/util-api/pom.xml
+++ b/siam-util/util-api/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
@@ -31,7 +29,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
exec
diff --git a/siam-util/util-api/src/main/java/com/siam/package_util/entity/ScheduledTask.java b/siam-util/util-api/src/main/java/com/siam/package_util/entity/ScheduledTask.java
index 5a85c5a..3cee68b 100644
--- a/siam-util/util-api/src/main/java/com/siam/package_util/entity/ScheduledTask.java
+++ b/siam-util/util-api/src/main/java/com/siam/package_util/entity/ScheduledTask.java
@@ -3,34 +3,33 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Date;
@TableName("tb_scheduled_task")
-@ApiModel(value = "定时任务表")
+ @Schema(description= "定时任务表")
public class ScheduledTask {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "任务名称")
+ @Schema(description = "任务名称")
private String name;
- @ApiModelProperty(notes = "任务代码")
+ @Schema(description = "任务代码")
private String code;
- @ApiModelProperty(notes = "执行频率")
+ @Schema(description = "执行频率")
private String frequency;
- @ApiModelProperty(notes = "执行状态 1=未执行 2=正在执行")
+ @Schema(description = "执行状态 1=未执行 2=正在执行")
private Integer state;
- @ApiModelProperty(notes = "最后执行开始时间")
+ @Schema(description = "最后执行开始时间")
private Date lastStartTime;
- @ApiModelProperty(notes = "最后执行结束时间")
+ @Schema(description = "最后执行结束时间")
private Date lastEndTime;
public Integer getId() {
diff --git a/siam-util/util-api/src/main/java/com/siam/package_util/entity/ScheduledTaskLog.java b/siam-util/util-api/src/main/java/com/siam/package_util/entity/ScheduledTaskLog.java
index 06fabd6..e8219a4 100644
--- a/siam-util/util-api/src/main/java/com/siam/package_util/entity/ScheduledTaskLog.java
+++ b/siam-util/util-api/src/main/java/com/siam/package_util/entity/ScheduledTaskLog.java
@@ -3,34 +3,33 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Date;
@TableName("tb_scheduled_task_log")
-@ApiModel(value = "定时任务执行日志表")
+ @Schema(description= "定时任务执行日志表")
public class ScheduledTaskLog {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "任务代码")
+ @Schema(description = "任务代码")
private String scheduledTaskCode;
- @ApiModelProperty(notes = "执行状态 1=执行成功 2=执行出错")
+ @Schema(description = "执行状态 1=执行成功 2=执行出错")
private Integer state;
- @ApiModelProperty(notes = "错误描述")
+ @Schema(description = "错误描述")
private String error;
- @ApiModelProperty(notes = "执行主机名称")
+ @Schema(description = "执行主机名称")
private String hostName;
- @ApiModelProperty(notes = "执行主机ip地址")
+ @Schema(description = "执行主机ip地址")
private String hostIpAddress;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
public Integer getId() {
diff --git a/siam-util/util-api/src/main/java/com/siam/package_util/entity/Setting.java b/siam-util/util-api/src/main/java/com/siam/package_util/entity/Setting.java
index d81a4da..0b93d46 100644
--- a/siam-util/util-api/src/main/java/com/siam/package_util/entity/Setting.java
+++ b/siam-util/util-api/src/main/java/com/siam/package_util/entity/Setting.java
@@ -3,8 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
diff --git a/siam-util/util-api/src/main/java/com/siam/package_util/entity/SmsLog.java b/siam-util/util-api/src/main/java/com/siam/package_util/entity/SmsLog.java
index ecdda2b..0bffc29 100644
--- a/siam-util/util-api/src/main/java/com/siam/package_util/entity/SmsLog.java
+++ b/siam-util/util-api/src/main/java/com/siam/package_util/entity/SmsLog.java
@@ -3,42 +3,41 @@
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Data
@TableName("tb_sms_log")
-@ApiModel(value = "短信验证码记录表")
+ @Schema(description= "短信验证码记录表")
public class SmsLog {
@TableId(type = IdType.AUTO)
private Integer id;
- @ApiModelProperty(notes = "用户id")
+ @Schema(description = "用户id")
private Integer memberId;
- @ApiModelProperty(notes = "手机号")
+ @Schema(description = "手机号")
private String mobile;
- @ApiModelProperty(notes = "短信类型 注册=register;登录=login;验证手机号=verification;找回密码=findpwd")
+ @Schema(description = "短信类型 注册=register;登录=login;验证手机号=verification;找回密码=findpwd")
private String type;
- @ApiModelProperty(notes = "创建时间")
+ @Schema(description = "创建时间")
private Date createTime;
- @ApiModelProperty(notes = "请求ip")
+ @Schema(description = "请求ip")
private String ip;
- @ApiModelProperty(notes = "短信验证码")
+ @Schema(description = "短信验证码")
private String verifyCode;
- @ApiModelProperty(notes = "描述")
+ @Schema(description = "描述")
private String description;
- @ApiModelProperty(notes = "发送状态 1-发送成功,2-发送失败")
+ @Schema(description = "发送状态 1-发送成功,2-发送失败")
private Boolean states;
//页码
diff --git a/siam-util/util-api/src/main/java/com/siam/package_util/entity/SysMessage.java b/siam-util/util-api/src/main/java/com/siam/package_util/entity/SysMessage.java
index 8ea2a2d..f379797 100644
--- a/siam-util/util-api/src/main/java/com/siam/package_util/entity/SysMessage.java
+++ b/siam-util/util-api/src/main/java/com/siam/package_util/entity/SysMessage.java
@@ -1,7 +1,6 @@
package com.siam.package_util.entity;
import com.baomidou.mybatisplus.annotation.*;
-import com.sun.org.apache.xpath.internal.operations.Bool;
import lombok.Data;
import java.io.Serializable;
diff --git a/siam-util/util-api/src/main/java/com/siam/package_util/model/param/PictureUploadRecordParam.java b/siam-util/util-api/src/main/java/com/siam/package_util/model/param/PictureUploadRecordParam.java
index c582420..a2e0134 100644
--- a/siam-util/util-api/src/main/java/com/siam/package_util/model/param/PictureUploadRecordParam.java
+++ b/siam-util/util-api/src/main/java/com/siam/package_util/model/param/PictureUploadRecordParam.java
@@ -3,7 +3,7 @@
import com.siam.package_util.entity.PictureUploadRecord;
import lombok.Data;
-import javax.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotBlank;
@Data
public class PictureUploadRecordParam extends PictureUploadRecord {
diff --git a/siam-util/util-api/src/main/java/com/siam/package_util/model/param/SearchParam.java b/siam-util/util-api/src/main/java/com/siam/package_util/model/param/SearchParam.java
index 8c848af..76ed814 100644
--- a/siam-util/util-api/src/main/java/com/siam/package_util/model/param/SearchParam.java
+++ b/siam-util/util-api/src/main/java/com/siam/package_util/model/param/SearchParam.java
@@ -2,7 +2,7 @@
import lombok.Data;
-import javax.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotBlank;
@Data
public class SearchParam {
diff --git a/siam-util/util-provider/pom.xml b/siam-util/util-provider/pom.xml
index 425d00f..2bd2a4d 100644
--- a/siam-util/util-provider/pom.xml
+++ b/siam-util/util-provider/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
@@ -91,51 +89,40 @@
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
- 2.1.2.RELEASE
-
-
-
+
com.alibaba.cloud
- spring-cloud-starter-alibaba-seata
- 2021.1
-
-
- io.seata
- seata-spring-boot-starter
-
-
+ spring-cloud-starter-alibaba-nacos-discovery
+
- io.seata
- seata-spring-boot-starter
- 1.3.0
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-actuator
- 2.3.3.RELEASE
io.micrometer
micrometer-registry-prometheus
- 1.5.4
net.logstash.logback
logstash-logback-encoder
- 6.6
+
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
@@ -145,7 +132,6 @@
org.springframework.boot
spring-boot-maven-plugin
- 2.7.2
com.siam.package_util.UtilApplication
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/UtilApplication.java b/siam-util/util-provider/src/main/java/com/siam/package_util/UtilApplication.java
index 9aea891..613ca2a 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/UtilApplication.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/UtilApplication.java
@@ -3,14 +3,19 @@
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;
@EnableScheduling
@EnableFeignClients("com.siam")
-@EnableEurekaClient
-@SpringBootApplication(scanBasePackages = "com.siam")
+@EnableDiscoveryClient
+@SpringBootApplication(scanBasePackages = "com.siam", exclude = {
+ MongoAutoConfiguration.class,
+ MongoDataAutoConfiguration.class
+})
@MapperScan(basePackages = {"com.siam.**.mapper"})
public class UtilApplication
{
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/config/MybatisPlusConfig.java b/siam-util/util-provider/src/main/java/com/siam/package_util/config/MybatisPlusConfig.java
index 7c07616..dfabb28 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/config/MybatisPlusConfig.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/config/MybatisPlusConfig.java
@@ -1,6 +1,8 @@
package com.siam.package_util.config;
-import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -19,8 +21,11 @@ public class MybatisPlusConfig {
* 分页插件
*/
@Bean
- public PaginationInterceptor paginationInterceptor() {
- return new PaginationInterceptor();
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
+ interceptor.addInnerInterceptor(paginationInnerInterceptor);
+ return interceptor;
}
}
\ No newline at end of file
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/config/Swagger2Config.java b/siam-util/util-provider/src/main/java/com/siam/package_util/config/Swagger2Config.java
deleted file mode 100644
index 1267a31..0000000
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/config/Swagger2Config.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.siam.package_util.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class Swagger2Config {
-
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.SWAGGER_2)
- .apiInfo(apiInfo())
- .select()
- .apis(RequestHandlerSelectors.basePackage("com.siam"))//扫描包路径
- .paths(PathSelectors.any())
- .build();
- }
-
- // 构建api文档的详细信息函数,注意这里的注解引用的是哪个
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title("暹罗外卖-工具服务接口文档")//页面标题
- .description("")//描述
- .version("1.0")//版本号
- .build();
- }
-}
\ No newline at end of file
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminPictureUploadRecordController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminPictureUploadRecordController.java
index 5b30895..73b99f9 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminPictureUploadRecordController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminPictureUploadRecordController.java
@@ -5,8 +5,11 @@
import com.siam.package_common.entity.BasicData;
import com.siam.package_common.entity.BasicResult;
import com.siam.package_util.entity.PictureUploadRecord;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -15,13 +18,13 @@
@RestController
@RequestMapping(value = "/rest/admin/pictureUploadRecord")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台图片上传记录模块相关接口", description = "AdminPictureUploadRecordController")
+@Tag(name = "后台图片上传记录模块相关接口", description = "AdminPictureUploadRecordController")
public class AdminPictureUploadRecordController {
@Autowired
private PictureUploadRecordService pictureUploadRecordService;
- @ApiOperation(value = "图片上传记录列表")
+ @Operation(summary = "图片上传记录列表")
@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) PictureUploadRecord pictureUploadRecord){
BasicData basicResult = new BasicData();
@@ -30,15 +33,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PictureUploadRecord
return BasicResult.success(page);
}
- /*@ApiOperation(value = "图片上传记录创建")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "图片上传记录主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "图片上传记录名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "图片上传记录详情描述", required = false, paramType = "query", dataType = "string")
- })
- @PostMapping(value = "/insert")
+ /*@Operation(summary = "图片上传记录创建")@PostMapping(value = "/insert")
public BasicResult insert(PictureUploadRecord pictureUploadRecord){
BasicResult basicResult = new BasicResult();
@@ -53,15 +48,7 @@ public BasicResult insert(PictureUploadRecord pictureUploadRecord){
}
- @ApiOperation(value = "图片上传记录修改")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "图片上传记录主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "图片上传记录名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "图片上传记录详情描述", required = false, paramType = "query", dataType = "string")
- })
- @PutMapping(value = "/update")
+ @Operation(summary = "图片上传记录修改")@PutMapping(value = "/update")
public BasicResult update(PictureUploadRecord pictureUploadRecord){
BasicResult basicResult = new BasicResult();
@@ -75,11 +62,8 @@ public BasicResult update(PictureUploadRecord pictureUploadRecord){
}*/
-// @ApiOperation(value = "图片上传记录删除")
-// @ApiImplicitParams({
-// @ApiImplicitParam(name = "id", value = "图片上传记录主键id集合(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "String")
-// })
-// @DeleteMapping(value = "/delete")
+// @Operation(summary = "图片上传记录删除")
+//// @DeleteMapping(value = "/delete")
// public BasicResult delete(@RequestBody @Validated(value = {}) AdminParam param @RequestParam(value = "ids") List ids){
// BasicResult basicResult = new BasicResult();
// for (Integer id : ids) {
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminSettingController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminSettingController.java
index c7b4aee..3f19ecb 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminSettingController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminSettingController.java
@@ -7,8 +7,9 @@
import com.siam.package_goods.feign.GoodsSpecificationOptionFeignApi;
import com.siam.package_util.entity.Setting;
import com.siam.package_util.service.SettingService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -19,7 +20,7 @@
@RestController
@RequestMapping(value = "/rest/admin/setting")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台基础数据设置模块相关接口", description = "AdminSettingController")
+@Tag(name = "后台基础数据设置模块相关接口", description = "AdminSettingController")
public class AdminSettingController {
@Autowired
@@ -28,7 +29,7 @@ public class AdminSettingController {
@Autowired
private GoodsSpecificationOptionFeignApi goodsSpecificationOptionFeignApi;
- /*@ApiOperation(value = "基础数据设置列表")
+ /*@Operation(summary = "基础数据设置列表")
@PostMapping(value = "/list")
public BasicResult list(int pageNo, int pageSize, Setting setting){
BasicData basicResult = new BasicData();
@@ -37,7 +38,7 @@ public BasicResult list(int pageNo, int pageSize, Setting setting){
return BasicResult.success(page);
}*/
- @ApiOperation(value = "基础数据设置列表")
+ @Operation(summary = "基础数据设置列表")
@PostMapping(value = "/selectCurrent")
public BasicResult selectCurrent(@RequestBody @Validated(value = {}) Setting setting){
BasicData basicResult = new BasicData();
@@ -52,7 +53,7 @@ public BasicResult selectCurrent(@RequestBody @Validated(value = {}) Setting set
}
@AdminPermission
- @ApiOperation(value = "修改基础数据设置")
+ @Operation(summary = "修改基础数据设置")
@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) Setting setting){
BasicResult basicResult = new BasicResult();
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminUploadController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminUploadController.java
index 105f85e..8e05791 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminUploadController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/admin/AdminUploadController.java
@@ -3,7 +3,8 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_common.exception.StoneCustomerException;
import com.siam.package_common.util.OSSUtils;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
@@ -17,7 +18,7 @@
@RestController
@RequestMapping(value = "/rest/admin")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台上传图片模块相关接口", description = "AdminUploadController")
+@Tag(name = "后台上传图片模块相关接口", description = "AdminUploadController")
public class AdminUploadController {
@Autowired
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SettingController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SettingController.java
index f5e1e0b..9491ee1 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SettingController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SettingController.java
@@ -5,10 +5,16 @@
import com.siam.package_common.entity.BasicResult;
import com.siam.package_util.entity.Setting;
import com.siam.package_util.service.SettingService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -22,20 +28,12 @@
@RestController
@RequestMapping(value = "/rest/setting")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "基础数据设置模块相关接口", description = "SettingController")
+@Tag(name = "基础数据设置模块相关接口", description = "SettingController")
public class SettingController {
@Autowired
private SettingService settingService;
- @ApiOperation(value = "查询基础数据设置")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "基础数据设置表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "purchaseRewardPoints", value = "购买一杯奶茶赠送积分数量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "registrationRewardPoints", value = "新用户注册奖励积分数量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20"),
- })
- @PostMapping(value = "/selectCurrent")
+ @Operation(summary = "查询基础数据设置")@PostMapping(value = "/selectCurrent")
public BasicResult selectCurrent(@RequestBody @Validated(value = {}) Setting setting){
BasicData basicResult = new BasicData();
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SmsLogController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SmsLogController.java
index aa88992..15ce823 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SmsLogController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SmsLogController.java
@@ -9,10 +9,16 @@
import com.siam.package_common.util.RedisUtils;
import com.siam.package_util.entity.SmsLog;
import com.siam.package_util.service.SmsLogService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -26,7 +32,7 @@
@RestController
@RequestMapping(value = "/rest/smsLog")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "短信验证码记录模块相关接口", description = "SmsLogController")
+@Tag(name = "短信验证码记录模块相关接口", description = "SmsLogController")
public class SmsLogController {
@Autowired
@@ -39,12 +45,7 @@ public class SmsLogController {
private RedisUtils redisUtils;
@PostMapping(value = "/sendMobileCode")
- @ApiOperation(value = "发送手机验证码")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "mobile", value = "手机号", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "type", value = "短信类型 注册=register;登录=login;验证手机号=verification;找回密码=findpwd", required = true, paramType = "query", dataType = "string")
- })
- public BasicResult sendMobileCode(@RequestBody @Validated(value = {}) SmsLog smsLog){
+ @Operation(summary = "发送手机验证码")public BasicResult sendMobileCode(@RequestBody @Validated(value = {}) SmsLog smsLog){
BasicResult basicResult = new BasicResult();
if(!CommonUtils.isMobile(smsLog.getMobile())){
basicResult.setSuccess(false);
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SystemUsageRecordController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SystemUsageRecordController.java
index 8744abc..b736111 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SystemUsageRecordController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/SystemUsageRecordController.java
@@ -8,8 +8,9 @@
import com.siam.package_user.entity.Member;
import com.siam.package_user.entity.MemberToken;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -19,13 +20,13 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Date;
@RestController
@RequestMapping(value = "/rest/systemUsageRecord")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "后台系统使用记录模块相关接口", description = "SystemUsageRecordController")
+@Tag(name = "后台系统使用记录模块相关接口", description = "SystemUsageRecordController")
public class SystemUsageRecordController {
@Autowired
@@ -34,7 +35,7 @@ public class SystemUsageRecordController {
@Autowired
private MemberSessionManager memberSessionManager;
- @ApiOperation(value = "新增系统使用记录")
+ @Operation(summary = "新增系统使用记录")
@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) SystemUsageRecord systemUsageRecord, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/UploadController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/UploadController.java
index ba47cf2..6aa7d82 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/UploadController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/member/UploadController.java
@@ -6,8 +6,9 @@
import com.siam.package_user.auth.cache.MemberSessionManager;
import com.siam.package_user.entity.Member;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
@@ -21,7 +22,7 @@
@RestController
@RequestMapping(value = "/rest/member")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "用户上传图片模块相关接口", description = "AdminUploadController")
+@Tag(name = "用户上传图片模块相关接口", description = "AdminUploadController")
public class UploadController {
@Autowired
@@ -30,7 +31,7 @@ public class UploadController {
@Autowired
private MemberSessionManager memberSessionManager;
- @ApiOperation(value = "用户上传单张图片")
+ @Operation(summary = "用户上传单张图片")
@PostMapping(value = "/uploadSingleImage")
public BasicResult uploadSingleImage(@RequestParam("file") MultipartFile file) {
Member loginMember = memberSessionManager.getSession(TokenUtil.getToken());
@@ -43,7 +44,7 @@ public BasicResult uploadSingleImage(@RequestParam("file") MultipartFile file) {
return BasicResult.success(imageUrl);
}
- @ApiOperation(value = "用户上传多张图片")
+ @Operation(summary = "用户上传多张图片")
@PostMapping(value = "/uploadMultipleImage")
public BasicResult uploadMultipleImage(@RequestParam("fileList") List fileList) {
Member loginMember = memberSessionManager.getSession(TokenUtil.getToken());
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantPictureUploadRecordController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantPictureUploadRecordController.java
index 7deac53..4d6c0dd 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantPictureUploadRecordController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantPictureUploadRecordController.java
@@ -8,10 +8,16 @@
import com.siam.package_user.util.TokenUtil;
import com.siam.package_util.entity.PictureUploadRecord;
import com.siam.package_util.service.PictureUploadRecordService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -20,12 +26,12 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
@RestController
@RequestMapping(value = "/rest/merchant/pictureUploadRecord")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端图片上传记录模块相关接口【暂无调用】", description = "MerchantPictureUploadRecordController")
+@Tag(name = "商家端图片上传记录模块相关接口【暂无调用】", description = "MerchantPictureUploadRecordController")
public class MerchantPictureUploadRecordController {
@Autowired
@@ -34,17 +40,7 @@ public class MerchantPictureUploadRecordController {
@Autowired
private MerchantSessionManager merchantSessionManager;
- @ApiOperation(value = "图片上传记录列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "图片上传记录详情描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "图片上传记录列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) PictureUploadRecord pictureUploadRecord, HttpServletRequest request){
BasicData basicResult = new BasicData();
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantSettingController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantSettingController.java
index c1d9703..df914aa 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantSettingController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantSettingController.java
@@ -4,7 +4,7 @@
@RestController
@RequestMapping(value = "/rest/merchant/setting")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端基础数据设置模块相关接口", description = "MerchantSettingController")
+@Tag(name = "商家端基础数据设置模块相关接口", description = "MerchantSettingController")
public class MerchantSettingController {
@Autowired
@@ -13,15 +13,7 @@ public class MerchantSettingController {
@Autowired
private GoodsSpecificationOptionFeignApi goodsSpecificationOptionService;
- @ApiOperation(value = "基础数据设置列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "基础数据设置表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "purchaseRewardPoints", value = "购买一杯奶茶赠送积分数量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "registrationRewardPoints", value = "新用户注册奖励积分数量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "基础数据设置列表")@PostMapping(value = "/list")
public BasicResult list(int pageNo, int pageSize, Setting setting){
BasicData basicResult = new BasicData();
Page page = settingService.getListByPage(param.getPageNo(), param.getPageSize(), setting);
@@ -29,13 +21,7 @@ public BasicResult list(int pageNo, int pageSize, Setting setting){
return BasicResult.success(page);
}
- @ApiOperation(value = "修改基础数据设置")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "基础数据设置主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "purchaseRewardPoints", value = "购买一杯奶茶赠送积分数量", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "registrationRewardPoints", value = "新用户注册奖励积分数量", required = false, paramType = "query", dataType = "int"),
- })
- @PutMapping(value = "/update")
+ @Operation(summary = "修改基础数据设置")@PutMapping(value = "/update")
public BasicResult update(Setting setting){
BasicResult basicResult = new BasicResult();
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantUploadController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantUploadController.java
index c8813ad..ddd2c03 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantUploadController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/MerchantUploadController.java
@@ -6,8 +6,9 @@
import com.siam.package_merchant.auth.cache.MerchantSessionManager;
import com.siam.package_merchant.entity.Merchant;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
@@ -21,7 +22,7 @@
@RestController
@RequestMapping(value = "/rest/merchant")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端上传图片模块相关接口", description = "MerchantUploadController")
+@Tag(name = "商家端上传图片模块相关接口", description = "MerchantUploadController")
public class MerchantUploadController {
@Autowired
@@ -30,7 +31,7 @@ public class MerchantUploadController {
@Autowired
private MerchantSessionManager merchantSessionManager;
- @ApiOperation(value = "用户上传单张图片")
+ @Operation(summary = "用户上传单张图片")
@PostMapping(value = "/uploadSingleImage")
public BasicResult uploadSingleImage(@RequestParam("file") MultipartFile file) {
Merchant loginMerchant = merchantSessionManager.getSession(TokenUtil.getToken());
@@ -43,7 +44,7 @@ public BasicResult uploadSingleImage(@RequestParam("file") MultipartFile file) {
return BasicResult.success(imageUrl);
}
- @ApiOperation(value = "用户上传多张图片")
+ @Operation(summary = "用户上传多张图片")
@PostMapping(value = "/uploadMultipleImage")
public BasicResult uploadMultipleImage(@RequestParam("fileList") List fileList) {
Merchant loginMerchant = merchantSessionManager.getSession(TokenUtil.getToken());
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/internal/MerchantPrinterController.java b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/internal/MerchantPrinterController.java
index 0343fe4..1ae4374 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/internal/MerchantPrinterController.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/controller/merchant/internal/MerchantPrinterController.java
@@ -11,22 +11,28 @@
import com.siam.package_util.entity.internal.Printer;
import com.siam.package_merchant.entity.Merchant;
import com.siam.package_user.util.TokenUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Date;
@RestController
@RequestMapping(value = "/rest/merchant/printer")
@Transactional(rollbackFor = Exception.class)
-@Api(tags = "商家端商家打印机信息模块相关接口", description = "MerchantPrinterController")
+@Tag(name = "商家端商家打印机信息模块相关接口", description = "MerchantPrinterController")
public class MerchantPrinterController {
@Autowired
@@ -38,17 +44,7 @@ public class MerchantPrinterController {
// @Autowired
// private MerchantService merchantService;
- @ApiOperation(value = "打印机信息列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "商品表主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "商品名称", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "商家打印机信息详情描述", required = false, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "pageNo", value = "页码(值为-1不分页)", required = true, paramType = "query", dataType = "int", defaultValue = "1"),
- @ApiImplicitParam(name = "pageSize", value = "页数", required = true, paramType = "query", dataType = "int", defaultValue = "20")
- })
- @PostMapping(value = "/list")
+ @Operation(summary = "打印机信息列表")@PostMapping(value = "/list")
public BasicResult list(@RequestBody @Validated(value = {}) Printer printer, HttpServletRequest request){
BasicData basicResult = new BasicData();
@@ -61,15 +57,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) Printer printer, Htt
return BasicResult.success(page);
}
- @ApiOperation(value = "打印机信息创建")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "打印机信息主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "打印机信息名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "商家打印机信息详情描述", required = false, paramType = "query", dataType = "string")
- })
- @PostMapping(value = "/insert")
+ @Operation(summary = "打印机信息创建")@PostMapping(value = "/insert")
public BasicResult insert(@RequestBody @Validated(value = {}) Printer printer, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -88,15 +76,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) Printer printer, H
}
@MerchantPermission
- @ApiOperation(value = "打印机信息修改")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "打印机信息主键id", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "name", value = "打印机信息名称", required = true, paramType = "query", dataType = "string"),
- @ApiImplicitParam(name = "sortNumber", value = "排序", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "isDisabled", value = "是否启用 0-启用、1-禁用", required = false, paramType = "query", dataType = "int"),
- @ApiImplicitParam(name = "detail", value = "商家打印机信息详情描述", required = false, paramType = "query", dataType = "string")
- })
- @PutMapping(value = "/update")
+ @Operation(summary = "打印机信息修改")@PutMapping(value = "/update")
public BasicResult update(@RequestBody @Validated(value = {}) Printer printer, HttpServletRequest request){
BasicResult basicResult = new BasicResult();
@@ -121,11 +101,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) Printer printer, H
@MerchantPermission
- @ApiOperation(value = "打印机信息删除")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "打印机信息主键id集合(批量删除时id以逗号分隔)", required = true, paramType = "query", dataType = "String")
- })
- @DeleteMapping(value = "/delete")
+ @Operation(summary = "打印机信息删除")@DeleteMapping(value = "/delete")
public BasicResult delete(@RequestBody @Validated(value = {}) Printer param){
BasicResult basicResult = new BasicResult();
//获取当前登录用户绑定的门店编号
diff --git a/siam-util/util-provider/src/main/java/com/siam/package_util/service_impl/PreviousWxNotifyServiceImpl.java b/siam-util/util-provider/src/main/java/com/siam/package_util/service_impl/PreviousWxNotifyServiceImpl.java
index e2631ab..9a036a3 100644
--- a/siam-util/util-provider/src/main/java/com/siam/package_util/service_impl/PreviousWxNotifyServiceImpl.java
+++ b/siam-util/util-provider/src/main/java/com/siam/package_util/service_impl/PreviousWxNotifyServiceImpl.java
@@ -10,9 +10,18 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
+@Configuration
+class RestTemplateConfig {
+ @Bean
+ public RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
+}
+
@Slf4j
@Service
public class PreviousWxNotifyServiceImpl {
@@ -23,11 +32,6 @@ public class PreviousWxNotifyServiceImpl {
@Autowired
private WxNotifyConfig wxNotifyConfig;
- @Bean
- public RestTemplate restTemplate() {
- return new RestTemplate();
- }
-
@Autowired
private RestTemplate restTemplate;
@@ -70,12 +74,8 @@ public String pushOneUser(String openid) {
* appid和appsecret到小程序后台获取,当然也可以让小程序开发人员给你传过来
* */
public String getAccess_token() {
- //获取access_token
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
"&appid=" + wxNotifyConfig.getAppId() + "&secret=" + wxNotifyConfig.getSecret();
- if(restTemplate==null){
- restTemplate = new RestTemplate();
- }
String json = restTemplate.getForObject(url, String.class);
JSONObject myJson = JSONObject.parseObject(json);
return myJson.get("access_token").toString();
diff --git a/siam-util/util-provider/src/main/resources/application-local.yml b/siam-util/util-provider/src/main/resources/application-local.yml
index 6bdbe46..a680e96 100644
--- a/siam-util/util-provider/src/main/resources/application-local.yml
+++ b/siam-util/util-provider/src/main/resources/application-local.yml
@@ -5,9 +5,9 @@ server:
spring:
#mysql
datasource:
- url: jdbc:mysql://127.0.0.1:3306/siam_cloud?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
+ url: jdbc:mysql://127.0.0.1:3306/siam_cloud?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root
- password: root
+ password: 123456
# #mongodb(默认时没有账号密码的)
# # application:
@@ -75,6 +75,18 @@ spring:
application:
name: util-siam
+ # Nacos注册中心/配置中心
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+ config:
+ server-addr: 127.0.0.1:8848
+ file-extension: yaml
+ config:
+ import:
+ - optional:nacos:${spring.application.name}-local.yaml
+
#配置文件上传大小限制
servlet:
multipart:
@@ -142,17 +154,7 @@ mybatis-plus:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-#eureka配置
-eureka:
- client:
- service-url:
- defaultZone: http://127.0.0.1:9000/eureka/
- register-with-eureka: true
- fetch-registry: true
- instance:
- #配置使用ip地址来注册(默认是主机名称)
- prefer-ip-address: true
- #心跳检测暂时不配置
+# Nacos注册中心/配置中心
#feign内部服务调用超时配置
feign:
@@ -173,24 +175,31 @@ rocketmq:
# Seata Config
seata:
- application-id: util-service
+ application-id: ${spring.application.name}
tx-service-group: my_test_tx_group
service:
vgroup-mapping:
- # 此处配置对应Server端配置registry.eureka.application的值
my_test_tx_group: default
registry:
- type: eureka
- eureka:
- service-url: http://127.0.0.1:9000/eureka/
- weight: 1
+ type: nacos
+ nacos:
+ application: seata-server
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
+ config:
+ type: nacos
+ nacos:
+ server-addr: 127.0.0.1:8848
+ group: SEATA_GROUP
+ namespace: public
#springboot admin相关配置
management:
endpoints:
web:
exposure:
- include: "*" #'prometheus,health'
+ include: "health,prometheus,info"
exclude: "shutdown"
base-path: /actuator
endpoint:
@@ -215,6 +224,8 @@ management:
enabled: false
elasticsearch:
enabled: false
+ mail:
+ enabled: false
#芯烨云打印机开放 API相关配置
xinyeyun:
diff --git a/siam-weixin/pom.xml b/siam-weixin/pom.xml
index f3c97f5..e3c403d 100644
--- a/siam-weixin/pom.xml
+++ b/siam-weixin/pom.xml
@@ -22,8 +22,6 @@
UTF-8
- 1.8
- 1.8
diff --git a/siam-weixin/weixin-basic/pom.xml b/siam-weixin/weixin-basic/pom.xml
index 4c3d6e4..803acef 100644
--- a/siam-weixin/weixin-basic/pom.xml
+++ b/siam-weixin/weixin-basic/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
diff --git a/siam-weixin/weixin-basic/src/main/java/com/siam/package_weixin_basic/util/IpUtils.java b/siam-weixin/weixin-basic/src/main/java/com/siam/package_weixin_basic/util/IpUtils.java
index 558789c..2c66af2 100644
--- a/siam-weixin/weixin-basic/src/main/java/com/siam/package_weixin_basic/util/IpUtils.java
+++ b/siam-weixin/weixin-basic/src/main/java/com/siam/package_weixin_basic/util/IpUtils.java
@@ -2,7 +2,7 @@
import org.apache.commons.lang3.StringUtils;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
public class IpUtils {
/**
diff --git a/siam-weixin/weixin-pay/pom.xml b/siam-weixin/weixin-pay/pom.xml
index bd4cf8b..dfed5ef 100644
--- a/siam-weixin/weixin-pay/pom.xml
+++ b/siam-weixin/weixin-pay/pom.xml
@@ -16,8 +16,6 @@
UTF-8
- 1.8
- 1.8
diff --git a/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/config/WxpayConfigDemo.java b/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/config/WxpayConfigDemo.java
index 897cc02..5ddbe24 100644
--- a/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/config/WxpayConfigDemo.java
+++ b/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/config/WxpayConfigDemo.java
@@ -6,7 +6,7 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import javax.net.ssl.SSLContext;
import java.io.*;
diff --git a/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/entity/WxPayDto.java b/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/entity/WxPayDto.java
index 5e1d543..cb813e2 100644
--- a/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/entity/WxPayDto.java
+++ b/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/entity/WxPayDto.java
@@ -3,8 +3,8 @@
import lombok.Data;
import org.hibernate.validator.constraints.Range;
-import javax.validation.constraints.DecimalMin;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
diff --git a/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/entity/WxpayConfig.java b/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/entity/WxpayConfig.java
index 8f07eaf..8efb625 100644
--- a/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/entity/WxpayConfig.java
+++ b/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/entity/WxpayConfig.java
@@ -6,7 +6,7 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import javax.net.ssl.SSLContext;
import java.io.FileNotFoundException;
diff --git a/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/util/PayUtil.java b/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/util/PayUtil.java
index aa74340..84505df 100644
--- a/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/util/PayUtil.java
+++ b/siam-weixin/weixin-pay/src/main/java/com/siam/package_weixin_pay/util/PayUtil.java
@@ -35,7 +35,7 @@ public static String sign(String text, String key, String input_charset) {
* @return 签名结果
*/
public static boolean verify(String text, String sign, String key, String input_charset) {
- text = text + key;
+ text = text + "&key=" + key;
String mysign = DigestUtils.md5Hex(getContentBytes(text, input_charset));
if (mysign.equals(sign)) {
return true;
diff --git a/siam-zuul/Dockerfile b/siam-zuul/Dockerfile
deleted file mode 100644
index b0590e6..0000000
--- a/siam-zuul/Dockerfile
+++ /dev/null
@@ -1,19 +0,0 @@
-FROM openjdk:8-jdk-slim
-LABEL maintainer=暹罗
-
-COPY target/*.jar /app.jar
-# ADD jmx_prometheus_javaagent-0.15.0.jar /opt/jmx.jar
-# ADD jmx_exporter.yml /opt/jmx.yml
-
-# 设置JVM运行参数监控端口可以自定义
-ENV JAVA_JMX_PROMETHEUS="-javaagent:/opt/jmx.jar=0.0.0.0:9041:/opt/jmx.yml"
-ENV JAVA_SW_AGENT="-javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=siam-zuul -Dskywalking.collector.backend_service=127.0.0.1:11800"
-ENV JAVA_PROFILES_ACTIVE=""
-ENV JAVA_OPTS=""
-
-# 应用端口
-EXPOSE 9041
-
-# ENTRYPOINT ["sh", "-c", "java $JAVA_JMX_PROMETHEUS $JAVA_SW_AGENT -jar /app.jar"]
-# ENTRYPOINT ["sh", "-c", "java -Xms128m -Xmx256m $JAVA_SW_AGENT -jar /app.jar"]
-ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS $JAVA_PROFILES_ACTIVE -jar /app.jar"]
diff --git a/siam-zuul/jmx_exporter.yml b/siam-zuul/jmx_exporter.yml
deleted file mode 100644
index 92cab49..0000000
--- a/siam-zuul/jmx_exporter.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-lowercaseOutputLabelNames: true
-lowercaseOutputName: true
-whitelistObjectNames: ["java.lang:type=OperatingSystem"]
-rules:
- - pattern: 'java.lang<>((?!process_cpu_time)\w+):'
- name: os_$1
- type: GAUGE
- attrNameSnakeCase: true
-
diff --git a/siam-zuul/jmx_prometheus_javaagent-0.15.0.jar b/siam-zuul/jmx_prometheus_javaagent-0.15.0.jar
deleted file mode 100644
index d896a21..0000000
Binary files a/siam-zuul/jmx_prometheus_javaagent-0.15.0.jar and /dev/null differ
diff --git a/siam-zuul/pom.xml b/siam-zuul/pom.xml
deleted file mode 100644
index 5b48ae7..0000000
--- a/siam-zuul/pom.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
- siam-parent
- com.siam
- 1.1
- ../siam-parent/pom.xml
-
- 4.0.0
-
- siam-zuul
-
- siam-zuul
- https://www.siamit.cn
-
-
- UTF-8
- 1.8
- 1.8
-
-
-
-
-
- com.siam
- siam-common
- 1.1
-
-
-
-
- com.siam
- user-api
- 1.1
-
-
-
-
- com.siam
- merchant-api
- 1.1
-
-
-
-
- com.siam
- rider-api
- 1.1
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
- 2.1.2.RELEASE
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-zuul
- 2.1.2.RELEASE
-
-
-
-
- com.netflix.servo
- servo-core
- 0.12.7
-
-
-
-
- org.springframework.boot
- spring-boot-starter-actuator
- 2.3.3.RELEASE
-
-
-
-
- io.micrometer
- micrometer-registry-prometheus
- 1.5.4
-
-
-
-
- net.logstash.logback
- logstash-logback-encoder
- 6.6
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.7.2
-
-
- com.siam.package_zuul.ZuulApplication
- ZIP
-
-
-
-
- repackage
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/ZuulApplication.java b/siam-zuul/src/main/java/com/siam/package_zuul/ZuulApplication.java
deleted file mode 100644
index 6a1528f..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/ZuulApplication.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.siam.package_zuul;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
-import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
-import org.springframework.cloud.openfeign.EnableFeignClients;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Component;
-import org.springframework.web.cors.CorsConfiguration;
-import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
-import org.springframework.web.filter.CorsFilter;
-import springfox.documentation.swagger.web.SwaggerResource;
-import springfox.documentation.swagger.web.SwaggerResourcesProvider;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@EnableFeignClients("com.siam")
-@EnableZuulProxy
-@SpringBootApplication(scanBasePackages = "com.siam", exclude = {DataSourceAutoConfiguration.class})
-public class ZuulApplication
-{
- public static void main(String[] args)
- {
- SpringApplication.run(ZuulApplication.class, args);
- }
-
- /**
- * Swagger配置
- */
- @Component
- @Primary
- class DocumentationConfig implements SwaggerResourcesProvider {
- @Override
- public List get() {
- List resources = new ArrayList();
- resources.add(swaggerResource("用户服务","/api-user/v2/api-docs","1.0"));
- resources.add(swaggerResource("商品服务","/api-goods/v2/api-docs","1.0"));
- resources.add(swaggerResource("订单服务","/api-order/v2/api-docs","1.0"));
- return resources;
- }
-
- private SwaggerResource swaggerResource(String name, String location, String version) {
- SwaggerResource swaggerResource = new SwaggerResource();
- swaggerResource.setName(name);
- swaggerResource.setLocation(location);
- swaggerResource.setSwaggerVersion(version);
- return swaggerResource;
- }
- }
-
- /**
- * 改用过滤器CorsFilter 来配置跨域,由于Filter的位置是在Interceptor之前的,问题得到解决
- */
- @Bean
- public CorsFilter corsFilter() {
- CorsConfiguration config = new CorsConfiguration();
- // 设置允许跨域请求的域名
- config.addAllowedOrigin("*");
- // 是否允许证书(这个不开启,请求会报错的)
- config.setAllowCredentials(true);
- // 设置允许的方法
- config.addAllowedMethod("*");
- // 允许任何头
- config.addAllowedHeader("*");
- config.addExposedHeader("token");
- UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
- configSource.registerCorsConfiguration("/**", config);
- return new CorsFilter(configSource);
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/config/ActuatorConfig.java b/siam-zuul/src/main/java/com/siam/package_zuul/config/ActuatorConfig.java
deleted file mode 100644
index f5bbebd..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/config/ActuatorConfig.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.siam.package_zuul.config;
-
-import io.micrometer.core.instrument.MeterRegistry;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class ActuatorConfig {
-
- @Bean
- public MeterRegistryCustomizer configurer(@Value("${spring.application.name}") String applicationName) {
- return (registry) -> registry.config().commonTags("application", applicationName);
- }
-}
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/config/Swagger2Config.java b/siam-zuul/src/main/java/com/siam/package_zuul/config/Swagger2Config.java
deleted file mode 100644
index dc9b4c0..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/config/Swagger2Config.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.siam.package_zuul.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class Swagger2Config {
-
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.SWAGGER_2)
- .apiInfo(apiInfo())
- .select()
- .apis(RequestHandlerSelectors.basePackage("com.siam"))//扫描包路径
- .paths(PathSelectors.any())
- .build();
- }
-
- // 构建api文档的详细信息函数,注意这里的注解引用的是哪个
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title("暹罗外卖-网关服务接口文档")//页面标题
- .description("")//描述
- .version("1.0")//版本号
- .build();
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/config/WebMvcConfig.java b/siam-zuul/src/main/java/com/siam/package_zuul/config/WebMvcConfig.java
deleted file mode 100644
index 0f61285..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/config/WebMvcConfig.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.siam.package_zuul.config;
-
-import com.siam.package_common.filter.StoneFilterRegistration;
-import com.siam.package_common.filter.StoneFilterRegistry;
-import com.siam.package_common.filter.StoneMappedFilter;
-import com.siam.package_zuul.filter.AdminFilter;
-import com.siam.package_zuul.filter.EncryptFilter;
-import com.siam.package_zuul.filter.MemberFilter;
-import com.siam.package_zuul.filter.MerchantFilter;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.util.AntPathMatcher;
-
-import javax.annotation.PostConstruct;
-
-@Configuration
-public class WebMvcConfig {
-
- @Autowired
- private MemberFilter memberFilter;
-
- @Autowired
- private MerchantFilter merchantFilter;
-
- @Autowired
- private AdminFilter adminFilter;
-
- @Autowired
- private EncryptFilter encryptFilter;
-
- @Autowired
- private StoneFilterRegistry registry;
-
- @PostConstruct
- public void init(){
- addFilters();
- }
-
- /**
- * 重写添加拦截器方法并添加配置拦截器
- **/
- public void addFilters() {
- //用户拦截器
- registry.addFilter(memberFilter)
-// .addPathPatterns("/api-member/rest/member/**")
- .addPathPatterns("/*/rest/member/**")
- .excludePathPatterns("/api-user/rest/member/login")
- .excludePathPatterns("/api-user/rest/member/loginByMobile")
-// .excludePathPatterns("/api-user/rest/member/logout")
- .excludePathPatterns("/api-user/rest/member/register")
- .excludePathPatterns("/api-user/rest/member/verification/login")
- .excludePathPatterns("/api-user/rest/member/weChat/login")
- .excludePathPatterns("/api-order/rest/member/wxPay/notify")
- .excludePathPatterns("/api-order/rest/member/wxPay/refundSuccessNotify");;
-
- //商户拦截器
- registry.addFilter(merchantFilter)
-// .addPathPatterns("/api-member/rest/member/**")
- .addPathPatterns("/*/rest/merchant/**")
- .excludePathPatterns("/api-merchant/rest/merchant/login")
- .excludePathPatterns("/api-merchant/rest/merchant/loginByMobile")
- .excludePathPatterns("/api-merchant/rest/merchant/logout")
- .excludePathPatterns("/api-merchant/rest/merchant/register")
- .excludePathPatterns("/api-merchant/rest/merchant/registerByMobile")
- .excludePathPatterns("/api-merchant/rest/merchant/verification/login")
- .excludePathPatterns("/api-merchant/rest/merchant/forgetPassword/step1");
-
- //管理员拦截器
- registry.addFilter(adminFilter)
-// .addPathPatterns("/api-admin/rest/admin/**")
- .addPathPatterns("/*/rest/admin/**")
- .excludePathPatterns("/api-user/rest/admin/login")
- .excludePathPatterns("/api-user/rest/admin/login")
- .excludePathPatterns("/api-user/rest/admin/loginByMobile")
- .excludePathPatterns("/api-user/rest/admin/logout")
- .excludePathPatterns("/api-user/rest/admin/register")
- .excludePathPatterns("/api-user/rest/admin/verification/login")
- .excludePathPatterns("/api-user/rest/admin/forgetPassword/step1");
- }
-
- public boolean matches(String lookupPath) {
- StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
- /*System.out.println(stackTraceElements.length);
- for (StackTraceElement stackTraceElement : stackTraceElements) {
- System.out.println(stackTraceElement.getClassName());
- }*/
- StoneFilterRegistration registration = registry.getFilter(stackTraceElements[2].getClassName());
- if(registration == null){
- return false;
- }else{
- StoneMappedFilter filter = (StoneMappedFilter) registration.getFilter();
- return filter.matches(lookupPath, new AntPathMatcher());
- }
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/AdminFilter.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/AdminFilter.java
deleted file mode 100644
index f913faa..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/AdminFilter.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package com.siam.package_zuul.filter;
-
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import com.netflix.zuul.exception.ZuulException;
-import com.siam.package_common.constant.BaseCode;
-import com.siam.package_common.entity.BasicResult;
-import com.siam.package_common.filter.StoneFilter;
-import com.siam.package_common.util.JsonUtils;
-import com.siam.package_user.feign.AdminFeignApi;
-import com.siam.package_user.auth.cache.AdminSessionManager;
-import com.siam.package_user.entity.Admin;
-import com.siam.package_user.util.TokenUtil;
-import com.siam.package_zuul.config.WebMvcConfig;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * 管理员过滤器
- *
- * @author 暹罗
- */
-@Slf4j
-@Component
-public class AdminFilter extends ZuulFilter implements StoneFilter {
-
- @Autowired
- private AdminSessionManager adminSessionManager;
-
- @Autowired
- private AdminFeignApi adminFeignApi;
-
- @Autowired
- private WebMvcConfig webMvcConfig;
-
- /**
- * 过滤类型
- * pre:路由之前
- * routing:路由之时
- * post: 路由之后
- * error:发送错误调用
- * @return
- */
- @Override
- public String filterType() {
- return FilterConstants.PRE_TYPE;
- }
-
- /**
- * 过滤器执行顺序,当一个请求在同一个阶段存在多个过滤器的时候,多个过滤器执行顺序
- * @return
- */
- @Override
- public int filterOrder() {
- return 0;
- }
-
- /**
- * 判断过滤器是否生效
- * @return
- */
- @Override
- public boolean shouldFilter() {
- //此处只需要把当前请求路径 扔到我公共方法中检测是否需要拦截即可
- //通过当前上下文 获取 Request、Response对象
- RequestContext currentContext = RequestContext.getCurrentContext();
- HttpServletRequest request = currentContext.getRequest();
-
- /*System.out.println("\nuri = " + request.getRequestURI());
- System.out.println("\nurl = " + request.getRequestURL());*/
-
- return webMvcConfig.matches(request.getRequestURI());
- }
-
- @Override
- public Object run() throws ZuulException {
- //通过当前上下文 获取 Request、Response对象
- RequestContext currentContext = RequestContext.getCurrentContext();
- HttpServletRequest request = currentContext.getRequest();
- HttpServletResponse response = currentContext.getResponse();
-
- //从header或param里面获取token(暂时这样写,兼容之前前端的写法)
- String token = TokenUtil.getToken();
- log.debug("\ntoken = " + token);
-// //把请求头信息继续往下传
-// currentContext.addZuulRequestHeader(TokenUtil.TOKEN_HEADER_NAME, token);
-
- if(token == null){
- BasicResult basicResult = new BasicResult();
- basicResult.setSuccess(false);
- basicResult.setCode(BaseCode.TOKEN_ERR);
- basicResult.setMessage("您暂未登录,请登陆后访问");
- log.debug("\n" + JsonUtils.toJson(basicResult));
-
- //token验证失败,不会继续执行后续代码,网关服务直接响应给客户端
- currentContext.setSendZuulResponse(false);
- currentContext.setResponseBody(JsonUtils.toJson(basicResult));
- currentContext.setResponseStatusCode(200);
- return null;
- }
-
- //TODO - 目前如果此处调用出错,该方法是不会继续执行,但是目标接口依旧是返回了数据
- Admin loginAdmin = adminSessionManager.getSession(token);
- if(loginAdmin != null){
- return null;
- }
-
- BasicResult basicResult = new BasicResult();
- basicResult.setSuccess(false);
- basicResult.setCode(BaseCode.TOKEN_ERR);
- basicResult.setMessage("您暂未登录,请登陆后访问");
- log.debug("\n" + JsonUtils.toJson(basicResult));
- /*try {
- response.getWriter().print(JsonUtils.toJson(basicResult));
- } catch (IOException e) {
- e.printStackTrace();
- }*/
-
- //token验证失败,不会继续执行后续代码,网关服务直接响应给客户端
- currentContext.setSendZuulResponse(false);
- currentContext.setResponseBody(JsonUtils.toJson(basicResult));
- currentContext.setResponseStatusCode(200);
- return null;
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/BodyReaderHttpServletRequestWrapper.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/BodyReaderHttpServletRequestWrapper.java
deleted file mode 100644
index bbd6ec6..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/BodyReaderHttpServletRequestWrapper.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.siam.package_zuul.filter;
-
-import javax.servlet.ReadListener;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import java.io.*;
-
-/**
- * 功能描述:
- * 〈BodyReaderHttpServletRequestWrapper〉
- *
- * @Author:hanxinghua
- * @Date: 2020/7/4
- */
-public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
-
- private final String body;
-
- public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
- super(request);
- StringBuilder stringBuilder = new StringBuilder();
- BufferedReader bufferedReader = null;
- try {
- InputStream inputStream = request.getInputStream();
- if (inputStream != null) {
- bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- char[] charBuffer = new char[128];
- int bytesRead = -1;
- while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
- stringBuilder.append(charBuffer, 0, bytesRead);
- }
- } else {
- stringBuilder.append("");
- }
- } finally {
- if (bufferedReader != null) {
- bufferedReader.close();
- }
- }
- body = stringBuilder.toString();
- }
-
- @Override
- public ServletInputStream getInputStream() throws IOException {
- final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
- ServletInputStream servletInputStream = new ServletInputStream() {
- @Override
- public boolean isFinished() {
- return false;
- }
-
- @Override
- public boolean isReady() {
- return false;
- }
-
- @Override
- public void setReadListener(ReadListener readListener) {
-
- }
-
- @Override
- public int read() throws IOException {
- return byteArrayInputStream.read();
- }
- };
- return servletInputStream;
- }
-
- @Override
- public BufferedReader getReader() throws IOException {
- return new BufferedReader(new InputStreamReader(this.getInputStream()));
- }
-
- public String getBody() {
- return this.body;
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/Constant.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/Constant.java
deleted file mode 100644
index 127da3c..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/Constant.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.siam.package_zuul.filter;
-
-public class Constant {
-
- public static final String OPTIONS = "OPTIONS";
-
- public static final String APP_JSON = "application/json";
-
- public static final String CONTENT_TYPE = "Content-Type";
-
- public static final String AUTHORIZATION = "Authorization";
-
-}
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/EncryptFilter.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/EncryptFilter.java
deleted file mode 100644
index 91da552..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/EncryptFilter.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package com.siam.package_zuul.filter;
-
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import com.netflix.zuul.exception.ZuulException;
-import com.siam.package_common.entity.BasicResult;
-import com.siam.package_common.filter.StoneFilter;
-import com.siam.package_common.util.BeanUtils;
-import com.siam.package_common.util.JsonUtils;
-import com.siam.package_common.util.RedisUtils;
-import com.siam.package_zuul.config.WebMvcConfig;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StreamUtils;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.nio.charset.Charset;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 用户过滤器
- *
- * @author 暹罗
- */
-@Slf4j
-@Component
-public class EncryptFilter extends ZuulFilter implements StoneFilter {
-
- @Autowired
- private WebMvcConfig webMvcConfig;
-
- @Autowired
- private RedisUtils redisUtils;
-
- /**
- * 过滤类型
- * pre:路由之前
- * routing:路由之时
- * post: 路由之后
- * error:发送错误调用
- * @return
- */
- @Override
- public String filterType() {
- return FilterConstants.POST_TYPE;
- }
-
- /**
- * 过滤器执行顺序,当一个请求在同一个阶段存在多个过滤器的时候,多个过滤器执行顺序
- * @return
- */
- @Override
- public int filterOrder() {
- return 0;
- }
-
- /**
- * 判断过滤器是否生效
- * @return
- */
- @Override
- public boolean shouldFilter() {
- //此处只需要把当前请求路径 扔到我公共方法中检测是否需要拦截即可
- //通过当前上下文 获取 Request、Response对象
- RequestContext currentContext = RequestContext.getCurrentContext();
- HttpServletRequest request = currentContext.getRequest();
-
- /*System.out.println("\nuri = " + request.getRequestURI());
- System.out.println("\nurl = " + request.getRequestURL());*/
-
- return webMvcConfig.matches(request.getRequestURI());
- }
-
- @Override
- public Object run() throws ZuulException {
- //如果开启了数据加密功能,则对返回数据进行加密处理
- Boolean isEncrypt = (Boolean) JsonUtils.toObject(redisUtils.get("isEncrypt").toString(), Boolean.class);
- if(isEncrypt!=null && isEncrypt){
- //通过当前上下文 获取 Request、Response对象
- RequestContext currentContext = RequestContext.getCurrentContext();
- InputStream inputStream = currentContext.getResponseDataStream();
- try {
- //获取原数据
- String body = StreamUtils.copyToString(inputStream, Charset.forName("UTF-8"));
- //加密返回结果
- String resultBody = this.encrypt(body);
- currentContext.setResponseBody(resultBody);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return null;
- }
-
- /**
- * 加密返回结果
- *
- * @param body
- * @return
- * @author 暹罗
- */
- private String encrypt(String body){
- //加密规则:
- //1、根据字段名加密
- //2、浮点数全部加密
- //3、所有字段值全部加密
- BasicResult basicResult = (BasicResult) JsonUtils.toObject(body, BasicResult.class);
- Map data = (Map) basicResult.getData();
- if(data.containsKey("records")){
- //列表数据
- List> records;
- try{
- records = (List) data.get("records");
- for (Map map : records) {
- //渲染Map数据
- renderMap(map);
- }
- }catch (Exception ex){
- records = BeanUtils.objectsToMaps((List) data.get("records"));
- for (Map map : records) {
- //渲染Map数据
- renderMap(map);
- }
- }
- }else{
- //详情等数据
- //渲染Map数据
- renderMap(data);
- }
-
- return JsonUtils.toJson(basicResult);
- }
-
- /**
- * 渲染Map数据
- *
- * @param map
- * @return
- * @author 暹罗
- */
- private void renderMap(Map map){
- for (String key : map.keySet()) {
- if(key.equals("id") || key.endsWith("Id")
- || key.equals("type") || key.endsWith("Type")
- || key.equals("status") || key.endsWith("Status")
- || key.startsWith("is")){
- continue;
- }
- if(map.get(key) instanceof String){
- map.put(key, "****");
- }else if(map.get(key) instanceof Integer || map.get(key) instanceof Double || map.get(key) instanceof BigDecimal){
- map.put(key, 0);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/MemberFilter.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/MemberFilter.java
deleted file mode 100644
index f003c39..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/MemberFilter.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.siam.package_zuul.filter;
-
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import com.netflix.zuul.exception.ZuulException;
-import com.siam.package_common.constant.BaseCode;
-import com.siam.package_common.entity.BasicResult;
-import com.siam.package_common.filter.StoneFilter;
-import com.siam.package_common.util.JsonUtils;
-import com.siam.package_user.feign.MemberFeignApi;
-import com.siam.package_user.auth.cache.MemberSessionManager;
-import com.siam.package_user.entity.Member;
-import com.siam.package_user.util.TokenUtil;
-import com.siam.package_zuul.config.WebMvcConfig;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * 用户过滤器
- *
- * @author 暹罗
- */
-@Slf4j
-@Component
-public class MemberFilter extends ZuulFilter implements StoneFilter {
-
- @Autowired
- private MemberSessionManager memberSessionManager;
-
- @Autowired
- private MemberFeignApi memberFeignApi;
-
- @Autowired
- private WebMvcConfig webMvcConfig;
-
- /**
- * 过滤类型
- * pre:路由之前
- * routing:路由之时
- * post: 路由之后
- * error:发送错误调用
- * @return
- */
- @Override
- public String filterType() {
- return FilterConstants.PRE_TYPE;
- }
-
- /**
- * 过滤器执行顺序,当一个请求在同一个阶段存在多个过滤器的时候,多个过滤器执行顺序
- * @return
- */
- @Override
- public int filterOrder() {
- return 0;
- }
-
- /**
- * 判断过滤器是否生效
- * @return
- */
- @Override
- public boolean shouldFilter() {
- //此处只需要把当前请求路径 扔到我公共方法中检测是否需要拦截即可
- //通过当前上下文 获取 Request、Response对象
- RequestContext currentContext = RequestContext.getCurrentContext();
- HttpServletRequest request = currentContext.getRequest();
-
-// System.out.println("\nuri = " + request.getRequestURI());
-// System.out.println("\nurl = " + request.getRequestURL());
-
- return webMvcConfig.matches(request.getRequestURI());
- }
-
- @Override
- public Object run() throws ZuulException {
- //通过当前上下文 获取 Request、Response对象
- RequestContext currentContext = RequestContext.getCurrentContext();
- HttpServletRequest request = currentContext.getRequest();
- HttpServletResponse response = currentContext.getResponse();
-
- //从header或param里面获取token(暂时这样写,兼容之前前端的写法)
- String token = TokenUtil.getToken();
- log.debug("\ntoken = " + token);
- if(token == null){
- BasicResult basicResult = new BasicResult();
- basicResult.setSuccess(false);
- basicResult.setCode(BaseCode.TOKEN_ERR);
- basicResult.setMessage("您暂未登录,请登陆后访问");
- log.debug("\n" + JsonUtils.toJson(basicResult));
-
- //token验证失败,不会继续执行后续代码,网关服务直接响应给客户端
- currentContext.setSendZuulResponse(false);
- currentContext.setResponseBody(JsonUtils.toJson(basicResult));
-// currentContext.setResponseStatusCode(401);
- currentContext.setResponseStatusCode(200);
-
- return null;
- }
-
- //TODO - 目前如果此处调用出错,该方法是不会继续执行,但是目标接口依旧是返回了数据
-
- Member loginMember = memberSessionManager.getSession(token);
- if(loginMember != null){
- return null;
- }
-
- BasicResult basicResult = new BasicResult();
- basicResult.setSuccess(false);
- basicResult.setCode(BaseCode.TOKEN_ERR);
- basicResult.setMessage("您暂未登录,请登陆后访问");
- log.debug("\n" + JsonUtils.toJson(basicResult));
- /*try {
- response.getWriter().print(JsonUtils.toJson(basicResult));
- } catch (IOException e) {
- e.printStackTrace();
- }*/
-
- //token验证失败,不会继续执行后续代码,网关服务直接响应给客户端
- currentContext.setSendZuulResponse(false);
- currentContext.setResponseBody(JsonUtils.toJson(basicResult));
-// currentContext.setResponseStatusCode(401);
- currentContext.setResponseStatusCode(200);
- return null;
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/MerchantFilter.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/MerchantFilter.java
deleted file mode 100644
index 8db6d40..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/MerchantFilter.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.siam.package_zuul.filter;
-
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import com.netflix.zuul.exception.ZuulException;
-import com.siam.package_common.constant.BaseCode;
-import com.siam.package_common.entity.BasicResult;
-import com.siam.package_common.filter.StoneFilter;
-import com.siam.package_common.util.JsonUtils;
-import com.siam.package_merchant.auth.cache.MerchantSessionManager;
-import com.siam.package_merchant.entity.Merchant;
-import com.siam.package_user.util.TokenUtil;
-import com.siam.package_zuul.config.WebMvcConfig;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * 商家过滤器
- *
- * @author 暹罗
- */
-@Slf4j
-@Component
-public class MerchantFilter extends ZuulFilter implements StoneFilter {
-
- @Autowired
- private MerchantSessionManager adminSessionManager;
-
- @Autowired
- private WebMvcConfig webMvcConfig;
-
- /**
- * 过滤类型
- * pre:路由之前
- * routing:路由之时
- * post: 路由之后
- * error:发送错误调用
- * @return
- */
- @Override
- public String filterType() {
- return FilterConstants.PRE_TYPE;
- }
-
- /**
- * 过滤器执行顺序,当一个请求在同一个阶段存在多个过滤器的时候,多个过滤器执行顺序
- * @return
- */
- @Override
- public int filterOrder() {
- return 0;
- }
-
- /**
- * 判断过滤器是否生效
- * @return
- */
- @Override
- public boolean shouldFilter() {
- //此处只需要把当前请求路径 扔到我公共方法中检测是否需要拦截即可
- //通过当前上下文 获取 Request、Response对象
- RequestContext currentContext = RequestContext.getCurrentContext();
- HttpServletRequest request = currentContext.getRequest();
-
- /*System.out.println("\nuri = " + request.getRequestURI());
- System.out.println("\nurl = " + request.getRequestURL());*/
-
- return webMvcConfig.matches(request.getRequestURI());
- }
-
- @Override
- public Object run() throws ZuulException {
- //通过当前上下文 获取 Request、Response对象
- RequestContext currentContext = RequestContext.getCurrentContext();
- HttpServletRequest request = currentContext.getRequest();
- HttpServletResponse response = currentContext.getResponse();
-
- //从header或param里面获取token(暂时这样写,兼容之前前端的写法)
- String token = TokenUtil.getToken();
- log.debug("\ntoken = " + token);
- if(token == null){
- BasicResult basicResult = new BasicResult();
- basicResult.setSuccess(false);
- basicResult.setCode(BaseCode.TOKEN_ERR);
- basicResult.setMessage("您暂未登录,请登陆后访问");
- log.debug("\n" + JsonUtils.toJson(basicResult));
-
- //token验证失败,不会继续执行后续代码,网关服务直接响应给客户端
- currentContext.setSendZuulResponse(false);
- currentContext.setResponseBody(JsonUtils.toJson(basicResult));
- currentContext.setResponseStatusCode(200);
- return null;
- }
-
- //TODO - 目前如果此处调用出错,该方法是不会继续执行,但是目标接口依旧是返回了数据
- Merchant loginMerchant = adminSessionManager.getSession(token);
- if(loginMerchant != null){
- return null;
- }
-
- BasicResult basicResult = new BasicResult();
- basicResult.setSuccess(false);
- basicResult.setCode(BaseCode.TOKEN_ERR);
- basicResult.setMessage("您暂未登录,请登陆后访问");
- log.debug("\n" + JsonUtils.toJson(basicResult));
- /*try {
- response.getWriter().print(JsonUtils.toJson(basicResult));
- } catch (IOException e) {
- e.printStackTrace();
- }*/
-
- //token验证失败,不会继续执行后续代码,网关服务直接响应给客户端
- currentContext.setSendZuulResponse(false);
- currentContext.setResponseBody(JsonUtils.toJson(basicResult));
- currentContext.setResponseStatusCode(200);
- return null;
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/RateLimitFilter.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/RateLimitFilter.java
deleted file mode 100644
index 52eab9d..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/RateLimitFilter.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.siam.package_zuul.filter;
-
-import com.google.common.util.concurrent.RateLimiter;
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.netflix.zuul.filters.Route;
-import org.springframework.cloud.netflix.zuul.filters.RouteLocator;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-
-@Component
-public class RateLimitFilter extends ZuulFilter {
-
- private static final double URL_RATE_LIMIT = 10.0; // 每分钟允许调用10次
- private static final double IP_RATE_LIMIT = 100.0; // 每分钟允许请求100次
- private static final double USER_GROUP_RATE_LIMIT = 50.0; // 每分钟允许调用50次
-
- private final RouteLocator routeLocator;
- private final RateLimiter urlRateLimiter;
- private final RateLimiter ipRateLimiter;
- private final RateLimiter userGroupRateLimiter;
-
- @Autowired
- public RateLimitFilter(RouteLocator routeLocator) {
- this.routeLocator = routeLocator;
- this.urlRateLimiter = RateLimiter.create(URL_RATE_LIMIT);
- this.ipRateLimiter = RateLimiter.create(IP_RATE_LIMIT);
- this.userGroupRateLimiter = RateLimiter.create(USER_GROUP_RATE_LIMIT);
- }
-
- @Override
- public String filterType() {
- return "pre";
- }
-
- @Override
- public int filterOrder() {
- return 0;
- }
-
- @Override
- public boolean shouldFilter() {
- return true;
- }
-
- @Override
- public Object run() {
- RequestContext context = RequestContext.getCurrentContext();
- HttpServletRequest request = context.getRequest();
-
- String url = request.getRequestURI();
- String clientIP = getClientIP(request);
- String userId = getUserIdFromRequest(request);
-
- Route route = routeLocator.getMatchingRoute(url);
-
- // 对请求的目标URL进行限流
- if (route != null && !urlRateLimiter.tryAcquire()) {
- context.setSendZuulResponse(false);
- context.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());
- context.setResponseBody("Request limit exceeded for URL");
- return null;
- }
-
- // 对客户端IP进行限流
- if (!ipRateLimiter.tryAcquire()) {
- context.setSendZuulResponse(false);
- context.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());
- context.setResponseBody("Request limit exceeded for IP");
- return null;
- }
-
-// // 对特定用户或用户组进行限流
-// if (!isVIPUser(userId) && !userGroupRateLimiter.tryAcquire()) {
-// context.setSendZuulResponse(false);
-// context.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());
-// context.setResponseBody("Request limit exceeded for User/Group");
-// return null;
-// }
-
- return null;
- }
-
- private String getClientIP(HttpServletRequest request) {
- String xForwardedForHeader = request.getHeader("X-Forwarded-For");
- if (xForwardedForHeader != null && !xForwardedForHeader.isEmpty()) {
- // X-Forwarded-For header can contain a comma-separated list of IPs if multiple proxies are involved.
- return xForwardedForHeader.split(",")[0].trim();
- }
- return request.getRemoteAddr();
- }
-
- private String getUserIdFromRequest(HttpServletRequest request) {
- // 根据实际情况获取用户ID
- return null;
- }
-
- private boolean isVIPUser(String userId) {
- // 根据实际情况判断用户是否为VIP
- return false;
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/RateLimitFilter01.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/RateLimitFilter01.java
deleted file mode 100644
index 704994d..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/RateLimitFilter01.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//package com.siam.package_zuul.filter;
-//
-//import com.google.common.util.concurrent.RateLimiter;
-//import com.netflix.zuul.ZuulFilter;
-//import com.netflix.zuul.context.RequestContext;
-//import com.netflix.zuul.exception.ZuulException;
-//import org.springframework.stereotype.Component;
-//
-//import java.util.concurrent.TimeUnit;
-//
-//import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
-//import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVLET_DETECTION_FILTER_ORDER;
-//
-///**
-// * @Classname RateLimiter
-// * @Created by Michael
-// * @Date 2023/7/13
-// * @Description 限流过滤
-// */
-//@Component
-//public class RateLimitFilter01 extends ZuulFilter {
-//
-// //令牌桶
-// //第一个参数,是总令牌数
-// //第二个参数,简单理解为多久放令牌
-// //第三个参数,是时间单位,即多久投放依次令牌
-// static RateLimiter rateLimiter = RateLimiter.create(8, 2, TimeUnit.SECONDS);
-//
-// @Override
-// public String filterType() {
-// return PRE_TYPE;
-// }
-//
-// @Override
-// public int filterOrder() {
-// return SERVLET_DETECTION_FILTER_ORDER - 1;
-// }
-//
-// @Override
-// public boolean shouldFilter() {
-// // 这里可以考虑弄个限流开启的开关,开启限流返回true,关闭限流返回false,你懂的。
-// return true;
-// }
-//
-// @Override
-// public Object run() throws ZuulException {
-// RequestContext context = RequestContext.getCurrentContext();
-// boolean allowed = rateLimiter.tryAcquire();
-// if (!allowed) {
-// context.setSendZuulResponse(false);
-// context.setResponseStatusCode(501);
-// }
-// return null;
-// }
-//}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/RateLimitFilter02.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/RateLimitFilter02.java
deleted file mode 100644
index a531265..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/RateLimitFilter02.java
+++ /dev/null
@@ -1,98 +0,0 @@
-//package com.siam.package_zuul.filter;
-//
-//import com.google.common.util.concurrent.RateLimiter;
-//import com.netflix.zuul.ZuulFilter;
-//import com.netflix.zuul.context.RequestContext;
-//import org.springframework.cloud.netflix.zuul.filters.Route;
-//import org.springframework.cloud.netflix.zuul.filters.RouteLocator;
-//import org.springframework.http.HttpStatus;
-//import org.springframework.stereotype.Component;
-//
-//import javax.servlet.http.HttpServletRequest;
-//
-//@Component
-//public class RateLimitFilter02 extends ZuulFilter {
-//
-// // 使用RateLimiter创建令牌桶实例
-// private static final RateLimiter URL_RATE_LIMITER = RateLimiter.create(10); // 每分钟允许调用10次
-// private static final RateLimiter IP_RATE_LIMITER = RateLimiter.create(100); // 每分钟允许请求100次
-// private static final RateLimiter USER_GROUP_RATE_LIMITER = RateLimiter.create(50); // 每分钟允许调用50次
-//
-// private final RouteLocator routeLocator;
-//
-// public RateLimitFilter02(RouteLocator routeLocator) {
-// this.routeLocator = routeLocator;
-// }
-//
-// @Override
-// public String filterType() {
-// return "pre";
-// }
-//
-// @Override
-// public int filterOrder() {
-// return 0;
-// }
-//
-// @Override
-// public boolean shouldFilter() {
-// return true;
-// }
-//
-// @Override
-// public Object run() {
-// RequestContext context = RequestContext.getCurrentContext();
-// HttpServletRequest request = context.getRequest();
-//
-// // 获取请求URL及相关信息
-// String url = request.getRequestURI();
-// String clientIP = getClientIP(request);
-// String userId = getUIDFromRequest(request);
-//
-// Route route = routeLocator.getMatchingRoute(url);
-//
-// // 对请求的目标URL进行限流
-// if (route != null && !URL_RATE_LIMITER.tryAcquire()) {
-// context.setSendZuulResponse(false);
-// context.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());
-// context.setResponseBody("Request limit exceeded for URL");
-// return null;
-// }
-//
-// // 对客户端IP进行限流
-// if (!IP_RATE_LIMITER.tryAcquire()) {
-// context.setSendZuulResponse(false);
-// context.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());
-// context.setResponseBody("Request limit exceeded for IP");
-// return null;
-// }
-//
-// // 对特定用户或用户组进行限流
-// if (!isVIPUser(userId) && !USER_GROUP_RATE_LIMITER.tryAcquire()) {
-// context.setSendZuulResponse(false);
-// context.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());
-// context.setResponseBody("Request limit exceeded for User/Group");
-// return null;
-// }
-//
-// return null;
-// }
-//
-// // 从HttpServletRequest中获取客户端真实的IP地址
-// private String getClientIP(HttpServletRequest request) {
-// // 实现略,根据实际情况获取客户端IP地址
-// return "";
-// }
-//
-// // 根据请求中的信息判断是否为VIP用户
-// private boolean isVIPUser(String userId) {
-// // 实现略,根据实际情况判断用户是否为VIP
-// return false;
-// }
-//
-// // 从请求中获取用户ID
-// private String getUIDFromRequest(HttpServletRequest request) {
-// // 实现略,根据实际情况获取用户ID
-// return "";
-// }
-//}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/RequestLogFilter.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/RequestLogFilter.java
deleted file mode 100644
index d5a1f42..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/RequestLogFilter.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package com.siam.package_zuul.filter;
-
-import com.alibaba.fastjson.JSON;
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import com.netflix.zuul.http.HttpServletRequestWrapper;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.Map;
-
-
-/**
- * 功能描述:
- * 〈请求参数日志过滤器〉
- *
- * @Author:hanxinghua
- * @Date: 2020/7/4
- */
-@Slf4j
-@Component
-public class RequestLogFilter extends ZuulFilter {
-
-
- /**
- * 返回过滤器的类型
- * 类型:pre、route、post、error等
- *
- * @return
- */
- @Override
- public String filterType() {
- return FilterConstants.PRE_TYPE;
- }
-
- /**
- * 返回一个int值来指定同一类型过滤器的执行顺序,不同的过滤器允许返回相同的数字
- *
- * @return
- */
- @Override
- public int filterOrder() {
- return FilterConstants.PRE_DECORATION_FILTER_ORDER - 1;
- }
-
- /**
- * 返回一个boolean值来判断该过滤器是否需要执行
- *
- * @return
- */
- @Override
- public boolean shouldFilter() {
- return true;
- }
-
- /**
- * 过滤器的具体逻辑
- *
- * @return
- */
- @Override
- public Object run() {
- // 记录PRE_TYPE Filter开始时间戳
- long startTime = System.currentTimeMillis();
- RequestContext.getCurrentContext().set("startTime", startTime);
-
- RequestContext currentContext = RequestContext.getCurrentContext();
- HttpServletRequest serverHttpRequest = currentContext.getRequest();
- String method = serverHttpRequest.getMethod();
- // 处理跨域发送两次请求,打印两遍日志问题
- if (Constant.OPTIONS.equals(method)) {
- return null;
- }
- log.info("-------------------REQUEST-START-----------------");
- // 记录下请求内容
- log.info("URL: [{}]", serverHttpRequest.getRequestURL().toString());
- log.info("HTTP-METHOD: [{}]", method);
- log.info("Content-type: [{}]", serverHttpRequest.getHeader(Constant.CONTENT_TYPE));
- log.info("AUTHORIZATION: [{}]", serverHttpRequest.getHeader(Constant.AUTHORIZATION));
- if (Constant.APP_JSON.equals(serverHttpRequest.getHeader(Constant.CONTENT_TYPE))) {
-// //记录application/json时的传参
-// HttpServletRequestWrapper httpServletRequestWrapper = (HttpServletRequestWrapper) serverHttpRequest;
-// /*BodyReaderHttpServletRequestWrapper wrapper = (BodyReaderHttpServletRequestWrapper) httpServletRequestWrapper.getRequest();*/
-// BodyReaderHttpServletRequestWrapper wrapper = null;
-// try {
-// wrapper = new BodyReaderHttpServletRequestWrapper(httpServletRequestWrapper.getRequest());
-// } catch (IOException e) {
-// e.printStackTrace();
-// }
-// log.info("Request Parameters: \n [{}]", wrapper.getBody());
-
- StringBuilder requestBody = new StringBuilder();
- BufferedReader reader = null;
- try {
- reader = serverHttpRequest.getReader();
- char[] buffer = new char[1024];
- int length;
- while ((length = reader.read(buffer)) != -1) {
- requestBody.append(buffer, 0, length);
- }
- } catch (IOException e) {
- // 处理异常
- e.printStackTrace();
- } finally {
- if (reader != null) {
- try {
- reader.close();
- } catch (IOException e) {
- // 处理异常
- e.printStackTrace();
- }
- }
- }
- log.info("Request Parameters: \n [{}]", requestBody.toString());
- } else {
- //记录请求的键值对
- log.info("Request Parameters: \n [{}]", handleInputParameters(serverHttpRequest.getParameterMap()));
- }
- return null;
-
- }
-
- /**
- * 处理参数
- *
- * @param map
- * @return
- */
- private String handleInputParameters(Map map){
- if (map.isEmpty()) {
- return null;
- }
- return JSON.toJSONString(map);
- }
-
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/java/com/siam/package_zuul/filter/ResponseLogFilter.java b/siam-zuul/src/main/java/com/siam/package_zuul/filter/ResponseLogFilter.java
deleted file mode 100644
index 56824a3..0000000
--- a/siam-zuul/src/main/java/com/siam/package_zuul/filter/ResponseLogFilter.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.siam.package_zuul.filter;
-
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.List;
-import java.util.stream.Collectors;
-
-
-/**
- * 功能描述:
- * 〈响应参数日志过滤器〉
- *
- * @Author:hanxinghua
- * @Date: 2020/7/4
- */
-@Slf4j
-@Component
-public class ResponseLogFilter extends ZuulFilter {
-
- @Override
- public String filterType() {
- return FilterConstants.POST_TYPE;
- }
-
- @Override
- public int filterOrder() {
- return 0;
- }
-
- @Override
- public boolean shouldFilter() {
- return true;
- }
-
- @Override
- public Object run() {
- try {
- RequestContext currentContext = RequestContext.getCurrentContext();
- HttpServletResponse response = currentContext.getResponse();
-
- //需要设置编码格式,否则前端拿到的中文数据会乱码变成???(暂时注释掉,因为加了这两句代码,swagger获取不到返回信息)
- response.setCharacterEncoding("UTF-8");
- response.setContentType("application/json;charset=UTF-8");
-
- String method = currentContext.getRequest().getMethod();
- // 处理跨域发送两次请求,打印两遍日志问题
- if (Constant.OPTIONS.equals(method)) {
- return null;
- }
- List contentTypeList = currentContext.getZuulResponseHeaders().stream().
- filter(x -> x.first().equals(Constant.CONTENT_TYPE)).map(x -> x.second()).collect(Collectors.toList());
-
- if (contentTypeList != null && !contentTypeList.isEmpty()) {
- String contentType = contentTypeList.get(0);
- log.info("Response Content-type: [{}]", contentType);
-
- InputStream responseDataStream = currentContext.getResponseDataStream();
- if (responseDataStream != null && contentType !=null && contentType.contains(Constant.APP_JSON)) {
- String body = read(responseDataStream);
- responseDataStream.close();
- log.info("Response Parameters: \n [{}]", body);
- currentContext.setResponseBody(body); //这句话如果注释掉,返回内容直接会被清空
- }
- }
-
- // 获取PRE_TYPE Filter开始时间戳
- long startTime = (Long) RequestContext.getCurrentContext().get("startTime");
-
- // 记录POST_TYPE Filter结束时间戳
- long endTime = System.currentTimeMillis();
-
- // 计算PRE_TYPE和POST_TYPE Filter之间的请求耗时
- long duration = endTime - startTime;
-
- log.info("Request Spend Time: [{}]", duration + "ms");
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- log.info("-------------------REQUEST-END-----------------");
-
- return null;
- }
-
- private String read(InputStream inputStream) throws IOException {
- ByteArrayOutputStream result = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int length;
- while ((length = inputStream.read(buffer)) != -1) {
- result.write(buffer, 0, length);
- }
- return result.toString(StandardCharsets.UTF_8.name());
- }
-}
\ No newline at end of file
diff --git a/siam-zuul/src/main/resources/application-local.yml b/siam-zuul/src/main/resources/application-local.yml
deleted file mode 100644
index 349faa7..0000000
--- a/siam-zuul/src/main/resources/application-local.yml
+++ /dev/null
@@ -1,155 +0,0 @@
-#端口配置
-server:
- port: 8080
- #修改tomcat对get请求的参数限制大小(默认为8K)
- max-http-header-size: 204800
-
-spring:
- #redis单例模式
- redis:
- host: 127.0.0.1
- password:
- port: 6379
- jedis:
- pool:
- # 连接池中的最大空闲连接个数
- max-idle: 8
- # 连接池中的最小空闲连接个数
- min-idle: 0
- # 连接池最大连接数(使用负值表示没有限制)
- max-active: 8
- # 连接池最大阻塞等待时间(使用负值表示没有限制)
- max-wait: -1ms
- # 连接超时时间(毫秒)
- timeout: 600000ms
-
- #服务别名,注册到注册中心上的名字
- application:
- name: zuul-siam
-
- #允许bean重复定义/允许bean覆盖
- main:
- allow-bean-definition-overriding: true
-
- #邮件相关配置
- mail:
- host: smtp.126.com
- password: siam1026@163.com
- username: siam1026@163.com
- properties:
- mail:
- smtp:
- #非必要参数
- auth: true
- port: 465
- ssl.enable: true
- starttls.enable: true
- #必要参数
- timeout: 25000
- socketFactory.class: javax.net.ssl.SSLSocketFactory
- socketFactory.port: 465
-
-#eureka配置
-eureka:
- client:
- service-url:
- defaultZone: http://127.0.0.1:9000/eureka/
- register-with-eureka: true
- fetch-registry: true
- instance:
- #配置使用ip地址来注册(默认是主机名称)
- prefer-ip-address: true
- #心跳检测暂时不配置
-
-###配置网关信息
-zuul:
- routes:
- ###定义转发服务规则
- api-user:
- ###服务别名
- serviceId: user-siam
- ###公开路径,暴露给用户访问的路径
- path: /api-user/**
-
- api-merchant:
- serviceId: merchant-siam
- path: /api-merchant/**
-
- api-rider:
- serviceId: rider-siam
- path: /api-rider/**
-
- api-goods:
- serviceId: goods-siam
- path: /api-goods/**
-
- api-order:
- serviceId: order-siam
- path: /api-order/**
-
- api-promotion:
- serviceId: promotion-siam
- path: /api-promotion/**
-
- api-mall:
- serviceId: mall-siam
- path: /api-mall/**
-
- api-util:
- serviceId: util-siam
- path: /api-util/**
-
- ###配置Zuul超时时间
- host:
- ###HTTP连接超时
- connect-timeout-millis: 15000
- ###Socket连接超时
- socket-timeout-millis: 60000
-
- #允许向下传递请求头信息 -- 敏感头信息Authorization,Cookie,Set-Cookie默认是不转发的
- sensitive-headers:
-
-#设置feign客户端超时时间
-ribbon:
- #请求处理的超时时间
- ReadTimeout: 120000
- #请求连接的超时时间
- ConnectTimeout: 30000
-
-#springboot admin相关配置
-management:
- endpoints:
- web:
- exposure:
- include: "*" #'prometheus,health'
- exclude: "shutdown"
- base-path: /actuator
- endpoint:
- health:
- show-details: ALWAYS
- prometheus:
- enabled: true
- metrics:
- export:
- prometheus:
- enabled: true
- step: 1ms
- descriptions: true
- tags:
- # 为指标设置一个Tag,这里设置为应用名,Tag是Prometheus提供的一种能力,从而实现更加灵活的筛选
- application: ${spring.application.name}
- # 禁止Actuator监控以下组件连接
- health:
- rabbit:
- enabled: false
- mongo:
- enabled: false
- elasticsearch:
- enabled: false
-
-#日志配置
-logging:
- file:
- name: ./logs/${spring.application.name}/log_info.log
-path:
- log: ./logs/${spring.application.name}/
diff --git a/siam-zuul/src/main/resources/application.yml b/siam-zuul/src/main/resources/application.yml
deleted file mode 100644
index c60820e..0000000
--- a/siam-zuul/src/main/resources/application.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-# 切换正式、测试环境
-spring:
- profiles:
- #默认连接测试环境
- active: @spring.active@
diff --git a/siam-zuul/src/main/resources/banner.txt b/siam-zuul/src/main/resources/banner.txt
deleted file mode 100644
index 7d6e4fe..0000000
--- a/siam-zuul/src/main/resources/banner.txt
+++ /dev/null
@@ -1,7 +0,0 @@
- . _____ _ __ _ _
- /\\ / ____(_) \ \ \ \
- ( ( )| (___ _ __ _ _ __ ___ \ \ \ \
- \\/ \___ \| |/ _` | '_ ` _ \ ) ) ) )
- ' ____) | | (_| | | | | | | / / / /
- ====|_____/|_|\__,_|_| |_| |_|/_/_/_/
- 1.1
\ No newline at end of file
diff --git a/siam-zuul/src/main/resources/logback-spring.xml b/siam-zuul/src/main/resources/logback-spring.xml
deleted file mode 100644
index a5a0692..0000000
--- a/siam-zuul/src/main/resources/logback-spring.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ${CONSOLE_LOG_PATTERN}
- utf8
-
-
-
-
-
- ${log.path}/log_info.log
-
-
- ${log.path}/log_info-%d{yyyy-MM-dd}.log
-
- ${log.save.time.day}
-
-
-
- %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n
-
-
-
-
-
- ${log.path}/log_error.log
-
-
-
- ${log.path}/log_error.%d{yyyy-MM-dd}.log
-
- ${log.save.time.day}
-
-
- ${log.pattern}
-
-
-
- ERROR
-
- ACCEPT
-
- DENY
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sql/mysql/siam_cloud.sql b/sql/mysql/siam_cloud.sql
index 48d33f1..27998f4 100644
--- a/sql/mysql/siam_cloud.sql
+++ b/sql/mysql/siam_cloud.sql
@@ -3,6 +3,7 @@ SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tb_admin
-- ----------------------------
+use siam_cloud;
DROP TABLE IF EXISTS `tb_admin`;
CREATE TABLE `tb_admin` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
diff --git a/vue-siam-admin/config/index.js b/vue-siam-admin/config/index.js
index 2244f03..4c33481 100644
--- a/vue-siam-admin/config/index.js
+++ b/vue-siam-admin/config/index.js
@@ -25,13 +25,13 @@ module.exports = {
rootPath: '',
name: 'siam-admin',
http:{
- baseUrl: 'https://api.show.siamit.cn', // production
- baseUrl4Test: 'https://api.show.siamit.cn', // production_test
- developmentBaseUrl: 'https://api.show.siamit.cn' // development
+ // baseUrl: 'https://api.show.siamit.cn', // production
+ // baseUrl4Test: 'https://api.show.siamit.cn', // production_test
+ // developmentBaseUrl: 'https://api.show.siamit.cn' // development
- // baseUrl: 'http://localhost:9020', // production
- // baseUrl4Test: 'http://localhost:9020', // production_test
- // developmentBaseUrl: 'http://localhost:9020' // development
+ baseUrl: 'http://127.0.0.1:8081', // production -> 本地 Gateway
+ baseUrl4Test: 'http://127.0.0.1:8081', // production_test -> 本地 Gateway
+ developmentBaseUrl: 'http://127.0.0.1:8081' // development -> 本地 Gateway
},
oss:{
domain: 'https://siam-hangzhou.oss-cn-hangzhou.aliyuncs.com/'
diff --git a/vue-siam-admin/package-lock.json b/vue-siam-admin/package-lock.json
index 14509b9..105402b 100644
--- a/vue-siam-admin/package-lock.json
+++ b/vue-siam-admin/package-lock.json
@@ -9174,7 +9174,8 @@
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "optional": true
},
"ansi-styles": {
"version": "2.2.1",
@@ -9247,6 +9248,7 @@
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
"integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "optional": true,
"requires": {
"inherits": "~2.0.0"
}
@@ -9273,7 +9275,8 @@
"buffer-shims": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
- "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
+ "optional": true
},
"caseless": {
"version": "0.11.0",
@@ -9297,7 +9300,8 @@
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "optional": true
},
"combined-stream": {
"version": "1.0.5",
@@ -9326,12 +9330,14 @@
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "optional": true
},
"cryptiles": {
"version": "2.0.5",
@@ -9410,7 +9416,8 @@
"extsprintf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
- "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA="
+ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
+ "optional": true
},
"forever-agent": {
"version": "0.6.1",
@@ -9432,12 +9439,14 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "optional": true
},
"fstream": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz",
"integrity": "sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=",
+ "optional": true,
"requires": {
"graceful-fs": "^4.1.2",
"inherits": "~2.0.0",
@@ -9508,6 +9517,7 @@
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
"integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "optional": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -9520,7 +9530,8 @@
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "optional": true
},
"graceful-readlink": {
"version": "1.0.1",
@@ -9570,7 +9581,8 @@
"hoek": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
- "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "optional": true
},
"http-signature": {
"version": "1.1.1",
@@ -9587,6 +9599,7 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "optional": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -9595,7 +9608,8 @@
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "optional": true
},
"ini": {
"version": "1.3.4",
@@ -9607,6 +9621,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -9638,7 +9653,8 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "optional": true
},
"isstream": {
"version": "0.1.2",
@@ -9709,6 +9725,7 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
"integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "optional": true,
"requires": {
"brace-expansion": "^1.0.0"
}
@@ -9723,6 +9740,7 @@
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -9793,6 +9811,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "optional": true,
"requires": {
"wrappy": "1"
}
@@ -9800,7 +9819,8 @@
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "optional": true
},
"pinkie": {
"version": "2.0.4",
@@ -9820,7 +9840,8 @@
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "optional": true
},
"punycode": {
"version": "1.4.1",
@@ -9901,6 +9922,7 @@
"version": "2.5.4",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz",
"integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=",
+ "optional": true,
"requires": {
"glob": "^7.0.5"
}
@@ -9961,6 +9983,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -9970,7 +9993,8 @@
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "optional": true
},
"stringstream": {
"version": "0.0.5",
@@ -9982,6 +10006,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -10002,6 +10027,7 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
"integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "optional": true,
"requires": {
"block-stream": "*",
"fstream": "^1.0.2",
@@ -10080,7 +10106,8 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "optional": true
},
"uuid": {
"version": "3.0.1",
@@ -10109,7 +10136,8 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "optional": true
},
"xtend": {
"version": "4.0.1",
diff --git a/vue-siam-admin/src/pages/shopManage/shopList.vue b/vue-siam-admin/src/pages/shopManage/shopList.vue
index c6c15f5..1079efe 100644
--- a/vue-siam-admin/src/pages/shopManage/shopList.vue
+++ b/vue-siam-admin/src/pages/shopManage/shopList.vue
@@ -373,7 +373,7 @@
editFormSecond: {
startDeliveryPrice:'',
memberMobile: '',
- }
+ }
}
},
methods: {
@@ -698,7 +698,7 @@
type: 'error'
});
}
- )
+ )
}
});
}