13cb08621f3710587d2d413aecd452b103fc1196
取消订单(POST /api/hjc/order/cancel,幂等):
- 先向微信查单。SUCCESS 则**拒绝取消**并就地 markPaid 自愈(ADR 0009 的「以微信侧为准」);
这是唯一能挡住「其实已付款、只是前端没送达」的时机
- 否则条件更新 order_status=2:
UPDATE ... WHERE order_no=? AND pay_status=0 AND order_status=0
靠**影响行数**保证幂等与安全,故新增 XML <update>——updateById 那条路拿不到行数
- 再尽力 closeOrder 关掉微信侧那张支付单,避免「已取消却仍能付款」;失败只记日志、不回滚
- 查单异常时仍放行取消,但响应带 verified=false,如实告知「未与微信核对」,不替微信下结论
- 响应恒 code=0 + 结构化 data{cancelled,paid,verified,payStatus,orderStatus}:
「其实已经付了」不是错误,不该让前端靠 message 字符串判定
- 结果以**重新读到的状态**为准,不以条件更新返回值为准(并发重复取消 / 期间被支付)
- **不推送一站式**。出向状态只有 PAID/REFUNDED,且 buildCreatePurchaseDetails 对非退款单
恒发 PAID——在取消路径误调会造出一条假的「已支付」采购记录。未支付订单从未被推送过
标书详情新增 buyerCount(非表字段,实时统计的已付款订单数):
原「购买人数」取自 saleCount——下单即加、从不回退,dev 实测项目 4 的 16 里 11 张根本没付款。
saleCount 字段与下单累加未动(已无展示用途),**零 DDL**。
/order/pay 失败响应带 data.wechatCode:从 PaymentException 的 cause 链取
ServiceException.getErrorCode()(SDK 原样挂在 cause 上,中途各级 catch 全是 throw e),
供前端识别跨端 OUT_TRADE_NO_USED。**公共支付层与 core 一行未改。**
测试:HjcOrderCancelUtilTest(9) + HjcOrderControllerCancelTest(12,含推送禁区回归守卫)
📖 项目简介
WebSoft API 是一个基于 Spring Boot + MyBatis Plus 构建的现代化企业级后端API服务,采用最新的Java技术栈:
- 核心框架:Spring Boot 2.5.4 + Spring Security + Spring AOP
- 数据访问:MyBatis Plus 3.4.3 + Druid 连接池
- 数据库:MySQL + Redis
- 文档工具:Swagger 3.0 + Knife4j
- 工具库:Hutool、Lombok、FastJSON
项目演示
| 后台管理系统 | https://mp.websoft.top |
|---|---|
| 测试账号 | 13800010123,123456 |
| 正式账号 | 立即注册 |
| 关注公众号 | ![]() |
🛠️ 技术栈
核心框架
| 技术 | 版本 | 说明 |
|---|---|---|
| Java | 1.8+ | 编程语言 |
| Spring Boot | 2.5.4 | 微服务框架 |
| Spring Security | 5.5.x | 安全框架 |
| MyBatis Plus | 3.4.3 | ORM框架 |
| MySQL | 8.0+ | 关系型数据库 |
| Redis | 6.0+ | 缓存数据库 |
| Druid | 1.2.6 | 数据库连接池 |
功能组件
- Swagger 3.0 + Knife4j - API文档生成与测试
- JWT - 用户认证与授权
- Hutool - Java工具类库
- EasyPOI - Excel文件处理
- 阿里云OSS - 对象存储服务
- 微信支付/支付宝 - 支付集成
- Socket.IO - 实时通信
- MQTT - 物联网消息传输
📋 环境要求
基础环境
- ☕ Java 1.8+
- 🗄️ MySQL 8.0+
- 🔴 Redis 6.0+
- 📦 Maven 3.6+
开发工具
- 推荐:IntelliJ IDEA / Eclipse
- 插件:Lombok Plugin、MyBatis Plugin
🚀 快速开始
1. 克隆项目
git clone https://github.com/websoft-top/mp-java.git
cd mp-java
2. 数据库配置
-- 创建数据库
CREATE DATABASE websoft_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 导入数据库脚本(如果有的话)
-- source /path/to/database.sql
3. 配置文件
编辑 src/main/resources/application-dev.yml 文件,配置数据库连接:
spring:
datasource:
url: jdbc:mysql://localhost:3306/websoft_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username: your_username
password: your_password
redis:
host: localhost
port: 6379
password: your_redis_password
4. 启动项目
# 使用 Maven 启动
mvn spring-boot:run
# 或者使用 IDE 直接运行 WebSoftApplication.java
访问 http://localhost:9200 即可看到API服务。
5. API文档
启动项目后,访问以下地址查看API文档:
- Swagger UI:
http://localhost:9200/swagger-ui/index.html - Knife4j:
http://localhost:9200/doc.html
⚙️ 配置说明
数据库配置
在 application-dev.yml 中配置数据库连接:
spring:
datasource:
url: jdbc:mysql://localhost:3306/websoft_db
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
Redis配置
spring:
redis:
host: localhost
port: 6379
password: your_redis_password
database: 0
阿里云OSS配置
config:
endpoint: https://oss-cn-shenzhen.aliyuncs.com
accessKeyId: your_access_key_id
accessKeySecret: your_access_key_secret
bucketName: your_bucket_name
bucketDomain: https://your-domain.com
其他配置
- JWT密钥:
config.token-key用于JWT令牌加密 - 文件上传路径:
config.upload-path本地文件存储路径 - 邮件服务:配置SMTP服务器用于发送邮件
🎯 核心功能
🔐 用户认证与授权
- JWT认证:基于JSON Web Token的用户认证
- Spring Security:完整的安全框架集成
- 角色权限:基于RBAC的权限控制
- 图形验证码:防止恶意登录
📝 内容管理系统(CMS)
- 文章管理:支持富文本内容管理
- 媒体文件:图片/视频文件上传与管理
- 分类管理:内容分类与标签管理
- SEO优化:搜索引擎优化支持
🛒 电商系统
- 商品管理:商品信息、规格、库存管理
- 订单系统:完整的订单流程管理
- 支付集成:支持微信支付、支付宝
- 物流跟踪:快递100物流查询集成
🔧 系统管理
- 用户管理:用户信息维护与管理
- 系统配置:动态配置管理
- 日志监控:系统操作日志记录
- 数据备份:数据库备份与恢复
📊 数据分析
- 统计报表:业务数据统计分析
- 图表展示:数据可视化展示
- 导出功能:Excel数据导出
- 实时监控:系统性能监控
🏗️ 项目结构
src/main/java/com/gxwebsoft/
├── WebSoftApplication.java # 启动类
├── cms/ # 内容管理模块
│ ├── controller/ # 控制器层
│ ├── service/ # 业务逻辑层
│ ├── mapper/ # 数据访问层
│ └── entity/ # 实体类
├── shop/ # 商城模块
│ ├── controller/
│ ├── service/
│ ├── mapper/
│ └── entity/
├── common/ # 公共模块
│ ├── core/ # 核心配置
│ ├── utils/ # 工具类
│ └── exception/ # 异常处理
└── resources/
├── application.yml # 主配置文件
├── application-dev.yml # 开发环境配置
└── application-prod.yml# 生产环境配置
🔧 开发规范
代码结构
- Controller层:处理HTTP请求,参数验证
- Service层:业务逻辑处理,事务管理
- Mapper层:数据访问,SQL映射
- Entity层:数据实体,数据库表映射
命名规范
- 类名:使用大驼峰命名法(PascalCase)
- 方法名:使用小驼峰命名法(camelCase)
- 常量:使用全大写,下划线分隔
- 包名:使用小写字母,点分隔
📚 API文档
项目集成了Swagger和Knife4j,提供完整的API文档:
访问地址
- Swagger UI:
http://localhost:9200/swagger-ui/index.html - Knife4j:
http://localhost:9200/doc.html
主要接口模块
- 用户认证:
/api/auth/**- 登录、注册、权限验证 - 用户管理:
/api/user/**- 用户CRUD操作 - 内容管理:
/api/cms/**- 文章、媒体文件管理 - 商城管理:
/api/shop/**- 商品、订单管理 - 系统管理:
/api/system/**- 系统配置、日志管理
🚀 部署指南
开发环境部署
# 1. 启动MySQL和Redis服务
# 2. 创建数据库并导入初始数据
# 3. 修改配置文件
# 4. 启动应用
mvn spring-boot:run
生产环境部署
# 1. 打包应用
mvn clean package -Dmaven.test.skip=true
# 2. 运行jar包
java -jar target/com-gxwebsoft-modules-1.5.0.jar --spring.profiles.active=prod
# 3. 使用Docker部署(可选)
docker build -t websoft-api .
docker run -d -p 9200:9200 websoft-api
🤝 贡献指南
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
📄 许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
📞 联系我们
- 官网:https://websoft.top
- 邮箱:170083662@qq.top
- QQ群:479713884
⭐ 如果这个项目对您有帮助,请给我们一个星标!
Description
Languages
Java
98.6%
Python
0.6%
JavaScript
0.6%
Vue
0.1%
