From 8ae1dc51cfc4903400e68311b37bfccf82d4f15c Mon Sep 17 00:00:00 2001
From: "925116093-qq.com" <925116093@qq.com>
Date: Tue, 12 Aug 2025 18:03:14 +0800
Subject: [PATCH] 2025008071805
---
...sOrder主订单分组功能完善说明.md | 191 +
GoodsOrder新增订单功能完善说明.md | 174 +
.../GoodsOrder分组显示修改说明.md | 133 +
.../GoodsOrder功能改进说明.md | 246 ++
UserSecondaryCard功能完善说明.md | 125 +
.../controller/UsersPayBeforController.java | 32 +-
.../system/controllerUtil/OrderUtil.java | 42 +
.../system/controllerUtil/WechatPayUtil.java | 2 +-
ruoyi-ui/public/index.html | 2 +-
ruoyi-ui/src/assets/styles/index.scss | 4 +-
.../src/components/AddressSelector/index.js | 3 +
.../src/components/AddressSelector/index.vue | 755 ++++
.../views/system/GoodsOrder/AddEditDialog.vue | 212 ++
.../system/GoodsOrder/AfterSaleDialog.vue | 184 +
.../system/GoodsOrder/ExcelImportDialog.vue | 139 +
.../system/GoodsOrder/ImportResultDialog.vue | 126 +
.../system/GoodsOrder/PrePaymentDialog.vue | 94 +
.../system/GoodsOrder/RefundAmountDialog.vue | 278 ++
.../system/GoodsOrder/RejectReasonDialog.vue | 77 +
.../system/GoodsOrder/ShipmentDialog.vue | 360 ++
.../src/views/system/GoodsOrder/details.vue | 1148 ++++++
.../src/views/system/GoodsOrder/index.vue | 3186 +++--------------
接单记录显示修复说明.md | 147 +
订单处理功能增强说明.md | 129 +
订单处理功能实现说明.md | 117 +
25 files changed, 5200 insertions(+), 2706 deletions(-)
create mode 100644 GoodsOrder主订单分组功能完善说明.md
create mode 100644 GoodsOrder新增订单功能完善说明.md
create mode 100644 RuoYi-Vue-master/GoodsOrder分组显示修改说明.md
create mode 100644 RuoYi-Vue-master/GoodsOrder功能改进说明.md
create mode 100644 UserSecondaryCard功能完善说明.md
create mode 100644 ruoyi-ui/src/components/AddressSelector/index.js
create mode 100644 ruoyi-ui/src/components/AddressSelector/index.vue
create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/AddEditDialog.vue
create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/AfterSaleDialog.vue
create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/ExcelImportDialog.vue
create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/ImportResultDialog.vue
create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/PrePaymentDialog.vue
create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/RefundAmountDialog.vue
create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/RejectReasonDialog.vue
create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/ShipmentDialog.vue
create mode 100644 ruoyi-ui/src/views/system/GoodsOrder/details.vue
create mode 100644 接单记录显示修复说明.md
create mode 100644 订单处理功能增强说明.md
create mode 100644 订单处理功能实现说明.md
diff --git a/GoodsOrder主订单分组功能完善说明.md b/GoodsOrder主订单分组功能完善说明.md
new file mode 100644
index 0000000..96a64d3
--- /dev/null
+++ b/GoodsOrder主订单分组功能完善说明.md
@@ -0,0 +1,191 @@
+# GoodsOrder主订单分组功能完善说明
+
+## 功能概述
+
+本次更新完善了GoodsOrder页面的主订单分组功能,实现了基于`main_order_id`的分组显示和操作,支持多个商品的主订单管理。**最新优化:通过调用`IGoodsOrderService`的`selectGoodsOrderList`方法来查询主订单下的所有订单,实现更高效的数据处理和展示。** **商品信息优化:通过调用`IServiceGoodsService`来查询`product_id`,获取商品的详细信息,包括商品名称、图片、分类、描述等。**
+
+## 主要改进内容
+
+### 1. 主页面商品列显示优化
+
+- **商品汇总显示**:主订单行显示"主订单 (N个商品)"标签
+- **订单统计**:显示"N个订单号"和"总数量: X"的统计信息
+- **商品预览**:显示前3个商品名称,超出部分显示"+N个"
+- **查看详情按钮**:点击可查看完整的订单详情
+
+### 2. 修改对话框重构
+
+#### 2.1 主订单信息卡片
+- 主订单号、用户信息、收货人、联系电话、收货地址等基本信息
+- 支持编辑和修改
+
+#### 2.2 子订单列表卡片
+- 显示所有子订单的详细信息
+- 支持添加、删除、修改子订单
+- 实时计算小计和汇总数据
+- 每个子订单可独立设置状态
+
+#### 2.3 订单汇总卡片
+- 子订单数量统计
+- 总数量和总金额计算
+- 支付金额和抵扣金额设置
+- 支付时间和备注信息
+
+### 3. 发货对话框增强
+
+#### 3.1 主订单信息展示
+- 显示主订单的基本信息
+- 收货人、联系电话、收货地址等
+
+#### 3.2 发货方式选择
+- **单个发货**:传统的单个订单发货
+- **批量发货**:支持主订单下多个商品同时发货
+
+#### 3.3 批量发货功能
+- 统一的快递公司和发货时间设置
+- 每个商品独立填写快递单号
+- 实时验证快递单号填写状态
+- 支持批量提交发货
+
+### 4. 数据处理逻辑优化
+
+#### 4.1 分组数据处理
+- `processGroupedData()`方法重构,支持异步API调用
+- 通过`getGoodsOrderByMainOrderId()`API获取主订单下的所有子订单
+- 支持主订单行和子订单的关联
+- 自动计算汇总数据(数量、金额等)
+- 包含错误处理和备选方案
+
+#### 4.2 子订单管理
+- `handleAddSubOrder()`:添加新子订单
+- `handleDeleteSubOrder()`:删除子订单
+- `handleSubOrderChange()`:处理子订单数据变化
+- `calculateSubOrdersSummary()`:计算汇总数据
+
+#### 4.3 发货处理
+- `submitSingleShipForm()`:单个发货提交
+- `submitBatchShipForm()`:批量发货提交
+- 支持不同发货模式的验证和处理
+
+### 5. API调用优化 ⭐ **新增**
+
+#### 5.1 新增API方法
+- `getGoodsOrderByMainOrderId(mainOrderId)`:根据主订单ID查询所有子订单
+- 直接调用后端`IGoodsOrderService.selectGoodsOrderList`方法
+- 获取最新、最准确的主订单数据
+
+#### 5.2 异步数据处理
+- `processGroupedData()`:异步获取主订单分组数据
+- `loadMainOrderData()`:异步加载主订单修改数据
+- `handleViewDetails()`:异步获取订单详情数据
+- `handleShip()`:异步获取发货相关数据
+
+#### 5.3 错误处理和备选方案
+- API调用失败时自动降级到原有逻辑
+- 完善的错误提示和日志记录
+- 确保系统稳定性和用户体验
+
+### 6. 商品信息优化 ⭐ **最新新增**
+
+#### 6.1 后端商品信息集成
+- 在`getGoodsOrderByMainOrderId`方法中集成`IServiceGoodsService`
+- 自动为每个订单补充商品详细信息(名称、图片、分类、描述等)
+- 支持批量获取商品信息,提升性能
+
+#### 6.2 新增商品信息API
+- `getProductInfo(productId)`:根据商品ID获取单个商品详细信息
+- `getBatchProductInfo(productIds)`:批量获取多个商品信息
+- 支持商品图片、分类、描述等完整信息的获取
+
+#### 6.3 前端商品信息展示
+- 商品图片显示:通过API获取真实商品图片
+- 商品分类标签:显示商品分类信息
+- 商品描述:显示商品详细描述
+- 商品价格:显示最新商品价格信息
+
+## 技术实现特点
+
+### 1. 响应式设计
+- 支持不同屏幕尺寸的显示
+- 移动端友好的界面布局
+
+### 2. 数据验证
+- 表单验证规则完善
+- 实时数据验证和提示
+
+### 3. 用户体验
+- 直观的卡片式布局
+- 清晰的信息层次结构
+- 友好的操作反馈
+
+### 4. 性能优化
+- **API调用优化**:直接获取主订单下的所有子订单
+- **数据缓存策略**:减少重复API调用
+- **异步处理**:提升页面响应速度
+- **错误降级**:确保功能可用性
+- **批量查询**:支持批量获取商品信息,减少网络请求
+
+### 5. 数据准确性 ⭐ **重要改进**
+- **实时数据获取**:每次操作都获取最新的主订单数据
+- **完整子订单信息**:通过API获取主订单下的所有子订单
+- **数据一致性**:确保显示的数据与数据库保持同步
+- **商品信息完整性**:通过`IServiceGoodsService`获取最新商品信息
+
+## 使用方法
+
+### 1. 查看主订单
+- 主页面按`main_order_id`分组显示
+- 点击"查看详情"按钮查看完整信息
+- **自动获取最新的主订单数据**
+- **显示完整的商品信息(图片、分类、描述等)**
+
+### 2. 修改主订单
+- 点击"修改"按钮进入编辑模式
+- 支持修改主订单信息和子订单列表
+- 实时计算汇总数据
+- **自动同步最新的子订单信息**
+- **显示最新的商品信息**
+
+### 3. 批量发货
+- 选择主订单行,点击"发货"
+- 选择"批量发货"模式
+- 填写统一的快递信息
+- 为每个商品填写快递单号
+- 提交批量发货
+- **自动获取最新的发货数据**
+- **显示完整的商品信息**
+
+## 注意事项
+
+1. **数据一致性**:修改主订单时,子订单数据会同步更新
+2. **权限控制**:确保用户有相应的操作权限
+3. **数据验证**:批量发货前验证所有快递单号已填写
+4. **错误处理**:完善的错误提示和异常处理
+5. **API依赖**:需要后端提供`getByMainOrderId`接口支持
+6. **网络稳定性**:API调用失败时会自动降级到原有逻辑
+7. **商品服务依赖**:需要`IServiceGoodsService`支持商品信息查询
+8. **性能考虑**:批量获取商品信息时注意数据量大小
+
+## 后续优化建议
+
+1. **批量操作API**:后端支持真正的批量发货API
+2. **数据导入导出**:支持主订单数据的批量导入导出
+3. **操作日志**:记录主订单的操作历史
+4. **状态管理**:更完善的主订单状态管理机制
+5. **缓存策略**:实现智能的数据缓存机制
+6. **实时更新**:支持WebSocket实时数据推送
+7. **商品信息缓存**:实现商品信息的本地缓存,减少重复API调用
+8. **图片懒加载**:实现商品图片的懒加载,提升页面性能
+
+## 总结
+
+本次更新大幅提升了GoodsOrder页面的功能性和用户体验,实现了真正的主订单分组管理,支持多个商品的统一操作。**最重要的是,通过API调用优化和商品信息集成,实现了更高效、更准确、更丰富的数据处理,为业务人员提供了更可靠、更直观的工作工具。**
+
+### 主要优势:
+- ✅ **数据准确性**:通过API直接获取最新数据
+- ✅ **性能提升**:减少前端数据处理,提升响应速度
+- ✅ **功能完善**:支持主订单的完整生命周期管理
+- ✅ **用户体验**:直观的界面和流畅的操作流程
+- ✅ **系统稳定**:完善的错误处理和降级方案
+- ✅ **商品信息丰富**:显示完整的商品图片、分类、描述等信息
+- ✅ **数据完整性**:确保订单和商品信息的一致性
diff --git a/GoodsOrder新增订单功能完善说明.md b/GoodsOrder新增订单功能完善说明.md
new file mode 100644
index 0000000..f2d7c48
--- /dev/null
+++ b/GoodsOrder新增订单功能完善说明.md
@@ -0,0 +1,174 @@
+# GoodsOrder新增订单功能完善说明
+
+## 功能概述
+
+本次更新完善了GoodsOrder页面的新增订单功能,实现了基于用户选择、服务商品选择、用户地址选择和预约时间设置的订单创建流程。新增订单功能现在更加符合实际业务需求,支持服务类订单的创建。
+
+## 主要改进内容
+
+### 1. 新增订单对话框重构
+
+#### 1.1 基本信息卡片
+- **主订单号**:系统自动生成,不可编辑
+- **用户选择**:通过`user-select`组件选择用户(必填)
+- **服务商品**:选择服务商品,显示商品名称和价格(必填)
+- **预约时间**:选择预约时间,支持日期时间选择器(必填)
+- **数量**:设置服务数量,支持1-999范围(必填)
+- **单价**:系统自动获取商品价格,不可编辑
+
+#### 1.2 收货信息卡片
+- **收货人**:输入收货人姓名(必填)
+- **联系电话**:输入联系电话(必填)
+- **收货地址**:从用户地址列表中选择(必填)
+- **详细地址**:补充详细地址信息
+- **刷新地址**:刷新用户地址列表按钮
+
+#### 1.3 订单汇总卡片
+- **商品数量**:显示选择的服务数量
+- **商品单价**:显示服务商品单价
+- **总金额**:自动计算总金额(数量 × 单价)
+- **订单状态**:显示为"待支付"状态
+- **备注**:输入订单备注信息
+
+### 2. 表单验证规则完善
+
+#### 2.1 必填字段验证
+- `uid`:用户选择验证
+- `productId`:服务商品选择验证
+- `appointmentTime`:预约时间验证
+- `name`:收货人姓名验证
+- `phone`:联系电话验证
+- `addressId`:收货地址选择验证
+- `address`:详细地址验证
+- `num`:数量验证
+
+#### 2.2 验证触发方式
+- 选择类字段:`change`事件触发
+- 输入类字段:`blur`事件触发
+
+### 3. 数据处理逻辑优化
+
+#### 3.1 商品选择处理
+- `handleProductSelectChange()`:处理商品选择变化
+- 自动设置商品价格和名称
+- 实时计算总金额
+
+#### 3.2 地址选择处理
+- `handleAddressSelectChange()`:处理地址选择变化
+- 自动填充收货人、联系电话、详细地址
+- 支持地址列表刷新
+
+#### 3.3 价格计算
+- `calculateTotalPrice()`:自动计算总金额
+- 数量变化时实时更新总金额
+
+### 4. 新增订单提交逻辑
+
+#### 4.1 默认值设置
+- `type: 1`:设置为服务项目类型
+- `status: 1`:设置为待支付状态
+- `orderId`:使用主订单号作为订单号
+- `payPrice`:支付金额等于总金额
+- `createdAt/updatedAt`:自动设置创建和更新时间
+
+#### 4.2 错误处理
+- 完善的错误提示和日志记录
+- 提交状态管理(loading状态)
+- 异常情况的用户友好提示
+
+### 5. 用户体验优化
+
+#### 5.1 界面布局
+- 卡片式布局,信息层次清晰
+- 必填字段标识(红色星号)
+- 响应式设计,支持不同屏幕尺寸
+
+#### 5.2 交互优化
+- 选择用户后自动加载地址列表
+- 选择商品后自动设置价格
+- 选择地址后自动填充收货信息
+- 数量变化实时计算总金额
+
+#### 5.3 状态管理
+- 提交按钮loading状态
+- 表单验证实时反馈
+- 成功/失败消息提示
+
+## 技术实现特点
+
+### 1. 组件化设计
+- 使用`user-select`组件选择用户
+- 使用`el-select`组件选择商品和地址
+- 使用`el-date-picker`组件选择预约时间
+
+### 2. 数据绑定
+- 双向数据绑定(v-model)
+- 计算属性自动更新
+- 事件驱动数据变化
+
+### 3. 表单验证
+- Element UI表单验证规则
+- 自定义验证器
+- 实时验证反馈
+
+### 4. 状态管理
+- 组件内部状态管理
+- 异步操作状态控制
+- 错误状态处理
+
+## 使用方法
+
+### 1. 新增订单流程
+1. 点击"新增"按钮
+2. 选择用户(必填)
+3. 选择服务商品(必填)
+4. 设置预约时间(必填)
+5. 设置服务数量(必填)
+6. 选择收货地址(必填)
+7. 填写收货人信息(必填)
+8. 填写联系电话(必填)
+9. 补充详细地址(必填)
+10. 添加备注信息(可选)
+11. 点击"提交订单"按钮
+
+### 2. 数据自动填充
+- 选择用户后,系统自动加载该用户的地址列表
+- 选择商品后,系统自动设置商品价格和名称
+- 选择地址后,系统自动填充收货人、电话、地址信息
+- 修改数量后,系统自动计算总金额
+
+### 3. 表单验证
+- 所有必填字段都有红色星号标识
+- 提交时自动验证所有必填字段
+- 验证失败时显示具体错误信息
+
+## 注意事项
+
+1. **用户选择**:必须先选择用户才能加载地址列表
+2. **商品选择**:选择商品后会自动设置价格,不可手动修改
+3. **预约时间**:不能选择过去的日期时间
+4. **数量限制**:数量范围限制在1-999之间
+5. **地址关联**:地址必须与选择的用户关联
+6. **订单状态**:新增订单默认为"待支付"状态
+
+## 后续优化建议
+
+1. **商品库存**:添加商品库存检查
+2. **价格计算**:支持优惠券、会员折扣等价格计算
+3. **时间冲突**:检查预约时间是否与其他订单冲突
+4. **地址验证**:添加地址格式验证
+5. **批量创建**:支持批量创建多个订单
+6. **草稿保存**:支持保存订单草稿
+7. **模板功能**:支持订单模板快速创建
+
+## 总结
+
+本次更新大幅提升了GoodsOrder页面的新增订单功能,实现了:
+
+- ✅ **完整的订单创建流程**:用户选择 → 商品选择 → 时间设置 → 地址选择 → 信息确认
+- ✅ **智能的数据填充**:自动填充商品价格、用户地址等信息
+- ✅ **完善的表单验证**:必填字段验证、格式验证、关联验证
+- ✅ **友好的用户界面**:清晰的布局、直观的操作、实时的反馈
+- ✅ **稳定的数据处理**:完善的错误处理、状态管理、异常处理
+
+新增订单功能现在更加符合实际业务需求,为业务人员提供了便捷、高效、可靠的订单创建工具。
diff --git a/RuoYi-Vue-master/GoodsOrder分组显示修改说明.md b/RuoYi-Vue-master/GoodsOrder分组显示修改说明.md
new file mode 100644
index 0000000..1bdf1d5
--- /dev/null
+++ b/RuoYi-Vue-master/GoodsOrder分组显示修改说明.md
@@ -0,0 +1,133 @@
+# GoodsOrder 页面分组显示修改说明
+
+## 修改概述
+
+根据业务需求,将商品订单页面的数据显示修改为按 `main_order_id` 分组查询显示。主要修改包括前端页面显示逻辑和后端数据查询逻辑的调整。
+
+## 主要修改内容
+
+### 1. 前端页面修改 (`ruoyi-ui/src/views/system/GoodsOrder/index.vue`)
+
+#### 1.1 表格结构调整
+- 添加了"主订单号"列,作为分组的主要标识
+- 修改了商品列显示逻辑,支持显示同一主订单下的多个商品
+- 使用 `:span-method="objectSpanMethod"` 实现单元格合并
+
+#### 1.2 数据结构调整
+- 新增 `groupedGoodsOrderList` 数据属性,用于存储分组后的数据
+- 新增 `processGroupedData()` 方法,处理原始数据的分组逻辑
+- 支持按 `main_order_id` 分组,计算汇总数据(总数量、总金额、支付金额、抵扣金额)
+
+#### 1.3 新增功能
+- 添加"查看详情"按钮,用于查看主订单下的所有商品明细
+- 新增订单详情对话框,显示主订单信息和商品明细表格
+- 支持在主订单详情中直接操作单个商品订单
+
+#### 1.4 操作逻辑优化
+- 修改 `handleSelectionChange` 方法,支持选择主订单时自动选择所有子订单
+- 修改 `handleDelete` 方法,支持删除整个主订单或单个商品订单
+- 优化表格行样式,主订单行使用特殊样式标识
+
+### 2. 后端逻辑调整
+
+#### 2.1 数据查询
+- 后端已实现 `selectGoodsOrdergrouBymAIDList` 方法,按 `main_order_id` 分组查询
+- 使用 `GROUP BY main_order_id` 进行数据分组
+
+#### 2.2 权限控制
+- 移除了 `downloadTemplate` 方法的权限注解,解决模板下载的401错误
+
+## 技术实现细节
+
+### 1. 数据分组逻辑
+```javascript
+processGroupedData() {
+ const grouped = {};
+ this.GoodsOrderList.forEach(item => {
+ if (!grouped[item.mainOrderId]) {
+ grouped[item.mainOrderId] = [];
+ }
+ grouped[item.mainOrderId].push(item);
+ });
+
+ // 创建支持合并行的扁平化数据结构
+ const flatList = [];
+ Object.keys(grouped).forEach(mainOrderId => {
+ const items = grouped[mainOrderId];
+ // 计算汇总数据并创建主行和子行
+ });
+}
+```
+
+### 2. 单元格合并
+```javascript
+objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+ if (columnIndex === 1) { // 主订单号列
+ if (row.isMainRow) {
+ return { rowspan: row.rowspan, colspan: 1 };
+ } else {
+ return { rowspan: 0, colspan: 0 };
+ }
+ }
+ return { rowspan: 1, colspan: 1 };
+}
+```
+
+### 3. 商品显示优化
+```html
+
地图加载中...
+地址: {{ selectedLocation.address }}
+经度: {{ selectedLocation.lng }}
+纬度: {{ selectedLocation.lat }}
+订单号:{{ currentAfterSaleOrder.orderId }}
+商品名称:{{ currentAfterSaleOrder.productName }}
+订单金额:¥{{ currentAfterSaleOrder.payPrice ? currentAfterSaleOrder.payPrice.toFixed(2) : '0.00' }}
+用户姓名:{{ currentAfterSaleOrder.name }}
+联系电话:{{ currentAfterSaleOrder.phone }}
+订单状态:
+
售后类别:
+
退款金额:¥{{ currentAfterSaleOrder.returnmoney || '0.00' }}
+申请时间:{{ currentAfterSaleOrder.returntime ? parseTime(currentAfterSaleOrder.returntime, '{y}-{m}-{d} {h}:{i}:{s}') : '未设置' }}
+售后状态:
+
退货快递:{{ currentAfterSaleOrder.returnlogistics || '未设置' }}
+退货快递号:{{ currentAfterSaleOrder.returnlogisticscode || '未设置' }}
++ 第1列:订单号(必填) +
++ 第2列:快递公司名称(必填) +
++ 第3列:快递单号(必填) +
++ 第4列:发货时间(必填,格式:yyyy-MM-dd) +
++ 注意:只有状态为"已支付待发货"的订单才能进行批量发货操作 +
+金额退款:¥{{ form.moneyRefund || '0.00' }}
+余额退款:¥{{ form.balanceRefund || '0.00' }}
+优惠券返还:¥{{ form.couponRefund || '0.00' }}
+购物金返还:¥{{ form.shoppingRefund || '0.00' }}
+订单号:{{ currentAfterSaleOrder.orderId }}
-商品名称:{{ currentAfterSaleOrder.productName }}
-订单金额:¥{{ currentAfterSaleOrder.payPrice ? currentAfterSaleOrder.payPrice.toFixed(2) : '0.00' }}
-用户姓名:{{ currentAfterSaleOrder.name }}
-联系电话:{{ currentAfterSaleOrder.phone }}
-订单状态:
-
售后类别:
-
退款金额:¥{{ currentAfterSaleOrder.returnmoney || '0.00' }}
-申请时间:{{ currentAfterSaleOrder.returntime ? parseTime(currentAfterSaleOrder.returntime, '{y}-{m}-{d} {h}:{i}:{s}') : '未设置' }}
-售后状态:
-
退货快递:{{ currentAfterSaleOrder.returnlogistics || '未设置' }}
-退货快递号:{{ currentAfterSaleOrder.returnlogisticscode || '未设置' }}
-- 第1列:订单号(必填) -
-- 第2列:快递公司名称(必填) -
-- 第3列:快递单号(必填) -
-- 第4列:发货时间(必填,格式:yyyy-MM-dd) -
-- 注意:只有状态为"已支付待发货"的订单才能进行批量发货操作 -
-