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 body) { + if (body != null) { + Flux 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> getListByPageJoinSpecification(int pageNo, int @Override public void increaseStock(int id, int number) { - Goods dbGoods = goodsMapper.selectById(id); - //增加库存数量 - Goods updateGoods = new Goods(); - updateGoods.setId(dbGoods.getId()); - updateGoods.setStock(dbGoods.getStock() + number); - goodsMapper.updateById(updateGoods); + goodsMapper.increaseStockByCAS(id, number); } @Override public void decreaseStock(int id, int number) { - Goods dbGoods = goodsMapper.selectById(id); - if(dbGoods.getStock() - number < 0){ - throw new StoneCustomerException(dbGoods.getName() + "库存不足,请减少该单品购买数量"); + int rows = goodsMapper.decreaseStockByCAS(id, number); + if(rows == 0){ + throw new StoneCustomerException("手慢了,商品库存不足"); } - //减少库存数量 - Goods updateGoods = new Goods(); - updateGoods.setId(dbGoods.getId()); - updateGoods.setStock(dbGoods.getStock() - number); - goodsMapper.updateById(updateGoods); } /** diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/StatisticsServiceImpl.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/StatisticsServiceImpl.java index 28e7cd1..b77f6e0 100644 --- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/StatisticsServiceImpl.java +++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/StatisticsServiceImpl.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.siam.package_common.constant.Quantity; +import com.siam.package_common.entity.BasicResult; import com.siam.package_common.util.DateUtilsExtend; import com.siam.package_common.util.DateUtilsPlus; import com.siam.package_goods.entity.Goods; @@ -87,40 +88,38 @@ public Map todayStatisticByAdmin(StatisticsParam param) { //今日支付订单、今日支付金额、待完成订单、待处理退款 order.setStartTime(DateUtilsExtend.getDayBegin()); order.setEndTime(DateUtilsExtend.getDayEnd()); - int dayCountPaid = orderFeignApi.selectCountCompleted(order).getData(); - BigDecimal daySumActualPrice = orderFeignApi.selectSumActualPrice(order).getData(); - int unCompletedNum = orderFeignApi.selectCountUnCompleted(order).getData(); - int waitHandleRefundNum = orderFeignApi.selectCountWaitHandle(order).getData(); + int dayCountPaid = safeInt(orderFeignApi.selectCountCompleted(order)); + BigDecimal daySumActualPrice = safeBigDecimal(orderFeignApi.selectSumActualPrice(order)); + int unCompletedNum = safeInt(orderFeignApi.selectCountUnCompleted(order)); + int waitHandleRefundNum = safeInt(orderFeignApi.selectCountWaitHandle(order)); //总帐余额 = 累计进账 - 累计出账 - //今日进账 = 所有微信支付入口汇总的金额;退款金额不做计算;余额支付、积分支付这种不算 - //今日出账 = 佣金提现 + 商户提现 + 退款金额之类的所有由微信支出的汇总;余额和积分的支付也算 MemberTradeRecord memberTradeRecord = new MemberTradeRecord(); memberTradeRecord.setStartTime(DateUtilsExtend.getDayBegin()); memberTradeRecord.setEndTime(DateUtilsExtend.getDayEnd()); - BigDecimal daySumIncome = memberTradeRecordFeignApi.selectSumIncome(memberTradeRecord).getData(); - BigDecimal daySumExpense = memberTradeRecordFeignApi.selectSumExpense(memberTradeRecord).getData(); + BigDecimal daySumIncome = safeBigDecimal(memberTradeRecordFeignApi.selectSumIncome(memberTradeRecord)); + BigDecimal daySumExpense = safeBigDecimal(memberTradeRecordFeignApi.selectSumExpense(memberTradeRecord)); //退款金额--微信/支付宝 OrderRefund orderRefund = new OrderRefund(); orderRefund.setStartTime(DateUtilsExtend.getDayBegin()); orderRefund.setEndTime(DateUtilsExtend.getDayEnd()); - BigDecimal daySumRefundAmount = orderRefundFeignApi.selectSumRefundAmount(orderRefund).getData(); + BigDecimal daySumRefundAmount = safeBigDecimal(orderRefundFeignApi.selectSumRefundAmount(orderRefund)); daySumExpense = daySumExpense.add(daySumRefundAmount).setScale(2, BigDecimal.ROUND_HALF_UP); //退款金额--余额/积分 - BigDecimal daySumRefundAmountByPlatformCoin = orderRefundFeignApi.selectSumRefundAmountByPlatformCoin(orderRefund).getData(); + BigDecimal daySumRefundAmountByPlatformCoin = safeBigDecimal(orderRefundFeignApi.selectSumRefundAmountByPlatformCoin(orderRefund)); daySumExpense = daySumExpense.subtract(daySumRefundAmountByPlatformCoin).setScale(2, BigDecimal.ROUND_HALF_UP); memberTradeRecord.setStartTime(new Date("1970/1/1 00:00:00")); memberTradeRecord.setEndTime(new Date("2100/1/1 00:00:00")); - BigDecimal totalSumIncome = memberTradeRecordFeignApi.selectSumIncome(memberTradeRecord).getData(); - BigDecimal totalSumExpense = memberTradeRecordFeignApi.selectSumExpense(memberTradeRecord).getData(); + BigDecimal totalSumIncome = safeBigDecimal(memberTradeRecordFeignApi.selectSumIncome(memberTradeRecord)); + BigDecimal totalSumExpense = safeBigDecimal(memberTradeRecordFeignApi.selectSumExpense(memberTradeRecord)); //退款金额--微信/支付宝 orderRefund.setStartTime(new Date("1970/1/1 00:00:00")); orderRefund.setEndTime(new Date("2100/1/1 00:00:00")); - BigDecimal totalSumRefundAmount = orderRefundFeignApi.selectSumRefundAmount(orderRefund).getData(); + BigDecimal totalSumRefundAmount = safeBigDecimal(orderRefundFeignApi.selectSumRefundAmount(orderRefund)); totalSumExpense = totalSumExpense.add(totalSumRefundAmount); //退款金额--余额/积分 - BigDecimal totalSumRefundAmountByPlatformCoin = orderRefundFeignApi.selectSumRefundAmountByPlatformCoin(orderRefund).getData(); + BigDecimal totalSumRefundAmountByPlatformCoin = safeBigDecimal(orderRefundFeignApi.selectSumRefundAmountByPlatformCoin(orderRefund)); totalSumExpense = totalSumExpense.subtract(totalSumRefundAmountByPlatformCoin).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal balance = totalSumIncome.subtract(totalSumExpense).setScale(2, BigDecimal.ROUND_HALF_UP); @@ -128,48 +127,44 @@ public Map todayStatisticByAdmin(StatisticsParam param) { //商品支付金额、配送费金额、退款金额、配送费退款金额 -- 针对于所有店铺、现金/余额都算 Map orderSumField = orderFeignApi.selectSumField(order).getData(); Map orderRefundSumField = orderRefundFeignApi.selectSumField(new OrderRefund()).getData(); - BigDecimal totalActualPrice = new BigDecimal((Double) orderSumField.get("totalActualPrice")); - BigDecimal totalDeliveryFee = new BigDecimal((Double) orderSumField.get("totalDeliveryFee")); - BigDecimal totalRefundAmount = new BigDecimal((Double) orderRefundSumField.get("totalRefundAmount")); - BigDecimal totalRefundDeliveryFee = new BigDecimal((Double) orderRefundSumField.get("totalRefundDeliveryFee")); + BigDecimal totalActualPrice = orderSumField != null && orderSumField.get("totalActualPrice") != null ? new BigDecimal((Double) orderSumField.get("totalActualPrice")) : BigDecimal.ZERO; + BigDecimal totalDeliveryFee = orderSumField != null && orderSumField.get("totalDeliveryFee") != null ? new BigDecimal((Double) orderSumField.get("totalDeliveryFee")) : BigDecimal.ZERO; + BigDecimal totalRefundAmount = orderRefundSumField != null && orderRefundSumField.get("totalRefundAmount") != null ? new BigDecimal((Double) orderRefundSumField.get("totalRefundAmount")) : BigDecimal.ZERO; + BigDecimal totalRefundDeliveryFee = orderRefundSumField != null && orderRefundSumField.get("totalRefundDeliveryFee") != null ? new BigDecimal((Double) orderRefundSumField.get("totalRefundDeliveryFee")) : BigDecimal.ZERO; //待处理开店申请、待处理提现申请、待处理变更资料申请、待处理退款申请 ShopParam shopParam = new ShopParam(); shopParam.setAuditStatus(Quantity.INT_1); - int handleShopCount = shopFeignApi.countByExample(shopParam).getData(); + int handleShopCount = safeInt(shopFeignApi.countByExample(shopParam)); - int handleMerchantWithdrawCount = merchantWithdrawRecordFeignApi.countByAuditStatus(Quantity.INT_1).getData(); + int handleMerchantWithdrawCount = safeInt(merchantWithdrawRecordFeignApi.countByAuditStatus(Quantity.INT_1)); ShopChangeRecordParam changeRecordParam = new ShopChangeRecordParam(); changeRecordParam.setAuditStatus(Quantity.INT_1); - int handleShopChangeCount = shopChangeRecordFeignApi.countByExample(changeRecordParam).getData(); + int handleShopChangeCount = safeInt(shopChangeRecordFeignApi.countByExample(changeRecordParam)); OrderRefund orderRefundCount = new OrderRefund(); orderRefundCount.setStatus(Quantity.INT_4); - int handleOrderRefundCount = orderRefundFeignApi.countByExample(orderRefundCount).getData(); + int handleOrderRefundCount = safeInt(orderRefundFeignApi.countByExample(orderRefundCount)); //商家总览:已下架、已上架、全部商家 shopParam = new ShopParam(); shopParam.setStatus(Quantity.INT_3); - int underShelfShopCount = shopFeignApi.countByExample(shopParam).getData(); + int underShelfShopCount = safeInt(shopFeignApi.countByExample(shopParam)); shopParam = new ShopParam(); shopParam.setStatus(Quantity.INT_2); - int onShelfShopCount = shopFeignApi.countByExample(shopParam).getData(); + int onShelfShopCount = safeInt(shopFeignApi.countByExample(shopParam)); - /*List filterList = new ArrayList<>(); - filterList.add(Quantity.INT_1); - filterList.add(Quantity.INT_2); - filterList.add(Quantity.INT_3);*/ shopParam = new ShopParam(); shopParam.setAuditStatus(Quantity.INT_2); - int allShopCount = shopFeignApi.countByExample(shopParam).getData(); + int allShopCount = safeInt(shopFeignApi.countByExample(shopParam)); //用户总览:今日新增、昨日新增、本月新增、会员总数 - int dayMemberCount = memberFeignApi.selectCountRegister(DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd()).getData(); - int yesterdayMemberCount = memberFeignApi.selectCountRegister(DateUtilsExtend.getBeginDayOfYesterday(), DateUtilsExtend.getEndDayOfYesterDay()).getData(); - int thisMonthMemberCount = memberFeignApi.selectCountRegister(DateUtilsExtend.getBeginDayOfMonth(), DateUtilsExtend.getEndDayOfMonth()).getData(); - int allMemberCount = memberFeignApi.countByExample(new Member()).getData(); + int dayMemberCount = safeInt(memberFeignApi.selectCountRegister(DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd())); + int yesterdayMemberCount = safeInt(memberFeignApi.selectCountRegister(DateUtilsExtend.getBeginDayOfYesterday(), DateUtilsExtend.getEndDayOfYesterDay())); + int thisMonthMemberCount = safeInt(memberFeignApi.selectCountRegister(DateUtilsExtend.getBeginDayOfMonth(), DateUtilsExtend.getEndDayOfMonth())); + int allMemberCount = safeInt(memberFeignApi.countByExample(new Member())); resultMap.put("dayCountPaid", dayCountPaid); resultMap.put("daySumActualPrice", daySumActualPrice); @@ -264,55 +259,55 @@ public Map todayStatisticByMerchant(StatisticsParam param) { order.setEndTime(DateUtilsExtend.getDayEnd()); //今日支付订单、今日实际收入、今日进店人数、今日加购商品 log.debug("\n\n》》》 StatisticsServiceImpl.todayStatisticByMerchant - order = " + JSON.toJSONString(order)); - int dayCountPaid = orderFeignApi.selectCountCompleted(order).getData(); - BigDecimal daySumMerchantIncome = orderFeignApi.selectSumMerchantIncome(order).getData(); - int todayCountIntoShop = systemUsageRecordFeignApi.selectCountIntoShop(loginMerchant.getShopId(), DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd()).getData(); + int dayCountPaid = safeInt(orderFeignApi.selectCountCompleted(order)); + BigDecimal daySumMerchantIncome = safeBigDecimal(orderFeignApi.selectSumMerchantIncome(order)); + int todayCountIntoShop = safeInt(systemUsageRecordFeignApi.selectCountIntoShop(loginMerchant.getShopId(), DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd())); int todayCountShoppingCartGoodsNumber = shoppingCartService.selectCountGoodsNumber(loginMerchant.getShopId(), DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd()); //待制作订单(自取)、待配送订单(外卖)、已完成订单、待处理退款申请 order.setShopId(loginMerchant.getShopId()); order.setStatus(Quantity.INT_2); - int waitHandleOrderCount = orderFeignApi.countByExample(order).getData(); + int waitHandleOrderCount = safeInt(orderFeignApi.countByExample(order)); order.setShopId(loginMerchant.getShopId()); order.setStatus(Quantity.INT_4); - int waitDeliverOrderCount = orderFeignApi.countByExample(order).getData(); + int waitDeliverOrderCount = safeInt(orderFeignApi.countByExample(order)); order.setShopId(loginMerchant.getShopId()); order.setStatus(Quantity.INT_6); - int completedOrderCount = orderFeignApi.countByExample(order).getData(); + int completedOrderCount = safeInt(orderFeignApi.countByExample(order)); order.setShopId(loginMerchant.getShopId()); order.setStatus(Quantity.INT_7); - int handleOrderRefundCount = orderFeignApi.countByExample(order).getData(); + int handleOrderRefundCount = safeInt(orderFeignApi.countByExample(order)); //商品总览:已下架、已上架、库存售罄、全部商品 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Goods::getShopId, loginMerchant.getShopId()); wrapper.eq(Goods::getStatus, Quantity.INT_3); - int underShelfGoodsCount = goodsService.count(wrapper); + long underShelfGoodsCount = goodsService.count(wrapper); wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Goods::getShopId, loginMerchant.getShopId()); wrapper.eq(Goods::getStatus, Quantity.INT_2); - int onShelfGoodsCount = goodsService.count(wrapper); + long onShelfGoodsCount = goodsService.count(wrapper); wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Goods::getShopId, loginMerchant.getShopId()); wrapper.eq(Goods::getStatus, Quantity.INT_4); - int sellOutGoodsCount = goodsService.count(wrapper); + long sellOutGoodsCount = goodsService.count(wrapper); wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Goods::getShopId, loginMerchant.getShopId()); - int allGoodsCount = goodsService.count(wrapper); + long allGoodsCount = goodsService.count(wrapper); //指数总览:客单价(成交金额/成交订单数)、下单转化率(下单人数/访问人数)、下单-支付转化率(支付人数/下单人数)、支付转化率(支付人数/访问人数) Date startDate = new Date("1970/1/1 00:00:00"); BigDecimal perCustomerTransaction; order.setStartTime(startDate); order.setEndTime(DateUtilsExtend.getDayEnd()); - BigDecimal sumActualPrice = orderFeignApi.selectSumActualPrice(order).getData(); - int countPaid = orderFeignApi.selectCountCompleted(order).getData(); + BigDecimal sumActualPrice = safeBigDecimal(orderFeignApi.selectSumActualPrice(order)); + int countPaid = safeInt(orderFeignApi.selectCountCompleted(order)); if(countPaid == 0){ perCustomerTransaction = BigDecimal.valueOf(-1); }else{ @@ -322,8 +317,8 @@ public Map todayStatisticByMerchant(StatisticsParam param) { BigDecimal orderConversionRate; order.setStartTime(startDate); order.setEndTime(DateUtilsExtend.getDayEnd()); - int countOrderPeoples = orderFeignApi.selectCountOrderPeoples(order).getData(); - int countIntoShop = systemUsageRecordFeignApi.selectCountIntoShop(loginMerchant.getShopId(), startDate, DateUtilsExtend.getDayEnd()).getData(); + int countOrderPeoples = safeInt(orderFeignApi.selectCountOrderPeoples(order)); + int countIntoShop = safeInt(systemUsageRecordFeignApi.selectCountIntoShop(loginMerchant.getShopId(), startDate, DateUtilsExtend.getDayEnd())); if(countIntoShop == 0){ orderConversionRate = BigDecimal.valueOf(-1); }else{ @@ -333,7 +328,7 @@ public Map todayStatisticByMerchant(StatisticsParam param) { BigDecimal orderPaymentConversionRate; order.setStartTime(startDate); order.setEndTime(DateUtilsExtend.getDayEnd()); - int countPayers = orderFeignApi.selectCountPayers(order).getData(); + int countPayers = safeInt(orderFeignApi.selectCountPayers(order)); if(countOrderPeoples == 0){ orderPaymentConversionRate = BigDecimal.valueOf(-1); }else{ @@ -420,27 +415,27 @@ public Map todayStatisticByMerchant(StatisticsParam param) { order.setShopId(loginMerchant.getShopId()); //今日进店人数 - todayCountIntoShop = systemUsageRecordFeignApi.selectCountIntoShop(loginMerchant.getShopId(), today_startTime, today_endTime).getData(); + todayCountIntoShop = safeInt(systemUsageRecordFeignApi.selectCountIntoShop(loginMerchant.getShopId(), today_startTime, today_endTime)); //昨日进店人数 - int yesterdayCountIntoShop = systemUsageRecordFeignApi.selectCountIntoShop(loginMerchant.getShopId(), yesterday_startTime, yesterday_endTime).getData(); + int yesterdayCountIntoShop = safeInt(systemUsageRecordFeignApi.selectCountIntoShop(loginMerchant.getShopId(), yesterday_startTime, yesterday_endTime)); //今日支付金额(商家实际到手金额) order.setStartTime(today_startTime); order.setEndTime(today_endTime); - BigDecimal todaySumMerchantIncome = orderFeignApi.selectSumMerchantIncome(order).getData(); + BigDecimal todaySumMerchantIncome = safeBigDecimal(orderFeignApi.selectSumMerchantIncome(order)); //昨日支付金额(商家实际到手金额) order.setStartTime(yesterday_startTime); order.setEndTime(yesterday_endTime); - BigDecimal yesterdaySumMerchantIncome = orderFeignApi.selectSumMerchantIncome(order).getData(); + BigDecimal yesterdaySumMerchantIncome = safeBigDecimal(orderFeignApi.selectSumMerchantIncome(order)); //今日支付订单数量 order.setStartTime(today_startTime); order.setEndTime(today_endTime); - int todayCountPaid = orderFeignApi.selectCountCompleted(order).getData(); + int todayCountPaid = safeInt(orderFeignApi.selectCountCompleted(order)); //昨日支付订单数量 order.setStartTime(yesterday_startTime); order.setEndTime(yesterday_endTime); - int yesterdayCountPaid = orderFeignApi.selectCountCompleted(order).getData(); + int yesterdayCountPaid = safeInt(orderFeignApi.selectCountCompleted(order)); //今日加购商品数量 int todayCountGoodsNumber = shoppingCartService.selectCountGoodsNumber(loginMerchant.getShopId(), today_startTime, today_endTime); @@ -458,4 +453,28 @@ public Map todayStatisticByMerchant(StatisticsParam param) { return resultMap; } + + 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; + } } \ No newline at end of file diff --git a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/internal/PointsMallStatisticsServiceImpl.java b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/internal/PointsMallStatisticsServiceImpl.java index fd8c868..92eda39 100644 --- a/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/internal/PointsMallStatisticsServiceImpl.java +++ b/siam-goods/goods-provider/src/main/java/com/siam/package_goods/service_impl/internal/PointsMallStatisticsServiceImpl.java @@ -1,6 +1,7 @@ package com.siam.package_goods.service_impl.internal; import com.siam.package_common.constant.Quantity; +import com.siam.package_common.entity.BasicResult; import com.siam.package_common.util.DateUtilsExtend; import com.siam.package_goods.model.param.StatisticsParam; import com.siam.package_goods.service.internal.PointsMallStatisticsService; @@ -85,10 +86,10 @@ public Map todayStatisticWithPointsMallByAdmin(StatisticsParam param) { //今日支付订单、今日支付金额、待完成订单、待处理退款 order.setStartTime(DateUtilsExtend.getDayBegin()); order.setEndTime(DateUtilsExtend.getDayEnd()); - int dayCountPaid = orderFeignApi.selectCountCompleted(order).getData(); - BigDecimal daySumActualPrice = orderFeignApi.selectSumActualPrice(order).getData(); - int unCompletedNum = orderFeignApi.selectCountUnCompleted(order).getData(); - int waitHandleRefundNum = orderFeignApi.selectCountWaitHandle(order).getData(); + int dayCountPaid = safeInt(orderFeignApi.selectCountCompleted(order)); + BigDecimal daySumActualPrice = safeBigDecimal(orderFeignApi.selectSumActualPrice(order)); + int unCompletedNum = safeInt(orderFeignApi.selectCountUnCompleted(order)); + int waitHandleRefundNum = safeInt(orderFeignApi.selectCountWaitHandle(order)); //总帐余额 = 累计进账 - 累计出账 //今日进账 = 所有微信支付入口汇总的金额;退款金额不做计算;余额支付、积分支付这种不算 @@ -96,38 +97,38 @@ public Map todayStatisticWithPointsMallByAdmin(StatisticsParam param) { MemberTradeRecord memberTradeRecord = new MemberTradeRecord(); memberTradeRecord.setStartTime(DateUtilsExtend.getDayBegin()); memberTradeRecord.setEndTime(DateUtilsExtend.getDayEnd()); - BigDecimal daySumIncome = memberTradeRecordFeignApi.selectSumIncome(memberTradeRecord).getData(); - BigDecimal daySumExpense = memberTradeRecordFeignApi.selectSumExpense(memberTradeRecord).getData(); + BigDecimal daySumIncome = safeBigDecimal(memberTradeRecordFeignApi.selectSumIncome(memberTradeRecord)); + BigDecimal daySumExpense = safeBigDecimal(memberTradeRecordFeignApi.selectSumExpense(memberTradeRecord)); //退款金额--微信/支付宝 OrderRefund orderRefund = new OrderRefund(); orderRefund.setStartTime(DateUtilsExtend.getDayBegin()); orderRefund.setEndTime(DateUtilsExtend.getDayEnd()); - BigDecimal daySumRefundAmount = orderRefundFeignApi.selectSumRefundAmount(orderRefund).getData(); + BigDecimal daySumRefundAmount = safeBigDecimal(orderRefundFeignApi.selectSumRefundAmount(orderRefund)); PointsMallOrderRefund pointsMallOrderRefund = new PointsMallOrderRefund(); pointsMallOrderRefund.setStartTime(DateUtilsExtend.getDayBegin()); pointsMallOrderRefund.setEndTime(DateUtilsExtend.getDayEnd()); - BigDecimal daySumRefundAmount_mall = pointsMallOrderRefundFeignApi.selectSumRefundAmount(pointsMallOrderRefund).getData(); + BigDecimal daySumRefundAmount_mall = safeBigDecimal(pointsMallOrderRefundFeignApi.selectSumRefundAmount(pointsMallOrderRefund)); daySumExpense = daySumExpense.add(daySumRefundAmount).add(daySumRefundAmount_mall).setScale(2, BigDecimal.ROUND_HALF_UP); //退款金额--余额/积分 - BigDecimal daySumRefundAmountByPlatformCoin = orderRefundFeignApi.selectSumRefundAmountByPlatformCoin(orderRefund).getData(); - BigDecimal daySumRefundAmountByPlatformCoin_mall = pointsMallOrderRefundFeignApi.selectSumRefundAmountByPlatformCoin(pointsMallOrderRefund).getData(); + BigDecimal daySumRefundAmountByPlatformCoin = safeBigDecimal(orderRefundFeignApi.selectSumRefundAmountByPlatformCoin(orderRefund)); + BigDecimal daySumRefundAmountByPlatformCoin_mall = safeBigDecimal(pointsMallOrderRefundFeignApi.selectSumRefundAmountByPlatformCoin(pointsMallOrderRefund)); daySumExpense = daySumExpense.subtract(daySumRefundAmountByPlatformCoin).subtract(daySumRefundAmountByPlatformCoin_mall).setScale(2, BigDecimal.ROUND_HALF_UP); memberTradeRecord.setStartTime(new Date("1970/1/1 00:00:00")); memberTradeRecord.setEndTime(new Date("2100/1/1 00:00:00")); - BigDecimal totalSumIncome = memberTradeRecordFeignApi.selectSumIncome(memberTradeRecord).getData(); - BigDecimal totalSumExpense = memberTradeRecordFeignApi.selectSumExpense(memberTradeRecord).getData(); + BigDecimal totalSumIncome = safeBigDecimal(memberTradeRecordFeignApi.selectSumIncome(memberTradeRecord)); + BigDecimal totalSumExpense = safeBigDecimal(memberTradeRecordFeignApi.selectSumExpense(memberTradeRecord)); //退款金额--微信/支付宝 orderRefund.setStartTime(new Date("1970/1/1 00:00:00")); orderRefund.setEndTime(new Date("2100/1/1 00:00:00")); - BigDecimal totalSumRefundAmount = orderRefundFeignApi.selectSumRefundAmount(orderRefund).getData(); + BigDecimal totalSumRefundAmount = safeBigDecimal(orderRefundFeignApi.selectSumRefundAmount(orderRefund)); pointsMallOrderRefund.setStartTime(new Date("1970/1/1 00:00:00")); pointsMallOrderRefund.setEndTime(new Date("2100/1/1 00:00:00")); - BigDecimal totalSumRefundAmount_mall = pointsMallOrderRefundFeignApi.selectSumRefundAmount(pointsMallOrderRefund).getData(); + BigDecimal totalSumRefundAmount_mall = safeBigDecimal(pointsMallOrderRefundFeignApi.selectSumRefundAmount(pointsMallOrderRefund)); totalSumExpense = totalSumExpense.add(totalSumRefundAmount).add(totalSumRefundAmount_mall); //退款金额--余额/积分 - BigDecimal totalSumRefundAmountByPlatformCoin = orderRefundFeignApi.selectSumRefundAmountByPlatformCoin(orderRefund).getData(); - BigDecimal totalSumRefundAmountByPlatformCoin_mall = pointsMallOrderRefundFeignApi.selectSumRefundAmountByPlatformCoin(pointsMallOrderRefund).getData(); + BigDecimal totalSumRefundAmountByPlatformCoin = safeBigDecimal(orderRefundFeignApi.selectSumRefundAmountByPlatformCoin(orderRefund)); + BigDecimal totalSumRefundAmountByPlatformCoin_mall = safeBigDecimal(pointsMallOrderRefundFeignApi.selectSumRefundAmountByPlatformCoin(pointsMallOrderRefund)); totalSumExpense = totalSumExpense.subtract(totalSumRefundAmountByPlatformCoin).subtract(totalSumRefundAmountByPlatformCoin_mall).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal balance = totalSumIncome.subtract(totalSumExpense).setScale(2, BigDecimal.ROUND_HALF_UP); @@ -135,48 +136,44 @@ public Map todayStatisticWithPointsMallByAdmin(StatisticsParam param) { //商品支付金额、配送费金额、退款金额、配送费退款金额 -- 针对于所有店铺、现金/余额都算 Map orderSumField = orderFeignApi.selectSumField(order).getData(); Map orderRefundSumField = orderRefundFeignApi.selectSumField(new OrderRefund()).getData(); - BigDecimal totalActualPrice = new BigDecimal((Double) orderSumField.get("totalActualPrice")); - BigDecimal totalDeliveryFee = new BigDecimal((Double) orderSumField.get("totalDeliveryFee")); - BigDecimal totalRefundAmount = new BigDecimal((Double) orderRefundSumField.get("totalRefundAmount")); - BigDecimal totalRefundDeliveryFee = new BigDecimal((Double) orderRefundSumField.get("totalRefundDeliveryFee")); + BigDecimal totalActualPrice = orderSumField != null && orderSumField.get("totalActualPrice") != null ? new BigDecimal((Double) orderSumField.get("totalActualPrice")) : BigDecimal.ZERO; + BigDecimal totalDeliveryFee = orderSumField != null && orderSumField.get("totalDeliveryFee") != null ? new BigDecimal((Double) orderSumField.get("totalDeliveryFee")) : BigDecimal.ZERO; + BigDecimal totalRefundAmount = orderRefundSumField != null && orderRefundSumField.get("totalRefundAmount") != null ? new BigDecimal((Double) orderRefundSumField.get("totalRefundAmount")) : BigDecimal.ZERO; + BigDecimal totalRefundDeliveryFee = orderRefundSumField != null && orderRefundSumField.get("totalRefundDeliveryFee") != null ? new BigDecimal((Double) orderRefundSumField.get("totalRefundDeliveryFee")) : BigDecimal.ZERO; //待处理开店申请、待处理提现申请、待处理变更资料申请、待处理退款申请 ShopParam shopParam = new ShopParam(); shopParam.setAuditStatus(Quantity.INT_1); - int handleShopCount = shopFeignApi.countByExample(shopParam).getData(); + int handleShopCount = safeInt(shopFeignApi.countByExample(shopParam)); - int handleMerchantWithdrawCount = merchantWithdrawRecordFeignApi.countByAuditStatus(Quantity.INT_1).getData(); + int handleMerchantWithdrawCount = safeInt(merchantWithdrawRecordFeignApi.countByAuditStatus(Quantity.INT_1)); ShopChangeRecordParam changeRecordParam = new ShopChangeRecordParam(); changeRecordParam.setAuditStatus(Quantity.INT_1); - int handleShopChangeCount = shopChangeRecordFeignApi.countByExample(changeRecordParam).getData(); + int handleShopChangeCount = safeInt(shopChangeRecordFeignApi.countByExample(changeRecordParam)); OrderRefund orderRefundCount = new OrderRefund(); orderRefundCount.setStatus(Quantity.INT_4); - int handleOrderRefundCount = orderRefundFeignApi.countByExample(orderRefundCount).getData(); + int handleOrderRefundCount = safeInt(orderRefundFeignApi.countByExample(orderRefundCount)); //商家总览:已下架、已上架、全部商家 shopParam = new ShopParam(); shopParam.setStatus(Quantity.INT_3); - int underShelfShopCount = shopFeignApi.countByExample(shopParam).getData(); + int underShelfShopCount = safeInt(shopFeignApi.countByExample(shopParam)); shopParam = new ShopParam(); shopParam.setStatus(Quantity.INT_2); - int onShelfShopCount = shopFeignApi.countByExample(shopParam).getData(); + int onShelfShopCount = safeInt(shopFeignApi.countByExample(shopParam)); - /*List filterList = new ArrayList<>(); - filterList.add(Quantity.INT_1); - filterList.add(Quantity.INT_2); - filterList.add(Quantity.INT_3);*/ shopParam = new ShopParam(); shopParam.setAuditStatus(Quantity.INT_2); - int allShopCount = shopFeignApi.countByExample(shopParam).getData(); + int allShopCount = safeInt(shopFeignApi.countByExample(shopParam)); //用户总览:今日新增、昨日新增、本月新增、会员总数 - int dayMemberCount = memberFeignApi.selectCountRegister(DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd()).getData(); - int yesterdayMemberCount = memberFeignApi.selectCountRegister(DateUtilsExtend.getBeginDayOfYesterday(), DateUtilsExtend.getEndDayOfYesterDay()).getData(); - int thisMonthMemberCount = memberFeignApi.selectCountRegister(DateUtilsExtend.getBeginDayOfMonth(), DateUtilsExtend.getEndDayOfMonth()).getData(); - int allMemberCount = memberFeignApi.countByExample(new Member()).getData(); + int dayMemberCount = safeInt(memberFeignApi.selectCountRegister(DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd())); + int yesterdayMemberCount = safeInt(memberFeignApi.selectCountRegister(DateUtilsExtend.getBeginDayOfYesterday(), DateUtilsExtend.getEndDayOfYesterDay())); + int thisMonthMemberCount = safeInt(memberFeignApi.selectCountRegister(DateUtilsExtend.getBeginDayOfMonth(), DateUtilsExtend.getEndDayOfMonth())); + int allMemberCount = safeInt(memberFeignApi.countByExample(new Member())); resultMap.put("dayCountPaid", dayCountPaid); resultMap.put("daySumActualPrice", daySumActualPrice); @@ -269,45 +266,45 @@ public Map pointsMallTodayStatisticByAdmin(StatisticsParam param) { //今日支付订单、今日实际收入、今日进店人数、今日加购商品 order.setStartTime(DateUtilsExtend.getDayBegin()); order.setEndTime(DateUtilsExtend.getDayEnd()); - int dayCountPaid = pointsMallOrderFeignApi.selectCountCompleted(order).getData(); - BigDecimal daySumMerchantIncome = pointsMallOrderFeignApi.selectSumActualPrice(order).getData(); - int todayCountIntoShop = systemUsageRecordFeignApi.selectCountIntoPointsMall(DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd()).getData(); - int todayCountShoppingCartGoodsNumber = pointsMallShoppingCartFeignApi.selectCountGoodsNumber(null, DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd()).getData(); + int dayCountPaid = safeInt(pointsMallOrderFeignApi.selectCountCompleted(order)); + BigDecimal daySumMerchantIncome = safeBigDecimal(pointsMallOrderFeignApi.selectSumActualPrice(order)); + int todayCountIntoShop = safeInt(systemUsageRecordFeignApi.selectCountIntoPointsMall(DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd())); + int todayCountShoppingCartGoodsNumber = safeInt(pointsMallShoppingCartFeignApi.selectCountGoodsNumber(null, DateUtilsExtend.getDayBegin(), DateUtilsExtend.getDayEnd())); //待配送订单(外卖)、已完成订单、待处理退款申请 PointsMallOrderParam pointsMallOrderParam = new PointsMallOrderParam(); pointsMallOrderParam.setStatus(Quantity.INT_4); - int waitDeliverOrderCount = pointsMallOrderFeignApi.countByExample(pointsMallOrderParam).getData(); + int waitDeliverOrderCount = safeInt(pointsMallOrderFeignApi.countByExample(pointsMallOrderParam)); pointsMallOrderParam.setStatus(Quantity.INT_6); - int completedOrderCount = pointsMallOrderFeignApi.countByExample(pointsMallOrderParam).getData(); + int completedOrderCount = safeInt(pointsMallOrderFeignApi.countByExample(pointsMallOrderParam)); pointsMallOrderParam.setStatus(Quantity.INT_7); - int handleOrderRefundCount = pointsMallOrderFeignApi.countByExample(pointsMallOrderParam).getData(); + int handleOrderRefundCount = safeInt(pointsMallOrderFeignApi.countByExample(pointsMallOrderParam)); //商品总览:已下架、已上架、库存售罄、全部商品 PointsMallGoodsParam goodsExample = new PointsMallGoodsParam(); goodsExample.setStatus(Quantity.INT_3); - int underShelfGoodsCount = pointsMallGoodsFeignApi.countByExample(goodsExample).getData(); + int underShelfGoodsCount = safeInt(pointsMallGoodsFeignApi.countByExample(goodsExample)); goodsExample = new PointsMallGoodsParam(); goodsExample.setStatus(Quantity.INT_2); - int onShelfGoodsCount = pointsMallGoodsFeignApi.countByExample(goodsExample).getData(); + int onShelfGoodsCount = safeInt(pointsMallGoodsFeignApi.countByExample(goodsExample)); goodsExample = new PointsMallGoodsParam(); goodsExample.setStatus(Quantity.INT_4); - int sellOutGoodsCount = pointsMallGoodsFeignApi.countByExample(goodsExample).getData(); + int sellOutGoodsCount = safeInt(pointsMallGoodsFeignApi.countByExample(goodsExample)); goodsExample = new PointsMallGoodsParam(); - int allGoodsCount = pointsMallGoodsFeignApi.countByExample(goodsExample).getData(); + int allGoodsCount = safeInt(pointsMallGoodsFeignApi.countByExample(goodsExample)); //指数总览:客单价(成交金额/成交订单数)、下单转化率(下单人数/访问人数)、下单-支付转化率(支付人数/下单人数)、支付转化率(支付人数/访问人数) Date startDate = new Date("1970/1/1 00:00:00"); BigDecimal perCustomerTransaction; order.setStartTime(startDate); order.setEndTime(DateUtilsExtend.getDayEnd()); - BigDecimal sumActualPrice = pointsMallOrderFeignApi.selectSumActualPrice(order).getData(); - int countPaid = pointsMallOrderFeignApi.selectCountCompleted(order).getData(); + BigDecimal sumActualPrice = safeBigDecimal(pointsMallOrderFeignApi.selectSumActualPrice(order)); + int countPaid = safeInt(pointsMallOrderFeignApi.selectCountCompleted(order)); if(countPaid == 0){ perCustomerTransaction = BigDecimal.valueOf(-1); }else{ @@ -315,8 +312,8 @@ public Map pointsMallTodayStatisticByAdmin(StatisticsParam param) { } BigDecimal orderConversionRate; - int countOrderPeoples = pointsMallOrderFeignApi.selectCountOrderPeoples(order).getData(); - int countIntoShop = systemUsageRecordFeignApi.selectCountIntoShop(null, startDate, DateUtilsExtend.getDayEnd()).getData(); + int countOrderPeoples = safeInt(pointsMallOrderFeignApi.selectCountOrderPeoples(order)); + int countIntoShop = safeInt(systemUsageRecordFeignApi.selectCountIntoShop(null, startDate, DateUtilsExtend.getDayEnd())); if(countIntoShop == 0){ orderConversionRate = BigDecimal.valueOf(-1); }else{ @@ -324,7 +321,7 @@ public Map pointsMallTodayStatisticByAdmin(StatisticsParam param) { } BigDecimal orderPaymentConversionRate; - int countPayers = pointsMallOrderFeignApi.selectCountPayers(order).getData(); + int countPayers = safeInt(pointsMallOrderFeignApi.selectCountPayers(order)); if(countOrderPeoples == 0){ orderPaymentConversionRate = BigDecimal.valueOf(-1); }else{ @@ -373,4 +370,28 @@ public Map pointsMallTodayStatisticByAdmin(StatisticsParam param) { return resultMap; } + + 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; + } } \ No newline at end of file diff --git a/siam-goods/goods-provider/src/main/resources/application-local.yml b/siam-goods/goods-provider/src/main/resources/application-local.yml index 4843526..af45b08 100644 --- a/siam-goods/goods-provider/src/main/resources/application-local.yml +++ b/siam-goods/goods-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: goods-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: goods-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-goods/pom.xml b/siam-goods/pom.xml index a77ca89..6a7e39b 100644 --- a/siam-goods/pom.xml +++ b/siam-goods/pom.xml @@ -32,8 +32,6 @@ UTF-8 - 1.8 - 1.8 \ No newline at end of file diff --git a/siam-mall/mall-api/pom.xml b/siam-mall/mall-api/pom.xml index 52a74e0..c2991dc 100644 --- a/siam-mall/mall-api/pom.xml +++ b/siam-mall/mall-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-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoods.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoods.java index 0e9a8e5..247cdd6 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoods.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoods.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; @@ -14,7 +13,7 @@ @Data @TableName("tb_points_mall_goods") -@ApiModel(value = "商品表") + @Schema(description= "商品表") public class PointsMallGoods { @TableField(exist = false) @@ -33,70 +32,70 @@ public class PointsMallGoods { @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 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 = "创建时间") + @Schema(description = "创建时间") private Date createTime; - @ApiModelProperty(notes = "修改时间") + @Schema(description = "修改时间") private Date updateTime; //页码 diff --git a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoodsSpecification.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoodsSpecification.java index f06ac9e..33076be 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoodsSpecification.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoodsSpecification.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_points_mall_goods_specification") -@ApiModel(value = "商品规格表") + @Schema(description= "商品规格表") public class PointsMallGoodsSpecification { @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-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoodsSpecificationOption.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoodsSpecificationOption.java index 265c5ab..0dca990 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoodsSpecificationOption.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallGoodsSpecificationOption.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_points_mall_goods_specification_option") -@ApiModel(value = "商品规格选项表") + @Schema(description= "商品规格选项表") public class PointsMallGoodsSpecificationOption { private List ids; @@ -21,28 +20,28 @@ public class PointsMallGoodsSpecificationOption { @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-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMemberGoodsCollect.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMemberGoodsCollect.java index 2c104a5..c10f248 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMemberGoodsCollect.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMemberGoodsCollect.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_points_mall_member_goods_collect") -@ApiModel(value = "用户收藏表") + @Schema(description= "用户收藏表") public class PointsMallMemberGoodsCollect { List goodsIdList; @@ -19,24 +18,24 @@ public class PointsMallMemberGoodsCollect { @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 = "商品是否有效 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; //页码 diff --git a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMenu.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMenu.java index 6e5de42..47a535c 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMenu.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMenu.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; diff --git a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMenuGoodsRelation.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMenuGoodsRelation.java index 922b485..0108995 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMenuGoodsRelation.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallMenuGoodsRelation.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_points_mall_menu_goods_relation") -@ApiModel(value = "菜单分类商品关系表(多对多)") + @Schema(description= "菜单分类商品关系表(多对多)") public class PointsMallMenuGoodsRelation { @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-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallOrder.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallOrder.java index e75bbdc..6799d0c 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallOrder.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallOrder.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-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallOrderDetail.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallOrderDetail.java index e036186..638800e 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallOrderDetail.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallOrderDetail.java @@ -3,46 +3,45 @@ 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; import java.util.List; @Data -@ApiModel(value = "订单商品详情表") + @Schema(description= "订单商品详情表") @TableName("tb_points_mall_order_detail") public class PointsMallOrderDetail { List ids; - @ApiModelProperty(notes = "主键id") + @Schema(description = "主键id") @TableId(type = IdType.AUTO) private Integer id; - @ApiModelProperty(notes = "订单id") + @Schema(description = "订单id") private Long orderId; - @ApiModelProperty(notes = "商品id") + @Schema(description = "商品id") private Integer goodsId; - @ApiModelProperty(notes = "商品名称") + @Schema(description = "商品名称") private String goodsName; - @ApiModelProperty(notes = "商品主图") + @Schema(description = "商品主图") private String mainImage; - @ApiModelProperty(notes = "商品规格 JSON格式") + @Schema(description = "商品规格 JSON格式") private String specList; - @ApiModelProperty(notes = "价格") + @Schema(description = "价格") private BigDecimal price; - @ApiModelProperty(notes = "购买数量") + @Schema(description = "购买数量") private Integer number; - @ApiModelProperty(notes = "小计") + @Schema(description = "小计") private BigDecimal subtotal; private BigDecimal packingCharges; diff --git a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallShoppingCart.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallShoppingCart.java index 858181a..cd31726 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallShoppingCart.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/entity/PointsMallShoppingCart.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,7 +11,7 @@ @Data @TableName("tb_points_mall_shopping_cart") -@ApiModel(value = "购物车表") + @Schema(description= "购物车表") public class PointsMallShoppingCart { private List ids; @@ -22,25 +21,25 @@ public class PointsMallShoppingCart { @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 = "商品规格 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-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsMenuDto.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsMenuDto.java index ca011f1..b9d7308 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsMenuDto.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsMenuDto.java @@ -1,25 +1,25 @@ package com.siam.package_mall.model.dto; import com.siam.package_mall.entity.PointsMallGoods; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import java.util.Date; public class PointsMallGoodsMenuDto extends PointsMallGoods { - @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-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationDto.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationDto.java index a243362..f6f5054 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationDto.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationDto.java @@ -1,27 +1,27 @@ package com.siam.package_mall.model.dto; import com.siam.package_mall.entity.PointsMallGoods; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import java.math.BigDecimal; public class PointsMallGoodsSpecificationDto extends PointsMallGoods { - @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-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationDto11.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationDto11.java index 72e0553..a94da0a 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationDto11.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationDto11.java @@ -1,13 +1,13 @@ package com.siam.package_mall.model.dto; import com.siam.package_mall.entity.PointsMallGoodsSpecification; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; public class PointsMallGoodsSpecificationDto11 extends PointsMallGoodsSpecification { - @ApiModelProperty(notes = "商品名称") + @Schema(description = "商品名称") private String goodsName; - @ApiModelProperty(notes = "商品主图") + @Schema(description = "商品主图") private String goodsMainImage; public String getGoodsName() { diff --git a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationOptionDto.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationOptionDto.java index 506ed91..9504fe5 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationOptionDto.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallGoodsSpecificationOptionDto.java @@ -1,18 +1,18 @@ package com.siam.package_mall.model.dto; import com.siam.package_mall.entity.PointsMallGoodsSpecificationOption; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import java.math.BigDecimal; public class PointsMallGoodsSpecificationOptionDto extends PointsMallGoodsSpecificationOption { - @ApiModelProperty(notes = "规格名称") + @Schema(description = "规格名称") private String specificationName; - @ApiModelProperty(notes = "商品名称") + @Schema(description = "商品名称") private String goodsName; - @ApiModelProperty(notes = "商品主图") + @Schema(description = "商品主图") private String goodsMainImage; public PointsMallGoodsSpecificationOptionDto() { diff --git a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallMemberGoodsCollectDto.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallMemberGoodsCollectDto.java index ad2fccd..4ea0b52 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallMemberGoodsCollectDto.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/dto/PointsMallMemberGoodsCollectDto.java @@ -1,13 +1,13 @@ package com.siam.package_mall.model.dto; import com.siam.package_mall.entity.PointsMallMemberGoodsCollect; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class PointsMallMemberGoodsCollectDto extends PointsMallMemberGoodsCollect { - @ApiModelProperty(notes = "商品名称") + @Schema(description = "商品名称") private String goodsName; } \ No newline at end of file diff --git a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/param/PointsMallOrderParam.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/param/PointsMallOrderParam.java index a987607..8cc827a 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/param/PointsMallOrderParam.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/param/PointsMallOrderParam.java @@ -5,26 +5,25 @@ import com.siam.package_mall.entity.PointsMallOrder; import com.siam.package_mall.entity.PointsMallOrderDetail; import com.siam.package_mall.entity.PointsMallOrderRefund; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; 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; import java.util.List; @Data -@ApiModel(value = "订单表") + @Schema(description= "订单表") public class PointsMallOrderParam extends PointsMallOrder { private List ids; - @ApiModelProperty(notes = "下单开始时间") + @Schema(description = "下单开始时间") private Date startCreateTime; - @ApiModelProperty(notes = "下单结束时间") + @Schema(description = "下单结束时间") private Date endCreateTime; Date startTime; @@ -62,7 +61,7 @@ public class PointsMallOrderParam extends PointsMallOrder { BigDecimal actualPrice; @NotNull(message = "主键id不能为空", groups = {ValidGroupOfId.class}) - @ApiModelProperty(notes = "主键id") + @Schema(description = "主键id") private Long id; /** diff --git a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/param/SearchParam.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/param/SearchParam.java index e87e10a..0991bb2 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/param/SearchParam.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/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-mall/mall-api/src/main/java/com/siam/package_mall/model/result/PointsMallOrderResult.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/result/PointsMallOrderResult.java index a306c06..1259222 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/result/PointsMallOrderResult.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/result/PointsMallOrderResult.java @@ -2,13 +2,13 @@ import com.siam.package_mall.entity.PointsMallOrder; import com.siam.package_mall.entity.PointsMallOrderDetail; -import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.List; @Data -@ApiModel(value = "订单表") + @Schema(description= "订单表") public class PointsMallOrderResult extends PointsMallOrder { //订单商品详情列表 diff --git a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/vo/PointsMallOrderVo.java b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/vo/PointsMallOrderVo.java index e7fad79..51bb7c4 100644 --- a/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/vo/PointsMallOrderVo.java +++ b/siam-mall/mall-api/src/main/java/com/siam/package_mall/model/vo/PointsMallOrderVo.java @@ -1,13 +1,13 @@ package com.siam.package_mall.model.vo; import com.siam.package_mall.entity.PointsMallOrderDetail; -import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.List; @Data -@ApiModel(value = "订单表") + @Schema(description= "订单表") public class PointsMallOrderVo { private Object order; diff --git a/siam-mall/mall-provider/pom.xml b/siam-mall/mall-provider/pom.xml index 4eac0ee..9ef3ea3 100644 --- a/siam-mall/mall-provider/pom.xml +++ b/siam-mall/mall-provider/pom.xml @@ -16,8 +16,6 @@ UTF-8 - 1.8 - 1.8 4.1.1 @@ -78,72 +76,40 @@ - - - org.springframework.cloud - spring-cloud-starter-netflix-eureka-client - 2.1.2.RELEASE - - - - - org.springframework.cloud - spring-cloud-starter-netflix-hystrix - 2.1.2.RELEASE - - - - - org.springframework.cloud - spring-cloud-starter-hystrix-dashboard - 1.2.3.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 @@ -153,7 +119,6 @@ org.springframework.boot spring-boot-maven-plugin - 2.7.2 com.siam.package_mall.MallApplication diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/MallApplication.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/MallApplication.java index b62fb22..d71af94 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/MallApplication.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/MallApplication.java @@ -1,19 +1,19 @@ package com.siam.package_mall; -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.client.circuitbreaker.EnableCircuitBreaker; -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; -//@EnableHystrix -//@EnableHystrixDashboard -@EnableCircuitBreaker @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 MallApplication { diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/config/MybatisPlusConfig.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/config/MybatisPlusConfig.java index 3d6cb43..a56df58 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/config/MybatisPlusConfig.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/config/MybatisPlusConfig.java @@ -1,6 +1,8 @@ package com.siam.package_mall.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-mall/mall-provider/src/main/java/com/siam/package_mall/config/Swagger2Config.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/config/Swagger2Config.java deleted file mode 100644 index 87cc4f7..0000000 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/config/Swagger2Config.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.siam.package_mall.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-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsController.java index 9a620a3..c705a32 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsController.java @@ -7,8 +7,9 @@ import com.siam.package_common.entity.BasicResult; import com.siam.package_common.constant.BasicResultCode; import com.siam.package_mall.entity.PointsMallCoupons; -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/pointsMall/coupons") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台优惠卷接口", description = "AdminPointsMallCouponsController") +@Tag(name = "后台优惠卷接口", description = "AdminPointsMallCouponsController") public class AdminPointsMallCouponsController { @Autowired private PointsMallCouponsService pointsMallCouponsService; - @ApiOperation(value = "新增优惠卷") + @Operation(summary = "新增优惠卷") @PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallCoupons coupons) { BasicResult basicResult = new BasicResult(); @@ -39,7 +40,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallCoupons } @AdminPermission - @ApiOperation(value = "修改优惠卷-TODO") + @Operation(summary = "修改优惠卷-TODO") @PutMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) PointsMallCoupons coupons){ BasicResult basicResult = new BasicResult(); @@ -54,7 +55,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) PointsMallCoupons } @AdminPermission - @ApiOperation(value = "删除优惠卷") + @Operation(summary = "删除优惠卷") @DeleteMapping(value = "/delete") public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallCoupons param){ BasicResult basicResult = new BasicResult(); @@ -67,7 +68,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallCoupons return basicResult; } - @ApiOperation(value = "查看优惠卷详情(包含关联商品)") + @Operation(summary = "查看优惠卷详情(包含关联商品)") @PostMapping(value = "/selectById") public BasicResult selectById(@RequestBody @Validated(value = {}) PointsMallCoupons param){ BasicData basicResult = new BasicData(); @@ -81,7 +82,7 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) PointsMallCoup return basicResult; } - @ApiOperation(value = "满优惠卷列表") + @Operation(summary = "满优惠卷列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallCoupons coupons) { BasicData basicResult = new BasicData(); @@ -92,7 +93,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PointsMallCoupons co return BasicResult.success(page); } - @ApiOperation(value = "优惠卷时间修改(延长)") + @Operation(summary = "优惠卷时间修改(延长)") @PostMapping(value = "/updateEndTime") public BasicResult updateEndTime(@RequestBody @Validated(value = {}) PointsMallCoupons coupons){ BasicResult basicResult = new BasicResult(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsGoodsRelationController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsGoodsRelationController.java index 3bec1fa..9ceb0c0 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsGoodsRelationController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsGoodsRelationController.java @@ -7,8 +7,9 @@ import com.siam.package_common.constant.BasicResultCode; import com.siam.package_common.util.GsonUtils; import com.siam.package_mall.entity.PointsMallCouponsGoodsRelation; -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/pointsMall/couponsGoodsRelation") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台优惠卷接口", description = "AdminPointsMallCouponsController") +@Tag(name = "后台优惠卷接口", description = "AdminPointsMallCouponsController") public class AdminPointsMallCouponsGoodsRelationController { @Autowired private PointsMallCouponsGoodsRelationService pointsMallCouponsGoodsRelationService; - @ApiOperation(value = "新增优惠卷商品关系") + @Operation(summary = "新增优惠卷商品关系") @PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallCouponsGoodsRelation param) { BasicResult basicResult = new BasicResult(); @@ -39,7 +40,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallCouponsG return basicResult; } - @ApiOperation(value = "优惠卷商品关系列表查询") + @Operation(summary = "优惠卷商品关系列表查询") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallCouponsGoodsRelation couponsGoodsRelation) { BasicData basicResult = new BasicData(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsMemberRelationController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsMemberRelationController.java index 5cb2240..09b3197 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsMemberRelationController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallCouponsMemberRelationController.java @@ -11,8 +11,9 @@ import com.siam.package_mall.entity.PointsMallCouponsMemberRelation; 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; @@ -25,7 +26,7 @@ @RestController @RequestMapping(value = "/rest/admin/pointsMall/couponsMemberRelation") @Transactional(rollbackFor = Exception.class) -@Api(tags = "管理端优惠卷用关系接口", description = "AdminPointsMallCouponsMemberRelationController") +@Tag(name = "管理端优惠卷用关系接口", description = "AdminPointsMallCouponsMemberRelationController") public class AdminPointsMallCouponsMemberRelationController { @Autowired @@ -41,7 +42,7 @@ public class AdminPointsMallCouponsMemberRelationController { private AliyunSms aliyunSms; - @ApiOperation(value = "赠送优惠卷") + @Operation(summary = "赠送优惠卷") @PostMapping(value = "/giveCoupons") public BasicResult giveCoupons(@RequestBody @Validated(value = {}) PointsMallCouponsMemberRelation param) { BasicResult basicResult = new BasicResult(); @@ -96,7 +97,7 @@ public BasicResult giveCoupons(@RequestBody @Validated(value = {}) PointsMallCou return basicResult; } - @ApiOperation(value = "赠送优惠卷(单发)") + @Operation(summary = "赠送优惠卷(单发)") @PostMapping(value = "/giveSingleCoupons") public BasicResult giveSingleCoupons(@RequestBody @Validated(value = {}) PointsMallCouponsMemberRelation param) { BasicResult basicResult = new BasicResult(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallFullReductionRuleController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallFullReductionRuleController.java index 10bb0e4..0941310 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallFullReductionRuleController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallFullReductionRuleController.java @@ -8,8 +8,9 @@ import com.siam.package_common.entity.BasicResult; import com.siam.package_common.constant.BasicResultCode; import com.siam.package_mall.entity.PointsMallFullReductionRule; -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,14 +19,14 @@ @RestController @RequestMapping(value = "/rest/admin/pointsMall/fullReductionRule") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台满减规则模块相关接口", description = "AdminPointsMallFullReductionRuleController") +@Tag(name = "后台满减规则模块相关接口", description = "AdminPointsMallFullReductionRuleController") public class AdminPointsMallFullReductionRuleController { @Autowired private PointsMallFullReductionRuleService pointsMallFullReductionRuleService; - @ApiOperation(value = "新增满减规则") + @Operation(summary = "新增满减规则") @PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallFullReductionRule fullReductionRule){ BasicResult basicResult = new BasicResult(); @@ -39,7 +40,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallFullRedu } @AdminPermission - @ApiOperation(value = "修改满减规则") + @Operation(summary = "修改满减规则") @PutMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) PointsMallFullReductionRule fullReductionRule){ BasicResult basicResult = new BasicResult(); @@ -53,7 +54,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) PointsMallFullRedu } @AdminPermission - @ApiOperation(value = "删除满减规则") + @Operation(summary = "删除满减规则") @DeleteMapping(value = "/delete") public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallFullReductionRule param){ BasicResult basicResult = new BasicResult(); @@ -66,7 +67,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallFullRedu return basicResult; } - @ApiOperation(value = "查看满减规则详情") + @Operation(summary = "查看满减规则详情") @PostMapping(value = "/selectById") public BasicResult selectById(@RequestBody @Validated(value = {}) PointsMallFullReductionRule param){ BasicData basicResult = new BasicData(); @@ -81,7 +82,7 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) PointsMallFull } - @ApiOperation(value = "满减规则列表") + @Operation(summary = "满减规则列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallFullReductionRule fullReductionRule) { BasicData basicResult = new BasicData(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsController.java index 8f58a5d..7798f6f 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsController.java @@ -18,10 +18,16 @@ import com.siam.package_mall.model.dto.PointsMallGoodsMenuDto; import com.siam.package_mall.model.example.PointsMallMenuGoodsRelationExample; import com.siam.package_mall.service.*; -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.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -31,7 +37,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; @@ -43,7 +49,7 @@ @RestController @RequestMapping(value = "/rest/admin/pointsMall/goods") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台商品模块相关接口", description = "AdminPointsMallGoodsController") +@Tag(name = "后台商品模块相关接口", description = "AdminPointsMallGoodsController") public class AdminPointsMallGoodsController { @Autowired private PointsMallGoodsService pointsMallGoodsService; @@ -69,7 +75,7 @@ public class AdminPointsMallGoodsController { @Autowired private PointsMallCouponsGoodsRelationFeignApi pointsMallCouponsGoodsRelationFeignApi; - @ApiOperation(value = "商品列表") + @Operation(summary = "商品列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallGoodsMenuDto goodsPointsMallMenuDto){ BasicData basicResult = new BasicData(); @@ -80,7 +86,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PointsMallGoodsMenuD } - @ApiOperation(value = "新增商品") + @Operation(summary = "新增商品") @PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallGoods goods){ BasicResult basicResult = new BasicResult(); @@ -144,7 +150,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallGoods go } @AdminPermission - @ApiOperation(value = "修改商品") + @Operation(summary = "修改商品") @PostMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) PointsMallGoods goods){ BasicResult basicResult = new BasicResult(); @@ -189,7 +195,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) PointsMallGoods go } @AdminPermission - @ApiOperation(value = "删除商品") + @Operation(summary = "删除商品") @PostMapping(value = "/delete") public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallGoods param){ BasicResult basicResult = new BasicResult(); @@ -224,7 +230,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallGoods pa return basicResult; } - @ApiOperation(value = "导入商品Excel报表") + @Operation(summary = "导入商品Excel报表") @PostMapping(value = "/import") public BasicResult importPointsMallGoods(@RequestParam(value = "file", required = true) MultipartFile file){ BasicResult basicResult = new BasicResult(); @@ -267,12 +273,7 @@ public BasicResult importPointsMallGoods(@RequestParam(value = "file", required 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 exportPointsMallGoods(int pageNo, int pageSize, PointsMallGoods goods, HttpServletResponse response){ try { // 生成Excel数据 @@ -302,12 +303,7 @@ public void exportPointsMallGoods(int pageNo, int pageSize, PointsMallGoods good } } - @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(@RequestBody @Validated(value = {}) PointsMallGoods param){ BasicResult basicResult = new BasicResult(); @@ -319,7 +315,7 @@ public BasicResult updateStatus(@RequestBody @Validated(value = {}) PointsMallGo } - @ApiOperation(value = "获取单个商品详情信息") + @Operation(summary = "获取单个商品详情信息") @PostMapping(value = "/getById") public BasicResult getById(@RequestBody @Validated(value = {}) PointsMallGoods param){ BasicData basicResult = new BasicData(); @@ -344,38 +340,7 @@ public BasicResult getById(@RequestBody @Validated(value = {}) PointsMallGoods p } - /*@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, PointsMallGoodsSpecificationDto goodsSpecificationDto){ BasicData basicResult = new BasicData(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsSpecificationController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsSpecificationController.java index a784187..818e3a7 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsSpecificationController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsSpecificationController.java @@ -8,8 +8,11 @@ import com.siam.package_common.constant.BasicResultCode; import com.siam.package_mall.entity.PointsMallGoodsSpecification; import com.siam.package_mall.model.example.PointsMallGoodsSpecificationExample; -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; @@ -21,12 +24,12 @@ @RestController @RequestMapping(value = "/rest/admin/pointsMall/goodsSpecification") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台商品规格模块相关接口", description = "AdminPointsMallGoodsSpecificationController") +@Tag(name = "后台商品规格模块相关接口", description = "AdminPointsMallGoodsSpecificationController") public class AdminPointsMallGoodsSpecificationController { @Autowired private PointsMallGoodsSpecificationService goodsSpecificationService; - @ApiOperation(value = "商品规格列表") + @Operation(summary = "商品规格列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallGoodsSpecification goodsSpecification){ BasicData basicResult = new BasicData(); @@ -37,7 +40,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PointsMallGoodsSpeci } @AdminPermission - @ApiOperation(value = "修改商品规格") + @Operation(summary = "修改商品规格") @PostMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) PointsMallGoodsSpecification goodsSpecification){ BasicResult basicResult = new BasicResult(); @@ -70,13 +73,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) PointsMallGoodsSpe 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(); @@ -88,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-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsSpecificationOptionController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsSpecificationOptionController.java index 26b56ff..c130ca6 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsSpecificationOptionController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallGoodsSpecificationOptionController.java @@ -11,8 +11,11 @@ import com.siam.package_mall.entity.PointsMallGoodsSpecification; import com.siam.package_mall.entity.PointsMallGoodsSpecificationOption; import com.siam.package_mall.model.example.PointsMallGoodsSpecificationOptionExample; -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; @@ -25,7 +28,7 @@ @RestController @RequestMapping(value = "/rest/admin/pointsMall/goodsSpecificationOption") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台商品规格选项模块相关接口", description = "AdminPointsMallGoodsSpecificationOptionController") +@Tag(name = "后台商品规格选项模块相关接口", description = "AdminPointsMallGoodsSpecificationOptionController") public class AdminPointsMallGoodsSpecificationOptionController { @Autowired private PointsMallGoodsSpecificationOptionService goodsSpecificationOptionService; @@ -33,7 +36,7 @@ public class AdminPointsMallGoodsSpecificationOptionController { @Autowired private PointsMallGoodsSpecificationService goodsSpecificationService; - @ApiOperation(value = "商品规格选项列表") + @Operation(summary = "商品规格选项列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallGoodsSpecificationOptionDto goodsSpecificationOptionDto){ BasicData basicResult = new BasicData(); @@ -43,7 +46,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PointsMallGoodsSpeci return BasicResult.success(page); } - @ApiOperation(value = "添加商品规格选项") + @Operation(summary = "添加商品规格选项") @PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallGoodsSpecificationOptionDto goodsSpecificationOptionDto){ BasicData basicResult = new BasicData(); @@ -97,7 +100,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallGoodsSpe } @AdminPermission - @ApiOperation(value = "修改商品规格选项") + @Operation(summary = "修改商品规格选项") @PostMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) PointsMallGoodsSpecificationOptionDto goodsSpecificationOptionDto){ BasicResult basicResult = new BasicResult(); @@ -162,7 +165,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) PointsMallGoodsSpe } @AdminPermission - @ApiOperation(value = "删除商品规格选项(含批量操作)") + @Operation(summary = "删除商品规格选项(含批量操作)") @PostMapping(value = "/delete") public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallGoodsSpecificationOption param){ BasicResult basicResult = new BasicResult(); @@ -194,11 +197,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallGoodsSpe 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-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallMenuController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallMenuController.java index 6d003d6..2d6ddf3 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallMenuController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallMenuController.java @@ -9,8 +9,9 @@ import com.siam.package_common.constant.BasicResultCode; import com.siam.package_mall.entity.PointsMallMenu; import com.siam.package_mall.model.example.PointsMallMenuGoodsRelationExample; -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; @@ -23,7 +24,7 @@ @RestController @RequestMapping(value = "/rest/admin/pointsMall/menu") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台菜单分类模块相关接口", description = "AdminPointsMallMenuController") +@Tag(name = "后台菜单分类模块相关接口", description = "AdminPointsMallMenuController") public class AdminPointsMallMenuController { @Autowired @@ -32,7 +33,7 @@ public class AdminPointsMallMenuController { @Autowired private PointsMallMenuGoodsRelationService menuPointsMallGoodsRelationService; - @ApiOperation(value = "菜单列表") + @Operation(summary = "菜单列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallMenu menu){ BasicData basicResult = new BasicData(); @@ -41,7 +42,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PointsMallMenu menu) return BasicResult.success(page); } - @ApiOperation(value = "菜单创建") + @Operation(summary = "菜单创建") @PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallMenu menu){ BasicResult basicResult = new BasicResult(); @@ -57,7 +58,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallMenu men } @AdminPermission - @ApiOperation(value = "菜单修改") + @Operation(summary = "菜单修改") @PutMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) PointsMallMenu menu){ BasicResult basicResult = new BasicResult(); @@ -72,7 +73,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) PointsMallMenu men } @AdminPermission - @ApiOperation(value = "菜单删除") + @Operation(summary = "菜单删除") @DeleteMapping(value = "/delete") public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallMenu param){ BasicResult basicResult = new BasicResult(); @@ -96,7 +97,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallMenu par return basicResult; } - @ApiOperation(value = "获取单个菜单分类详情信息") + @Operation(summary = "获取单个菜单分类详情信息") @PostMapping(value = "/getById") public BasicResult getById(@RequestBody @Validated(value = {}) PointsMallMenu param){ BasicData basicResult = new BasicData(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderController.java index c58ed55..2f8ed93 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderController.java @@ -9,10 +9,8 @@ import com.siam.package_mall.model.result.PointsMallOrderResult; import com.siam.package_mall.service.PointsMallOrderService; import com.siam.package_mall.entity.PointsMallOrder; -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.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -20,37 +18,35 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.text.ParseException; import java.util.*; @RestController @RequestMapping(value = "/rest/admin/pointsMall/order") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台订单模块相关接口", description = "AdminPointsMallOrderController") +@Tag(name = "后台订单模块相关接口", description = "AdminPointsMallOrderController") public class AdminPointsMallOrderController { @Resource(name = "pointsMallOrderServiceImpl") private PointsMallOrderService orderService; - @ApiOperation(value = "订单列表") + @Operation(summary = "订单列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ Page page = orderService.getListByPageWithAsc(param); return BasicResult.success(page); } - @ApiOperation(value = "订单列表(附带订单商品详情)") + @Operation(summary = "订单列表(附带订单商品详情)") @PostMapping(value = "/listWithDetail") public BasicResult listWithDetail(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ Page page = orderService.getListByPageWithAsc(param); return BasicResult.success(page); } - @ApiOperation("打印小票") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id" ,value="订单商品详情表主键id",required = true,paramType = "query",dataType="int") - }) + @Operation(summary = "打印小票") + @PostMapping(value = "/printRceceipts") public BasicResult printRceceipts(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ for(String id : param.getIds()){ orderService.printRceceipts(Long.valueOf(id)); @@ -58,7 +54,7 @@ public BasicResult printRceceipts(@RequestBody @Validated(value = {}) PointsMall return BasicResult.success(); } - @ApiOperation(value = "查询单个订单信息") + @Operation(summary = "查询单个订单信息") @PostMapping(value = "/selectById") public BasicResult selectById(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ PointsMallOrder dbPointsMallOrder = orderService.selectByPrimaryKey(param.getId()); @@ -68,114 +64,82 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) PointsMallOrde return BasicResult.success(dbPointsMallOrder); } - @ApiOperation(value = "批量修改订单的是否已打印状态为已打印") + @Operation(summary = "批量修改订单的是否已打印状态为已打印") @PostMapping(value = "/batchUpdateIsPrintedTrue") public BasicResult batchUpdateIsPrintedTrue(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ orderService.batchUpdateIsPrintedTrue(param); return BasicResult.success(); } - @ApiOperation(value = "今日订单列表") + @Operation(summary = "今日订单列表") @PostMapping(value = "/todayPointsMallOrderList") public BasicResult todayPointsMallOrderList(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ Page page = orderService.getListByTodayOrderWithAsc(param); return BasicResult.success(page); } - @ApiOperation(value = "查询所有订单标签页的待处理数量") + @Operation(summary = "查询所有订单标签页的待处理数量") @PostMapping(value = "/selectAllTabWaitHandleNum") public BasicResult selectAllTabWaitHandleNum(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ Map map = orderService.selectAllTabWaitHandleNum(param); return BasicResult.success(map); } - @ApiOperation(value = "查询所有已付款未打印的订单") + @Operation(summary = "查询所有已付款未打印的订单") @PostMapping(value = "/waitPrintPointsMallOrderList") public BasicResult waitPrintPointsMallOrderList(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ List pointsMallOrders = orderService.waitPrintPointsMallOrderList(param); return BasicResult.success(pointsMallOrders); } - @ApiOperation(value = "订单统计(支付成功订单数量、取消订单数量、退款订单数量,按自取或者外卖分开)") - @ApiImplicitParams({ - @ApiImplicitParam(name = "startCreateTime", value = "下单开始时间", required = false, paramType = "query", dataType = "Date"), - @ApiImplicitParam(name = "endCreateTime", value = "下单结束时间", required = false, paramType = "query", dataType = "Date"), - }) + @Operation(summary = "订单统计(支付成功订单数量、取消订单数量、退款订单数量,按自取或者外卖分开)") @PostMapping(value = "/countPointsMallOrder") public BasicResult countPointsMallOrder(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ Map count = orderService.countOrder(param); return BasicResult.success(count); } - @ApiOperation(value = "售后处理订单列表") + @Operation(summary = "售后处理订单列表") @PostMapping(value = "/afterSalesList") public BasicResult afterSalesList(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ Page> page = orderService.getAfterSalesListByPageWithAsc(param); return BasicResult.success(page); } - @ApiOperation(value = "售后处理订单列表") + @Operation(summary = "售后处理订单列表") @PostMapping(value = "/afterSalesListWithDetail") public BasicResult afterSalesListWithDetail(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ Page> page = orderService.getAfterSalesListByPageWithAsc(param); return BasicResult.success(page); } - /** - * 售后处理订单-处理 - * - * @return - * @author 暹罗 - */ @PostMapping(value = "/auditAfterSalesOrder") public BasicResult auditAfterSalesOrder(@RequestBody @Validated(value = {ValidGroupOfId.class, ValidGroupOfAudit.class}) PointsMallOrderParam orderParam){ orderService.auditAfterSalesOrder(orderParam); return BasicResult.success(); } - /** - * 查询订单统计数据 - * PS;一次性将所有数据全部查出来,而不是每次选择时间段时来实时请求数据 - */ @PostMapping(value = "/statistic") public BasicResult statisticPointsMallOrder(@RequestBody @Validated(value = {}) PointsMallOrderParam param) throws ParseException { Map map = orderService.statistic(param); return BasicResult.success(map); } - /** - * 订单发货 - * - * @return - * @author 暹罗 - */ @PostMapping(value = "/deliver") public BasicResult deliver(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ orderService.deliver(param); return BasicResult.success(); } - /** - * 修改快递单号 - * - * @return - * @author 暹罗 - */ @PostMapping(value = "/updateLogisticsNo") public BasicResult updateLogisticsNo(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ orderService.updateLogisticsNo(param); return BasicResult.success(); } - /** - * 修改订单信息 - * - * @return - * @author 暹罗 - */ @PostMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ orderService.updateByAdmin(param); return BasicResult.success(); } -} \ No newline at end of file +} diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderDetailController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderDetailController.java index bc733a2..8946355 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderDetailController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderDetailController.java @@ -6,10 +6,16 @@ import com.siam.package_common.entity.BasicResult; import com.siam.package_common.constant.BasicResultCode; import com.siam.package_mall.entity.PointsMallOrderDetail; -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,28 +24,12 @@ @RestController @RequestMapping(value = "/rest/admin/pointsMall/orderDetail") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台订单商品详情模块相关接口", description = "AdminPointsMallOrderDetailController") +@Tag(name = "后台订单商品详情模块相关接口", description = "AdminPointsMallOrderDetailController") public class AdminPointsMallOrderDetailController { @Autowired private PointsMallOrderDetailService orderDetailService; - @ApiOperation(value = "订单商品详情列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单商品详情表主键id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderId", value = "订单id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsId", value = "商品id", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsName", value = "商品名称", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "price", value = "价格", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "number", value = "购买数量", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "subtotal", value = "小计", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @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(@RequestBody @Validated(value = {}) PointsMallOrderDetail orderDetail){ BasicData basicResult = new BasicData(); @@ -49,20 +39,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PointsMallOrderDetai } - @ApiOperation(value = "新增订单商品详情") - @ApiImplicitParams({ - @ApiImplicitParam(name = "orderId", value = "订单id", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsName", value = "商品名称", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "price", value = "价格", required = true, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "number", value = "购买数量", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "subtotal", value = "小计", required = true, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"), - }) - @PostMapping(value = "/insert") + @Operation(summary = "新增订单商品详情")@PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallOrderDetail orderDetail){ BasicResult basicResult = new BasicResult(); @@ -74,21 +51,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallOrderDet return basicResult; } - @ApiOperation(value = "修改订单商品详情") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单商品详情表主键id", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderId", value = "订单id", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsName", value = "商品名称", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "price", value = "价格", required = true, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "number", value = "购买数量", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "subtotal", value = "小计", required = true, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"), - }) - @PostMapping(value = "/update") + @Operation(summary = "修改订单商品详情")@PostMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) PointsMallOrderDetail orderDetail){ BasicResult basicResult = new BasicResult(); @@ -100,11 +63,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) PointsMallOrderDet 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(@RequestBody @Validated(value = {}) PointsMallOrderDetail param){ BasicResult basicResult = new BasicResult(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderLogisticsController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderLogisticsController.java index 9a72daf..364a915 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderLogisticsController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallOrderLogisticsController.java @@ -5,8 +5,9 @@ import com.siam.package_common.entity.BasicData; import com.siam.package_common.entity.BasicResult; import com.siam.package_mall.entity.PointsMallOrderLogistics; -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/admin/pointsMall/orderLogistics") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台订单物流跟踪信息模块相关接口", description = "AdminPointsMallOrderLogisticsController") +@Tag(name = "后台订单物流跟踪信息模块相关接口", description = "AdminPointsMallOrderLogisticsController") public class AdminPointsMallOrderLogisticsController { @Autowired private PointsMallOrderLogisticsService orderLogisticsService; - @ApiOperation(value = "订单物流跟踪信息列表") + @Operation(summary = "订单物流跟踪信息列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallOrderLogistics orderLogistics){ BasicData basicResult = new BasicData(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallShoppingCartController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallShoppingCartController.java index adf4139..04efac8 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallShoppingCartController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/admin/AdminPointsMallShoppingCartController.java @@ -6,8 +6,9 @@ import com.siam.package_common.entity.BasicResult; import com.siam.package_common.constant.BasicResultCode; import com.siam.package_mall.entity.PointsMallShoppingCart; -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/pointsMall/shoppingCart") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台购物车模块相关接口", description = "AdminPointsMallShoppingCartController") +@Tag(name = "后台购物车模块相关接口", description = "AdminPointsMallShoppingCartController") public class AdminPointsMallShoppingCartController { @Autowired private PointsMallShoppingCartService shoppingCartService; - @ApiOperation(value = "购物车列表") + @Operation(summary = "购物车列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallShoppingCart shoppingCart){ BasicData basicResult = new BasicData(); @@ -32,7 +33,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PointsMallShoppingCa } - @ApiOperation(value = "新增购物车") + @Operation(summary = "新增购物车") @PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallShoppingCart shoppingCart){ BasicResult basicResult = new BasicResult(); @@ -45,7 +46,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallShopping return basicResult; } - @ApiOperation(value = "修改购物车") + @Operation(summary = "修改购物车") @PostMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) PointsMallShoppingCart shoppingCart){ BasicResult basicResult = new BasicResult(); @@ -58,7 +59,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) PointsMallShopping return basicResult; } - @ApiOperation(value = "删除购物车(含批量操作)") + @Operation(summary = "删除购物车(含批量操作)") @PostMapping(value = "/delete") public BasicResult delete(@RequestBody @Validated(value = {}) PointsMallShoppingCart param){ BasicResult basicResult = new BasicResult(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallCouponsMemberRelationController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallCouponsMemberRelationController.java index 29f3f43..2076e8c 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallCouponsMemberRelationController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallCouponsMemberRelationController.java @@ -9,22 +9,28 @@ import com.siam.package_common.constant.BasicResultCode; import com.siam.package_mall.entity.PointsMallCouponsMemberRelation; 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/pointsMall/couponsMemberRelation") @Transactional(rollbackFor = Exception.class) -@Api(tags = "优惠卷用关系接口", description = "PointsMallCouponsMemberRelationController") +@Tag(name = "优惠卷用关系接口", description = "PointsMallCouponsMemberRelationController") public class PointsMallCouponsMemberRelationController { @Autowired @@ -36,18 +42,7 @@ public class PointsMallCouponsMemberRelationController { @Autowired private MemberSessionManager memberSessionManager; - @ApiOperation(value = "新增优惠卷用户关系") - @ApiImplicitParams({ - @ApiImplicitParam(name = "couponsId", value = "优惠卷id", required = true, paramType = "query", dataType = "Integer"), - @ApiImplicitParam(name = "couponsName", value = "优惠卷名称", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "memberId", value = "用户id", required = true, 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"), - }) - @PostMapping(value = "/insert") + @Operation(summary = "新增优惠卷用户关系")@PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallCouponsMemberRelation couponsMemberRelation) { BasicResult basicResult = new BasicResult(); @@ -59,11 +54,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) PointsMallCouponsM 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 = {}) PointsMallCouponsMemberRelation param){ BasicData basicResult = new BasicData(); @@ -77,21 +68,7 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) PointsMallCoup } - @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 = {}) PointsMallCouponsMemberRelation couponsMemberRelation, HttpServletRequest request) { BasicData basicResult = new BasicData(); Member loginMember = memberSessionManager.getSession(TokenUtil.getToken()); @@ -103,7 +80,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PointsMallCouponsMem return BasicResult.success(page); } - @ApiOperation(value = "查询优惠卷数量") + @Operation(summary = "查询优惠卷数量") @PostMapping(value = "/selectCounts") public BasicResult selectCounts(@RequestBody @Validated(value = {}) PointsMallCouponsMemberRelation param){ BasicData basicResult = new BasicData(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallFullReductionRuleController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallFullReductionRuleController.java index 949a5cc..f0d15d3 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallFullReductionRuleController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallFullReductionRuleController.java @@ -5,10 +5,16 @@ import com.siam.package_common.entity.BasicData; import com.siam.package_common.entity.BasicResult; import com.siam.package_mall.entity.PointsMallFullReductionRule; -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,23 +26,13 @@ @RestController @RequestMapping(value = "/rest/pointsMall/fullReductionRule") @Transactional(rollbackFor = Exception.class) -@Api(tags = "满减规则模块相关接口", description = "PointsMallFullReductionRuleController") +@Tag(name = "满减规则模块相关接口", description = "PointsMallFullReductionRuleController") public class PointsMallFullReductionRuleController { @Autowired private PointsMallFullReductionRuleService 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 = {}) PointsMallFullReductionRule fullReductionRule){ BasicData basicResult = new BasicData(); @@ -45,11 +41,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) PointsMallFullReduct 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-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsController.java index 8527590..4b3c973 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsController.java @@ -14,8 +14,11 @@ import com.siam.package_mall.service.PointsMallGoodsService; import com.siam.package_user.model.param.AdminParam; 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; @@ -32,7 +35,7 @@ @RestController @RequestMapping(value = "/rest/pointsMall/goods") @Transactional(rollbackFor = Exception.class) -@Api(tags = "商品模块相关接口", description = "PointsMallGoodsController") +@Tag(name = "商品模块相关接口", description = "PointsMallGoodsController") public class PointsMallGoodsController { @Autowired private PointsMallGoodsService goodsService; @@ -46,34 +49,7 @@ public class PointsMallGoodsController { @Autowired private SettingFeignApi settingFeignApi; - /*@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, PointsMallGoods goods){ BasicData basicResult = new BasicData(); @@ -151,11 +127,7 @@ public BasicResult listByPointsMallMenuId(@RequestBody @Validated(value = {}) Po } - /*@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(PointsMallGoodsSpecificationDto goodsSpecificationDto){ BasicData basicResult = new BasicData(); @@ -181,7 +153,7 @@ public BasicResult selectSpecificationById(PointsMallGoodsSpecificationDto goods return basicResult; }*/ - /*@ApiOperation(value = "本月上新商品列表") + /*@Operation(summary = "本月上新商品列表") @PostMapping(value = "/weekNewGoodsList") public BasicResult weekNewPointsMallGoodsList(){ BasicData basicResult = new BasicData(); @@ -196,7 +168,7 @@ public BasicResult weekNewPointsMallGoodsList(){ return basicResult; }*/ - /*@ApiOperation(value = "好友推荐商品列表") + /*@Operation(summary = "好友推荐商品列表") @PostMapping(value = "/recommendGoodsList") public BasicResult recommendPointsMallGoodsList(){ BasicData basicResult = new BasicData(); @@ -227,7 +199,7 @@ public BasicResult recommendPointsMallGoodsList(){ return basicResult; }*/ - @ApiOperation(value = "猜你喜欢商品列表") + @Operation(summary = "猜你喜欢商品列表") @PostMapping(value = "/guessLikeGoodsList") public BasicResult guessLikePointsMallGoodsList(@RequestBody @Validated(value = {}) AdminParam param){ BasicData basicResult = new BasicData(); @@ -259,7 +231,7 @@ public BasicResult guessLikePointsMallGoodsList(@RequestBody @Validated(value = return basicResult; } - /*@ApiOperation(value = "首页商品推荐列表") + /*@Operation(summary = "首页商品推荐列表") @PostMapping(value = "/homePage/recommendGoodsList") public BasicResult recommendPointsMallGoodsListOfHomePage(){ BasicData basicResult = new BasicData(); @@ -292,7 +264,7 @@ public BasicResult recommendPointsMallGoodsListOfHomePage(){ return basicResult; }*/ - @ApiOperation(value = "推荐展示的商品列表") + @Operation(summary = "推荐展示的商品列表") @PostMapping(value = "/recommendGoodsList") public BasicResult recommendGoodsList(@RequestBody @Validated(value = {}) PointsMallGoods goods){ BasicData basicResult = new BasicData(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsSpecificationController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsSpecificationController.java index 4c09888..9cf4544 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsSpecificationController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsSpecificationController.java @@ -1,7 +1,8 @@ package com.siam.package_mall.controller.member; import com.siam.package_mall.service.PointsMallGoodsSpecificationService; -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/pointsMall/goodsSpecification") @Transactional(rollbackFor = Exception.class) -@Api(tags = "商品规格模块相关接口", description = "PointsMallGoodsSpecificationController") +@Tag(name = "商品规格模块相关接口", description = "PointsMallGoodsSpecificationController") public class PointsMallGoodsSpecificationController { @Autowired private PointsMallGoodsSpecificationService goodsSpecificationService; diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsSpecificationOptionController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsSpecificationOptionController.java index 3ce03a9..c181f97 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsSpecificationOptionController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallGoodsSpecificationOptionController.java @@ -6,10 +6,16 @@ import com.siam.package_common.entity.BasicResult; import com.siam.package_common.constant.BasicResultCode; import com.siam.package_mall.model.dto.PointsMallGoodsSpecificationOptionDto; -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,16 +32,12 @@ @RestController @RequestMapping(value = "/rest/pointsMall/goodsSpecificationOption") @Transactional(rollbackFor = Exception.class) -@Api(tags = "商品规格选项模块相关接口", description = "PointsMallGoodsSpecificationOptionController") +@Tag(name = "商品规格选项模块相关接口", description = "PointsMallGoodsSpecificationOptionController") public class PointsMallGoodsSpecificationOptionController { @Autowired private PointsMallGoodsSpecificationOptionService goodsSpecificationOptionService; - @ApiOperation(value = "查询商品规格选项信息") - @ApiImplicitParams({ - @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "int"), - }) - @PostMapping(value = "/selectByGoodsId") + @Operation(summary = "查询商品规格选项信息")@PostMapping(value = "/selectByGoodsId") public BasicResult list(@RequestBody @Validated(value = {}) PointsMallGoodsSpecificationOptionDto goodsSpecificationOptionDto){ BasicData basicResult = new BasicData(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallMemberGoodsCollectController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallMemberGoodsCollectController.java index 9814a92..bcc28aa 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallMemberGoodsCollectController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallMemberGoodsCollectController.java @@ -13,14 +13,15 @@ import com.siam.package_mall.entity.PointsMallMemberGoodsCollect; import com.siam.package_mall.model.example.PointsMallMemberGoodsCollectExample; 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; @@ -28,7 +29,7 @@ @RestController @RequestMapping(value = "/rest/member/pointsMall/goodsCollect") @Transactional(rollbackFor = Exception.class) -@Api(tags = "用户商品收藏相关接口", description = "PointsMallMemberGoodsCollectController") +@Tag(name = "用户商品收藏相关接口", description = "PointsMallMemberGoodsCollectController") public class PointsMallMemberGoodsCollectController { @Autowired diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallMenuController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallMenuController.java index 1402a76..25affa0 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallMenuController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallMenuController.java @@ -7,7 +7,8 @@ import com.siam.package_common.constant.BasicResultCode; import com.siam.package_common.constant.Quantity; import com.siam.package_mall.entity.PointsMallMenu; -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; @@ -24,7 +25,7 @@ @RestController @RequestMapping(value = "/rest/pointsMall/menu") @Transactional(rollbackFor = Exception.class) -@Api(tags = "菜单分类模块相关接口", description = "PointsMallMenuController") +@Tag(name = "菜单分类模块相关接口", description = "PointsMallMenuController") public class PointsMallMenuController { @Autowired diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderController.java index cbf3ed4..d45a451 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderController.java @@ -6,8 +6,9 @@ import com.siam.package_mall.model.vo.PointsMallOrderVo; import com.siam.package_mall.entity.PointsMallOrder; import com.siam.package_mall.service.PointsMallOrderService; -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.rocketmq.client.exception.MQBrokerException; import org.apache.rocketmq.client.exception.MQClientException; @@ -16,14 +17,14 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.*; @Slf4j @RestController @RequestMapping(value = "/rest/member/pointsMall/order") @Transactional(rollbackFor = Exception.class) -@Api(tags = "订单模块相关接口", description = "PointsMallOrderController") +@Tag(name = "订单模块相关接口", description = "PointsMallOrderController") public class PointsMallOrderController { @Resource(name = "pointsMallOrderServiceImpl") @@ -125,14 +126,14 @@ public BasicResult returnGoodsWithRefund(@RequestBody @Validated(value = {}) Poi return BasicResult.success(); } - @ApiOperation(value = "修改订单状态为已确认收货") + @Operation(summary = "修改订单状态为已确认收货") @PostMapping(value = "/confirmReceipt") public BasicResult confirmReceipt(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ orderService.confirmReceipt(param); return BasicResult.success(); } - @ApiOperation(value = "删除订单") + @Operation(summary = "删除订单") @PostMapping(value = "/delete") public BasicResult deletePointsMallOrder(@RequestBody @Validated(value = {}) PointsMallOrderParam param){ orderService.delete(param); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderDetailController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderDetailController.java index ccc309b..abe40f5 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderDetailController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderDetailController.java @@ -1,7 +1,11 @@ package com.siam.package_mall.controller.member; import com.siam.package_mall.service.PointsMallOrderDetailService; -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,28 +14,12 @@ @RestController @RequestMapping(value = "/rest/pointsMall/orderDetail") @Transactional(rollbackFor = Exception.class) -@Api(tags = "订单商品详情模块相关接口", description = "PointsMallOrderDetailController") +@Tag(name = "订单商品详情模块相关接口", description = "PointsMallOrderDetailController") public class PointsMallOrderDetailController { @Autowired private PointsMallOrderDetailService orderDetailService; - /*@ApiOperation(value = "订单商品详情列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单商品详情表主键id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderId", value = "订单id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsId", value = "商品id", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsName", value = "商品名称", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "price", value = "价格", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "number", value = "购买数量", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "subtotal", value = "小计", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @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, PointsMallOrderDetail orderDetail){ BasicData basicResult = new BasicData(); diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderLogisticsController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderLogisticsController.java index 7cc308b..ecdb97e 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderLogisticsController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallOrderLogisticsController.java @@ -11,7 +11,8 @@ import com.siam.package_mall.entity.PointsMallOrder; import com.siam.package_mall.entity.PointsMallOrderLogistics; 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; @@ -21,15 +22,15 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import java.util.Map; @Slf4j @RestController @RequestMapping(value = "/rest/member/pointsMall/orderLogistics") @Transactional(rollbackFor = Exception.class) -@Api(tags = "订单物流跟踪信息模块相关接口", description = "PointsMallOrderLogisticsController") +@Tag(name = "订单物流跟踪信息模块相关接口", description = "PointsMallOrderLogisticsController") public class PointsMallOrderLogisticsController { @Resource(name = "pointsMallOrderServiceImpl") diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallPlatformPayController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallPlatformPayController.java index 879ee0c..246ada4 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallPlatformPayController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallPlatformPayController.java @@ -19,8 +19,9 @@ import com.siam.package_user.feign.MemberTradeRecordFeignApi; import com.siam.package_user.model.example.MemberTradeRecordExample; 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; @@ -30,15 +31,15 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import java.util.Date; @Slf4j @RestController @RequestMapping(value = "/rest/member/pointsMall/platformPay") @Transactional(rollbackFor = Exception.class) -@Api(tags = "平台支付模块相关接口", description = "PointsMallPlatformPayController") +@Tag(name = "平台支付模块相关接口", description = "PointsMallPlatformPayController") public class PointsMallPlatformPayController { @Autowired @@ -66,7 +67,7 @@ public class PointsMallPlatformPayController { * @return * @author 暹罗 */ - @ApiOperation(value = "使用平台积分支付") + @Operation(summary = "使用平台积分支付") @PostMapping(value = "/byPoints") public BasicResult byPoints(@RequestBody @Validated PlatformPayDto platformPayDto, HttpServletRequest request) { //TODO-PS:但是如果按照微信支付的步骤来,只要某个步骤失败,事务就会回滚--莫非这种就是不能在Controller上添加事务注解的原因? diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallShoppingCartController.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallShoppingCartController.java index c434636..aaf18c6 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallShoppingCartController.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallShoppingCartController.java @@ -13,7 +13,8 @@ import com.siam.package_mall.entity.PointsMallShoppingCart; import com.siam.package_mall.model.example.PointsMallShoppingCartExample; 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; @@ -23,7 +24,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; @@ -33,7 +34,7 @@ @RestController @RequestMapping(value = "/rest/member/pointsMall/shoppingCart") @Transactional(rollbackFor = Exception.class) -@Api(tags = "购物车模块相关接口", description = "PointsMallShoppingCartController") +@Tag(name = "购物车模块相关接口", description = "PointsMallShoppingCartController") public class PointsMallShoppingCartController { @Autowired diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallWxPayService.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallWxPayService.java index 15d7a56..1de7674 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallWxPayService.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/controller/member/PointsMallWxPayService.java @@ -25,10 +25,11 @@ import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.net.ssl.SSLContext; import java.io.IOException; import java.io.InputStream; @@ -54,6 +55,7 @@ public class PointsMallWxPayService { @Autowired private WxPublicPlatformNotifyService wxPublicPlatformNotifyService; + @Lazy @Resource(name = "pointsMallOrderServiceImpl") private PointsMallOrderService pointsMallOrderService; diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/feign/PointsMallOrderFeignProvider.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/feign/PointsMallOrderFeignProvider.java index 4a7cedd..264d3ff 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/feign/PointsMallOrderFeignProvider.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/feign/PointsMallOrderFeignProvider.java @@ -7,7 +7,7 @@ import com.siam.package_mall.service.PointsMallOrderService; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.Date; /** diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/mqConsumer/PointsMallGoodsConsumer.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/mqConsumer/PointsMallGoodsConsumer.java index 606960b..d6c913a 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/mqConsumer/PointsMallGoodsConsumer.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/mqConsumer/PointsMallGoodsConsumer.java @@ -6,7 +6,7 @@ //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.stereotype.Component; // -//import javax.annotation.PostConstruct; +//import jakarta.annotation.PostConstruct; // //@Component //public class PointsMallGoodsConsumer { diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/mqConsumer/PointsMallOrderConsumer.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/mqConsumer/PointsMallOrderConsumer.java index 4d8dda5..974c868 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/mqConsumer/PointsMallOrderConsumer.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/mqConsumer/PointsMallOrderConsumer.java @@ -11,7 +11,7 @@ import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.stereotype.Component; -import javax.annotation.Resource; +import jakarta.annotation.Resource; @Slf4j @Component diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/service_impl/PointsMallOrderLogisticsServiceImpl.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/service_impl/PointsMallOrderLogisticsServiceImpl.java index abbda29..48ec2ad 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/service_impl/PointsMallOrderLogisticsServiceImpl.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/service_impl/PointsMallOrderLogisticsServiceImpl.java @@ -12,9 +12,10 @@ import com.siam.package_mall.service.PointsMallOrderLogisticsService; import com.siam.package_mall.service.PointsMallOrderService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -29,6 +30,7 @@ public class PointsMallOrderLogisticsServiceImpl implements PointsMallOrderLogis @Autowired private AliyunExpressUtils aliyunExpressUtils; + @Lazy @Resource(name = "pointsMallOrderServiceImpl") private PointsMallOrderService orderService; diff --git a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/service_impl/PointsMallOrderServiceImpl.java b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/service_impl/PointsMallOrderServiceImpl.java index 99cc592..30bfceb 100644 --- a/siam-mall/mall-provider/src/main/java/com/siam/package_mall/service_impl/PointsMallOrderServiceImpl.java +++ b/siam-mall/mall-provider/src/main/java/com/siam/package_mall/service_impl/PointsMallOrderServiceImpl.java @@ -39,6 +39,7 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -85,6 +86,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { @Autowired private MemberInviteRelationFeignApi memberInviteRelationFeignApi; + @Lazy @Autowired private PointsMallOrderLogisticsService orderLogisticsService; @@ -100,6 +102,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { @Autowired private PointsMallOrderRefundProcessService orderRefundProcessService; + @Lazy @Autowired private PointsMallWxPayService pointsMallWxPayService; diff --git a/siam-mall/mall-provider/src/main/resources/application-local.yml b/siam-mall/mall-provider/src/main/resources/application-local.yml index 31547a5..dc4a723 100644 --- a/siam-mall/mall-provider/src/main/resources/application-local.yml +++ b/siam-mall/mall-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_mall?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8 + url: jdbc:mysql://127.0.0.1:3306/siam_cloud_mall?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true username: root - password: root + password: 123456 #thymeleaf thymeleaf: @@ -61,6 +61,18 @@ spring: application: name: mall-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: @@ -91,15 +103,15 @@ spring: ds0: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/siam_cloud_mall_0?characterEncoding=utf-8&useUnicode=true&useSSL=true + url: jdbc:mysql://127.0.0.1:3306/siam_cloud_mall_0?characterEncoding=utf-8&useUnicode=true&useSSL=true&allowPublicKeyRetrieval=true username: root - password: root + password: 123456 ds1: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/siam_cloud_mall_1?characterEncoding=utf-8&useUnicode=true&useSSL=true + url: jdbc:mysql://127.0.0.1:3306/siam_cloud_mall_1?characterEncoding=utf-8&useUnicode=true&useSSL=true&allowPublicKeyRetrieval=true username: root - password: root + password: 123456 props: sql: show: true #是否显示sharding-jdbc的sql路由 @@ -179,17 +191,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内部服务调用超时配置-第二种 @@ -222,24 +224,31 @@ rocketmq: # Seata Config seata: - application-id: mall-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: @@ -264,6 +273,8 @@ management: enabled: false elasticsearch: enabled: false + mail: + enabled: false #日志配置 logging: diff --git a/siam-mall/pom.xml b/siam-mall/pom.xml index a1129ce..b99f934 100644 --- a/siam-mall/pom.xml +++ b/siam-mall/pom.xml @@ -31,8 +31,6 @@ UTF-8 - 1.8 - 1.8 \ No newline at end of file diff --git a/siam-merchant/merchant-api/pom.xml b/siam-merchant/merchant-api/pom.xml index 20c47d9..2e4d623 100644 --- a/siam-merchant/merchant-api/pom.xml +++ b/siam-merchant/merchant-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-merchant/merchant-api/src/main/java/com/siam/package_merchant/entity/Merchant.java b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/entity/Merchant.java index c1b5b54..bc89a74 100644 --- a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/entity/Merchant.java +++ b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/entity/Merchant.java @@ -3,60 +3,59 @@ 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.math.BigDecimal; import java.util.Date; @TableName("tb_merchant") -@ApiModel(value = "商家表") + @Schema(description= "商家表") public class Merchant { - @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-merchant/merchant-api/src/main/java/com/siam/package_merchant/entity/Shop.java b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/entity/Shop.java index 30c6634..c613052 100644 --- a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/entity/Shop.java +++ b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/entity/Shop.java @@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.google.gson.annotations.SerializedName; -import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; @@ -14,7 +14,7 @@ @Data @TableName("tb_shop") -@ApiModel(value = "门店表") + @Schema(description= "门店表") public class Shop { /* ##################################### START 扩展字段 #################################### */ diff --git a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/MerchantWithdrawRecordParam.java b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/MerchantWithdrawRecordParam.java index 8420244..b2e1dcd 100644 --- a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/MerchantWithdrawRecordParam.java +++ b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/MerchantWithdrawRecordParam.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-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/ShopChangeRecordParam.java b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/ShopChangeRecordParam.java index a6e2a55..212901a 100644 --- a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/ShopChangeRecordParam.java +++ b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/ShopChangeRecordParam.java @@ -5,7 +5,7 @@ import lombok.Data; import org.hibernate.validator.constraints.Range; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; import java.util.Date; @Data diff --git a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/ShopParam.java b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/ShopParam.java index df50a43..fc73b22 100644 --- a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/ShopParam.java +++ b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/model/param/ShopParam.java @@ -3,11 +3,11 @@ import com.siam.package_common.model.valid_group.ValidGroupOfAudit; import com.siam.package_common.model.valid_group.ValidGroupOfId; import com.siam.package_merchant.entity.Shop; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.hibernate.validator.constraints.Range; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; import java.util.Date; import java.util.List; diff --git a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/util/HttpContext.java b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/util/HttpContext.java index 35d5f94..6007180 100644 --- a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/util/HttpContext.java +++ b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/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-merchant/merchant-api/src/main/java/com/siam/package_merchant/util/TokenUtil.java b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/util/TokenUtil.java index cebd36d..9a79890 100644 --- a/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/util/TokenUtil.java +++ b/siam-merchant/merchant-api/src/main/java/com/siam/package_merchant/util/TokenUtil.java @@ -6,9 +6,9 @@ import com.siam.package_common.util.ToolUtil; import com.siam.package_merchant.entity.Merchant; -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-merchant/merchant-provider/pom.xml b/siam-merchant/merchant-provider/pom.xml index cb5fecf..c933ddb 100644 --- a/siam-merchant/merchant-provider/pom.xml +++ b/siam-merchant/merchant-provider/pom.xml @@ -16,8 +16,6 @@ UTF-8 - 1.8 - 1.8 @@ -77,51 +75,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 @@ -132,7 +119,6 @@ org.springframework.boot spring-boot-maven-plugin - 2.7.2 com.siam.package_merchant.MerchantApplication diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/MerchantApplication.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/MerchantApplication.java index af33f77..0a5b279 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/MerchantApplication.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/MerchantApplication.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 MerchantApplication { diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/config/MybatisPlusConfig.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/config/MybatisPlusConfig.java index 3d1407c..ba33152 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/config/MybatisPlusConfig.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/config/MybatisPlusConfig.java @@ -1,6 +1,8 @@ package com.siam.package_merchant.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-merchant/merchant-provider/src/main/java/com/siam/package_merchant/config/Swagger2Config.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/config/Swagger2Config.java deleted file mode 100644 index 6ccdaf2..0000000 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/config/Swagger2Config.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.siam.package_merchant.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-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantBillingRecordController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantBillingRecordController.java index c5f4b8d..c12f961 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantBillingRecordController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantBillingRecordController.java @@ -6,8 +6,9 @@ import com.siam.package_merchant.service.MerchantBillingRecordService; import com.siam.package_merchant.service.MerchantService; import com.siam.package_merchant.service.MerchantTokenService; -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,7 +22,7 @@ @RestController @RequestMapping(value = "/rest/admin/merchantBillingRecord") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台商家账单记录模块相关接口", description = "AdminMerchantBillingRecordController") +@Tag(name = "后台商家账单记录模块相关接口", description = "AdminMerchantBillingRecordController") public class AdminMerchantBillingRecordController { @Autowired @@ -30,14 +31,14 @@ public class AdminMerchantBillingRecordController { @Autowired private MerchantService merchantService; - @ApiOperation(value = "商家账单记录列表") + @Operation(summary = "商家账单记录列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) MerchantBillingRecordParam param) { Page> page = merchantBillingRecordService.getListByPageJoinShop(param); return BasicResult.success(page); } - @ApiOperation(value = "商家账单记录-统计金额") + @Operation(summary = "商家账单记录-统计金额") @PostMapping(value = "/statisticalAmount") public BasicResult statisticalAmount(@RequestBody @Validated(value = {}) MerchantBillingRecordParam param) { Map map = merchantBillingRecordService.statisticalAmount(param); diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantController.java index ec03944..a08d015 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantController.java @@ -1,7 +1,8 @@ package com.siam.package_merchant.controller.admin; import com.siam.package_merchant.service.MerchantService; -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/admin/merchant") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台商家账号模块相关接口", description = "AdminMerchantController") +@Tag(name = "后台商家账号模块相关接口", description = "AdminMerchantController") public class AdminMerchantController { @Autowired diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantWithdrawRecordController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantWithdrawRecordController.java index 4301477..eac72dd 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantWithdrawRecordController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminMerchantWithdrawRecordController.java @@ -7,8 +7,9 @@ import com.siam.package_common.model.valid_group.ValidGroupOfId; import com.siam.package_merchant.model.param.MerchantWithdrawRecordParam; import com.siam.package_merchant.service.MerchantWithdrawRecordService; -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; @@ -22,20 +23,20 @@ @RestController @RequestMapping(value = "/rest/admin/merchantWithdrawRecord") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台商家提现记录模块相关接口", description = "AdminMerchantWithdrawRecordController") +@Tag(name = "后台商家提现记录模块相关接口", description = "AdminMerchantWithdrawRecordController") public class AdminMerchantWithdrawRecordController { @Autowired private MerchantWithdrawRecordService merchantWithdrawRecordService; - @ApiOperation(value = "商家提现记录列表") + @Operation(summary = "商家提现记录列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) MerchantWithdrawRecordParam param){ Page> page = merchantWithdrawRecordService.getListByPageJoinShop(param); return BasicResult.success(page); } - @ApiOperation(value = "商家提现记录-统计金额") + @Operation(summary = "商家提现记录-统计金额") @PostMapping(value = "/statisticalAmount") public BasicResult statisticalAmount(@RequestBody @Validated(value = {}) MerchantWithdrawRecordParam param){ Map map = merchantWithdrawRecordService.statisticalAmount(param); diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminShopChangeRecordController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminShopChangeRecordController.java index ee18258..358e478 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminShopChangeRecordController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminShopChangeRecordController.java @@ -16,8 +16,9 @@ import com.siam.package_common.model.valid_group.ValidGroupOfId; import com.siam.package_merchant.service.ShopChangeRecordService; import com.siam.package_merchant.service.ShopService; -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; @@ -27,14 +28,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.util.Date; import java.util.Map; @RestController @RequestMapping(value = "/rest/admin/shopChangeRecord") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台门店重要信息变更记录模块相关接口", description = "AdminShopChangeRecordController") +@Tag(name = "后台门店重要信息变更记录模块相关接口", description = "AdminShopChangeRecordController") public class AdminShopChangeRecordController { @Autowired private ShopChangeRecordService shopChangeRecordService; @@ -48,7 +49,7 @@ public class AdminShopChangeRecordController { @Autowired private ShopService shopService; - @ApiOperation(value = "门店重要信息变更记录列表") + @Operation(summary = "门店重要信息变更记录列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) ShopChangeRecord shopChangeRecord, HttpServletRequest request){ BasicData basicResult = new BasicData(); diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminShopController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminShopController.java index 3ed7012..d444e1a 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminShopController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/admin/AdminShopController.java @@ -20,8 +20,9 @@ import com.siam.package_user.entity.Member; import com.siam.package_user.feign.MemberFeignApi; import com.siam.package_user.model.param.MemberParam; -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; @@ -36,7 +37,7 @@ @RestController @RequestMapping(value = "/rest/admin/shop") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台门店模块相关接口", description = "AdminShopController") +@Tag(name = "后台门店模块相关接口", description = "AdminShopController") public class AdminShopController { @Autowired @@ -48,7 +49,7 @@ public class AdminShopController { @Autowired private MemberFeignApi memberFeignApi; - @ApiOperation(value = "门店信息列表") + @Operation(summary = "门店信息列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) Shop shop){ BasicData basicResult = new BasicData(); @@ -56,7 +57,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) Shop shop){ return BasicResult.success(page); } - @ApiOperation(value = "新增门店信息") + @Operation(summary = "新增门店信息") @PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) Shop shop){ BasicResult basicResult = new BasicResult(); @@ -70,7 +71,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) Shop shop){ } @AdminPermission - @ApiOperation(value = "修改门店信息") + @Operation(summary = "修改门店信息") @PutMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) Shop shop, String memberMobile) throws IOException { BasicResult basicResult = new BasicResult(); @@ -116,7 +117,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) Shop shop, String } @AdminPermission - @ApiOperation(value = "删除门店信息") + @Operation(summary = "删除门店信息") @DeleteMapping(value = "/delete") public BasicResult delete(@RequestBody @Validated(value = {}) Shop param){ BasicResult basicResult = new BasicResult(); @@ -124,7 +125,7 @@ public BasicResult delete(@RequestBody @Validated(value = {}) Shop param){ //判断菜单下面有关联商品,则不能删除 LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); wrapper.eq(Shop::getId, id); - int result = shopService.count(wrapper); + long result = shopService.count(wrapper); if(result == 0){ basicResult.setSuccess(false); basicResult.setCode(BasicResultCode.ERR); diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/member/ShopController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/member/ShopController.java index e26d42e..3342f28 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/member/ShopController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/member/ShopController.java @@ -29,7 +29,8 @@ import com.siam.package_promotion.model.vo.PromotionVo; import com.siam.package_util.entity.Setting; import com.siam.package_util.feign.SettingFeignApi; -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.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -48,7 +49,7 @@ @RestController @RequestMapping(value = "/rest/shop") @Transactional(rollbackFor = Exception.class) -@Api(tags = "门店模块相关接口", description = "ShopController") +@Tag(name = "门店模块相关接口", description = "ShopController") public class ShopController { @Autowired diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/member/WxLoginController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/member/WxLoginController.java index 07ea1b6..b6bee76 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/member/WxLoginController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/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-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantBillingRecordController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantBillingRecordController.java index 53df919..b62dbb8 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantBillingRecordController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantBillingRecordController.java @@ -5,8 +5,9 @@ import com.siam.package_merchant.entity.MerchantBillingRecord; import com.siam.package_merchant.model.param.MerchantBillingRecordParam; import com.siam.package_merchant.service.MerchantBillingRecordService; -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,20 +21,20 @@ @RestController @RequestMapping(value = "/rest/merchant/merchantBillingRecord") @Transactional(rollbackFor = Exception.class) -@Api(tags = "商家账单记录模块相关接口", description = "merchantBillingRecordController") +@Tag(name = "商家账单记录模块相关接口", description = "merchantBillingRecordController") public class MerchantBillingRecordController { @Autowired private MerchantBillingRecordService merchantBillingRecordService; - @ApiOperation(value = "商家账单记录列表") + @Operation(summary = "商家账单记录列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) MerchantBillingRecordParam param) { Page page = merchantBillingRecordService.getListByPage(param); return BasicResult.success(page); } - @ApiOperation(value = "商家账单记录-统计金额") + @Operation(summary = "商家账单记录-统计金额") @PostMapping(value = "/statisticalAmount") public BasicResult statisticalAmount(@RequestBody @Validated(value = {}) MerchantBillingRecordParam param) { Map map = merchantBillingRecordService.statisticalAmount(param); diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantController.java index 586aed4..5fe66ad 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantController.java @@ -5,7 +5,8 @@ import com.siam.package_merchant.model.param.MerchantParam; import com.siam.package_merchant.model.result.MerchantResult; import com.siam.package_merchant.service.MerchantService; -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/merchant") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台商家账号模块相关接口", description = "MerchantController") +@Tag(name = "后台商家账号模块相关接口", description = "MerchantController") public class MerchantController { @Autowired diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantShopChangeRecordController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantShopChangeRecordController.java index 46828d3..fd9d124 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantShopChangeRecordController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantShopChangeRecordController.java @@ -9,8 +9,11 @@ import com.siam.package_merchant.service.ShopChangeRecordService; import com.siam.package_user.util.TokenUtil; 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.transaction.annotation.Transactional; @@ -20,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/merchant/shopChangeRecord") @Transactional(rollbackFor = Exception.class) -@Api(tags = "商家端门店重要信息变更记录模块相关接口", description = "ShopChangeRecordController") +@Tag(name = "商家端门店重要信息变更记录模块相关接口", description = "ShopChangeRecordController") public class MerchantShopChangeRecordController { @Autowired private ShopChangeRecordService shopChangeRecordService; @@ -40,7 +43,7 @@ public class MerchantShopChangeRecordController { @Autowired private MerchantSessionManager merchantSessionManager; - @ApiOperation(value = "门店重要信息变更记录列表") + @Operation(summary = "门店重要信息变更记录列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) ShopChangeRecord shopChangeRecord, HttpServletRequest request){ BasicData basicResult = new BasicData(); @@ -54,18 +57,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) ShopChangeRecord sho 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"), - }) - @PostMapping(value = "/insert") + /*@Operation(summary = "新增门店重要信息变更记录")@PostMapping(value = "/insert") public BasicResult insert(ShopChangeRecord shopChangeRecord, HttpServletRequest request){ BasicResult basicResult = new BasicResult(); @@ -131,19 +123,7 @@ public BasicResult insert(ShopChangeRecord shopChangeRecord, HttpServletRequest }*/ - /*@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"), - }) - @PutMapping(value = "/update") + /*@Operation(summary = "修改门店重要信息变更记录")@PutMapping(value = "/update") public BasicResult update(ShopChangeRecord shopChangeRecord, HttpServletRequest request){ BasicResult basicResult = new BasicResult(); @@ -180,11 +160,7 @@ public BasicResult update(ShopChangeRecord shopChangeRecord, HttpServletRequest }*/ - /*@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(int id, HttpServletRequest request){ BasicResult basicResult = new BasicResult(); diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantShopController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantShopController.java index bd4c747..5b625c2 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantShopController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantShopController.java @@ -15,10 +15,8 @@ import com.siam.package_merchant.entity.ShopChangeRecord; import com.siam.package_merchant.service.ShopChangeRecordService; import com.siam.package_merchant.service.ShopService; -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.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -28,13 +26,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/merchant/shop") @Transactional(rollbackFor = Exception.class) -@Api(tags = "商家端门店模块相关接口", description = "MerchantShopController") +@Tag(name = "商家端门店模块相关接口", description = "MerchantShopController") public class MerchantShopController { @Autowired @@ -43,32 +41,17 @@ public class MerchantShopController { @Autowired private ShopService shopService; -// @Autowired -// private MerchantService merchantService; - @Autowired private ShopChangeRecordService shopChangeRecordService; @Autowired private SettingFeignApi settingFeignApi; - @ApiOperation(value = "申请开店-提交门店信息") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "门店管理表主键id", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "code", value = "门店编码", required = true, paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "name", value = "门店名称", required = true, paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "distance", value = "距离", required = false, 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 = false, paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "isDisabled", value = "是否禁用 0=启用 1=禁用", required = true, paramType = "query", dataType = "String"), - }) + @Operation(summary = "申请开店-提交门店信息") @PostMapping(value = "/apply") public BasicResult apply(@RequestBody @Validated(value = {}) Shop shop, HttpServletRequest request){ BasicResult basicResult = new BasicResult(); - //获取当前登录用户绑定的门店编号 Merchant loginMerchant = merchantSessionManager.getSession(TokenUtil.getToken()); if(loginMerchant.getAuditStatus() == Quantity.INT_2){ @@ -82,7 +65,6 @@ public BasicResult apply(@RequestBody @Validated(value = {}) Shop shop, HttpServ Setting setting = settingFeignApi.selectCurrent().getData(); shop.setStartDeliveryPrice(setting.getStartDeliveryPrice()); - //修改申请开店的门店信息 shop.setUpdateTime(new Date()); shopService.updateByPrimaryKeySelective(shop); @@ -92,7 +74,7 @@ public BasicResult apply(@RequestBody @Validated(value = {}) Shop shop, HttpServ return basicResult; } - @ApiOperation(value = "获取登录商家账号的开店信息") + @Operation(summary = "获取登录商家账号的开店信息") @PostMapping(value = "/getLoginMerchantShopInfo") public BasicResult getLoginMerchantShopInfo(@RequestBody @Validated(value = {}) Shop param){ BasicData basicResult = new BasicData(); @@ -110,18 +92,11 @@ public BasicResult getLoginMerchantShopInfo(@RequestBody @Validated(value = {}) return basicResult; } - /** - * 修改门店信息 - * - * @return - * @author 暹罗 - */ @MerchantPermission @PostMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) Shop shop, HttpServletRequest request){ BasicResult basicResult = new BasicResult(); - //获取当前登录用户绑定的门店编号 Merchant loginMerchant = merchantSessionManager.getSession(TokenUtil.getToken()); if (loginMerchant.getShopId() != shop.getId()){ @@ -133,8 +108,6 @@ public BasicResult update(@RequestBody @Validated(value = {}) Shop shop, HttpSer throw new StoneCustomerException("该店铺信息不存在"); } - //TODO-有些信息不能直接修改,需要管理员审核 - shop.setUpdateTime(new Date()); shopService.updateByPrimaryKeySelective(shop); @@ -144,17 +117,10 @@ public BasicResult update(@RequestBody @Validated(value = {}) Shop shop, HttpSer return basicResult; } - /** - * 申请变更门店重要信息 - * - * @return - * @author 暹罗 - */ @PostMapping(value = "/applyChangeImportantData") public BasicResult applyChangeImportantData(@RequestBody @Validated(value = {}) ShopChangeRecord shopChangeRecord, HttpServletRequest request){ BasicResult basicResult = new BasicResult(); - //获取当前登录用户绑定的门店编号 Merchant loginMerchant = merchantSessionManager.getSession(TokenUtil.getToken()); if (loginMerchant.getShopId() != shopChangeRecord.getShopId()){ @@ -166,17 +132,14 @@ public BasicResult applyChangeImportantData(@RequestBody @Validated(value = {}) throw new StoneCustomerException("该店铺信息不存在"); } - //获取变更内容 String applyChangeContent = getApplyChangeContent(dbShop, shopChangeRecord); if(StringUtils.isBlank(applyChangeContent)){ throw new StoneCustomerException("没有变更信息,提交失败"); } shopChangeRecord.setApplyChangeContent(applyChangeContent); - //如果申请记录为审核中,则进行修改操作,否则进行新增操作 ShopChangeRecord dbShopChangeRecord = shopChangeRecordService.selectLastestByShopId(shopChangeRecord.getShopId()); if(dbShopChangeRecord==null || dbShopChangeRecord.getAuditStatus()==Quantity.INT_2 || dbShopChangeRecord.getAuditStatus()==Quantity.INT_3){ - //新增操作 shopChangeRecord.setAuditStatus(Quantity.INT_1); shopChangeRecord.setAuditReason(null); shopChangeRecord.setAuditTime(null); @@ -184,7 +147,6 @@ public BasicResult applyChangeImportantData(@RequestBody @Validated(value = {}) shopChangeRecord.setUpdateTime(new Date()); shopChangeRecordService.insertSelective(shopChangeRecord); }else{ - //修改操作 shopChangeRecord.setId(dbShopChangeRecord.getId()); shopChangeRecord.setAuditStatus(null); shopChangeRecord.setAuditReason(null); @@ -193,9 +155,6 @@ public BasicResult applyChangeImportantData(@RequestBody @Validated(value = {}) shopChangeRecordService.updateByPrimaryKeySelective(shopChangeRecord); } - //TODO-比对有哪些字段进行了修改 - - basicResult.setSuccess(true); basicResult.setCode(BasicResultCode.SUCCESS); basicResult.setMessage("修改成功"); @@ -207,81 +166,53 @@ public String getApplyChangeContent(Shop dbShop, ShopChangeRecord shopChangeReco if(shopChangeRecord.getName()!=null && !shopChangeRecord.getName().equals(dbShop.getName())){ applyChangeContent += "店铺名称、"; } - if(shopChangeRecord.getProvince()!=null && !shopChangeRecord.getProvince().equals(dbShop.getProvince())){ applyChangeContent += "所在省份、"; } - if(shopChangeRecord.getCity()!=null && !shopChangeRecord.getCity().equals(dbShop.getCity())){ applyChangeContent += "所在城市、"; } - if(shopChangeRecord.getArea()!=null && !shopChangeRecord.getArea().equals(dbShop.getArea())){ applyChangeContent += "所在区/县、"; } - if(shopChangeRecord.getStreet()!=null && !shopChangeRecord.getStreet().equals(dbShop.getStreet())){ applyChangeContent += "门店地址、"; } - if(shopChangeRecord.getManagePrimary()!=null && !shopChangeRecord.getManagePrimary().equals(dbShop.getManagePrimary())){ applyChangeContent += "营业类目、"; } - - /*if(shopChangeRecord.getManageMinor()!=null && !shopChangeRecord.getManageMinor().equals(dbShop.getManageMinor())){ - applyChangeContent += "店铺名称、"; - } - - if(shopChangeRecord.getShopImg()!=null && !shopChangeRecord.getShopImg().equals(dbShop.getShopImg())){ - applyChangeContent += "店铺名称、"; - }*/ - if(shopChangeRecord.getShopWithinImg()!=null && !shopChangeRecord.getShopWithinImg().equals(dbShop.getShopWithinImg())){ applyChangeContent += "店内照片、"; } - if(shopChangeRecord.getShopLogoImg()!=null && !shopChangeRecord.getShopLogoImg().equals(dbShop.getShopLogoImg())){ applyChangeContent += "门店头像、"; } - - /*if(shopChangeRecord.getContactRealname()!=null && !shopChangeRecord.getContactRealname().equals(dbShop.getContactRealname())){ - applyChangeContent += "店铺名称、"; - }*/ - if(shopChangeRecord.getContactPhone()!=null && !shopChangeRecord.getContactPhone().equals(dbShop.getContactPhone())){ applyChangeContent += "联系电话、"; } - if(shopChangeRecord.getAnnouncement()!=null && !shopChangeRecord.getAnnouncement().equals(dbShop.getAnnouncement())){ applyChangeContent += "门店公告、"; } - if(shopChangeRecord.getBriefIntroduction()!=null && !shopChangeRecord.getBriefIntroduction().equals(dbShop.getBriefIntroduction())){ applyChangeContent += "门店简介、"; } - if(shopChangeRecord.getBusinessLicense()!=null && !shopChangeRecord.getBusinessLicense().equals(dbShop.getBusinessLicense())){ applyChangeContent += "营业执照、"; } - if(shopChangeRecord.getIdCardFrontSide()!=null && !shopChangeRecord.getIdCardFrontSide().equals(dbShop.getIdCardFrontSide())){ applyChangeContent += "身份证正面、"; } - if(shopChangeRecord.getIdCardBackSide()!=null && !shopChangeRecord.getIdCardBackSide().equals(dbShop.getIdCardBackSide())){ applyChangeContent += "身份证反面、"; } - if(shopChangeRecord.getHouseNumber()!=null && !shopChangeRecord.getHouseNumber().equals(dbShop.getHouseNumber())){ applyChangeContent += "门牌号、"; } - if(shopChangeRecord.getLongitude()!=null && dbShop.getLongitude()==null){ applyChangeContent += "经度、"; }else if(shopChangeRecord.getLongitude()!=null && dbShop.getLongitude()!=null && shopChangeRecord.getLongitude().compareTo(dbShop.getLongitude())!=0){ applyChangeContent += "经度、"; } - if(shopChangeRecord.getLatitude()!=null && dbShop.getLatitude()==null){ applyChangeContent += "纬度、"; }else if(shopChangeRecord.getLatitude()!=null && dbShop.getLatitude()!=null && shopChangeRecord.getLatitude().compareTo(dbShop.getLatitude())!=0){ @@ -289,7 +220,6 @@ public String getApplyChangeContent(Shop dbShop, ShopChangeRecord shopChangeReco } applyChangeContent = applyChangeContent != "" ? applyChangeContent.substring(0, applyChangeContent.length()-1) : applyChangeContent; - return applyChangeContent; } -} \ No newline at end of file +} diff --git a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantWithdrawRecordController.java b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantWithdrawRecordController.java index 6a50d0c..cfd6401 100644 --- a/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantWithdrawRecordController.java +++ b/siam-merchant/merchant-provider/src/main/java/com/siam/package_merchant/controller/merchant/MerchantWithdrawRecordController.java @@ -6,8 +6,11 @@ import com.siam.package_merchant.model.param.MerchantWithdrawRecordParam; import com.siam.package_merchant.service.MerchantBillingRecordService; import com.siam.package_merchant.service.MerchantWithdrawRecordService; -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; @@ -23,7 +26,7 @@ @RestController @RequestMapping(value = "/rest/merchant/merchantWithdrawRecord") @Transactional(rollbackFor = Exception.class) -@Api(tags = "商家端商家提现记录模块相关接口", description = "MerchantWithdrawRecordController") +@Tag(name = "商家端商家提现记录模块相关接口", description = "MerchantWithdrawRecordController") public class MerchantWithdrawRecordController { @Autowired @@ -32,21 +35,21 @@ public class MerchantWithdrawRecordController { @Autowired private MerchantBillingRecordService merchantBillingRecordService; - @ApiOperation(value = "商家提现记录列表") + @Operation(summary = "商家提现记录列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) MerchantWithdrawRecordParam param) { Page page = merchantWithdrawRecordService.getListByPage(param); return BasicResult.success(page); } - @ApiOperation(value = "商家提现记录-统计金额") + @Operation(summary = "商家提现记录-统计金额") @PostMapping(value = "/statisticalAmount") public BasicResult statisticalAmount(@RequestBody @Validated(value = {}) MerchantWithdrawRecordParam param) { Map map = merchantWithdrawRecordService.statisticalAmount(param); return BasicResult.success(map); } - @ApiOperation(value = "新增商家提现记录") + @Operation(summary = "新增商家提现记录") @PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) MerchantWithdrawRecordParam param) { merchantWithdrawRecordService.insert(param); @@ -55,19 +58,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) MerchantWithdrawRe - /*@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"), - }) - @PutMapping(value = "/update") + /*@Operation(summary = "修改商家提现记录")@PutMapping(value = "/update") public BasicResult update(MerchantWithdrawRecord merchantWithdrawRecord, HttpServletRequest request){ BasicResult basicResult = new BasicResult(); @@ -104,11 +95,7 @@ public BasicResult update(MerchantWithdrawRecord merchantWithdrawRecord, HttpSer }*/ - /*@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(int id, HttpServletRequest request){ BasicResult basicResult = new BasicResult(); diff --git a/siam-merchant/merchant-provider/src/main/resources/application-local.yml b/siam-merchant/merchant-provider/src/main/resources/application-local.yml index 4dbcd55..742a961 100644 --- a/siam-merchant/merchant-provider/src/main/resources/application-local.yml +++ b/siam-merchant/merchant-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: merchant-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: merchant-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-merchant/pom.xml b/siam-merchant/pom.xml index 033ad26..6d68267 100644 --- a/siam-merchant/pom.xml +++ b/siam-merchant/pom.xml @@ -32,8 +32,6 @@ UTF-8 - 1.8 - 1.8 \ No newline at end of file diff --git a/siam-monitor/pom.xml b/siam-monitor/pom.xml index 98c5f61..f081e93 100644 --- a/siam-monitor/pom.xml +++ b/siam-monitor/pom.xml @@ -46,41 +46,42 @@ org.springframework.boot spring-boot-starter-web - 2.6.13 de.codecentric spring-boot-admin-starter-server - 2.6.8 org.springframework.boot spring-boot-starter-security - 2.6.13 cn.hutool hutool-all - 5.6.3 + 5.8.26 org.springframework.boot spring-boot-starter-mail - 2.6.13 - + - org.springframework.cloud - spring-cloud-starter-netflix-eureka-client - 3.1.1 + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui @@ -90,7 +91,6 @@ org.springframework.boot spring-boot-maven-plugin - 2.7.2 com.siam.MonitorApplication diff --git a/siam-monitor/src/main/java/com/siam/SecuritySecureConfig.java b/siam-monitor/src/main/java/com/siam/SecuritySecureConfig.java index a8c948d..2aae2d5 100644 --- a/siam-monitor/src/main/java/com/siam/SecuritySecureConfig.java +++ b/siam-monitor/src/main/java/com/siam/SecuritySecureConfig.java @@ -1,15 +1,18 @@ package com.siam; import de.codecentric.boot.admin.server.config.AdminServerProperties; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @EnableWebSecurity @Configuration -public class SecuritySecureConfig extends WebSecurityConfigurerAdapter { +public class SecuritySecureConfig { private final String adminContextPath; @@ -17,28 +20,29 @@ public SecuritySecureConfig(AdminServerProperties adminServer) { this.adminContextPath = adminServer.getContextPath(); } - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl(adminContextPath + "/"); - http.authorizeRequests() - .antMatchers(adminContextPath + "/login", - adminContextPath + "/assets/**", - adminContextPath + "/manage/**", - adminContextPath + "/actuator/**", - adminContextPath + "/login.html" - ).permitAll() - .anyRequest().authenticated() - .and() - .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler) - .and() - .logout().logoutUrl(adminContextPath + "/logout") - .and() - .httpBasic() - .and() - .csrf().disable(); - } + http.authorizeHttpRequests(authz -> authz + .requestMatchers( + new AntPathRequestMatcher(adminContextPath + "/login"), + new AntPathRequestMatcher(adminContextPath + "/assets/**"), + new AntPathRequestMatcher(adminContextPath + "/manage/**"), + new AntPathRequestMatcher(adminContextPath + "/actuator/**"), + new AntPathRequestMatcher(adminContextPath + "/login.html") + ).permitAll() + .anyRequest().authenticated() + ) + .formLogin(form -> form + .loginPage(adminContextPath + "/login") + .successHandler(successHandler)) + .logout(logout -> logout.logoutUrl(adminContextPath + "/logout")) + .httpBasic(Customizer.withDefaults()) + .csrf(csrf -> csrf.disable()); + return http.build(); + } } diff --git a/siam-monitor/src/main/resources/application-local.yml b/siam-monitor/src/main/resources/application-local.yml index afc2f79..1f82f89 100644 --- a/siam-monitor/src/main/resources/application-local.yml +++ b/siam-monitor/src/main/resources/application-local.yml @@ -7,6 +7,12 @@ spring: application: name: actuator-monitor + # Nacos注册中心 + cloud: + nacos: + discovery: + server-addr: 127.0.0.1:8848 + security: user: name: admin @@ -39,17 +45,7 @@ spring: 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 - #心跳检测暂时不配置 +# Nacos注册中心 # boot: # admin: diff --git a/siam-order/order-api/pom.xml b/siam-order/order-api/pom.xml index ef34d86..34b8b11 100644 --- a/siam-order/order-api/pom.xml +++ b/siam-order/order-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-order/order-api/src/main/java/com/siam/package_order/entity/Order.java b/siam-order/order-api/src/main/java/com/siam/package_order/entity/Order.java index 669527c..4eab54f 100644 --- a/siam-order/order-api/src/main/java/com/siam/package_order/entity/Order.java +++ b/siam-order/order-api/src/main/java/com/siam/package_order/entity/Order.java @@ -5,8 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -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; @@ -14,7 +13,7 @@ import java.util.List; @Data -@ApiModel(value = "订单表") + @Schema(description= "订单表") @TableName("tb_order") public class Order { diff --git a/siam-order/order-api/src/main/java/com/siam/package_order/entity/OrderDetail.java b/siam-order/order-api/src/main/java/com/siam/package_order/entity/OrderDetail.java index c01b1ee..513a863 100644 --- a/siam-order/order-api/src/main/java/com/siam/package_order/entity/OrderDetail.java +++ b/siam-order/order-api/src/main/java/com/siam/package_order/entity/OrderDetail.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.math.BigDecimal; import java.util.List; @Data -@ApiModel(value = "订单商品详情表") + @Schema(description= "订单商品详情表") @TableName("tb_order_detail") public class OrderDetail { - @ApiModelProperty(notes = "主键id") + @Schema(description = "主键id") @TableId(type = IdType.AUTO) private Integer id; @TableField(exist = false) List ids; - @ApiModelProperty(notes = "订单id") + @Schema(description = "订单id") private Integer orderId; - @ApiModelProperty(notes = "商品id") + @Schema(description = "商品id") private Integer goodsId; - @ApiModelProperty(notes = "商品名称") + @Schema(description = "商品名称") private String goodsName; - @ApiModelProperty(notes = "商品主图") + @Schema(description = "商品主图") private String mainImage; - @ApiModelProperty(notes = "商品规格 JSON格式") + @Schema(description = "商品规格 JSON格式") private String specList; - @ApiModelProperty(notes = "价格") + @Schema(description = "价格") private BigDecimal price; - @ApiModelProperty(notes = "购买数量") + @Schema(description = "购买数量") private Integer number; - @ApiModelProperty(notes = "小计") + @Schema(description = "小计") private BigDecimal subtotal; private BigDecimal packingCharges; diff --git a/siam-order/order-api/src/main/java/com/siam/package_order/model/dto/PlatformPayDto.java b/siam-order/order-api/src/main/java/com/siam/package_order/model/dto/PlatformPayDto.java index 9bff1ef..7177863 100644 --- a/siam-order/order-api/src/main/java/com/siam/package_order/model/dto/PlatformPayDto.java +++ b/siam-order/order-api/src/main/java/com/siam/package_order/model/dto/PlatformPayDto.java @@ -4,8 +4,8 @@ import org.hibernate.validator.constraints.Range; import org.springframework.web.bind.annotation.RequestParam; -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-order/order-api/src/main/java/com/siam/package_order/model/param/OrderParam.java b/siam-order/order-api/src/main/java/com/siam/package_order/model/param/OrderParam.java index e289bfd..01d9038 100644 --- a/siam-order/order-api/src/main/java/com/siam/package_order/model/param/OrderParam.java +++ b/siam-order/order-api/src/main/java/com/siam/package_order/model/param/OrderParam.java @@ -4,18 +4,17 @@ import com.siam.package_common.model.valid_group.ValidGroupOfId; import com.siam.package_order.entity.Order; import com.siam.package_order.entity.OrderRefund; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; 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; import java.util.List; @Data -@ApiModel(value = "订单表") + @Schema(description= "订单表") public class OrderParam extends Order { private Date startTime; @@ -55,7 +54,7 @@ public class OrderParam extends Order { private Integer excludeOrderId; @NotNull(message = "主键id不能为空", groups = {ValidGroupOfId.class}) - @ApiModelProperty(notes = "主键id") + @Schema(description = "主键id") private Integer id; /** diff --git a/siam-order/order-api/src/main/java/com/siam/package_order/model/vo/OrderVo.java b/siam-order/order-api/src/main/java/com/siam/package_order/model/vo/OrderVo.java index bb4a36b..acc9aee 100644 --- a/siam-order/order-api/src/main/java/com/siam/package_order/model/vo/OrderVo.java +++ b/siam-order/order-api/src/main/java/com/siam/package_order/model/vo/OrderVo.java @@ -1,13 +1,13 @@ package com.siam.package_order.model.vo; import com.siam.package_order.entity.OrderDetail; -import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.List; @Data -@ApiModel(value = "订单表") + @Schema(description= "订单表") public class OrderVo { private Object order; diff --git a/siam-order/order-api/src/main/java/com/siam/package_order/model/vo/OrderVo2.java b/siam-order/order-api/src/main/java/com/siam/package_order/model/vo/OrderVo2.java index d18793f..4c84e7e 100644 --- a/siam-order/order-api/src/main/java/com/siam/package_order/model/vo/OrderVo2.java +++ b/siam-order/order-api/src/main/java/com/siam/package_order/model/vo/OrderVo2.java @@ -3,13 +3,13 @@ import com.siam.package_order.entity.OrderRefund; import com.siam.package_order.entity.OrderRefundGoods; import com.siam.package_order.entity.OrderRefundProcess; -import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.List; @Data -@ApiModel(value = "订单表") + @Schema(description= "订单表") public class OrderVo2 { private OrderRefund orderRefund; diff --git a/siam-order/order-provider/pom.xml b/siam-order/order-provider/pom.xml index 5270c1b..5f5e997 100644 --- a/siam-order/order-provider/pom.xml +++ b/siam-order/order-provider/pom.xml @@ -16,8 +16,6 @@ UTF-8 - 1.8 - 1.8 4.1.1 @@ -99,72 +97,40 @@ - - - org.springframework.cloud - spring-cloud-starter-netflix-eureka-client - 2.1.2.RELEASE - - - - - org.springframework.cloud - spring-cloud-starter-netflix-hystrix - 2.1.2.RELEASE - - - - - org.springframework.cloud - spring-cloud-starter-hystrix-dashboard - 1.2.3.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 @@ -174,7 +140,6 @@ org.springframework.boot spring-boot-maven-plugin - 2.7.2 com.siam.package_order.OrderApplication diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/OrderApplication.java b/siam-order/order-provider/src/main/java/com/siam/package_order/OrderApplication.java index 1da786a..7e9e68a 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/OrderApplication.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/OrderApplication.java @@ -1,19 +1,19 @@ package com.siam.package_order; -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.client.circuitbreaker.EnableCircuitBreaker; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; +import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; -//@EnableHystrix -//@EnableHystrixDashboard -@EnableCircuitBreaker @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 OrderApplication { diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/config/MybatisPlusConfig.java b/siam-order/order-provider/src/main/java/com/siam/package_order/config/MybatisPlusConfig.java index 9a5614d..91c2e6f 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/config/MybatisPlusConfig.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/config/MybatisPlusConfig.java @@ -1,6 +1,8 @@ package com.siam.package_order.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-order/order-provider/src/main/java/com/siam/package_order/config/SeataConfig.java b/siam-order/order-provider/src/main/java/com/siam/package_order/config/SeataConfig.java index 215c402..5efe888 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/config/SeataConfig.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/config/SeataConfig.java @@ -1,6 +1,8 @@ //package com.siam.package_order.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 com.siam.package_common.util.StringUtils; //import com.zaxxer.hikari.HikariDataSource; //import io.seata.rm.datasource.DataSourceProxy; diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/config/Swagger2Config.java b/siam-order/order-provider/src/main/java/com/siam/package_order/config/Swagger2Config.java deleted file mode 100644 index 33e60c5..0000000 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/config/Swagger2Config.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.siam.package_order.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-order/order-provider/src/main/java/com/siam/package_order/controller/admin/AdminOrderController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/admin/AdminOrderController.java index 46785a7..0e6cd4f 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/admin/AdminOrderController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/admin/AdminOrderController.java @@ -9,33 +9,34 @@ import com.siam.package_order.model.param.OrderParam; import com.siam.package_order.service.OrderService; -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.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.text.ParseException; import java.util.*; @RestController @RequestMapping(value = "/rest/admin/order") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台订单模块相关接口", description = "AdminOrderController") +@Tag(name = "后台订单模块相关接口", description = "AdminOrderController") public class AdminOrderController { @Resource(name = "orderServiceImpl") private OrderService orderService; - @ApiOperation(value = "订单列表") + @Operation(summary = "订单列表") @PostMapping(value = "/list") public BasicResult list(@RequestBody @Validated(value = {}) OrderParam param){ Page page = orderService.getListByPageWithAsc(param); return BasicResult.success(page); } - @ApiOperation("打印小票") + @Operation(summary = "打印小票") public BasicResult printRceceipts(@RequestBody @Validated(value = {}) OrderParam param){ for(String id : param.getIds()){ orderService.printRceceipts(Integer.valueOf(id)); @@ -43,7 +44,7 @@ public BasicResult printRceceipts(@RequestBody @Validated(value = {}) OrderParam return BasicResult.success(); } - @ApiOperation(value = "查询单个订单信息") + @Operation(summary = "查询单个订单信息") @PostMapping(value = "/selectById") public BasicResult selectById(@RequestBody @Validated(value = {}) OrderParam param){ Order dbOrder = orderService.selectByPrimaryKey(param.getId()); @@ -53,42 +54,42 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) OrderParam par return BasicResult.success(dbOrder); } - @ApiOperation(value = "批量修改订单的是否已打印状态为已打印") + @Operation(summary = "批量修改订单的是否已打印状态为已打印") @PostMapping(value = "/batchUpdateIsPrintedTrue") public BasicResult batchUpdateIsPrintedTrue(@RequestBody @Validated(value = {}) OrderParam param){ orderService.batchUpdateIsPrintedTrue(param); return BasicResult.success(); } - @ApiOperation(value = "今日订单列表") + @Operation(summary = "今日订单列表") @PostMapping(value = "/todayOrderList") public BasicResult todayOrderList(@RequestBody @Validated(value = {}) OrderParam param){ Page page = orderService.getListByTodayOrderWithAsc(param); return BasicResult.success(page); } - @ApiOperation(value = "查询所有订单标签页的待处理数量") + @Operation(summary = "查询所有订单标签页的待处理数量") @PostMapping(value = "/selectAllTabWaitHandleNum") public BasicResult selectAllTabWaitHandleNum(@RequestBody @Validated(value = {}) OrderParam param){ Map map = this.orderService.selectAllTabWaitHandleNum(param); return BasicResult.success(map); } - @ApiOperation(value = "查询所有已付款未打印的订单") + @Operation(summary = "查询所有已付款未打印的订单") @PostMapping(value = "/waitPrintOrderList") public BasicResult waitPrintOrderList(@RequestBody @Validated(value = {}) OrderParam param){ List orders = orderService.waitPrintOrderList(param); return BasicResult.success(orders); } - @ApiOperation(value = "订单统计(支付成功订单数量、取消订单数量、退款订单数量,按自取或者外卖分开)") + @Operation(summary = "订单统计(支付成功订单数量、取消订单数量、退款订单数量,按自取或者外卖分开)") @PostMapping(value = "/countOrder") public BasicResult countOrder(@RequestBody @Validated(value = {}) OrderParam param){ Map count=orderService.countOrder(param); return BasicResult.success(count); } - @ApiOperation(value = "售后处理订单列表") + @Operation(summary = "售后处理订单列表") @PostMapping(value = "/afterSalesList") public BasicResult afterSalesList(@RequestBody @Validated(value = {}) OrderParam param){ Page page = orderService.getAfterSalesListByPageWithAsc(param); diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/admin/AdminOrderDetailController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/admin/AdminOrderDetailController.java index cecae29..86159de 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/admin/AdminOrderDetailController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/admin/AdminOrderDetailController.java @@ -6,10 +6,16 @@ import com.siam.package_common.constant.BasicResultCode; import com.siam.package_order.entity.OrderDetail; import com.siam.package_order.service.OrderDetailService; -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,28 +24,12 @@ @RestController @RequestMapping(value = "/rest/admin/orderDetail") @Transactional(rollbackFor = Exception.class) -@Api(tags = "后台订单商品详情模块相关接口", description = "AdminOrderDetailController") +@Tag(name = "后台订单商品详情模块相关接口", description = "AdminOrderDetailController") public class AdminOrderDetailController { @Autowired private OrderDetailService orderDetailService; - @ApiOperation(value = "订单商品详情列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单商品详情表主键id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderId", value = "订单id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsId", value = "商品id", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsName", value = "商品名称", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "price", value = "价格", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "number", value = "购买数量", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "subtotal", value = "小计", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @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(@RequestBody @Validated(value = {}) OrderDetail orderDetail){ BasicData basicResult = new BasicData(); @@ -49,20 +39,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) OrderDetail orderDet } - @ApiOperation(value = "新增订单商品详情") - @ApiImplicitParams({ - @ApiImplicitParam(name = "orderId", value = "订单id", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsName", value = "商品名称", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "price", value = "价格", required = true, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "number", value = "购买数量", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "subtotal", value = "小计", required = true, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"), - }) - @PostMapping(value = "/insert") + @Operation(summary = "新增订单商品详情")@PostMapping(value = "/insert") public BasicResult insert(@RequestBody @Validated(value = {}) OrderDetail orderDetail){ BasicResult basicResult = new BasicResult(); @@ -74,21 +51,7 @@ public BasicResult insert(@RequestBody @Validated(value = {}) OrderDetail orderD return basicResult; } - @ApiOperation(value = "修改订单商品详情") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单商品详情表主键id", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderId", value = "订单id", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsName", value = "商品名称", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "price", value = "价格", required = true, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "number", value = "购买数量", required = true, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "subtotal", value = "小计", required = true, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"), - }) - @PostMapping(value = "/update") + @Operation(summary = "修改订单商品详情")@PostMapping(value = "/update") public BasicResult update(@RequestBody @Validated(value = {}) OrderDetail orderDetail){ BasicResult basicResult = new BasicResult(); @@ -100,11 +63,7 @@ public BasicResult update(@RequestBody @Validated(value = {}) OrderDetail orderD 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(@RequestBody @Validated(value = {}) OrderDetail param){ BasicResult basicResult = new BasicResult(); diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/AppraiseController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/AppraiseController.java index 3a8ad82..7596282 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/AppraiseController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/AppraiseController.java @@ -24,8 +24,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Date; import java.util.Map; diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/CommonController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/CommonController.java index 1e16f8d..da2e2e4 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/CommonController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/CommonController.java @@ -7,10 +7,11 @@ import com.siam.package_order.service.CommonService; import com.siam.package_user.entity.DeliveryAddress; import com.siam.package_user.feign.DeliveryAddressFeignApi; -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 lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -26,7 +27,7 @@ @RestController @RequestMapping(value = "/rest/common") @Transactional(rollbackFor = Exception.class) -@Api(tags = "通用模块相关接口", description = "CommonController") +@Tag(name = "通用模块相关接口", description = "CommonController") public class CommonController { @Autowired @@ -41,10 +42,7 @@ public class CommonController { // @Autowired // private ShopFeignClient shopFeignApi; - @ApiOperation(value = "查询订单配送费") - @ApiImplicitParams({ - @ApiImplicitParam(name = "deliveryAddressId", value = "收货地址id", required = false, paramType = "query", dataType = "int") - }) + @Operation(summary = "查询订单配送费") @PostMapping(value = "/selectDeliveryFee") public BasicResult selectDeliveryFee(@RequestBody @Validated(value = {}) CommonParam param) { BasicData basicResult = new BasicData(); @@ -61,11 +59,7 @@ public BasicResult selectDeliveryFee(@RequestBody @Validated(value = {}) CommonP return BasicResult.success(deliveryFee); } - /*@ApiOperation(value = "查询是否有门店可以配送") - @ApiImplicitParams({ - @ApiImplicitParam(name = "deliveryAddressId", value = "收货地址id", required = false, paramType = "query", dataType = "int") - }) - @PostMapping(value = "/selectHasShopDelivery") + /*@Operation(summary = "查询是否有门店可以配送")@PostMapping(value = "/selectHasShopDelivery") public BasicResult selectHasShopDelivery(@RequestParam(required = false) Integer deliveryAddressId){ BasicData basicResult = new BasicData(); @@ -119,7 +113,7 @@ public BasicResult selectHasShopDelivery(@RequestParam(required = false) Integer // @Autowired // private WebSocket webSocket; // -// @ApiOperation(value = "websocket推送消息给前端") +// @Operation(summary = "websocket推送消息给前端") // @GetMapping(value = "/websocketPush") // public BasicResult websocketPush(String name, String mark){ // BasicResult basicResult = new BasicResult(); diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/GiveLikeController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/GiveLikeController.java index 17cc4a0..5d1b55a 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/GiveLikeController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/GiveLikeController.java @@ -14,7 +14,7 @@ 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; /** diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/MerchantOrderController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/MerchantOrderController.java index eebb542..f123b36 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/MerchantOrderController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/MerchantOrderController.java @@ -35,10 +35,10 @@ import com.siam.package_user.util.TokenUtil; import com.siam.package_weixin_basic.service.WxNotifyService; import com.siam.package_weixin_basic.service.WxPublicPlatformNotifyService; -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; @@ -47,8 +47,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.text.ParseException; import java.util.*; @@ -58,7 +58,7 @@ @RestController @RequestMapping(value = "/rest/merchant/order") @Transactional(rollbackFor = Exception.class) -@Api(tags = "商家端订单模块相关接口", description = "MerchantOrderController") +@Tag(name = "商家端订单模块相关接口", description = "MerchantOrderController") public class MerchantOrderController { @Resource(name = "orderServiceImpl") @@ -102,38 +102,7 @@ public class MerchantOrderController { private Lock lock = new ReentrantLock(); - @ApiOperation(value = "订单列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单表主键id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "memberId", value = "用户id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderNo", value = "订单编号,供客户查询", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsTotalQuantity", value = "商品总数量", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsTotalPrice", value = "商品总金额", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "packingCharges", value = "包装费", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "deliveryFee", value = "配送费", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "actualPrice", value = "实付款", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "shoppingWay", value = "购物方式 1=自取 2=配送", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "deliveryAddressId", value = "收货地址id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "contactRealname", value = "联系人姓名", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactPhone", value = "联系电话", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactProvince", value = "省份", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactCity", value = "城市", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactArea", value = "区/县", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactStreet", value = "详细地址(具体到街道门牌号)", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactSex", value = "联系人性别 0=无 1=先生 2=女士", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "description", value = "订单描述", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "status", value = "订单状态 -1=售后处理状态 1=未付款 2=待处理 3=待自取(已处理) 4=待配送(已处理) 5=已配送 6=已完成 7=售后处理中 8=已退款 9=售后处理完成 10=已取消", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "tradeId", value = "用户交易id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderLogisticsId", value = "物流id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "isInvoice", value = "是否开票", required = false, paramType = "query", dataType = "Boolean"), - @ApiImplicitParam(name = "invoiceId", value = "发票id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "isDeleted", value = "是否删除 0=正常 1=已删除", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "shopId", value = "接单门店id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "shopName", 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 = {}) OrderParam param, HttpServletRequest request){ BasicData basicResult = new BasicData(); @@ -148,7 +117,7 @@ public BasicResult list(@RequestBody @Validated(value = {}) OrderParam param, Ht } - @ApiOperation(value = "修改订单状态") + @Operation(summary = "修改订单状态") @PostMapping(value = "/updateStatus") public BasicResult updateStatus(@RequestBody @Validated(value = {}) OrderParam param){ BasicResult basicResult = new BasicResult(); @@ -266,10 +235,7 @@ public BasicResult updateStatus(@RequestBody @Validated(value = {}) OrderParam p return basicResult; } - @ApiOperation(value = "查询单个订单信息") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单表主键id", required = true, paramType = "query", dataType = "int"), - }) + @Operation(summary = "查询单个订单信息") @PostMapping(value = "/selectById") public BasicResult selectById(@RequestBody @Validated(value = {}) OrderParam param){ BasicData basicResult = new BasicData(); @@ -290,10 +256,7 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) OrderParam par return BasicResult.success(dbOrder); } - @ApiOperation(value = "批量修改订单的是否已打印状态为已打印") - @ApiImplicitParams({ - @ApiImplicitParam(name = "idListStr", value = "订单表主键id", required = true, paramType = "query", dataType = "string"), - }) + @Operation(summary = "批量修改订单的是否已打印状态为已打印") @PostMapping(value = "/batchUpdateIsPrintedTrue") public BasicResult batchUpdateIsPrintedTrue(@RequestBody @Validated(value = {}) OrderParam param){ BasicResult basicResult = new BasicResult(); @@ -316,40 +279,7 @@ public BasicResult batchUpdateIsPrintedTrue(@RequestBody @Validated(value = {}) return basicResult; } - @ApiOperation(value = "今日订单列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单表主键id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "memberId", value = "用户id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderNo", value = "订单编号,供客户查询", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsTotalQuantity", value = "商品总数量", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsTotalPrice", value = "商品总金额", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "packingCharges", value = "包装费", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "deliveryFee", value = "配送费", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "actualPrice", value = "实付款", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "shoppingWay", value = "购物方式 1=自取 2=配送", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "deliveryAddressId", value = "收货地址id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "contactRealname", value = "联系人姓名", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactPhone", value = "联系电话", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactProvince", value = "省份", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactCity", value = "城市", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactArea", value = "区/县", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactStreet", value = "详细地址(具体到街道门牌号)", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "contactSex", value = "联系人性别 0=无 1=先生 2=女士", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "description", value = "订单描述", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "status", value = "订单状态 -1=售后处理状态 1=未付款 2=待处理 3=待自取(已处理) 4=待配送(已处理) 5=已配送 6=已完成 7=售后处理中 8=已退款 9=售后处理完成 10=已取消", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "tradeId", value = "用户交易id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderLogisticsId", value = "物流id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "isInvoice", value = "是否开票", required = false, paramType = "query", dataType = "Boolean"), - @ApiImplicitParam(name = "invoiceId", value = "发票id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "isDeleted", value = "是否删除 0=正常 1=已删除", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "shopId", value = "接单门店id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "shopName", value = "接单门店名称", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "startCreateTime", value = "下单开始时间", required = false, paramType = "query", dataType = "Date"), - @ApiImplicitParam(name = "endCreateTime", value = "下单结束时间", required = false, paramType = "query", dataType = "Date"), - @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 = "/todayOrderList") public BasicResult todayOrderList(@RequestBody @Validated(value = {}) OrderParam param, HttpServletRequest request){ BasicData basicResult = new BasicData(); @@ -363,7 +293,7 @@ public BasicResult todayOrderList(@RequestBody @Validated(value = {}) OrderParam return BasicResult.success(page); } - @ApiOperation(value = "查询所有订单标签页的待处理数量") + @Operation(summary = "查询所有订单标签页的待处理数量") @PostMapping(value = "/selectAllTabWaitHandleNum") public BasicResult selectAllTabWaitHandleNum(@RequestBody @Validated(value = {}) OrderParam param){ BasicData basicResult = new BasicData(); @@ -377,7 +307,7 @@ public BasicResult selectAllTabWaitHandleNum(@RequestBody @Validated(value = {}) orderLambdaQueryWrapper.eq(Order::getShopId, loginMerchant.getShopId()); orderLambdaQueryWrapper.eq(Order::getShoppingWay, Quantity.INT_1); orderLambdaQueryWrapper.eq(Order::getStatus, Quantity.INT_2); - int waitHandleNum = orderService.count(orderLambdaQueryWrapper); + long waitHandleNum = orderService.count(orderLambdaQueryWrapper); dataMap.put("waitHandleNum", waitHandleNum); //自取订单-待自取订单 @@ -385,7 +315,7 @@ public BasicResult selectAllTabWaitHandleNum(@RequestBody @Validated(value = {}) orderLambdaQueryWrapper.eq(Order::getShopId, loginMerchant.getShopId()); orderLambdaQueryWrapper.eq(Order::getShoppingWay, Quantity.INT_1); orderLambdaQueryWrapper.eq(Order::getStatus, Quantity.INT_3); - int waitPickUpNum = orderService.count(orderLambdaQueryWrapper); + long waitPickUpNum = orderService.count(orderLambdaQueryWrapper); dataMap.put("waitPickUpNum", waitPickUpNum); //外卖订单-待配送订单 @@ -393,7 +323,7 @@ public BasicResult selectAllTabWaitHandleNum(@RequestBody @Validated(value = {}) orderLambdaQueryWrapper.eq(Order::getShopId, loginMerchant.getShopId()); orderLambdaQueryWrapper.eq(Order::getShoppingWay, Quantity.INT_2); orderLambdaQueryWrapper.eq(Order::getStatus, Quantity.INT_4); - int waitDeliveryNum = orderService.count(orderLambdaQueryWrapper); + int waitDeliveryNum = (int) orderService.count(orderLambdaQueryWrapper); dataMap.put("waitDeliveryNum", waitDeliveryNum); //外卖订单-已配送订单 @@ -401,13 +331,13 @@ public BasicResult selectAllTabWaitHandleNum(@RequestBody @Validated(value = {}) orderLambdaQueryWrapper.eq(Order::getShopId, loginMerchant.getShopId()); orderLambdaQueryWrapper.eq(Order::getShoppingWay, Quantity.INT_2); orderLambdaQueryWrapper.eq(Order::getStatus, Quantity.INT_5); - int deliveredNum = orderService.count(orderLambdaQueryWrapper); + int deliveredNum = (int) orderService.count(orderLambdaQueryWrapper); dataMap.put("deliveredNum", deliveredNum); return BasicResult.success(dataMap); } - @ApiOperation(value = "查询所有已付款未打印的订单") + @Operation(summary = "查询所有已付款未打印的订单") @PostMapping(value = "/waitPrintOrderList") public BasicResult waitPrintOrderList(@RequestBody @Validated(value = {}) OrderParam param){ BasicData basicResult = new BasicData(); @@ -455,11 +385,7 @@ public BasicResult waitPrintOrderList(@RequestBody @Validated(value = {}) OrderP return BasicResult.success(orders); } - @ApiOperation(value = "订单统计(支付成功订单数量、取消订单数量、退款订单数量,按自取或者外卖分开)") - @ApiImplicitParams({ - @ApiImplicitParam(name = "startCreateTime", value = "下单开始时间", required = false, paramType = "query", dataType = "Date"), - @ApiImplicitParam(name = "endCreateTime", value = "下单结束时间", required = false, paramType = "query", dataType = "Date"), - }) + @Operation(summary = "订单统计(支付成功订单数量、取消订单数量、退款订单数量,按自取或者外卖分开)") @PostMapping(value = "/countOrder") public BasicResult countOrder(@RequestBody @Validated(value = {}) OrderParam order, HttpServletRequest request){ BasicData basicResult = new BasicData(); @@ -473,7 +399,7 @@ public BasicResult countOrder(@RequestBody @Validated(value = {}) OrderParam ord return BasicResult.success(count); } - @ApiOperation(value = "售后处理订单列表") + @Operation(summary = "售后处理订单列表") @PostMapping(value = "/afterSalesList") public BasicResult afterSalesList(@RequestBody @Validated(value = {}) OrderParam param, HttpServletRequest request){ BasicData basicResult = new BasicData(); diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/MerchantOrderDetailController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/MerchantOrderDetailController.java index d360cdf..cf5c2cf 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/MerchantOrderDetailController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/MerchantOrderDetailController.java @@ -5,10 +5,16 @@ import com.siam.package_common.entity.BasicResult; import com.siam.package_order.entity.OrderDetail; import com.siam.package_order.service.OrderDetailService; -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; @@ -17,28 +23,12 @@ @RestController @RequestMapping(value = "/rest/merchant/orderDetail") @Transactional(rollbackFor = Exception.class) -@Api(tags = "商家端订单商品详情模块相关接口", description = "MerchantOrderDetailController") +@Tag(name = "商家端订单商品详情模块相关接口", description = "MerchantOrderDetailController") public class MerchantOrderDetailController { @Autowired private OrderDetailService orderDetailService; - @ApiOperation(value = "订单商品详情列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单商品详情表主键id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderId", value = "订单id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsId", value = "商品id", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsName", value = "商品名称", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "price", value = "价格", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "number", value = "购买数量", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "subtotal", value = "小计", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @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(@RequestBody @Validated(value = {}) OrderDetail orderDetail){ BasicData basicResult = new BasicData(); @@ -48,20 +38,8 @@ public BasicResult list(@RequestBody @Validated(value = {}) OrderDetail orderDet } -// @ApiOperation(value = "新增订单商品详情") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "orderId", value = "订单id", required = true, paramType = "query", dataType = "int"), -// @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "goodsName", value = "商品名称", required = true, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = true, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "price", value = "价格", required = true, paramType = "query", dataType = "BigDecimal"), -// @ApiImplicitParam(name = "number", value = "购买数量", required = true, paramType = "query", dataType = "int"), -// @ApiImplicitParam(name = "subtotal", value = "小计", required = true, paramType = "query", dataType = "BigDecimal"), -// @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"), -// }) -// @PostMapping(value = "/insert") +// @Operation(summary = "新增订单商品详情") +//// @PostMapping(value = "/insert") // public BasicResult insert(OrderDetail orderDetail){ // BasicResult basicResult = new BasicResult(); // @@ -73,21 +51,8 @@ public BasicResult list(@RequestBody @Validated(value = {}) OrderDetail orderDet // return basicResult; // } // -// @ApiOperation(value = "修改订单商品详情") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "id", value = "订单商品详情表主键id", required = true, paramType = "query", dataType = "int"), -// @ApiImplicitParam(name = "orderId", value = "订单id", required = true, paramType = "query", dataType = "int"), -// @ApiImplicitParam(name = "goodsId", value = "商品id", required = true, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "goodsName", value = "商品名称", required = true, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = true, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "price", value = "价格", required = true, paramType = "query", dataType = "BigDecimal"), -// @ApiImplicitParam(name = "number", value = "购买数量", required = true, paramType = "query", dataType = "int"), -// @ApiImplicitParam(name = "subtotal", value = "小计", required = true, paramType = "query", dataType = "BigDecimal"), -// @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), -// @ApiImplicitParam(name = "status", value = "状态 1=启用 0=禁用 -1=删除", required = false, paramType = "query", dataType = "int"), -// }) -// @PostMapping(value = "/update") +// @Operation(summary = "修改订单商品详情") +//// @PostMapping(value = "/update") // public BasicResult update(OrderDetail orderDetail){ // BasicResult basicResult = new BasicResult(); // @@ -99,11 +64,8 @@ public BasicResult list(@RequestBody @Validated(value = {}) OrderDetail orderDet // 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-order/order-provider/src/main/java/com/siam/package_order/controller/member/OrderController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/OrderController.java index d3ec63e..ca7b665 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/OrderController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/OrderController.java @@ -2,31 +2,39 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.siam.package_common.entity.BasicResult; +import com.siam.package_common.exception.StoneCustomerException; import com.siam.package_order.entity.Order; import com.siam.package_order.model.param.OrderParam; import com.siam.package_order.model.vo.OrderVo; import com.siam.package_order.model.vo.OrderVo2; import com.siam.package_order.service.*; import com.siam.package_order.service.OrderService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +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.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.rocketmq.client.exception.MQBrokerException; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.remoting.exception.RemotingException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.io.IOException; import java.util.*; +import java.util.concurrent.TimeUnit; @Slf4j @RestController @RequestMapping(value = "/rest/member/order") @Transactional(rollbackFor = Exception.class) -@Api(tags = "订单模块相关接口", description = "OrderController") +@Tag(name = "订单模块相关接口", description = "OrderController") public class OrderController { @Resource(name = "orderServiceImpl") @@ -35,6 +43,12 @@ public class OrderController { @Resource(name = "rewardServiceImpl") private RewardService rewardService; + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Autowired + private MemberSessionManager memberSessionManager; + /** * 订单列表 * @@ -67,8 +81,19 @@ public BasicResult selectById(@RequestBody @Validated(value = {}) OrderParam par */ @PostMapping(value = "/insert") public BasicResult insertOrder(@RequestBody @Validated(value = {}) OrderParam param) throws InterruptedException, RemotingException, MQClientException, MQBrokerException { - Order order = orderService.insert(param); - return BasicResult.success(order); + // Redis 分布式锁 - 防重复下单 + Member loginMember = memberSessionManager.getSession(TokenUtil.getToken()); + String lockKey = "order:create:lock:" + loginMember.getId(); + Boolean isLocked = stringRedisTemplate.opsForValue().setIfAbsent(lockKey, "1", 5, TimeUnit.SECONDS); + if (Boolean.FALSE.equals(isLocked)) { + throw new StoneCustomerException("正在处理中,请勿重复点击"); + } + try { + Order order = orderService.insert(param); + return BasicResult.success(order); + } finally { + // 订单创建是长流程(含分布式事务),此处不主动删锁,依赖 5 秒过期防止并发 + } } /** @@ -112,14 +137,14 @@ public BasicResult applyRefund(@RequestBody @Validated(value = {}) OrderParam pa * @param param * @return */ - @ApiOperation(value = "修改订单状态为已确认收货") + @Operation(summary = "修改订单状态为已确认收货") @PostMapping(value = "/confirmReceipt") public BasicResult confirmReceipt(@RequestBody @Validated(value = {}) OrderParam param){ orderService.confirmReceipt(param); return BasicResult.success(); } - @ApiOperation(value = "删除订单") + @Operation(summary = "删除订单") @PostMapping(value = "/delete") public BasicResult deleteOrder(@RequestBody @Validated(value = {}) OrderParam param){ diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/OrderDetailController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/OrderDetailController.java index f476f27..b9a6271 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/OrderDetailController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/OrderDetailController.java @@ -1,7 +1,11 @@ package com.siam.package_order.controller.member; import com.siam.package_order.service.OrderDetailService; -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,28 +14,12 @@ @RestController @RequestMapping(value = "/rest/orderDetail") @Transactional(rollbackFor = Exception.class) -@Api(tags = "订单商品详情模块相关接口", description = "OrderDetailController") +@Tag(name = "订单商品详情模块相关接口", description = "OrderDetailController") public class OrderDetailController { @Autowired private OrderDetailService orderDetailService; - /*@ApiOperation(value = "订单商品详情列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "订单商品详情表主键id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "orderId", value = "订单id", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "goodsId", value = "商品id", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsName", value = "商品名称", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "specList", value = "商品规格 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "goodsSpecs", value = "规格组合 JSON格式", required = false, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "price", value = "价格", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "number", value = "购买数量", required = false, paramType = "query", dataType = "int"), - @ApiImplicitParam(name = "subtotal", value = "小计", required = false, paramType = "query", dataType = "BigDecimal"), - @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query", dataType = "string"), - @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, OrderDetail orderDetail){ BasicData basicResult = new BasicData(); diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/PayDemoController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/PayDemoController.java index 6e6004c..ebda1de 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/PayDemoController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/PayDemoController.java @@ -37,10 +37,16 @@ import com.siam.package_util.feign.SettingFeignApi; import com.siam.package_weixin_pay.config.WxpayConfigDemo; import com.siam.package_weixin_pay.entity.WxpayBean; -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.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,9 +61,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.BufferedOutputStream; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; @@ -67,7 +73,7 @@ @RestController @RequestMapping(value = "/rest/payDemo") @Transactional(rollbackFor = Exception.class) -@Api(tags = "支付模块相关接口", description = "PayController") +@Tag(name = "支付模块相关接口", description = "PayController") public class PayDemoController { private Logger logger = LoggerFactory.getLogger(PayDemoController.class); @@ -111,14 +117,7 @@ public class PayDemoController { @Autowired private MemberFeignApi memberFeignApi; - @ApiOperation(value = "支付宝支付") - @ApiImplicitParams({ - @ApiImplicitParam(name = "out_trade_no", value = "商户订单号", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "subject", value = "订单名称", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "total_amount", value = "付款金额", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "body", value = "商品描述", required = false, paramType = "query", dataType = "string"), - }) - @PostMapping(value = "/alipay") + @Operation(summary = "支付宝支付")@PostMapping(value = "/alipay") public BasicResult alipay(AlipayBean alipayBean){ BasicData basicResult = new BasicData(); try { @@ -148,7 +147,7 @@ public BasicResult alipay(AlipayBean alipayBean){ return basicResult; } - @ApiOperation(value = "支付宝支付回调") + @Operation(summary = "支付宝支付回调") @PostMapping(value = "/alipayCallback") public BasicResult alipayCallback(HttpServletRequest request) throws UnsupportedEncodingException, AlipayApiException { BasicResult basicResult = new BasicResult(); @@ -261,14 +260,7 @@ public BasicResult alipayCallback(HttpServletRequest request) throws Unsupported } - @ApiOperation(value = "微信支付") - @ApiImplicitParams({ - @ApiImplicitParam(name = "out_trade_no", value = "商户订单号", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "subject", value = "订单名称", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "total_amount", value = "付款金额", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "body", value = "商品描述", required = false, paramType = "query", dataType = "string"), - }) - @PostMapping(value = "/wxpay") + @Operation(summary = "微信支付")@PostMapping(value = "/wxpay") public BasicResult wxpay(WxpayBean wxpayBean, HttpServletRequest request, WxPayUnifiedOrderRequest wxreq){ BasicData basicResult = new BasicData(); try { @@ -320,7 +312,7 @@ public BasicResult wxpay(WxpayBean wxpayBean, HttpServletRequest request, WxPayU } - @ApiOperation(value = "微信支付回调") + @Operation(summary = "微信支付回调") @PostMapping(value = "/wxpayCallback") public BasicResult wxpayCallback(String xmlData,HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, AlipayApiException, WxPayException { BasicResult basicResult = new BasicResult(); @@ -361,14 +353,7 @@ public String setXML(String return_code, String return_msg) { return ""; } - @ApiOperation(value = "微信支付_2") - @ApiImplicitParams({ - @ApiImplicitParam(name = "out_trade_no", value = "商户订单号", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "subject", value = "订单名称", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "total_amount", value = "付款金额", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "body", value = "商品描述", required = false, paramType = "query", dataType = "string"), - }) - @PostMapping(value = "/wxpay_2") + @Operation(summary = "微信支付_2")@PostMapping(value = "/wxpay_2") public BasicResult wxpay_2(WxpayBean wxpayBean, HttpServletRequest request, WxPayUnifiedOrderRequest wxreq){ BasicData basicResult = new BasicData(); basicResult.setData("http://www.baidu.com"); @@ -378,14 +363,7 @@ public BasicResult wxpay_2(WxpayBean wxpayBean, HttpServletRequest request, WxPa return basicResult; } - @ApiOperation(value = "订单支付(过渡接口)") - @ApiImplicitParams({ - @ApiImplicitParam(name = "out_trade_no", value = "商户订单号", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "subject", value = "订单名称", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "total_amount", value = "付款金额", required = true, paramType = "query", dataType = "string"), - @ApiImplicitParam(name = "body", value = "商品描述", required = false, paramType = "query", dataType = "string"), - }) - @PostMapping(value = "/orderPay") + @Operation(summary = "订单支付(过渡接口)")@PostMapping(value = "/orderPay") public BasicResult orderPay(WxpayBean wxpayBean, HttpServletRequest request){ BasicResult basicResult = new BasicResult(); diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/PlatformPayController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/PlatformPayController.java index 6c77085..18f6ca8 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/PlatformPayController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/PlatformPayController.java @@ -26,8 +26,9 @@ import com.siam.package_user.util.TokenUtil; import com.siam.package_weixin_basic.util.WxdecodeUtils; import com.siam.package_weixin_pay.config.WxPayConfig; -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.rocketmq.client.exception.MQBrokerException; import org.apache.rocketmq.client.exception.MQClientException; @@ -40,8 +41,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.math.BigDecimal; import java.util.Date; @@ -50,7 +51,7 @@ @RestController @RequestMapping(value = "/rest/member/platformPay") @Transactional(rollbackFor = Exception.class) -@Api(tags = "平台支付模块相关接口", description = "PlatformPayController") +@Tag(name = "平台支付模块相关接口", description = "PlatformPayController") public class PlatformPayController { @Autowired @@ -93,7 +94,7 @@ public class PlatformPayController { * @return * @author 暹罗 */ - @ApiOperation(value = "使用平台余额支付") + @Operation(summary = "使用平台余额支付") @PostMapping(value = "/byBalance") public BasicResult byBalance(@RequestBody @Validated PlatformPayDto platformPayDto, HttpServletRequest request) throws InterruptedException, RemotingException, MQClientException, MQBrokerException, IOException { //TODO-PS:但是如果按照微信支付的步骤来,只要某个步骤失败,事务就会回滚--莫非这种就是不能在Controller上添加事务注解的原因? diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/ReplyController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/ReplyController.java index 8b21301..7c6f059 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/ReplyController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/ReplyController.java @@ -15,7 +15,7 @@ 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; /** diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/WxPayService.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/WxPayService.java index 733708a..ce6a034 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/WxPayService.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/WxPayService.java @@ -31,7 +31,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import javax.net.ssl.SSLContext; import java.io.IOException; import java.io.InputStream; diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxNotifyTemplateController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxNotifyTemplateController.java index 74e0aec..6210bd0 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxNotifyTemplateController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxNotifyTemplateController.java @@ -4,7 +4,8 @@ import com.siam.package_common.entity.BasicResult; import com.siam.package_common.constant.BasicResultCode; import com.siam.package_order.service.OrderService; -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; @@ -12,14 +13,14 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.util.*; @Slf4j @RestController @RequestMapping(value = "/rest/wxNotifyTemplate") @Transactional(rollbackFor = Exception.class) -@Api(tags = "微信服务通知模板模块相关接口", description = "WxNotifyTemplateController") +@Tag(name = "微信服务通知模板模块相关接口", description = "WxNotifyTemplateController") public class WxNotifyTemplateController { @Resource(name = "orderServiceImpl") diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxPayController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxPayController.java index 5f9bba9..305b501 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxPayController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxPayController.java @@ -30,8 +30,9 @@ import com.siam.package_weixin_pay.config.WxPayConfig; import com.siam.package_weixin_pay.entity.WxPayDto; import com.siam.package_weixin_pay.util.PayUtil; -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; @@ -41,10 +42,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; -import javax.servlet.ServletInputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.annotation.Resource; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.InputStreamReader; @@ -52,12 +53,15 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.springframework.data.redis.core.StringRedisTemplate; @Slf4j @RestController @RequestMapping(value = "/rest/member/wxPay") @Transactional(rollbackFor = Exception.class) -@Api(tags = "微信支付模块相关接口", description = "WxPayController") +@Tag(name = "微信支付模块相关接口", description = "WxPayController") public class WxPayController { @Autowired @@ -96,12 +100,15 @@ public class WxPayController { @Autowired private RedisUtils redisUtils; + @Autowired + private StringRedisTemplate stringRedisTemplate; + /** * 调用微信支付常见错误: * 1、验签错误 * 解决方案:1) 更改商户密钥5~6次;2) 调整xml报文的顺序排列;3) 如openid这种属性要严格区分大小写 */ - @ApiOperation(value = "微信小程序发起微信支付") + @Operation(summary = "微信小程序发起微信支付") @PostMapping(value = "/toPay4Applet") public BasicResult toPay4Applet(@RequestBody @Validated WxPayDto wxPayDto, HttpServletRequest request) { BasicData basicResult = new BasicData(); @@ -445,58 +452,70 @@ public void wxNotify(HttpServletRequest request, HttpServletResponse response) t String returnCode = (String) map.get("return_code"); if ("SUCCESS".equals(returnCode)) { //验证签名是否正确 - //支付回调这里不需要验证签名是否正确,目前回调的签名验证报签名错误 - - /*if (PayUtil.verify(PayUtil.createLinkString(map), (String) map.get("sign"), wxPayConfig.getMchKey(), "utf-8")) { - - }else{ + if (!PayUtil.verify(PayUtil.createLinkString(map), (String) map.get("sign"), wxPayConfig.getMchKey(), "utf-8")) { log.info("\n微信支付回调-验签失败"); - }*/ + resXml = "" + "" + + "" + " "; + return; + } log.info("\n微信支付回调-支付成功"); //out_trade_no_array暂不处理 String outTradeNo = (String) map.get("out_trade_no"); - MemberTradeRecord dbMemberTradeRecord = memberTradeRecordFeignApi.selectByOutTradeNo(outTradeNo).getData(); - if(dbMemberTradeRecord == null){ - log.error("该商户单号不存在,回调逻辑处理失败"); - return; - } - //为防止微信重复回调,需要对用户交易记录的状态进行判断 - if(dbMemberTradeRecord.getStatus() != Quantity.INT_1){ - log.error("微信重复回调,商户单号为" + outTradeNo); + // Redis 分布式锁 - 幂等控制 + 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; } - String transactionId = (String) map.get("transaction_id"); - //补填交易单号(支付平台的订单号),将交易状态改为支付成功 - MemberTradeRecord updateMemberTradeRecord = new MemberTradeRecord(); - updateMemberTradeRecord.setId(dbMemberTradeRecord.getId()); - updateMemberTradeRecord.setTradeNo(transactionId); - updateMemberTradeRecord.setStatus(Quantity.INT_2); - updateMemberTradeRecord.setUpdateTime(new Date()); - memberTradeRecordFeignApi.updateByPrimaryKeySelective(updateMemberTradeRecord); - - if(dbMemberTradeRecord.getType() == Quantity.INT_1){ - //交易类型为订单付款 - orderService.paymentNotify(outTradeNo); - - }else if(dbMemberTradeRecord.getType() == Quantity.INT_2){ - //交易类型为会员充值 - vipRechargeRecordFeignApi.updateByPayNotify(outTradeNo); - - }else if(dbMemberTradeRecord.getType() == Quantity.INT_3){ - //交易类型为自取订单改为配送 - orderService.paymentNotifyOfChangeToDelivery(outTradeNo); - - }else if(dbMemberTradeRecord.getType() == Quantity.INT_6){ - //交易类型为积分商城订单付款 - pointsMallOrderFeignApi.paymentNotify(outTradeNo); - } + try { + MemberTradeRecord dbMemberTradeRecord = memberTradeRecordFeignApi.selectByOutTradeNo(outTradeNo).getData(); + if(dbMemberTradeRecord == null){ + log.error("该商户单号不存在,回调逻辑处理失败"); + return; + } + //为防止微信重复回调,需要对用户交易记录的状态进行判断 + if(dbMemberTradeRecord.getStatus() != Quantity.INT_1){ + log.error("微信重复回调,商户单号为" + outTradeNo); + return; + } - //通知微信服务器已经支付成功 - resXml = "" + "" - + "" + " "; + String transactionId = (String) map.get("transaction_id"); + //补填交易单号(支付平台的订单号),将交易状态改为支付成功 + MemberTradeRecord updateMemberTradeRecord = new MemberTradeRecord(); + updateMemberTradeRecord.setId(dbMemberTradeRecord.getId()); + updateMemberTradeRecord.setTradeNo(transactionId); + updateMemberTradeRecord.setStatus(Quantity.INT_2); + updateMemberTradeRecord.setUpdateTime(new Date()); + memberTradeRecordFeignApi.updateByPrimaryKeySelective(updateMemberTradeRecord); + + if(dbMemberTradeRecord.getType() == Quantity.INT_1){ + //交易类型为订单付款 + orderService.paymentNotify(outTradeNo); + + }else if(dbMemberTradeRecord.getType() == Quantity.INT_2){ + //交易类型为会员充值 + vipRechargeRecordFeignApi.updateByPayNotify(outTradeNo); + + }else if(dbMemberTradeRecord.getType() == Quantity.INT_3){ + //交易类型为自取订单改为配送 + orderService.paymentNotifyOfChangeToDelivery(outTradeNo); + + }else if(dbMemberTradeRecord.getType() == Quantity.INT_6){ + //交易类型为积分商城订单付款 + pointsMallOrderFeignApi.paymentNotify(outTradeNo); + } + + //通知微信服务器已经支付成功 + resXml = "" + "" + + "" + " "; + } finally { + // 业务成功,锁保留到自然过期(3 分钟),防止微信短期并发重试 + } } else { resXml = "" + "" @@ -534,13 +553,12 @@ public void refundSuccessNotify(HttpServletRequest request, HttpServletResponse String returnCode = (String) map.get("return_code"); if ("SUCCESS".equals(returnCode)) { //验证签名是否正确 - //支付回调这里不需要验证签名是否正确,目前回调的签名验证报签名错误 - - /*if (PayUtil.verify(PayUtil.createLinkString(map), (String) map.get("sign"), wxPayConfig.getMchKey(), "utf-8")) { - - }else{ + if (!PayUtil.verify(PayUtil.createLinkString(map), (String) map.get("sign"), wxPayConfig.getMchKey(), "utf-8")) { log.info("\n微信退款回调-验签失败"); - }*/ + resXml = "" + "" + + "" + " "; + return; + } log.info("\n微信退款回调-支付成功"); log.debug("\n返回报文:" + map); @@ -555,36 +573,42 @@ public void refundSuccessNotify(HttpServletRequest request, HttpServletResponse //out_trade_no_array暂不处理 String outTradeNo = (String) map.get("out_trade_no"); - MemberTradeRecord dbMemberTradeRecord = memberTradeRecordFeignApi.selectByOutTradeNo(outTradeNo).getData(); - if(dbMemberTradeRecord == null){ - log.error("该商户单号不存在,回调逻辑处理失败"); - return; - } - //为防止微信重复回调,需要对用户交易记录的状态进行判断 - if(dbMemberTradeRecord.getStatus() != Quantity.INT_1){ - log.error("微信重复回调,商户单号为" + outTradeNo); + // Redis 分布式锁 - 幂等控制 + 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; } - String transactionId = (String) map.get("transaction_id"); - //补填交易单号(支付平台的订单号),将交易状态改为支付成功 - MemberTradeRecord updateMemberTradeRecord = new MemberTradeRecord(); - updateMemberTradeRecord.setId(dbMemberTradeRecord.getId()); - updateMemberTradeRecord.setTradeNo(transactionId); - updateMemberTradeRecord.setStatus(Quantity.INT_2); - updateMemberTradeRecord.setUpdateTime(new Date()); - memberTradeRecordFeignApi.updateByPrimaryKeySelective(updateMemberTradeRecord); + try { + MemberTradeRecord dbMemberTradeRecord = memberTradeRecordFeignApi.selectByOutTradeNo(outTradeNo).getData(); + if(dbMemberTradeRecord == null){ + log.error("该商户单号不存在,退款回调逻辑处理失败"); + return; + } + //退款回调时交易记录应为已支付状态(INT_2) + if(dbMemberTradeRecord.getStatus() != Quantity.INT_2){ + log.error("退款回调-交易记录状态异常,当前状态={},商户单号={}", dbMemberTradeRecord.getStatus(), outTradeNo); + resXml = "" + "" + + "" + " "; + return; + } - //交易类型为订单付款 - if(dbMemberTradeRecord.getType() == Quantity.INT_1){ - orderService.paymentNotify(outTradeNo); - }else if(dbMemberTradeRecord.getType() == Quantity.INT_3){ - orderService.paymentNotifyOfChangeToDelivery(outTradeNo); - } + //交易类型为订单付款/自取改配送,执行退款处理 + if(dbMemberTradeRecord.getType() == Quantity.INT_1){ + orderService.refundMerchantBalance(outTradeNo); + }else if(dbMemberTradeRecord.getType() == Quantity.INT_3){ + orderService.refundMerchantBalance(outTradeNo); + } - //通知微信服务器已经退款成功 - resXml = "" + "" - + "" + " "; + //通知微信服务器已经退款成功 + resXml = "" + "" + + "" + " "; + } finally { + // 业务成功,锁保留到自然过期 + } } else { resXml = "" + "" diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/distributed_transaction/DR_OrderController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/distributed_transaction/DR_OrderController.java index 05cbd83..5146932 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/distributed_transaction/DR_OrderController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/distributed_transaction/DR_OrderController.java @@ -4,7 +4,8 @@ import com.siam.package_order.entity.Order; import com.siam.package_order.model.param.OrderParam; import com.siam.package_order.service.OrderService; -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.apache.rocketmq.client.exception.MQBrokerException; import org.apache.rocketmq.client.exception.MQClientException; @@ -16,13 +17,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; +import jakarta.annotation.Resource; @Slf4j @RestController @RequestMapping(value = "/rest/member/pointsMall/order") @Transactional(rollbackFor = Exception.class) -@Api(tags = "订单模块相关接口", description = "OrderController") +@Tag(name = "订单模块相关接口", description = "OrderController") public class DR_OrderController { @Resource(name = "seata_OrderServiceImpl") diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/merchant/MerchantAppraiseController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/merchant/MerchantAppraiseController.java index b348c5c..a4673f2 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/merchant/MerchantAppraiseController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/merchant/MerchantAppraiseController.java @@ -14,7 +14,7 @@ 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; /** diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/merchant/MerchantReplyController.java b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/merchant/MerchantReplyController.java index b732ae2..69e190f 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/controller/merchant/MerchantReplyController.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/controller/merchant/MerchantReplyController.java @@ -15,7 +15,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * 商家端回复接口 diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/feign/OrderFeignProvider.java b/siam-order/order-provider/src/main/java/com/siam/package_order/feign/OrderFeignProvider.java index 44ac4cb..c8039f6 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/feign/OrderFeignProvider.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/feign/OrderFeignProvider.java @@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.math.BigDecimal; import java.util.Date; import java.util.Map; diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/model/dto/OrderPaySuccessMessage.java b/siam-order/order-provider/src/main/java/com/siam/package_order/model/dto/OrderPaySuccessMessage.java new file mode 100644 index 0000000..7d421ad --- /dev/null +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/model/dto/OrderPaySuccessMessage.java @@ -0,0 +1,19 @@ +package com.siam.package_order.model.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 支付成功事务消息体 + */ +@Data +public class OrderPaySuccessMessage implements Serializable { + private Integer orderId; + private String orderNo; + private Integer shopId; + private Integer memberId; + private Integer shoppingWay; + private BigDecimal actualPrice; +} diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/mq_consumer/OrderConsumer.java b/siam-order/order-provider/src/main/java/com/siam/package_order/mq_consumer/OrderConsumer.java index 38d6d2d..21da405 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/mq_consumer/OrderConsumer.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/mq_consumer/OrderConsumer.java @@ -10,7 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.Resource; +import jakarta.annotation.Resource; @Component @RocketMQMessageListener(consumerGroup = "orderConsumerGroup", topic = "TID_COMMON") diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/mq_listener/internal/OrderTransactionListener.java b/siam-order/order-provider/src/main/java/com/siam/package_order/mq_listener/internal/OrderTransactionListener.java index 92e2d14..a91c7d7 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/mq_listener/internal/OrderTransactionListener.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/mq_listener/internal/OrderTransactionListener.java @@ -1,59 +1,60 @@ package com.siam.package_order.mq_listener.internal; -import com.alibaba.fastjson.JSONObject; -import com.siam.package_order.entity.TransactionLog; -import com.siam.package_order.model.param.OrderParam; +import com.alibaba.fastjson.JSON; +import com.siam.package_common.constant.Quantity; +import com.siam.package_order.entity.Order; +import com.siam.package_order.mapper.OrderMapper; +import com.siam.package_order.model.dto.OrderPaySuccessMessage; import com.siam.package_order.service.OrderService; -import com.siam.package_order.service_impl.TransactionLogService; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.producer.LocalTransactionState; import org.apache.rocketmq.client.producer.TransactionListener; import org.apache.rocketmq.common.message.Message; import org.apache.rocketmq.common.message.MessageExt; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; -import javax.annotation.Resource; - +/** + * 支付成功事务消息监听器 + * executeLocalTransaction: 执行下游异步通知链路(公众号消息、语音提醒、打印) + * checkLocalTransaction: 回查订单支付状态,确认事务是否应提交 + */ @Component @Slf4j public class OrderTransactionListener implements TransactionListener { - @Resource(name = "rocketMQ_OrderServiceImpl") - private OrderService orderService; + @Autowired + private OrderMapper orderMapper; + @Lazy @Autowired - private TransactionLogService transactionLogService; + private OrderService orderService; @Override public LocalTransactionState executeLocalTransaction(Message message, Object o) { - log.info("[订单服务] 开始执行本地事务...."); - LocalTransactionState state; - //执行本地事务 + log.info("[订单服务] 开始执行支付成功本地事务,transId={}", message.getTransactionId()); try { - OrderParam param = JSONObject.parseObject(new String(message.getBody()), OrderParam.class); - orderService.insertByMQ(param, message.getTransactionId()); - state = LocalTransactionState.COMMIT_MESSAGE; - log.info("[订单服务] 本地事务已提交。{}", message.getTransactionId()); + OrderPaySuccessMessage msg = JSON.parseObject(new String(message.getBody()), OrderPaySuccessMessage.class); + orderService.executePaymentNotify(msg.getOrderId()); + log.info("[订单服务] 支付成功本地事务执行完成,transId={}", message.getTransactionId()); + return LocalTransactionState.COMMIT_MESSAGE; } catch (Exception e) { - log.error("[订单服务] 执行本地事务失败。{}", e.getMessage()); - state = LocalTransactionState.ROLLBACK_MESSAGE; - e.printStackTrace(); + log.error("[订单服务] 支付成功本地事务执行失败,{}", e.getMessage(), e); + return LocalTransactionState.ROLLBACK_MESSAGE; } - return state; } @Override public LocalTransactionState checkLocalTransaction(MessageExt messageExt) { - log.info("[订单服务] 开始回查本地事务...."); - LocalTransactionState state; - //如果本地事务存在,则事务提交成功 - TransactionLog transactionLog = transactionLogService.getById(messageExt.getTransactionId()); - if(transactionLog != null){ - state = LocalTransactionState.COMMIT_MESSAGE; - }else{ - state = LocalTransactionState.ROLLBACK_MESSAGE; + log.info("[订单服务] 开始回查支付本地事务,transId={}", messageExt.getTransactionId()); + OrderPaySuccessMessage msg = JSON.parseObject(new String(messageExt.getBody()), OrderPaySuccessMessage.class); + Order dbOrder = orderMapper.selectById(msg.getOrderId()); + if (dbOrder != null && (dbOrder.getStatus() == Quantity.INT_2 || dbOrder.getStatus() == Quantity.INT_4)) { + log.info("[订单服务] 回查确认:订单已支付,状态={}", dbOrder.getStatus()); + return LocalTransactionState.COMMIT_MESSAGE; } - return state; + log.warn("[订单服务] 回查失败:订单未支付或不存在,orderId={}", msg.getOrderId()); + return LocalTransactionState.ROLLBACK_MESSAGE; } -} \ No newline at end of file +} diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/mq_producer/internal/TransactionProducer.java b/siam-order/order-provider/src/main/java/com/siam/package_order/mq_producer/internal/TransactionProducer.java index 0335aa5..51f05dd 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/mq_producer/internal/TransactionProducer.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/mq_producer/internal/TransactionProducer.java @@ -6,9 +6,10 @@ import org.apache.rocketmq.client.producer.TransactionSendResult; import org.apache.rocketmq.common.message.Message; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -20,6 +21,7 @@ public class TransactionProducer { private TransactionMQProducer producer; + @Lazy @Autowired private OrderTransactionListener orderTransactionListener; diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/service/CommonService.java b/siam-order/order-provider/src/main/java/com/siam/package_order/service/CommonService.java index e793f72..6ea10d9 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/service/CommonService.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/service/CommonService.java @@ -11,11 +11,6 @@ public interface CommonService { */ BigDecimal selectDeliveryFee(BigDecimal lngA, BigDecimal latA, Integer shopId); - /** - * 计算订单配送费 - */ - BigDecimal selectDeliveryFee(String addressStr, Integer shopId); - /** * 计算两地的距离 / 用户当前定位与平台各店铺的距离 */ diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/service/OrderService.java b/siam-order/order-provider/src/main/java/com/siam/package_order/service/OrderService.java index d120128..99de54e 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/service/OrderService.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/service/OrderService.java @@ -32,8 +32,6 @@ public interface OrderService extends IService { * @return * @author 暹罗 */ - Order insertByMQ(OrderParam param, String transId) throws InterruptedException, RemotingException, MQClientException, MQBrokerException; - void cancelOrderByUnPaid(OrderParam param); void cancelOrderNoReason(OrderParam param) throws IOException; diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/CommonServiceImpl.java b/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/CommonServiceImpl.java index a513d7e..8f8b276 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/CommonServiceImpl.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/CommonServiceImpl.java @@ -81,11 +81,6 @@ public BigDecimal selectDeliveryFee(BigDecimal lngA, BigDecimal latA, Integer sh return deliveryFee; } - @Override - public BigDecimal selectDeliveryFee(String addressStr, Integer shopId) { - return null; - } - @Override public TravelingDistanceVo selectTravelingDistance(BigDecimal lngA, BigDecimal latA, BigDecimal lngB, BigDecimal latB) { TravelingDistanceVo travelingDistanceVo = new TravelingDistanceVo(); diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/OrderServiceImpl.java b/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/OrderServiceImpl.java index fda917c..1df8f9c 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/OrderServiceImpl.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/OrderServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.seata.spring.annotation.GlobalTransactional; import com.siam.package_common.constant.BusinessType; import com.siam.package_common.constant.Quantity; import com.siam.package_common.constant.RocketMQConst; @@ -67,9 +68,10 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.io.IOException; import java.math.BigDecimal; import java.text.ParseException; @@ -166,6 +168,7 @@ public class OrderServiceImpl extends ServiceImpl implements @Autowired private OrderRefundProcessService orderRefundProcessService; + @Lazy @Autowired private WxPayService wxPayService; @@ -198,6 +201,7 @@ public void delete(OrderParam param){ orderMapper.updateById(updateOrder); } + @GlobalTransactional(name = "siam-order-create", rollbackFor = Exception.class) public Order insert(OrderParam param) { Member loginMember = memberSessionManager.getSession(TokenUtil.getToken()); @@ -367,8 +371,8 @@ private void saveOrderDetail(List orderDetailList, Order dbOrder, b } } - // 减少商品库存 (规格的库存该怎么去变化) - /*goodsService.decreaseStock(goodsId, number);*/ + // 减少商品库存 + goodsFeignApi.decreaseStock(goodsId, number); } } @@ -417,7 +421,7 @@ private String getOrderNo() { log.debug("\n获取订单编号..."); LambdaQueryWrapper orderLambdaQueryWrapper = new LambdaQueryWrapper<>(); orderLambdaQueryWrapper.eq(Order::getOrderNo, orderNo); - int result = orderMapper.selectCount(orderLambdaQueryWrapper); + long result = orderMapper.selectCount(orderLambdaQueryWrapper); if (result > 0) { orderNo = GenerateNo.getOrderNo(); } else { @@ -755,11 +759,6 @@ private void validateOrder(OrderParam param, Member loginMember) { } - @Override - public Order insertByMQ(OrderParam param, String transId) throws InterruptedException, RemotingException, MQClientException, MQBrokerException { - return null; - } - @Override public void cancelOrderByUnPaid(OrderParam param) { Member loginMember = memberSessionManager.getSession(TokenUtil.getToken()); @@ -931,16 +930,16 @@ private OrderRefund insertOrderRefundByNoReason(OrderParam param, Order dbOrder) } private void refundRestoreStock(int orderId) { -// //查询订单对应的订单商品详情数据 -// List orderDetailList = orderDetailService.selectByOrderId(orderId); -// -// //恢复订单对应的商品库存 (对应规格的库存怎么修改) -// for(OrderDetail orderDetail : orderDetailList){ -// int goodsId = orderDetail.getGoodsId(); -// int number = orderDetail.getNumber(); -// //增加商品库存 -// // goodsFeignApi.increaseStock(goodsId, number); -// } + //查询订单对应的订单商品详情数据 + List orderDetailList = orderDetailService.selectByOrderId(orderId); + + //恢复订单对应的商品库存 + for(OrderDetail orderDetail : orderDetailList){ + int goodsId = orderDetail.getGoodsId(); + int number = orderDetail.getNumber(); + //增加商品库存 + goodsFeignApi.increaseStock(goodsId, number); + } } @@ -1587,46 +1586,30 @@ public void paymentNotify(String outTradeNo) throws IOException, InterruptedExce return; } - Setting setting = settingFeignApi.selectCurrent().getData(); - - Shop dbShop = shopFeignApi.selectByPrimaryKey(dbOrder.getShopId()).getData(); - List orderDetailList = orderDetailService.selectByOrderId(dbOrder.getId()); - Member dbMember = memberFeignApi.selectByPrimaryKey(dbOrder.getMemberId()).getData(); - - Merchant dbMerchant = merchantFeignApi.selectByPrimaryKey(dbShop.getMerchantId()).getData(); - - // 1、修改订单状态 + // 1、修改订单状态(本地事务) handleOrderStatus(dbOrder, null); - // 6、处理商品信息 + // 2、更新商品销量(跨服务调用) handleGoodsInfo(orderDetailList); - // TODO - 插入平台抽佣账单记录 - - // todo - 发送微信公众平台消息给用户 - - // 7、发送微信公众平台消息给商家 - sendWxPublicPlatformMessageToMerchant(dbOrder, dbShop, orderDetailList); - - // 8、给商家端进行语音提醒、订单打印 - audioAndLocalPrint(dbShop, dbMerchant); - - // 9、打印小票 - basicPrintOrderReceipt(dbOrder, null, dbShop, orderDetailList); - - /*//加入MQ延时队列,订单支付超过1个小时 且 订单未取消/未申请退款,则将订单修改为已完成 - Message message01 = new Message("TID_COMMON", "AUTO_COMPLETED_ORDER", JSON.toJSONString(dbOrder).getBytes()); - message01.setDelayTimeLevel(RocketMQConst.DELAY_TIME_LEVEL_1H); - RocketMQTemplate rocketMQTemplate = applicationContext.getBean("rocketMQTemplate", RocketMQTemplate.class); - rocketMQTemplate.getProducer().send(message01);*/ - - /*//加入MQ延时队列,订单支付超过10分钟,状态还是处于待处理、待配送,则给与商家中心PC端订单即将超时语音提醒 - Message message02 = new Message("TID_COMMON", "REMIND_OVERTIME_ORDER", JSON.toJSONString(dbOrder).getBytes()); - message02.setDelayTimeLevel(RocketMQConst.DELAY_TIME_LEVEL_10M); - RocketMQTemplate rocketMQTemplate = applicationContext.getBean("rocketMQTemplate", RocketMQTemplate.class); - rocketMQTemplate.getProducer().send(message02);*/ + // 3、发送事务半消息,异步解耦下游通知链路 + try { + OrderPaySuccessMessage message = new OrderPaySuccessMessage(); + message.setOrderId(dbOrder.getId()); + message.setOrderNo(dbOrder.getOrderNo()); + message.setShopId(dbOrder.getShopId()); + message.setMemberId(dbOrder.getMemberId()); + message.setShoppingWay(dbOrder.getShoppingWay()); + message.setActualPrice(dbOrder.getActualPrice()); + TransactionProducer transactionProducer = applicationContext.getBean(TransactionProducer.class); + transactionProducer.send("ORDER_PAY_SUCCESS_TOPIC", JSON.toJSONString(message)); + log.info("支付成功事务消息已发送,订单号={}", outTradeNo); + } catch (Exception e) { + log.error("发送支付成功事务消息失败,订单号={}", outTradeNo, e); + // 不影响主流程,本地订单状态已更新 + } } private void handleCommission(Order dbOrder, Setting setting, Member dbMember) { @@ -2425,7 +2408,7 @@ public Map selectTabNumber(OrderParam param) { wrapper.in(Order::getStatus, statusList); wrapper.eq(Order::getMemberId, loginMember.getId()); wrapper.eq(Order::getIsDeleted, false); - int waitPaymentNumber = orderMapper.selectCount(wrapper); + long waitPaymentNumber = orderMapper.selectCount(wrapper); //待收货 4=待配送(已处理) 5=已配送 statusList = new ArrayList<>(); @@ -2435,7 +2418,7 @@ public Map selectTabNumber(OrderParam param) { wrapper.in(Order::getStatus, statusList); wrapper.eq(Order::getMemberId, loginMember.getId()); wrapper.eq(Order::getIsDeleted, false); - int waitReceivedNumber = orderMapper.selectCount(wrapper); + long waitReceivedNumber = orderMapper.selectCount(wrapper); //待自提 2=待处理 3=待自取(已处理) statusList = new ArrayList<>(); @@ -2445,7 +2428,7 @@ public Map selectTabNumber(OrderParam param) { wrapper.in(Order::getStatus, statusList); wrapper.eq(Order::getMemberId, loginMember.getId()); wrapper.eq(Order::getIsDeleted, false); - int waitPickedUp = orderMapper.selectCount(wrapper); + int waitPickedUp = orderMapper.selectCount(wrapper).intValue(); //退款/售后 状态处于7=售后处理中 8=已退款(废弃选项) statusList = new ArrayList<>(); @@ -2455,7 +2438,7 @@ public Map selectTabNumber(OrderParam param) { wrapper.in(Order::getStatus, statusList); wrapper.eq(Order::getMemberId, loginMember.getId()); wrapper.eq(Order::getIsDeleted, false); - int afterSalesNumber = orderMapper.selectCount(wrapper); + int afterSalesNumber = orderMapper.selectCount(wrapper).intValue(); Map map = new HashMap(); map.put("waitPaymentNumber", waitPaymentNumber); @@ -2484,28 +2467,28 @@ public Map selectAllTabWaitHandleNum(OrderParam param) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Order::getShoppingWay, Quantity.INT_1); wrapper.eq(Order::getStatus, Quantity.INT_2); - int waitHandleNum = orderMapper.selectCount(wrapper); + int waitHandleNum = orderMapper.selectCount(wrapper).intValue(); dataMap.put("waitHandleNum", waitHandleNum); //自取订单-待自取订单 wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Order::getShoppingWay, Quantity.INT_1); wrapper.eq(Order::getStatus, Quantity.INT_3); - int waitPickUpNum = orderMapper.selectCount(wrapper); + int waitPickUpNum = orderMapper.selectCount(wrapper).intValue(); dataMap.put("waitPickUpNum", waitPickUpNum); //外卖订单-待配送订单 wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Order::getShoppingWay, Quantity.INT_2); wrapper.eq(Order::getStatus, Quantity.INT_4); - int waitDeliveryNum = orderMapper.selectCount(wrapper); + int waitDeliveryNum = orderMapper.selectCount(wrapper).intValue(); dataMap.put("waitDeliveryNum", waitDeliveryNum); //外卖订单-已配送订单 wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Order::getShoppingWay, Quantity.INT_2); wrapper.eq(Order::getStatus, Quantity.INT_5); - int deliveredNum = orderMapper.selectCount(wrapper); + int deliveredNum = orderMapper.selectCount(wrapper).intValue(); dataMap.put("deliveredNum", deliveredNum); return dataMap; } @@ -3052,4 +3035,31 @@ public void allocatingFunds(Order dbOrder) { updateOrder.setIsPayToRiderFrozen(true); orderMapper.updateById(updateOrder); } + + /** + * 支付成功后的下游通知链路(由 RocketMQ 事务消息的本地事务回调触发) + * 包含:商家公众号通知、语音提醒、小票打印 + */ + public void executePaymentNotify(Integer orderId) { + Order dbOrder = orderMapper.selectById(orderId); + if (dbOrder == null) { + log.error("支付通知-订单不存在,orderId={}", orderId); + return; + } + + Setting setting = settingFeignApi.selectCurrent().getData(); + Shop dbShop = shopFeignApi.selectByPrimaryKey(dbOrder.getShopId()).getData(); + List orderDetailList = orderDetailService.selectByOrderId(dbOrder.getId()); + Member dbMember = memberFeignApi.selectByPrimaryKey(dbOrder.getMemberId()).getData(); + Merchant dbMerchant = merchantFeignApi.selectByPrimaryKey(dbShop.getMerchantId()).getData(); + + // 发送微信公众平台消息给商家 + sendWxPublicPlatformMessageToMerchant(dbOrder, dbShop, orderDetailList); + + // 给商家端进行语音提醒、订单打印 + audioAndLocalPrint(dbShop, dbMerchant); + + // 打印小票 + basicPrintOrderReceipt(dbOrder, null, dbShop, orderDetailList); + } } \ No newline at end of file diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/RewardServiceImpl.java b/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/RewardServiceImpl.java index b331951..d754b99 100644 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/RewardServiceImpl.java +++ b/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/RewardServiceImpl.java @@ -89,14 +89,14 @@ public void giveInviterReward(Integer inviterId, BigDecimal commissionAmount, In wrapper.ne(Order::getId, orderId); wrapper.gt(Order::getCreateTime, vipRechargeRecord.getCreateTime()); wrapper.notIn(Order::getStatus, excludeStatusList); - Integer count = orderMapper.selectCount(wrapper); + Long count = orderMapper.selectCount(wrapper); //查询积分商城的符合订单数 PointsMallOrderParam pointsMallOrderExample = new PointsMallOrderParam(); pointsMallOrderExample.setCreateTimeGreaterThan(vipRechargeRecord.getCreateTime()); pointsMallOrderExample.setExcludeStatusList(excludeStatusList); int count_pointsMall = pointsMallOrderFeignApi.countByExample(pointsMallOrderExample).getData(); - int total_count = count + count_pointsMall; + int total_count = count.intValue() + count_pointsMall; if(total_count > 0){ //不是第一笔订单,进行近30天是否有消费的条件判断 //近30天外卖系统支付成功的订单数 @@ -105,7 +105,7 @@ public void giveInviterReward(Integer inviterId, BigDecimal commissionAmount, In param.setExcludeOrderId(orderId); param.setStartTime(DateUtilsExtend.getFrontDay(DateUtilsExtend.getDayEnd(), 30)); param.setEndTime(DateUtilsExtend.getDayEnd()); - count = this.orderMapper.selectCountPaid(param); + count = Long.valueOf(this.orderMapper.selectCountPaid(param)); count = count!=null ? count : 0; //近30天积分商城支付成功的订单数 @@ -115,7 +115,7 @@ public void giveInviterReward(Integer inviterId, BigDecimal commissionAmount, In pointsMallOrder.setEndTime(DateUtilsExtend.getDayEnd()); count_pointsMall = this.pointsMallOrderFeignApi.selectCountPaid(pointsMallOrder).getData(); - total_count = count + count_pointsMall; + total_count = count.intValue() + count_pointsMall; if(total_count == 0){ //TODO-可以建立一张表把这些信息存下来的 log.info("\n\nid为" + inviterId + "的邀请人在近30天内无消费,不给予佣金奖励"); @@ -218,13 +218,13 @@ public String selectCommissionReward(OrderParam param) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.gt(Order::getCreateTime, vipRechargeRecord.getCreateTime()); wrapper.notIn(Order::getStatus, excludeStatusList); - int count = orderMapper.selectCount(wrapper); + long count = orderMapper.selectCount(wrapper); //查询积分商城的符合订单数 PointsMallOrderParam pointsMallOrderExample = new PointsMallOrderParam(); pointsMallOrderExample.setCreateTimeGreaterThan(vipRechargeRecord.getCreateTime()); pointsMallOrderExample.setExcludeStatusList(excludeStatusList); int count_pointsMall = pointsMallOrderFeignApi.countByExample(pointsMallOrderExample).getData(); - int total_count = count + count_pointsMall; + int total_count = (int) count + count_pointsMall; if(total_count > 0){ //不是第一笔订单,进行近30天是否有消费的条件判断 //近30天外卖系统支付成功的订单数 @@ -240,7 +240,7 @@ public String selectCommissionReward(OrderParam param) { pointsMallOrder.setEndTime(DateUtilsExtend.getDayEnd()); count_pointsMall = this.pointsMallOrderFeignApi.selectCountPaid(pointsMallOrder).getData(); - total_count = count + count_pointsMall; + total_count = (int) count + count_pointsMall; if(total_count == 0){ //TODO-可以建立一张表把这些信息存下来的 /*text = "您在近30天内无消费,该笔订单完成后再次消费,您可得到"+ commissionAmount +"元返利";*/ diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/distributed_transaction/LocalMsg_OrderServiceImpl.java b/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/distributed_transaction/LocalMsg_OrderServiceImpl.java deleted file mode 100644 index a8f2483..0000000 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/distributed_transaction/LocalMsg_OrderServiceImpl.java +++ /dev/null @@ -1,616 +0,0 @@ -package com.siam.package_order.service_impl.internal.distributed_transaction; - -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.siam.package_common.util.RedisUtils; -import com.siam.package_goods.feign.ShoppingCartFeignApi; -import com.siam.package_order.entity.Order; -import com.siam.package_order.mapper.OrderMapper; -import com.siam.package_order.model.example.OrderExample; -import com.siam.package_order.model.param.OrderParam; -import com.siam.package_order.model.vo.OrderVo; -import com.siam.package_order.model.vo.OrderVo2; -import com.siam.package_order.service.OrderDetailService; -import com.siam.package_order.service.OrderService; -import com.siam.package_promotion.feign.CouponsMemberRelationFeignApi; -import com.siam.package_user.auth.cache.MemberSessionManager; -import com.siam.package_user.feign.DeliveryAddressFeignApi; -import com.siam.package_user.feign.MemberFeignApi; -import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.client.exception.MQBrokerException; -import org.apache.rocketmq.client.exception.MQClientException; -import org.apache.rocketmq.remoting.exception.RemotingException; -import org.apache.rocketmq.spring.core.RocketMQTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Service; - -import java.io.IOException; -import java.io.Serializable; -import java.math.BigDecimal; -import java.text.ParseException; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.function.Function; - -/** - * 分布式事务-本地消息表 - * - * @return - * @author 暹罗 - */ -@Slf4j -@Service -public class LocalMsg_OrderServiceImpl implements OrderService { - - public static final String USER_ORDER_TOKEN_PREFIX = "order:token:"; - - @Autowired - private OrderMapper orderMapper; - - @Autowired - private OrderDetailService orderDetailService; - - @Autowired - private MemberFeignApi memberFeignApi; - - @Autowired - private DeliveryAddressFeignApi deliveryAddressFeignApi; - - @Autowired - private MemberSessionManager memberSessionManager; - - @Autowired - private ShoppingCartFeignApi shoppingCartFeignApi; - - @Autowired - private CouponsMemberRelationFeignApi couponsMemberRelationFeignApi; - - @Autowired - private ApplicationContext applicationContext; - - @Autowired - private RedisUtils redisUtils; - - @Autowired - private RedisTemplate redisTemplate; - - @Override - public void delete(OrderParam param) { - - } - - @Override - public Order insert(OrderParam param) { -// //TODO(MARK) - 购物车下单、直接购买两种形式可以不拆分成两个接口 -// //TODO(MARK) - 系统默认免运费 -// param.setDeliveryFee(BigDecimal.ZERO); -// Member loginMember = memberSessionManager.getSession(TokenUtil.getToken()); -// Member dbMember = memberFeignApi.selectByPrimaryKey(loginMember.getId()).getData(); -// -//// //校验防重令牌是否正确 -- 保证该接口的幂等性 -//// String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end"; -//// Long result = (Long) redisTemplate.execute(new DefaultRedisScript(script, Long.class), Arrays.asList(USER_ORDER_TOKEN_PREFIX + loginMember.getId()), param.getOrderToken()); -//// if(result == 0){ -//// throw new StoneCustomerException("请勿重复提交"); -//// } -// -// //校验:如果是从购物车下单的 那么需要校验购物车数据是否存在 以及购物车数据是否属于当前登录用户 -// if(param.getShoppingCartIdList()!=null && !param.getShoppingCartIdList().isEmpty()){ -// int count = shoppingCartFeignApi.countByIdListAndMemberId(param.getShoppingCartIdList(), loginMember.getId()).getData(); -// if(count != param.getShoppingCartIdList().size()){ -// throw new StoneCustomerException("购物车数据异常,请刷新页面重新下单"); -// } -// } -// -// //根据收货地址id回写联系人信息 -// DeliveryAddress dbDeliveryAddress = deliveryAddressFeignApi.selectByPrimaryKey(param.getDeliveryAddressId()); -// if(dbDeliveryAddress == null){ -// throw new StoneCustomerException("该收货地址不存在"); -// } -// param.setContactRealname(dbDeliveryAddress.getRealname()); -// param.setContactPhone(dbDeliveryAddress.getPhone()); -// param.setContactProvince(dbDeliveryAddress.getProvince()); -// param.setContactCity(dbDeliveryAddress.getCity()); -// param.setContactArea(dbDeliveryAddress.getArea()); -// param.setContactStreet(dbDeliveryAddress.getStreet()); -// param.setContactSex(dbDeliveryAddress.getSex()); -// param.setContactHouseNumber(dbDeliveryAddress.getHouseNumber()); -// param.setContactLongitude(dbDeliveryAddress.getLongitude()); -// param.setContactLatitude(dbDeliveryAddress.getLatitude()); -// -//// //1、校验前端的实付款金额是否正确 -//// this.validatePrice(param); -// -// //生成订单编号 -// String orderNo = GenerateNo.getOrderNo(); -// //生成订单取餐号 -// Integer queueNo = getNextQueueNo(); -// //生成支付截止时间(五分钟内未付款的订单会被自动关闭) -// Date paymentDeadline = DateUtilsPlus.addMinutes(new Date(), Quantity.INT_5); -// -// //2、添加订单记录 -// Order insertOrder = new Order(); -// insertOrder.setMemberId(loginMember.getId()); -// insertOrder.setOrderNo(orderNo); -// insertOrder.setGoodsTotalQuantity(param.getGoodsTotalQuantity()); -// insertOrder.setGoodsTotalPrice(param.getGoodsTotalPrice()); -// insertOrder.setDeliveryFee(param.getDeliveryFee()); -// insertOrder.setActualPrice(param.getActualPrice()); -// insertOrder.setShoppingWay(Quantity.INT_2); -// insertOrder.setDeliveryAddressId(param.getDeliveryAddressId()); -// insertOrder.setContactRealname(param.getContactRealname()); -// insertOrder.setContactPhone(param.getContactPhone()); -// insertOrder.setContactProvince(param.getContactProvince()); -// insertOrder.setContactCity(param.getContactCity()); -// insertOrder.setContactArea(param.getContactArea()); -// insertOrder.setContactStreet(param.getContactStreet()); -// insertOrder.setContactSex(param.getContactSex()); -// insertOrder.setTradeId(null); -// insertOrder.setRemark(param.getRemark()); -// insertOrder.setDescription(param.getDescription()); -// insertOrder.setStatus(Quantity.INT_1); -// insertOrder.setOrderLogisticsId(null); -// insertOrder.setIsInvoice(false); -// insertOrder.setInvoiceId(null); -// insertOrder.setIsDeleted(false); -// insertOrder.setShopName(param.getShopName()); -// insertOrder.setShopAddress(param.getShopAddress()); -// insertOrder.setCancelReason(null); -// insertOrder.setPaymentDeadline(paymentDeadline); -// insertOrder.setCreateTime(new Date()); -// insertOrder.setUpdateTime(new Date()); -// insertOrder.setQueueNo(queueNo); -// insertOrder.setFullReductionRuleId(param.getFullReductionRuleId()); -// insertOrder.setFullReductionRuleDescription(param.getFullReductionRuleDescription()); -// insertOrder.setCouponsId(param.getCouponsId()); -// insertOrder.setCouponsMemberRelationId(param.getCouponsMemberRelationId()); -// insertOrder.setCouponsDescription(param.getCouponsDescription()); -// insertOrder.setLimitedPrice(param.getLimitedPrice()); -// insertOrder.setReducedPrice(param.getReducedPrice()); -// insertOrder.setCouponsDiscountPrice(param.getCouponsDiscountPrice()); -// insertOrder.setDeliveryWay(param.getDeliveryWay()); -// insertOrder.setIsPayToMerchant(false); -// insertOrder.setBeforeReducedDeliveryFee(param.getBeforeReducedDeliveryFee()); -// insertOrder.setContactHouseNumber(param.getContactHouseNumber()); -// insertOrder.setContactLongitude(param.getContactLongitude()); -// insertOrder.setContactLatitude(param.getContactLatitude()); -// insertOrder.setFirstGoodsMainImage(param.getFirstGoodsMainImage()); -// orderMapper.insert(insertOrder); -// -// //获取最新订单对象 -// Order dbOrder = orderMapper.selectById(insertOrder.getId()); -// -// //3、添加订单商品详情记录 -// for(OrderDetail orderDetail : param.getOrderDetailList()){ -// // 添加订单商品详情记录 -// OrderDetail insertDetail = new OrderDetail(); -// insertDetail.setOrderId(dbOrder.getId()); -// insertDetail.setGoodsId(orderDetail.getGoodsId()); -// insertDetail.setGoodsName(orderDetail.getGoodsName()); -// insertDetail.setMainImage(orderDetail.getMainImage()); -// insertDetail.setSpecList(orderDetail.getSpecList()); -// insertDetail.setPrice(orderDetail.getPrice()); -// insertDetail.setNumber(orderDetail.getNumber()); -// insertDetail.setSubtotal(orderDetail.getSubtotal()); -// if(orderDetail.getIsUsedCoupons() != null){ -// insertDetail.setIsUsedCoupons(orderDetail.getIsUsedCoupons()); -// insertDetail.setCouponsDiscountPrice(orderDetail.getCouponsDiscountPrice()); -// insertDetail.setAfterCouponsDiscountPrice(orderDetail.getPrice().subtract(orderDetail.getCouponsDiscountPrice())); -// } -// insertDetail.setIsDeleted(false); -// orderDetailService.insertSelective(insertDetail); -// -// //TODO - 减少商品库存 (规格的库存该怎么去变化) -// /*goodsFeignApi.decreaseStock(goodsId, number);*/ -// } -// -// //保存本地消息表 -// LocalMsg localMsg = new LocalMsg(); -// localMsg.setId(dbOrder.getId().toString()); -// localMsg.setContent(JSON.toJSONString(dbOrder)); -// localMsg.setStatus(0); -// localMsg.setSendTime(new Date()); -// List localMsgList = new ArrayList<>(); -// if(redisUtils.hasKey("localMsgList")){ -// localMsgList = (List) JsonUtils.toObject(redisUtils.get("localMsgList").toString(), List.class); -// } -// localMsgList.add(localMsg); -// redisUtils.set("localMsgList", localMsgList); -// -// //4、如果是从购物车下单的 那么下单成功后需要删除购物车数据 注意用批量删除 -// if(param.getShoppingCartIdList()!=null && param.getShoppingCartIdList().size()>0){ -// shoppingCartFeignApi.batchDeleteByIdList(param.getShoppingCartIdList()); -// } -// -// //5、修改是否为新用户标识 -// if(dbMember.getIsNewPeople()){ -// dbMember.setIsNewPeople(false); -// dbMember.setIsRemindNewPeople(false); -// memberFeignApi.updateByPrimaryKeySelective(dbMember); -// } -// -// //模拟程序出错 -//// int i = 10 / 0; -// -// //6、更新优惠卷的使用状态 -// if (param.getCouponsMemberRelationId() != null) { -// couponsMemberRelationFeignApi.updateCouponsUsed(param.getCouponsMemberRelationId(),true); -// } -// -// //加入MQ延时队列,检测并关闭超时未支付的订单,5分钟 -// Message message = new Message("TID_COMMON_MALL", "CLOSE_OVERDUE_ORDER", JSON.toJSONString(dbOrder).getBytes()); -// message.setDelayTimeLevel(RocketMQConst.DELAY_TIME_LEVEL_5M); -// RocketMQTemplate rocketMQTemplate = applicationContext.getBean("rocketMQTemplate", RocketMQTemplate.class); -// rocketMQTemplate.getProducer().send(message); -// -// return dbOrder; - - return null; - } - - @Override - public Order insertByMQ(OrderParam param, String transId) throws InterruptedException, RemotingException, MQClientException, MQBrokerException { - return null; - } - - @Override - public void cancelOrderByUnPaid(OrderParam param) { - - } - - @Override - public void cancelOrderNoReason(OrderParam param) throws IOException { - - } - - @Override - public void applyRefund(OrderParam param) throws IOException { - - } - - @Override - public void confirmReceipt(OrderParam param) { - - } - - @Override - public Order selectByPrimaryKey(Integer id) { - return null; - } - - @Override - public void updateByPrimaryKeySelective(Order record) { - - } - - @Override - public Page getListByPageWithAsc(OrderParam param) { - return null; - } - - @Override - public Page> getListByPageWithDesc(OrderParam param) { - return null; - } - - @Override - public Order selectByOrderNo(String orderNo) { - return null; - } - - @Override - public void closeOverdueOrder(Integer id) { - - } - - @Override - public void autoCompletedOrder(Integer id) { - - } - - @Override - public void printRceceipts(Integer id) { - - } - - @Override - public int batchUpdateIsPrintedTrue(List idList) { - return 0; - } - - @Override - public Integer getNextQueueNo() { - return null; - } - - @Override - public Page getListByTodayOrderWithAsc(OrderParam param) { - return null; - } - - @Override - public void paymentNotify(String outTradeNo) throws IOException, InterruptedException, RemotingException, MQClientException, MQBrokerException { - - } - - @Override - public void paymentNotifyOfChangeToDelivery(String changeToDeliveryOutTradeNo) { - - } - - @Override - public Map countOrder(OrderParam order) { - return null; - } - - @Override - public int selectLatelyMonthlySalesByShopId(Date startTime, Date endTime, Integer shopId) { - return 0; - } - - @Override - public BigDecimal selectSumMerchantIncome(OrderParam param) { - return null; - } - - @Override - public BigDecimal selectSumActualPrice(OrderParam param) { - return null; - } - - @Override - public int selectCountCompleted(OrderParam param) { - return 0; - } - - @Override - public int selectCountPaid(OrderParam param) { - return 0; - } - - @Override - public boolean getIsAllowCancelNoReason(OrderParam order) { - return false; - } - - @Override - public boolean getIsAllowApplyRefund(OrderParam order) { - return false; - } - - @Override - public Page getAfterSalesListByPageWithAsc(OrderParam param) { - return null; - } - - @Override - public void updatePayOrderFrozenBalanceOfMerchant() { - - } - - @Override - public void remindOvertimeOrder(Integer id) throws IOException { - - } - - @Override - public List> selectStatisticOrder(Integer shopId) { - return null; - } - - @Override - public String selectStartDateOrder(Integer shopId) { - return null; - } - - @Override - public int selectCountPayers(OrderParam param) { - return 0; - } - - @Override - public int selectCountOrderPeoples(OrderParam param) { - return 0; - } - - @Override - public void refundMerchantBalance(String out_trade_no) { - - } - - @Override - public Map selectSumField(OrderParam order) { - return null; - } - - @Override - public int selectCountUnCompleted(OrderParam order) { - return 0; - } - - @Override - public int selectCountWaitHandle(OrderParam order) { - return 0; - } - - @Override - public OrderVo selectById(OrderParam param) { - return null; - } - - @Override - public OrderVo2 selectRefundProcess(OrderParam param) { - return null; - } - - @Override - public Map selectTabNumber(OrderParam param) { - return null; - } - - @Override - public void batchUpdateIsPrintedTrue(OrderParam param) { - - } - - @Override - public Map selectAllTabWaitHandleNum(OrderParam param) { - return null; - } - - @Override - public List waitPrintOrderList(OrderParam param) { - return null; - } - - @Override - public void auditAfterSalesOrderByAdmin(OrderParam param) { - - } - - @Override - public void auditAfterSalesOrderByMerchant(OrderParam param) { - - } - - @Override - public Map statistic(OrderParam param) throws ParseException { - return null; - } - - @Override - public void printOrderReceipt(Order dbOrder, String printType) { - - } - - @Override - public void allocatingFunds(Order dbOrder) { - - } - - @Override - public boolean save(Order entity) { - return false; - } - - @Override - public boolean saveBatch(Collection entityList, int batchSize) { - return false; - } - - @Override - public boolean saveOrUpdateBatch(Collection entityList, int batchSize) { - return false; - } - - @Override - public boolean removeById(Serializable id) { - return false; - } - - @Override - public boolean removeByMap(Map columnMap) { - return false; - } - - @Override - public boolean remove(Wrapper queryWrapper) { - return false; - } - - @Override - public boolean removeByIds(Collection idList) { - return false; - } - - @Override - public boolean updateById(Order entity) { - return false; - } - - @Override - public boolean update(Order entity, Wrapper updateWrapper) { - return false; - } - - @Override - public boolean updateBatchById(Collection entityList, int batchSize) { - return false; - } - - @Override - public boolean saveOrUpdate(Order entity) { - return false; - } - - @Override - public Order getById(Serializable id) { - return null; - } - - @Override - public List listByIds(Collection idList) { - return null; - } - - @Override - public List listByMap(Map columnMap) { - return null; - } - - @Override - public Order getOne(Wrapper queryWrapper, boolean throwEx) { - return null; - } - - @Override - public Map getMap(Wrapper queryWrapper) { - return null; - } - - @Override - public V getObj(Wrapper queryWrapper, Function mapper) { - return null; - } - - @Override - public int count(Wrapper queryWrapper) { - return 0; - } - - @Override - public List list(Wrapper queryWrapper) { - return null; - } - - @Override - public > E page(E page, Wrapper queryWrapper) { - return null; - } - - @Override - public List> listMaps(Wrapper queryWrapper) { - return null; - } - - @Override - public List listObjs(Wrapper queryWrapper, Function mapper) { - return null; - } - - @Override - public >> E pageMaps(E page, Wrapper queryWrapper) { - return null; - } - - @Override - public BaseMapper getBaseMapper() { - return null; - } -} \ No newline at end of file diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/distributed_transaction/RocketMQ_OrderServiceImpl.java b/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/distributed_transaction/RocketMQ_OrderServiceImpl.java deleted file mode 100644 index eac07ea..0000000 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/distributed_transaction/RocketMQ_OrderServiceImpl.java +++ /dev/null @@ -1,689 +0,0 @@ -package com.siam.package_order.service_impl.internal.distributed_transaction; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.siam.package_common.util.RedisUtils; -import com.siam.package_goods.feign.GoodsFeignApi; -import com.siam.package_goods.feign.GoodsSpecificationOptionFeignApi; -import com.siam.package_goods.feign.ShoppingCartFeignApi; -import com.siam.package_order.controller.member.WxPayService; -import com.siam.package_order.entity.Order; -import com.siam.package_order.mapper.OrderMapper; -import com.siam.package_order.model.example.OrderExample; -import com.siam.package_order.model.param.OrderParam; -import com.siam.package_order.model.vo.OrderVo; -import com.siam.package_order.model.vo.OrderVo2; -import com.siam.package_order.mq_producer.internal.TransactionProducer; -import com.siam.package_order.service.*; -import com.siam.package_order.service_impl.TransactionLogService; -import com.siam.package_promotion.feign.CouponsFeignApi; -import com.siam.package_promotion.feign.CouponsGoodsRelationFeignApi; -import com.siam.package_promotion.feign.CouponsMemberRelationFeignApi; -import com.siam.package_promotion.feign.FullReductionRuleFeignApi; -import com.siam.package_user.auth.cache.MemberSessionManager; -import com.siam.package_user.feign.*; -import com.siam.package_user.feign.internal.VipRechargeRecordFeignApi; -import com.siam.package_util.feign.SettingFeignApi; -import com.siam.package_weixin_basic.service.WxNotifyService; -import com.siam.package_weixin_basic.service.WxPublicPlatformNotifyService; -import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.client.exception.MQBrokerException; -import org.apache.rocketmq.client.exception.MQClientException; -import org.apache.rocketmq.remoting.exception.RemotingException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.io.IOException; -import java.io.Serializable; -import java.math.BigDecimal; -import java.text.ParseException; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.function.Function; - -/** - * 分布式事务-RocketMQ事务消息 - * - * @return - * @author 暹罗 - */ -@Slf4j -@Service -public class RocketMQ_OrderServiceImpl implements OrderService { - - public static final String USER_ORDER_TOKEN_PREFIX = "order:token:"; - - @Autowired - private OrderMapper orderMapper; - - @Autowired - private OrderDetailService orderDetailService; - - @Autowired - private SettingFeignApi settingFeignApi; - - @Autowired - private MemberBillingRecordFeignApi memberBillingRecordFeignApi; - - @Autowired - private MemberFeignApi memberFeignApi; - - @Autowired - private MemberTradeRecordFeignApi memberTradeRecordFeignApi; - - @Autowired - private DeliveryAddressFeignApi deliveryAddressFeignApi; - - @Autowired - private WxNotifyService wxNotifyService; - - @Autowired - private WxPublicPlatformNotifyService wxPublicPlatformNotifyService; - - @Autowired - private OrderRefundService orderRefundService; - - @Autowired - private MemberInviteRelationFeignApi memberInviteRelationFeignApi; - - @Resource(name = "orderServiceImpl") - private OrderService orderService; - - @Autowired - private VipRechargeRecordFeignApi vipRechargeRecordFeignApi; - - @Autowired - private OrderRefundGoodsService orderRefundGoodsService; - - @Autowired - private OrderRefundProcessService orderRefundProcessService; - - @Autowired - private WxPayService wxPayService; - - @Autowired - private MemberSessionManager memberSessionManager; - - @Autowired - private CommonService commonService; - - @Autowired - private ShoppingCartFeignApi shoppingCartFeignApi; - - @Autowired - private GoodsFeignApi goodsFeignApi; - - @Autowired - private GoodsSpecificationOptionFeignApi goodsSpecificationOptionFeignApi; - - @Autowired - private CouponsMemberRelationFeignApi couponsMemberRelationFeignApi; - - @Autowired - private CouponsFeignApi couponsFeignApi; - - @Autowired - private CouponsGoodsRelationFeignApi couponsGoodsRelationFeignApi; - - @Autowired - private FullReductionRuleFeignApi fullReductionRuleFeignApi; - - @Autowired - private ApplicationContext applicationContext; - - @Autowired - private RedisUtils redisUtils; - - @Autowired - private RedisTemplate redisTemplate; - - @Autowired - private TransactionProducer pointsMallTransactionProducer; - - @Autowired - private TransactionLogService transactionLogService; - - @Override - public void delete(OrderParam param) { - - } - - @Override - public Order insert(OrderParam param) { - try { - pointsMallTransactionProducer.send("order", JSON.toJSONString(param)); - } catch (MQClientException e) { - e.printStackTrace(); - } - //TODO - 返回订单信息(订单id) - return null; - } - - @Override - public Order insertByMQ(OrderParam param, String transId) throws MQClientException, RemotingException, MQBrokerException, InterruptedException { -// //TODO(MARK) - 购物车下单、直接购买两种形式可以不拆分成两个接口 -// //TODO(MARK) - 系统默认免运费 -// param.setDeliveryFee(BigDecimal.ZERO); -//// Member loginMember = memberSessionManager.getSession(TokenUtil.getToken()); -//// Member dbMember = memberFeignApi.selectByPrimaryKey(loginMember.getId()); -// -// Member dbMember = memberFeignApi.selectByPrimaryKey(2).getData(); -// -//// //校验防重令牌是否正确 -- 保证该接口的幂等性 -//// String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end"; -//// Long result = (Long) redisTemplate.execute(new DefaultRedisScript(script, Long.class), Arrays.asList(USER_ORDER_TOKEN_PREFIX + loginMember.getId()), param.getOrderToken()); -//// if(result == 0){ -//// throw new StoneCustomerException("请勿重复提交"); -//// } -// -// //校验:如果是从购物车下单的 那么需要校验购物车数据是否存在 以及购物车数据是否属于当前登录用户 -// if(param.getShoppingCartIdList()!=null && !param.getShoppingCartIdList().isEmpty()){ -// int count = shoppingCartFeignApi.countByIdListAndMemberId(param.getShoppingCartIdList(), dbMember.getId()).getData(); -// if(count != param.getShoppingCartIdList().size()){ -// throw new StoneCustomerException("购物车数据异常,请刷新页面重新下单"); -// } -// } -// -// //根据收货地址id回写联系人信息 -// DeliveryAddress dbDeliveryAddress = deliveryAddressFeignApi.selectByPrimaryKey(param.getDeliveryAddressId()); -// if(dbDeliveryAddress == null){ -// throw new StoneCustomerException("该收货地址不存在"); -// } -// param.setContactRealname(dbDeliveryAddress.getRealname()); -// param.setContactPhone(dbDeliveryAddress.getPhone()); -// param.setContactProvince(dbDeliveryAddress.getProvince()); -// param.setContactCity(dbDeliveryAddress.getCity()); -// param.setContactArea(dbDeliveryAddress.getArea()); -// param.setContactStreet(dbDeliveryAddress.getStreet()); -// param.setContactSex(dbDeliveryAddress.getSex()); -// param.setContactHouseNumber(dbDeliveryAddress.getHouseNumber()); -// param.setContactLongitude(dbDeliveryAddress.getLongitude()); -// param.setContactLatitude(dbDeliveryAddress.getLatitude()); -// -// //1、校验前端的实付款金额是否正确 -// this.validatePrice(param); -// -// //生成订单编号 -// String orderNo = GenerateNo.getOrderNo(); -// //生成订单取餐号 -// Integer queueNo = getNextQueueNo(); -// //生成支付截止时间(五分钟内未付款的订单会被自动关闭) -// Date paymentDeadline = DateUtilsPlus.addMinutes(new Date(), Quantity.INT_5); -// -// //2、添加订单记录 -// Order insertOrder = new Order(); -// insertOrder.setMemberId(dbMember.getId()); -// insertOrder.setOrderNo(orderNo); -// insertOrder.setGoodsTotalQuantity(param.getGoodsTotalQuantity()); -// insertOrder.setGoodsTotalPrice(param.getGoodsTotalPrice()); -// insertOrder.setDeliveryFee(param.getDeliveryFee()); -// insertOrder.setActualPrice(param.getActualPrice()); -// insertOrder.setShoppingWay(Quantity.INT_2); -// insertOrder.setDeliveryAddressId(param.getDeliveryAddressId()); -// insertOrder.setContactRealname(param.getContactRealname()); -// insertOrder.setContactPhone(param.getContactPhone()); -// insertOrder.setContactProvince(param.getContactProvince()); -// insertOrder.setContactCity(param.getContactCity()); -// insertOrder.setContactArea(param.getContactArea()); -// insertOrder.setContactStreet(param.getContactStreet()); -// insertOrder.setContactSex(param.getContactSex()); -// insertOrder.setTradeId(null); -// insertOrder.setRemark(param.getRemark()); -// insertOrder.setDescription(param.getDescription()); -// insertOrder.setStatus(Quantity.INT_1); -// insertOrder.setOrderLogisticsId(null); -// insertOrder.setIsInvoice(false); -// insertOrder.setInvoiceId(null); -// insertOrder.setIsDeleted(false); -// insertOrder.setShopName(param.getShopName()); -// insertOrder.setShopAddress(param.getShopAddress()); -// insertOrder.setCancelReason(null); -// insertOrder.setPaymentDeadline(paymentDeadline); -// insertOrder.setCreateTime(new Date()); -// insertOrder.setUpdateTime(new Date()); -// insertOrder.setQueueNo(queueNo); -// insertOrder.setFullReductionRuleId(param.getFullReductionRuleId()); -// insertOrder.setFullReductionRuleDescription(param.getFullReductionRuleDescription()); -// insertOrder.setCouponsId(param.getCouponsId()); -// insertOrder.setCouponsMemberRelationId(param.getCouponsMemberRelationId()); -// insertOrder.setCouponsDescription(param.getCouponsDescription()); -// insertOrder.setLimitedPrice(param.getLimitedPrice()); -// insertOrder.setReducedPrice(param.getReducedPrice()); -// insertOrder.setCouponsDiscountPrice(param.getCouponsDiscountPrice()); -// insertOrder.setDeliveryWay(param.getDeliveryWay()); -// insertOrder.setIsPayToMerchant(false); -// insertOrder.setBeforeReducedDeliveryFee(param.getBeforeReducedDeliveryFee()); -// insertOrder.setContactHouseNumber(param.getContactHouseNumber()); -// insertOrder.setContactLongitude(param.getContactLongitude()); -// insertOrder.setContactLatitude(param.getContactLatitude()); -// insertOrder.setFirstGoodsMainImage(param.getFirstGoodsMainImage()); -// orderMapper.insert(insertOrder); -// -// //获取最新订单对象 -// Order dbOrder = orderMapper.selectById(insertOrder.getId()); -// -// //3、添加订单商品详情记录 -// for(OrderDetail orderDetail : param.getOrderDetailList()){ -// // 添加订单商品详情记录 -// OrderDetail insertDetail = new OrderDetail(); -// insertDetail.setOrderId(dbOrder.getId()); -// insertDetail.setGoodsId(orderDetail.getGoodsId()); -// insertDetail.setGoodsName(orderDetail.getGoodsName()); -// insertDetail.setMainImage(orderDetail.getMainImage()); -// insertDetail.setSpecList(orderDetail.getSpecList()); -// insertDetail.setPrice(orderDetail.getPrice()); -// insertDetail.setNumber(orderDetail.getNumber()); -// insertDetail.setSubtotal(orderDetail.getSubtotal()); -// if(orderDetail.getIsUsedCoupons() != null){ -// insertDetail.setIsUsedCoupons(orderDetail.getIsUsedCoupons()); -// insertDetail.setCouponsDiscountPrice(orderDetail.getCouponsDiscountPrice()); -// insertDetail.setAfterCouponsDiscountPrice(orderDetail.getPrice().subtract(orderDetail.getCouponsDiscountPrice())); -// } -// insertDetail.setIsDeleted(false); -// orderDetailService.insertSelective(insertDetail); -// -// //TODO - 减少商品库存 (规格的库存该怎么去变化) -// /*goodsFeignApi.decreaseStock(goodsId, number);*/ -// } -// -//// //4、如果是从购物车下单的 那么下单成功后需要删除购物车数据 注意用批量删除 -//// if(param.getShoppingCartIdList()!=null && param.getShoppingCartIdList().size()>0){ -//// shoppingCartFeignApi.batchDeleteByIdList(param.getShoppingCartIdList()); -//// } -// -// //5、修改是否为新用户标识 -// if(dbMember.getIsNewPeople()){ -// dbMember.setIsNewPeople(false); -// dbMember.setIsRemindNewPeople(false); -// memberFeignApi.updateByPrimaryKeySelective(dbMember); -// } -// -// //模拟程序出错 -//// int i = 10 / 0; -// -// //6、更新优惠卷的使用状态 -// if (param.getCouponsMemberRelationId() != null) { -// couponsMemberRelationFeignApi.updateCouponsUsed(param.getCouponsMemberRelationId(),true); -// } -// -// //加入MQ延时队列,检测并关闭超时未支付的订单,5分钟 -// Message message = new Message("TID_COMMON_MALL", "CLOSE_OVERDUE_ORDER", JSON.toJSONString(dbOrder).getBytes()); -// message.setDelayTimeLevel(RocketMQConst.DELAY_TIME_LEVEL_5M); -// RocketMQTemplate rocketMQTemplate = applicationContext.getBean("rocketMQTemplate", RocketMQTemplate.class); -// rocketMQTemplate.getProducer().send(message); -// -// //插入事务日志 -// TransactionLog transactionLog = new TransactionLog(); -// transactionLog.setId(transId); -// transactionLog.setBusiness("order"); -// transactionLog.setForeignKey(String.valueOf(dbOrder.getId())); -// transactionLogService.insert(transactionLog); -// -// return dbOrder; - - return null; - } - - @Override - public void cancelOrderByUnPaid(OrderParam param) { - - } - - @Override - public void cancelOrderNoReason(OrderParam param) throws IOException { - - } - - @Override - public void applyRefund(OrderParam param) throws IOException { - - } - - @Override - public void confirmReceipt(OrderParam param) { - - } - - @Override - public Order selectByPrimaryKey(Integer id) { - return null; - } - - @Override - public void updateByPrimaryKeySelective(Order record) { - - } - - @Override - public Page getListByPageWithAsc(OrderParam param) { - return null; - } - - @Override - public Page> getListByPageWithDesc(OrderParam param) { - return null; - } - - @Override - public Order selectByOrderNo(String orderNo) { - return null; - } - - @Override - public void closeOverdueOrder(Integer id) { - - } - - @Override - public void autoCompletedOrder(Integer id) { - - } - - @Override - public void printRceceipts(Integer id) { - - } - - @Override - public int batchUpdateIsPrintedTrue(List idList) { - return 0; - } - - @Override - public Integer getNextQueueNo() { - return null; - } - - @Override - public Page getListByTodayOrderWithAsc(OrderParam param) { - return null; - } - - @Override - public void paymentNotify(String outTradeNo) throws IOException, InterruptedException, RemotingException, MQClientException, MQBrokerException { - - } - - @Override - public void paymentNotifyOfChangeToDelivery(String changeToDeliveryOutTradeNo) { - - } - - @Override - public Map countOrder(OrderParam order) { - return null; - } - - @Override - public int selectLatelyMonthlySalesByShopId(Date startTime, Date endTime, Integer shopId) { - return 0; - } - - @Override - public BigDecimal selectSumMerchantIncome(OrderParam param) { - return null; - } - - @Override - public BigDecimal selectSumActualPrice(OrderParam param) { - return null; - } - - @Override - public int selectCountCompleted(OrderParam param) { - return 0; - } - - @Override - public int selectCountPaid(OrderParam param) { - return 0; - } - - @Override - public boolean getIsAllowCancelNoReason(OrderParam order) { - return false; - } - - @Override - public boolean getIsAllowApplyRefund(OrderParam order) { - return false; - } - - @Override - public Page getAfterSalesListByPageWithAsc(OrderParam param) { - return null; - } - - @Override - public void updatePayOrderFrozenBalanceOfMerchant() { - - } - - @Override - public void remindOvertimeOrder(Integer id) throws IOException { - - } - - @Override - public List> selectStatisticOrder(Integer shopId) { - return null; - } - - @Override - public String selectStartDateOrder(Integer shopId) { - return null; - } - - @Override - public int selectCountPayers(OrderParam param) { - return 0; - } - - @Override - public int selectCountOrderPeoples(OrderParam param) { - return 0; - } - - @Override - public void refundMerchantBalance(String out_trade_no) { - - } - - @Override - public Map selectSumField(OrderParam order) { - return null; - } - - @Override - public int selectCountUnCompleted(OrderParam order) { - return 0; - } - - @Override - public int selectCountWaitHandle(OrderParam order) { - return 0; - } - - @Override - public OrderVo selectById(OrderParam param) { - return null; - } - - @Override - public OrderVo2 selectRefundProcess(OrderParam param) { - return null; - } - - @Override - public Map selectTabNumber(OrderParam param) { - return null; - } - - @Override - public void batchUpdateIsPrintedTrue(OrderParam param) { - - } - - @Override - public Map selectAllTabWaitHandleNum(OrderParam param) { - return null; - } - - @Override - public List waitPrintOrderList(OrderParam param) { - return null; - } - - @Override - public void auditAfterSalesOrderByAdmin(OrderParam param) { - - } - - @Override - public void auditAfterSalesOrderByMerchant(OrderParam param) { - - } - - @Override - public Map statistic(OrderParam param) throws ParseException { - return null; - } - - @Override - public void printOrderReceipt(Order dbOrder, String printType) { - - } - - @Override - public void allocatingFunds(Order dbOrder) { - - } - - @Override - public boolean save(Order entity) { - return false; - } - - @Override - public boolean saveBatch(Collection entityList, int batchSize) { - return false; - } - - @Override - public boolean saveOrUpdateBatch(Collection entityList, int batchSize) { - return false; - } - - @Override - public boolean removeById(Serializable id) { - return false; - } - - @Override - public boolean removeByMap(Map columnMap) { - return false; - } - - @Override - public boolean remove(Wrapper queryWrapper) { - return false; - } - - @Override - public boolean removeByIds(Collection idList) { - return false; - } - - @Override - public boolean updateById(Order entity) { - return false; - } - - @Override - public boolean update(Order entity, Wrapper updateWrapper) { - return false; - } - - @Override - public boolean updateBatchById(Collection entityList, int batchSize) { - return false; - } - - @Override - public boolean saveOrUpdate(Order entity) { - return false; - } - - @Override - public Order getById(Serializable id) { - return null; - } - - @Override - public List listByIds(Collection idList) { - return null; - } - - @Override - public List listByMap(Map columnMap) { - return null; - } - - @Override - public Order getOne(Wrapper queryWrapper, boolean throwEx) { - return null; - } - - @Override - public Map getMap(Wrapper queryWrapper) { - return null; - } - - @Override - public V getObj(Wrapper queryWrapper, Function mapper) { - return null; - } - - @Override - public int count(Wrapper queryWrapper) { - return 0; - } - - @Override - public List list(Wrapper queryWrapper) { - return null; - } - - @Override - public > E page(E page, Wrapper queryWrapper) { - return null; - } - - @Override - public List> listMaps(Wrapper queryWrapper) { - return null; - } - - @Override - public List listObjs(Wrapper queryWrapper, Function mapper) { - return null; - } - - @Override - public >> E pageMaps(E page, Wrapper queryWrapper) { - return null; - } - - @Override - public BaseMapper getBaseMapper() { - return null; - } -} \ No newline at end of file diff --git a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/distributed_transaction/Seata_OrderServiceImpl.java b/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/distributed_transaction/Seata_OrderServiceImpl.java deleted file mode 100644 index 992a2fb..0000000 --- a/siam-order/order-provider/src/main/java/com/siam/package_order/service_impl/internal/distributed_transaction/Seata_OrderServiceImpl.java +++ /dev/null @@ -1,692 +0,0 @@ -package com.siam.package_order.service_impl.internal.distributed_transaction; - -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.siam.package_common.util.RedisUtils; -import com.siam.package_goods.feign.GoodsFeignApi; -import com.siam.package_goods.feign.GoodsSpecificationOptionFeignApi; -import com.siam.package_goods.feign.ShoppingCartFeignApi; -import com.siam.package_order.controller.member.WxPayService; -import com.siam.package_order.entity.Order; -import com.siam.package_order.mapper.OrderMapper; -import com.siam.package_order.model.example.OrderExample; -import com.siam.package_order.model.param.OrderParam; -import com.siam.package_order.model.vo.OrderVo; -import com.siam.package_order.model.vo.OrderVo2; -import com.siam.package_order.service.*; -import com.siam.package_promotion.feign.CouponsFeignApi; -import com.siam.package_promotion.feign.CouponsGoodsRelationFeignApi; -import com.siam.package_promotion.feign.CouponsMemberRelationFeignApi; -import com.siam.package_promotion.feign.FullReductionRuleFeignApi; -import com.siam.package_user.auth.cache.MemberSessionManager; -import com.siam.package_user.feign.*; -import com.siam.package_user.feign.internal.VipRechargeRecordFeignApi; -import com.siam.package_util.feign.SettingFeignApi; -import com.siam.package_weixin_basic.service.WxNotifyService; -import com.siam.package_weixin_basic.service.WxPublicPlatformNotifyService; -import io.seata.spring.annotation.GlobalTransactional; -import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.client.exception.MQBrokerException; -import org.apache.rocketmq.client.exception.MQClientException; -import org.apache.rocketmq.remoting.exception.RemotingException; -import org.apache.rocketmq.spring.core.RocketMQTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.io.IOException; -import java.io.Serializable; -import java.math.BigDecimal; -import java.text.ParseException; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.function.Function; - -/** - * 分布式事务-seata - * - * @return - * @author 暹罗 - */ -@Slf4j -@Service -public class Seata_OrderServiceImpl implements OrderService { - - public static final String USER_ORDER_TOKEN_PREFIX = "order:token:"; - - @Autowired - private OrderMapper orderMapper; - - @Autowired - private OrderDetailService orderDetailService; - - @Autowired - private SettingFeignApi settingFeignApi; - - @Autowired - private MemberBillingRecordFeignApi memberBillingRecordFeignApi; - - @Autowired - private MemberFeignApi memberFeignApi; - - @Autowired - private MemberTradeRecordFeignApi memberTradeRecordFeignApi; - - @Autowired - private DeliveryAddressFeignApi deliveryAddressFeignApi; - - @Autowired - private WxNotifyService wxNotifyService; - - @Autowired - private WxPublicPlatformNotifyService wxPublicPlatformNotifyService; - - @Autowired - private OrderRefundService orderRefundService; - - @Autowired - private MemberInviteRelationFeignApi memberInviteRelationFeignApi; - - @Resource(name = "orderServiceImpl") - private OrderService orderService; - - @Autowired - private VipRechargeRecordFeignApi vipRechargeRecordFeignApi; - - @Autowired - private OrderRefundGoodsService orderRefundGoodsService; - - @Autowired - private OrderRefundProcessService orderRefundProcessService; - - @Autowired - private WxPayService wxPayService; - - @Autowired - private MemberSessionManager memberSessionManager; - - @Autowired - private CommonService commonService; - - @Autowired - private ShoppingCartFeignApi shoppingCartFeignApi; - - @Autowired - private GoodsFeignApi goodsFeignApi; - - @Autowired - private GoodsSpecificationOptionFeignApi goodsSpecificationOptionFeignApi; - - @Autowired - private CouponsMemberRelationFeignApi couponsMemberRelationFeignApi; - - @Autowired - private CouponsFeignApi couponsFeignApi; - - @Autowired - private CouponsGoodsRelationFeignApi couponsGoodsRelationFeignApi; - - @Autowired - private FullReductionRuleFeignApi fullReductionRuleFeignApi; - - @Autowired - private ApplicationContext applicationContext; - - @Autowired - private RedisUtils redisUtils; - - @Autowired - private RedisTemplate redisTemplate; - - @Override - public void delete(OrderParam param) { - - } - - @Override - @GlobalTransactional(timeoutMills = 60000, name = "spring-cloud-seata", rollbackFor = Exception.class) - public Order insert(OrderParam param) { -// //TODO(MARK) - 购物车下单、直接购买两种形式可以不拆分成两个接口 -// //TODO(MARK) - 系统默认免运费 -// param.setDeliveryFee(BigDecimal.ZERO); -// -// log.info("开始全局事务,XID = " + RootContext.getXID()); -// -//// Member loginMember = memberSessionManager.getSession(TokenUtil.getToken()); -//// Member dbMember = memberFeignApi.selectByPrimaryKey(loginMember.getId()); -// -// Member dbMember = memberFeignApi.selectByPrimaryKey(2).getData(); -// -// -//// //校验防重令牌是否正确 -- 保证该接口的幂等性 -//// String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end"; -//// Long result = (Long) redisTemplate.execute(new DefaultRedisScript(script, Long.class), Arrays.asList(USER_ORDER_TOKEN_PREFIX + loginMember.getId()), param.getOrderToken()); -//// if(result == 0){ -//// throw new StoneCustomerException("请勿重复提交"); -//// } -// -// //校验:如果是从购物车下单的 那么需要校验购物车数据是否存在 以及购物车数据是否属于当前登录用户 -// if(param.getShoppingCartIdList()!=null && !param.getShoppingCartIdList().isEmpty()){ -// int count = shoppingCartFeignApi.countByIdListAndMemberId(param.getShoppingCartIdList(), dbMember.getId()).getData(); -// if(count != param.getShoppingCartIdList().size()){ -// throw new StoneCustomerException("购物车数据异常,请刷新页面重新下单"); -// } -// } -// -// //根据收货地址id回写联系人信息 -// DeliveryAddress dbDeliveryAddress = deliveryAddressFeignApi.selectByPrimaryKey(param.getDeliveryAddressId()); -// if(dbDeliveryAddress == null){ -// throw new StoneCustomerException("该收货地址不存在"); -// } -// param.setContactRealname(dbDeliveryAddress.getRealname()); -// param.setContactPhone(dbDeliveryAddress.getPhone()); -// param.setContactProvince(dbDeliveryAddress.getProvince()); -// param.setContactCity(dbDeliveryAddress.getCity()); -// param.setContactArea(dbDeliveryAddress.getArea()); -// param.setContactStreet(dbDeliveryAddress.getStreet()); -// param.setContactSex(dbDeliveryAddress.getSex()); -// param.setContactHouseNumber(dbDeliveryAddress.getHouseNumber()); -// param.setContactLongitude(dbDeliveryAddress.getLongitude()); -// param.setContactLatitude(dbDeliveryAddress.getLatitude()); -// -// //1、校验前端的实付款金额是否正确 -// this.validatePrice(param); -// -// //生成订单编号 -// String orderNo = GenerateNo.getOrderNo(); -// //生成订单取餐号 -// Integer queueNo = getNextQueueNo(); -// //生成支付截止时间(五分钟内未付款的订单会被自动关闭) -// Date paymentDeadline = DateUtilsPlus.addMinutes(new Date(), Quantity.INT_5); -// -// //2、添加订单记录 -// Order insertOrder = new Order(); -// insertOrder.setMemberId(dbMember.getId()); -// insertOrder.setOrderNo(orderNo); -// insertOrder.setGoodsTotalQuantity(param.getGoodsTotalQuantity()); -// insertOrder.setGoodsTotalPrice(param.getGoodsTotalPrice()); -// insertOrder.setDeliveryFee(param.getDeliveryFee()); -// insertOrder.setActualPrice(param.getActualPrice()); -// insertOrder.setShoppingWay(Quantity.INT_2); -// insertOrder.setDeliveryAddressId(param.getDeliveryAddressId()); -// insertOrder.setContactRealname(param.getContactRealname()); -// insertOrder.setContactPhone(param.getContactPhone()); -// insertOrder.setContactProvince(param.getContactProvince()); -// insertOrder.setContactCity(param.getContactCity()); -// insertOrder.setContactArea(param.getContactArea()); -// insertOrder.setContactStreet(param.getContactStreet()); -// insertOrder.setContactSex(param.getContactSex()); -// insertOrder.setTradeId(null); -// insertOrder.setRemark(param.getRemark()); -// insertOrder.setDescription(param.getDescription()); -// insertOrder.setStatus(Quantity.INT_1); -// insertOrder.setOrderLogisticsId(null); -// insertOrder.setIsInvoice(false); -// insertOrder.setInvoiceId(null); -// insertOrder.setIsDeleted(false); -// insertOrder.setShopName(param.getShopName()); -// insertOrder.setShopAddress(param.getShopAddress()); -// insertOrder.setCancelReason(null); -// insertOrder.setPaymentDeadline(paymentDeadline); -// insertOrder.setCreateTime(new Date()); -// insertOrder.setUpdateTime(new Date()); -// insertOrder.setQueueNo(queueNo); -// insertOrder.setFullReductionRuleId(param.getFullReductionRuleId()); -// insertOrder.setFullReductionRuleDescription(param.getFullReductionRuleDescription()); -// insertOrder.setCouponsId(param.getCouponsId()); -// insertOrder.setCouponsMemberRelationId(param.getCouponsMemberRelationId()); -// insertOrder.setCouponsDescription(param.getCouponsDescription()); -// insertOrder.setLimitedPrice(param.getLimitedPrice()); -// insertOrder.setReducedPrice(param.getReducedPrice()); -// insertOrder.setCouponsDiscountPrice(param.getCouponsDiscountPrice()); -// insertOrder.setDeliveryWay(param.getDeliveryWay()); -// insertOrder.setIsPayToMerchant(false); -// insertOrder.setBeforeReducedDeliveryFee(param.getBeforeReducedDeliveryFee()); -// insertOrder.setContactHouseNumber(param.getContactHouseNumber()); -// insertOrder.setContactLongitude(param.getContactLongitude()); -// insertOrder.setContactLatitude(param.getContactLatitude()); -// insertOrder.setFirstGoodsMainImage(param.getFirstGoodsMainImage()); -// orderMapper.insert(insertOrder); -// -// //获取最新订单对象 -// Order dbOrder = orderMapper.selectById(insertOrder.getId()); -// -// //3、添加订单商品详情记录 -// for(OrderDetail orderDetail : param.getOrderDetailList()){ -// // 添加订单商品详情记录 -// OrderDetail insertDetail = new OrderDetail(); -// insertDetail.setOrderId(dbOrder.getId()); -// insertDetail.setGoodsId(orderDetail.getGoodsId()); -// insertDetail.setGoodsName(orderDetail.getGoodsName()); -// insertDetail.setMainImage(orderDetail.getMainImage()); -// insertDetail.setSpecList(orderDetail.getSpecList()); -// insertDetail.setPrice(orderDetail.getPrice()); -// insertDetail.setNumber(orderDetail.getNumber()); -// insertDetail.setSubtotal(orderDetail.getSubtotal()); -// if(orderDetail.getIsUsedCoupons() != null){ -// insertDetail.setIsUsedCoupons(orderDetail.getIsUsedCoupons()); -// insertDetail.setCouponsDiscountPrice(orderDetail.getCouponsDiscountPrice()); -// insertDetail.setAfterCouponsDiscountPrice(orderDetail.getPrice().subtract(orderDetail.getCouponsDiscountPrice())); -// } -// insertDetail.setIsDeleted(false); -// orderDetailService.insertSelective(insertDetail); -// -// //TODO - 减少商品库存 (规格的库存该怎么去变化) -// /*goodsFeignApi.decreaseStock(goodsId, number);*/ -// } -// -// //4、如果是从购物车下单的 那么下单成功后需要删除购物车数据 注意用批量删除 -// if(param.getShoppingCartIdList()!=null && param.getShoppingCartIdList().size()>0){ -// BasicResult basicResult = shoppingCartFeignApi.batchDeleteByIdList(param.getShoppingCartIdList()); -// if(!basicResult.getSuccess()){ -// try { -// GlobalTransactionContext.reload(RootContext.getXID()).rollback(); -// throw new StoneCustomerException("下单失败,请稍后重试"); -// } catch (TransactionException e) { -// e.printStackTrace(); -// } -// } -// } -// -// //5、修改是否为新用户标识 -// if(dbMember.getIsNewPeople()){ -// dbMember.setIsNewPeople(false); -// dbMember.setIsRemindNewPeople(false); -// BasicResult basicResult = memberFeignApi.updateByPrimaryKeySelective(dbMember); -// if(!basicResult.getSuccess()){ -// try { -// GlobalTransactionContext.reload(RootContext.getXID()).rollback(); -// throw new StoneCustomerException("下单失败,请稍后重试"); -// } catch (TransactionException e) { -// e.printStackTrace(); -// } -// } -// } -// -//// //模拟程序出错 -//// int i = 10 / 0; -// -// //6、更新优惠卷的使用状态 -// if (param.getCouponsMemberRelationId() != null) { -// couponsMemberRelationFeignApi.updateCouponsUsed(param.getCouponsMemberRelationId(),true); -// } -// -// //加入MQ延时队列,检测并关闭超时未支付的订单,5分钟 -// Message message = new Message("TID_COMMON_MALL", "CLOSE_OVERDUE_ORDER", JSON.toJSONString(dbOrder).getBytes()); -// message.setDelayTimeLevel(RocketMQConst.DELAY_TIME_LEVEL_5M); -// RocketMQTemplate rocketMQTemplate = applicationContext.getBean("rocketMQTemplate", RocketMQTemplate.class); -// rocketMQTemplate.getProducer().send(message); -// -// return dbOrder; - - return null; - } - - @Override - public Order insertByMQ(OrderParam param, String transId) throws InterruptedException, RemotingException, MQClientException, MQBrokerException { - return null; - } - - @Override - public void cancelOrderByUnPaid(OrderParam param) { - - } - - @Override - public void cancelOrderNoReason(OrderParam param) throws IOException { - - } - - @Override - public void applyRefund(OrderParam param) throws IOException { - - } - - @Override - public void confirmReceipt(OrderParam param) { - - } - - - @Override - public Order selectByPrimaryKey(Integer id) { - return null; - } - - - @Override - public void updateByPrimaryKeySelective(Order record) { - - } - - @Override - public Page getListByPageWithAsc(OrderParam param) { - return null; - } - - @Override - public Page> getListByPageWithDesc(OrderParam param) { - return null; - } - - @Override - public Order selectByOrderNo(String orderNo) { - return null; - } - - @Override - public void closeOverdueOrder(Integer id) { - - } - - @Override - public void autoCompletedOrder(Integer id) { - - } - - @Override - public void printRceceipts(Integer id) { - - } - - @Override - public int batchUpdateIsPrintedTrue(List idList) { - return 0; - } - - @Override - public Integer getNextQueueNo() { - return null; - } - - @Override - public Page getListByTodayOrderWithAsc(OrderParam param) { - return null; - } - - @Override - public void paymentNotify(String outTradeNo) throws IOException, InterruptedException, RemotingException, MQClientException, MQBrokerException { - - } - - @Override - public void paymentNotifyOfChangeToDelivery(String changeToDeliveryOutTradeNo) { - - } - - @Override - public Map countOrder(OrderParam order) { - return null; - } - - @Override - public int selectLatelyMonthlySalesByShopId(Date startTime, Date endTime, Integer shopId) { - return 0; - } - - @Override - public BigDecimal selectSumMerchantIncome(OrderParam param) { - return null; - } - - @Override - public BigDecimal selectSumActualPrice(OrderParam param) { - return null; - } - - @Override - public int selectCountCompleted(OrderParam param) { - return 0; - } - - @Override - public int selectCountPaid(OrderParam param) { - return 0; - } - - @Override - public boolean getIsAllowCancelNoReason(OrderParam order) { - return false; - } - - @Override - public boolean getIsAllowApplyRefund(OrderParam order) { - return false; - } - - @Override - public Page getAfterSalesListByPageWithAsc(OrderParam param) { - return null; - } - - @Override - public void updatePayOrderFrozenBalanceOfMerchant() { - - } - - @Override - public void remindOvertimeOrder(Integer id) throws IOException { - - } - - @Override - public List> selectStatisticOrder(Integer shopId) { - return null; - } - - @Override - public String selectStartDateOrder(Integer shopId) { - return null; - } - - @Override - public int selectCountPayers(OrderParam param) { - return 0; - } - - @Override - public int selectCountOrderPeoples(OrderParam param) { - return 0; - } - - @Override - public void refundMerchantBalance(String out_trade_no) { - - } - - @Override - public Map selectSumField(OrderParam order) { - return null; - } - - @Override - public int selectCountUnCompleted(OrderParam order) { - return 0; - } - - @Override - public int selectCountWaitHandle(OrderParam order) { - return 0; - } - - @Override - public OrderVo selectById(OrderParam param) { - return null; - } - - @Override - public OrderVo2 selectRefundProcess(OrderParam param) { - return null; - } - - @Override - public Map selectTabNumber(OrderParam param) { - return null; - } - - @Override - public void batchUpdateIsPrintedTrue(OrderParam param) { - - } - - @Override - public Map selectAllTabWaitHandleNum(OrderParam param) { - return null; - } - - @Override - public List waitPrintOrderList(OrderParam param) { - return null; - } - - @Override - public void auditAfterSalesOrderByAdmin(OrderParam param) { - - } - - @Override - public void auditAfterSalesOrderByMerchant(OrderParam param) { - - } - - @Override - public Map statistic(OrderParam param) throws ParseException { - return null; - } - - @Override - public void printOrderReceipt(Order dbOrder, String printType) { - - } - - @Override - public void allocatingFunds(Order dbOrder) { - - } - - @Override - public boolean save(Order entity) { - return false; - } - - @Override - public boolean saveBatch(Collection entityList, int batchSize) { - return false; - } - - @Override - public boolean saveOrUpdateBatch(Collection entityList, int batchSize) { - return false; - } - - @Override - public boolean removeById(Serializable id) { - return false; - } - - @Override - public boolean removeByMap(Map columnMap) { - return false; - } - - @Override - public boolean remove(Wrapper queryWrapper) { - return false; - } - - @Override - public boolean removeByIds(Collection idList) { - return false; - } - - @Override - public boolean updateById(Order entity) { - return false; - } - - @Override - public boolean update(Order entity, Wrapper updateWrapper) { - return false; - } - - @Override - public boolean updateBatchById(Collection entityList, int batchSize) { - return false; - } - - @Override - public boolean saveOrUpdate(Order entity) { - return false; - } - - @Override - public Order getById(Serializable id) { - return null; - } - - @Override - public List listByIds(Collection idList) { - return null; - } - - @Override - public List listByMap(Map columnMap) { - return null; - } - - @Override - public Order getOne(Wrapper queryWrapper, boolean throwEx) { - return null; - } - - @Override - public Map getMap(Wrapper queryWrapper) { - return null; - } - - @Override - public V getObj(Wrapper queryWrapper, Function mapper) { - return null; - } - - @Override - public int count(Wrapper queryWrapper) { - return 0; - } - - @Override - public List list(Wrapper queryWrapper) { - return null; - } - - @Override - public > E page(E page, Wrapper queryWrapper) { - return null; - } - - @Override - public List> listMaps(Wrapper queryWrapper) { - return null; - } - - @Override - public List listObjs(Wrapper queryWrapper, Function mapper) { - return null; - } - - @Override - public >> E pageMaps(E page, Wrapper queryWrapper) { - return null; - } - - @Override - public BaseMapper getBaseMapper() { - return null; - } -} \ No newline at end of file diff --git a/siam-order/order-provider/src/main/resources/application-local.yml b/siam-order/order-provider/src/main/resources/application-local.yml index c49f3c0..88c903b 100644 --- a/siam-order/order-provider/src/main/resources/application-local.yml +++ b/siam-order/order-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 #thymeleaf thymeleaf: @@ -61,6 +61,18 @@ spring: application: name: order-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: @@ -91,15 +103,15 @@ spring: ds0: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/siam_cloud_0?characterEncoding=utf-8&useUnicode=true&useSSL=true + url: jdbc:mysql://127.0.0.1:3306/siam_cloud_0?characterEncoding=utf-8&useUnicode=true&useSSL=true&allowPublicKeyRetrieval=true username: root - password: root + password: 123456 ds1: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/siam_cloud_1?characterEncoding=utf-8&useUnicode=true&useSSL=true + url: jdbc:mysql://127.0.0.1:3306/siam_cloud_1?characterEncoding=utf-8&useUnicode=true&useSSL=true&allowPublicKeyRetrieval=true username: root - password: root + password: 123456 props: sql: show: true #是否显示sharding-jdbc的sql路由 @@ -179,17 +191,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内部服务调用超时配置-第二种 @@ -222,24 +224,31 @@ rocketmq: # Seata Config seata: - application-id: order-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: @@ -264,6 +273,8 @@ management: enabled: false elasticsearch: enabled: false + mail: # 加上这一行 + enabled: false # 加上这一行,关闭邮件自检 #日志配置 logging: diff --git a/siam-order/order-provider/src/test/java/com/siam/package_order/OrderApplicationTest.java b/siam-order/order-provider/src/test/java/com/siam/package_order/OrderApplicationTest.java index 59bf625..ad32fa3 100644 --- a/siam-order/order-provider/src/test/java/com/siam/package_order/OrderApplicationTest.java +++ b/siam-order/order-provider/src/test/java/com/siam/package_order/OrderApplicationTest.java @@ -32,7 +32,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.test.context.junit4.SpringRunner; -import javax.annotation.Resource; +import jakarta.annotation.Resource; import java.io.IOException; import java.util.List; import java.util.Map; diff --git a/siam-order/order-provider/src/test/java/com/siam/package_order/internal/DistributedTransactionTest.java b/siam-order/order-provider/src/test/java/com/siam/package_order/internal/DistributedTransactionTest.java index 604d7d7..a3ba0eb 100644 --- a/siam-order/order-provider/src/test/java/com/siam/package_order/internal/DistributedTransactionTest.java +++ b/siam-order/order-provider/src/test/java/com/siam/package_order/internal/DistributedTransactionTest.java @@ -15,7 +15,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; -import javax.annotation.Resource; +import jakarta.annotation.Resource; /** * 分布式事务相关 diff --git a/siam-order/pom.xml b/siam-order/pom.xml index 47ad03c..32e5a78 100644 --- a/siam-order/pom.xml +++ b/siam-order/pom.xml @@ -31,8 +31,6 @@ UTF-8 - 1.8 - 1.8 \ No newline at end of file diff --git a/siam-parent/pom.xml b/siam-parent/pom.xml index fb4b552..90aea03 100644 --- a/siam-parent/pom.xml +++ b/siam-parent/pom.xml @@ -20,83 +20,138 @@ ../siam-mall ../siam-util ../siam-monitor - ../siam-eureka - ../siam-zuul + ../siam-gateway 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' }); } - ) + ) } }); }