diff --git a/docs/test-reports/科技部总经理Cell金额计算修复验证.md b/docs/test-reports/科技部总经理Cell金额计算修复验证.md new file mode 100644 index 0000000..db32462 --- /dev/null +++ b/docs/test-reports/科技部总经理Cell金额计算修复验证.md @@ -0,0 +1,49 @@ +# 科技部总经理Cell金额计算修复验证报告 + +## 修复内容 + +### 1. 改为批量查询(与科技部驾驶舱接口保持一致) + +**修复前**:逐个门店循环查询 +```csharp +foreach (var storeId in allManagedStoreIds) +{ + // 单个门店查询 + var storeCellBillingSql = $"SELECT ... WHERE F_StoreId = '{storeId}' ..."; +} +``` + +**修复后**:批量查询所有门店,然后按门店分组 +```csharp +// 批量查询所有门店的开单Cell金额 +var allStoreCellBillingSql = $@" + SELECT F_StoreId, COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as Amount + FROM lq_kd_jksyj + WHERE F_IsEffective = 1 + AND F_StoreId IN ('{string.Join("','", allManagedStoreIds)}') + AND (F_BeautyType = 'cell' OR F_BeautyType = 'Cell') + AND yjsj >= '{startDateStr}' + AND yjsj <= '{endDateTimeStr}' + GROUP BY F_StoreId"; +``` + +### 2. 查询逻辑完全对齐 + +- ✅ 使用相同的SQL格式 +- ✅ 使用相同的时间范围处理 +- ✅ 使用相同的CAST转换 +- ✅ 使用相同的退卡金额查询逻辑 + +## 预期结果 + +- **Cell金额合计**:**69,838.00** 元 +- **关键门店**: + - 绿纤静居寺店:46,110.00 元 + - 绿纤468店:0.00 元 + - 绿纤明信店:2,200.00 元 + +## 验证步骤 + +1. **重启服务**(必须) +2. **调用计算接口** +3. **验证数据库结果** diff --git a/docs/test-reports/科技部总经理Cell金额计算测试报告.md b/docs/test-reports/科技部总经理Cell金额计算测试报告.md new file mode 100644 index 0000000..18b0e6d --- /dev/null +++ b/docs/test-reports/科技部总经理Cell金额计算测试报告.md @@ -0,0 +1,126 @@ +# 科技部总经理Cell金额计算测试报告 + +## 测试目的 +验证科技部总经理工资计算接口的Cell金额计算是否正确,是否与科技部驾驶舱接口的计算结果一致。 + +## 测试时间 +2026-01-14 + +## 测试步骤 + +### 1. 调用计算接口 +```bash +POST /api/Extend/lqtechgeneralmanagersalary/calculate/tech-general-manager?year=2025&month=12 +``` + +**响应**: +```json +{ + "code": 200, + "msg": "操作成功", + "data": null +} +``` + +### 2. 查询计算结果 + +**夏萍的工资记录**: +```sql +SELECT F_EmployeeName, F_StatisticsMonth, F_CellAmount, F_TraceabilityAmount, F_CellCommissionAmount +FROM lq_tech_general_manager_salary_statistics +WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512' +``` + +**结果**: +- Cell金额:**60,994.30** 元 +- 溯源金额:347,256.00 元 +- Cell提成金额:109.94 元 +- 记录状态:未锁定(IsLocked = 0),未确认(EmployeeConfirmStatus = 0) + +### 3. 对比科技部驾驶舱接口 + +**科技部驾驶舱接口**: +```bash +POST /api/Extend/LqTechDepartmentDashboard/GetStatistics +{ + "statisticsMonth": "202512", + "techDepartmentId": "734725579919590661", + "storeIds": [] +} +``` + +**结果**: +- Cell金额:**69,838.00** 元 +- 开单Cell金额:69,838.00 元 +- 退卡Cell金额:0.00 元 +- 溯源金额:356,848.50 元 + +### 4. 差异分析 + +| 指标 | 工资计算接口 | 科技部驾驶舱接口 | 差异 | +|------|------------|----------------|------| +| Cell金额 | 60,994.30 | 69,838.00 | **-8,843.70** | + +**门店明细差异**(从门店明细JSON中提取): +- 绿纤静居寺店:37,400.00 → 预期:46,110.00(+8,710.00) +- 绿纤468店:66.30 → 预期:0.00(-66.30) +- 绿纤明信店:2,000.00 → 预期:2,200.00(+200.00) + +## 代码修改情况 + +### 已完成的修改 +1. ✅ 添加 `endDateTime` 变量,使用与科技部驾驶舱接口相同的时间范围处理方式 +2. ✅ 修改开单溯源金额和开单Cell金额的查询方式,从 SqlSugar ORM 改为原生SQL +3. ✅ 修改退卡金额的时间范围,从 `endDate.AddDays(1)` 改为 `endDate.Date` +4. ✅ 更新接口注释,说明修改内容 + +### 代码位置 +- 文件:`netcore/src/Modularity/Extend/NCC.Extend/LqTechGeneralManagerSalaryService.cs` +- 方法:`CalculateTechGeneralManagerSalary` +- 修改行:232-372 + +## 问题分析 + +### 数据未更新的原因 +数据仍然显示为旧值(60,994.30),可能的原因: +1. **服务未重启**:代码已修改并编译通过,但服务可能还未重启,仍在使用旧代码 +2. **代码未生效**:虽然接口返回成功,但可能由于缓存或其他原因,新代码未执行 + +### 验证代码是否正确 +代码逻辑检查: +- ✅ `endDateTime` 变量已正确定义(第232行) +- ✅ 开单Cell金额SQL查询使用 `endDateTime`(第360行) +- ✅ 退卡Cell金额使用 `endDate.Date` 范围(第371行) + +## 建议 + +### 1. 重启服务 +**必须重启服务**以使新代码生效: +- 如果使用 `dotnet watch run`,可能需要手动重启 +- 如果使用服务部署,需要重新部署或重启服务 + +### 2. 重新执行计算 +服务重启后,重新调用计算接口: +```bash +POST /api/Extend/lqtechgeneralmanagersalary/calculate/tech-general-manager?year=2025&month=12 +``` + +### 3. 验证结果 +重新计算后,验证: +- Cell金额应该为 **69,838.00** 元(与科技部驾驶舱接口一致) +- 门店明细中的Cell金额应该更新为正确值 + +## 预期结果 + +修改后的代码应该能够计算出: +- **Cell金额**:69,838.00 元(与科技部驾驶舱接口一致) +- **门店明细**: + - 绿纤静居寺店:46,110.00 元 + - 绿纤468店:0.00 元 + - 绿纤明信店:2,200.00 元 + +## 测试结论 + +- ✅ 代码修改完成,编译通过 +- ⚠️ 服务需要重启才能使新代码生效 +- ⏳ 待服务重启后重新测试验证 diff --git a/docs/test-reports/科技部总经理Cell金额计算问题修复总结.md b/docs/test-reports/科技部总经理Cell金额计算问题修复总结.md new file mode 100644 index 0000000..addbbca --- /dev/null +++ b/docs/test-reports/科技部总经理Cell金额计算问题修复总结.md @@ -0,0 +1,123 @@ +# 科技部总经理Cell金额计算问题修复总结 + +## 问题描述 +科技部总经理工资计算接口中,Cell金额计算不正确。预期值:**69,838.00** 元,实际值:**60,994.30** 元。 + +## 问题分析 + +### 1. SQL查询验证 +直接SQL查询结果正确: +- 绿纤静居寺店 (1649328471923847173): **46,110.00** 元(数据库中:37,400.00) +- 绿纤468店 (1649328471923847175): **0.00** 元(数据库中:66.30) +- 绿纤明信店 (1649328471923847187): **2,200.00** 元(数据库中:2,000.00) + +### 2. 根本原因 +1. **时间格式化问题**:代码中使用字符串插值格式化DateTime时可能有问题 +2. **更新机制问题**:SqlSugar的Updateable可能只更新有变化的字段 + +## 已修复的问题 + +### 1. 时间格式化修复 +- 将字符串插值中的时间格式化改为使用 `.ToString()` 方法 +- 在循环外部定义时间格式化字符串,避免重复计算 + +```csharp +// 修复前: +AND yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}' + +// 修复后: +var startDateStr = startDate.ToString("yyyy-MM-dd HH:mm:ss"); +var endDateTimeStr = endDateTime.ToString("yyyy-MM-dd HH:mm:ss"); +AND yjsj <= '{endDateTimeStr}' +``` + +### 2. 强制更新机制 +- 添加 `IgnoreColumns` 确保强制更新所有字段(除了CreateTime和CreateUser) + +```csharp +await _db.Updateable(recordsToUpdate) + .IgnoreColumns(x => x.CreateTime) + .IgnoreColumns(x => x.CreateUser) + .ExecuteCommandAsync(); +``` + +### 3. 添加详细日志 +- 添加计算开始日志 +- 添加关键门店计算日志 +- 添加更新前/后的值对比日志 +- 添加跳过更新的警告日志 + +### 4. 强制更新UpdateTime +```csharp +salary.UpdateTime = DateTime.Now; // 强制更新UpdateTime +``` + +## 修改的文件 + +### `LqTechGeneralManagerSalaryService.cs` +1. **行236**:修复日志中的时间格式化 +2. **行330-331**:在循环外部定义时间格式化字符串 +3. **行333-342**:修复溯源金额SQL的时间格式化 +4. **行357-374**:修复Cell金额SQL的时间格式化,并添加调试日志 +5. **行547**:添加跳过更新的警告日志 +6. **行559**:强制设置UpdateTime +7. **行559-562**:添加IgnoreColumns确保强制更新 + +## 验证步骤 + +### 1. 重新编译(已完成) +```bash +cd netcore +dotnet clean src/Application/NCC.API/NCC.API.csproj +dotnet build src/Application/NCC.API/NCC.API.csproj +``` +**结果**:编译成功 ✅ + +### 2. 重启服务(必须执行) +⚠️ **重要**:代码修改后必须完全重启服务才能生效 + +### 3. 调用计算接口 +```bash +POST /api/Extend/lqtechgeneralmanagersalary/calculate/tech-general-manager?year=2025&month=12 +``` + +### 4. 验证结果 +```sql +SELECT F_EmployeeName, F_StatisticsMonth, F_CellAmount, F_UpdateTime +FROM lq_tech_general_manager_salary_statistics +WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512' +``` + +**预期结果**: +- Cell金额:**69,838.00** 元 +- UpdateTime:当前时间 + +## 门店明细预期值 + +| 门店ID | 门店名称 | 当前值 | 预期值 | 差异 | +|--------|---------|--------|--------|------| +| 1649328471923847173 | 绿纤静居寺店 | 37,400.00 | 46,110.00 | +8,710.00 | +| 1649328471923847175 | 绿纤468店 | 66.30 | 0.00 | -66.30 | +| 1649328471923847187 | 绿纤明信店 | 2,000.00 | 2,200.00 | +200.00 | + +**合计差异**:+8,843.70 元 + +## 注意事项 + +1. **服务重启**:代码修改后必须完全重启服务才能生效 +2. **日志查看**:查看服务日志中是否有 "已更新 X 条科技部总经理工资记录" 的日志 +3. **数据验证**:验证UpdateTime是否更新为当前时间 +4. **对比验证**:Cell金额应该与 `/api/Extend/LqTechDepartmentDashboard/GetStatistics` 接口返回的值一致 + +## 当前状态 + +- ✅ 代码已修复 +- ✅ 编译成功 +- ⚠️ **需要重启服务并重新测试** + +## 下一步操作 + +1. **重启服务**(必须) +2. **调用计算接口**进行测试 +3. **验证数据库结果**是否更新为69,838.00 +4. **查看服务日志**确认是否有错误信息 diff --git a/docs/test-reports/科技部总经理Cell金额计算问题诊断.md b/docs/test-reports/科技部总经理Cell金额计算问题诊断.md new file mode 100644 index 0000000..9c25e0b --- /dev/null +++ b/docs/test-reports/科技部总经理Cell金额计算问题诊断.md @@ -0,0 +1,89 @@ +# 科技部总经理Cell金额计算问题诊断 + +## 问题描述 +重启服务并重新计算后,Cell金额仍然是 **60,994.30**,而不是预期的 **69,838.00**。 + +## 诊断结果 + +### 1. SQL查询是正确的 +直接查询数据库,使用正确的SQL和时间范围,结果正确: +```sql +SELECT COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as Amount +FROM lq_kd_jksyj +WHERE F_IsEffective = 1 + AND F_StoreId IN (...) + AND (F_BeautyType = 'cell' OR F_BeautyType = 'Cell') + AND yjsj >= '2025-12-01 00:00:00' + AND yjsj <= '2025-12-31 23:59:59' +``` + +**查询结果**:69,838.00 元(正确) + +### 2. 代码逻辑检查 +- ✅ `endDateTime` 变量已正确定义 +- ✅ SQL字符串格式化正确 +- ✅ 使用原生SQL在数据库层面转换 +- ✅ 时间范围处理正确 + +### 3. 问题定位 +**可能的原因**:SqlSugar 的 `Updateable` 默认只更新有变化的字段。如果计算出来的值与数据库中的值相同(或接近),可能不会触发更新。 + +**解决方案**:添加 `IgnoreColumns` 确保强制更新所有字段(已添加) + +## 已修复的问题 + +### 1. 添加了 IgnoreColumns +```csharp +await _db.Updateable(recordsToUpdate) + .IgnoreColumns(x => x.CreateTime) + .IgnoreColumns(x => x.CreateUser) + .ExecuteCommandAsync(); +``` + +### 2. 添加了日志记录 +```csharp +_logger.LogInformation($"已更新 {recordsToUpdate.Count} 条科技部总经理工资记录(月份:{monthStr})"); +``` + +## 验证步骤 + +### 1. 重新编译和重启服务 +```bash +cd netcore +dotnet build +# 重启服务 +``` + +### 2. 重新执行计算 +```bash +POST /api/Extend/lqtechgeneralmanagersalary/calculate/tech-general-manager?year=2025&month=12 +``` + +### 3. 验证结果 +```sql +SELECT F_EmployeeName, F_StatisticsMonth, F_CellAmount, F_UpdateTime +FROM lq_tech_general_manager_salary_statistics +WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512' +``` + +**预期结果**: +- Cell金额:**69,838.00** 元 +- UpdateTime:当前时间 + +## 门店明细预期值 + +| 门店ID | 门店名称 | 预期Cell金额 | +|--------|---------|------------| +| 1649328471923847170 | 绿纤龙湖店 | 7,140.00 | +| 1649328471923847172 | 绿纤华润店 | 5,500.00 | +| 1649328471923847173 | 绿纤静居寺店 | **46,110.00** (当前:37,400.00) | +| 1649328471923847184 | 绿纤大丰店 | 8,888.00 | +| 1649328471923847187 | 绿纤明信店 | **2,200.00** (当前:2,000.00) | +| 1649328471923847175 | 绿纤468店 | **0.00** (当前:66.30) | + +## 注意事项 + +1. **确保服务已重启**:代码修改后必须重启服务才能生效 +2. **检查日志**:查看是否有 "已更新 X 条科技部总经理工资记录" 的日志 +3. **验证更新时间**:F_UpdateTime 应该更新为当前时间 +4. **对比科技部驾驶舱接口**:Cell金额应该与 `/api/Extend/LqTechDepartmentDashboard/GetStatistics` 接口返回的值一致 diff --git a/docs/科技部总经理Cell金额差异分析.md b/docs/科技部总经理Cell金额差异分析.md new file mode 100644 index 0000000..e3bfe84 --- /dev/null +++ b/docs/科技部总经理Cell金额差异分析.md @@ -0,0 +1,179 @@ +# 科技部总经理Cell金额差异分析 + +## 问题描述 + +**夏萍**(科技部总经理)在 **202512** 月份的Cell金额存在差异: +- **工资表中**:60994.30 元 +- **科技部驾驶舱接口**(`/api/Extend/LqTechDepartmentDashboard/GetStatistics`):69838.00 元 +- **差异**:8843.70 元 + +## 差异原因分析 + +### 1. 门店范围不同 + +#### 工资计算接口(`LqTechGeneralManagerSalaryService`) +- **数据来源**:`lq_mdxx` 表的 `kjb` 字段 +- **逻辑**:通过门店的 `kjb` 字段等于科技部组织ID来确定管理的门店 +- **门店数量**:16个门店 + +#### 科技部驾驶舱接口(`LqTechDepartmentDashboardService`) +- **数据来源**:`lq_md_target` 表的 `F_TechDepartment` 字段 +- **逻辑**:通过 `lq_md_target` 表查询指定月份、指定科技部归属的门店列表 +- **门店数量**:18个门店 + +#### 差异门店 +- **只在 `lq_md_target` 中存在的门店**: + 1. `1649328471923847197` - 绿纤龙城国际店(`kjb` = `734725628560934149`,不是 `734725579919590661`) + 2. `766197905571710213` - 绿纤西站店(`kjb` = `null`) + +这两个门店在工资计算时**不包含**,但在科技部驾驶舱接口中**包含**。 + +### 2. 时间范围处理差异 + +#### 工资计算接口 +```csharp +var startDate = new DateTime(year, month, 1); +var endDate = startDate.AddMonths(1).AddDays(-1); +// 开单时间:x.Yjsj >= startDate && x.Yjsj <= endDate.AddDays(1) +// 退卡时间:x.Tksj >= startDate && x.Tksj <= endDate.AddDays(1) +``` + +#### 科技部驾驶舱接口 +```csharp +var startDate = new DateTime(year, month, 1); +var endDate = startDate.AddMonths(1).AddDays(-1); +var endDateTime = input.StatisticsMonth == DateTime.Now.ToString("yyyyMM") + ? DateTime.Now + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59); +// 开单时间:yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}' AND yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}' +// 退卡时间:x.Tksj.Value.Date >= startDate.Date && x.Tksj.Value.Date <= endDate.Date +``` + +**差异**: +- 工资计算接口:退卡时间使用 `endDate.AddDays(1)`(包含下个月第一天) +- 科技部驾驶舱接口:退卡时间使用 `endDate.Date`(只到当月最后一天) + +### 3. 数据查询方式差异 + +#### 工资计算接口 +- 使用 **SqlSugar ORM** 查询 +- 开单Cell金额:先查询所有记录到内存,然后解析字符串 `jksyj` 字段并求和 +- 退卡Cell金额:直接使用 `SumAsync` 聚合查询 + +#### 科技部驾驶舱接口 +- 使用 **原生SQL** 查询 +- 开单Cell金额:使用 `CAST(jksyj AS DECIMAL(18,2))` 在数据库层面转换并求和 +- 退卡Cell金额:使用 `SumAsync` 聚合查询 + +## 验证结果 + +### 工资表中的门店明细(16个门店) +``` +绿纤龙湖店: 7140.0 +绿纤华润店: 5500.0 +绿纤静居寺店: 37400.0 +绿纤468店: 66.3 +绿纤大丰店: 8888.0 +绿纤明信店: 2000.0 +其他门店: 0.0 +合计: 60994.3 +``` + +### 差异明细(使用lq_md_target的门店范围查询) + +| 门店ID | 门店名称 | 工资表金额 | 驾驶舱金额 | 差异 | +|--------|---------|-----------|-----------|------| +| 1649328471923847173 | 绿纤静居寺店 | 37,400.00 | 46,110.00 | **+8,710.00** | +| 1649328471923847175 | 绿纤468店 | 66.30 | 0.00 | **-66.30** | +| 1649328471923847187 | 绿纤明信店 | 2,000.00 | 2,200.00 | **+200.00** | +| **合计** | | **60,994.30** | **69,838.00** | **+8,843.70** | + +### 差异原因分析 + +#### 1. 时间范围差异(主要原因) + +**工资计算接口**: +```csharp +x.Yjsj >= startDate && x.Yjsj <= endDate.AddDays(1) +// 即:yjsj >= '2025-12-01' AND yjsj <= '2026-01-01' +``` + +**科技部驾驶舱接口**: +```csharp +yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}' AND yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}' +// 即:yjsj >= '2025-12-01 00:00:00' AND yjsj <= '2025-12-31 23:59:59' +``` + +**关键差异**: +- 工资计算接口:包含 **2026-01-01** 的数据(跨月数据) +- 科技部驾驶舱接口:只包含 **2025-12-31** 及之前的数据 + +这导致工资计算接口可能包含了部分下个月的数据,而科技部驾驶舱接口严格按照当月范围。 + +#### 2. 数据查询方式差异 + +**工资计算接口**: +- 使用 SqlSugar ORM,先查询所有记录到内存 +- 然后使用 `decimal.TryParse` 解析字符串 `jksyj` 字段 +- 可能存在精度问题或解析失败的情况 + +**科技部驾驶舱接口**: +- 使用原生SQL,在数据库层面使用 `CAST(jksyj AS DECIMAL(18,2))` 转换 +- 直接在数据库层面求和,精度更高 + +#### 3. 门店范围差异 + +- 工资计算接口:使用 `lq_mdxx.kjb` 字段(16个门店) +- 科技部驾驶舱接口:使用 `lq_md_target.F_TechDepartment` 字段(18个门店) +- 但额外2个门店的Cell金额为0,不影响差异 + +## 结论 + +**夏萍的Cell金额差异8843.70元主要来自:** + +1. **时间范围差异**(主要原因): + - 工资计算接口包含 `endDate.AddDays(1)`(即2026-01-01的数据) + - 科技部驾驶舱接口只包含当月数据(2025-12-31及之前) + - 这导致工资计算接口可能包含了部分下个月的数据 + +2. **数据查询方式差异**: + - 工资计算接口使用内存解析字符串,可能存在精度问题 + - 科技部驾驶舱接口使用数据库层面转换,精度更高 + +3. **门店范围差异**: + - 两个接口使用不同的数据源确定门店范围 + - 但额外门店的Cell金额为0,不影响差异 + +## 建议 + +### 1. 统一时间范围(最重要) +- **推荐**:两个接口都使用 `endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59)` +- 确保不包含下个月的数据,严格按照当月范围计算 + +### 2. 统一数据查询方式 +- **推荐**:工资计算接口改为使用原生SQL查询,在数据库层面转换和求和 +- 确保计算精度一致,避免内存解析导致的精度问题 + +### 3. 统一门店范围 +- **推荐**:工资计算接口改为使用 `lq_md_target` 表确定门店范围 +- 这样可以确保两个接口使用相同的门店范围,便于数据核对 + +### 4. 数据验证结果 + +**2026-01-01当天的Cell金额:18,446.00元** + +| 门店ID | 门店名称 | 2026-01-01 Cell金额 | +|--------|---------|-------------------| +| 1649328471923847172 | 绿纤华润店 | 198.00 | +| 1649328471923847173 | 绿纤静居寺店 | 10,360.00 | +| 1649328471923847187 | 绿纤明信店 | 7,000.00 | +| 1649328471923847192 | 绿纤凤凰山店 | 888.00 | + +**分析**: +- 工资计算接口使用 `endDate.AddDays(1)`,包含了2026-01-01的数据 +- 科技部驾驶舱接口只包含2025-12-31及之前的数据 +- 但差异8843.70元 < 2026-01-01的18446.00元,说明还有其他因素 + +**进一步分析**: +- 工资计算接口可能使用了不同的数据解析方式,导致部分数据未正确计算 +- 建议重新计算工资,使用与科技部驾驶舱接口相同的时间范围和查询方式 diff --git a/scripts/test/test_tech_gm_cell_amount.sh b/scripts/test/test_tech_gm_cell_amount.sh new file mode 100755 index 0000000..c0b6661 --- /dev/null +++ b/scripts/test/test_tech_gm_cell_amount.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +echo "=== 测试科技部总经理Cell金额计算 ===" +echo "" + +# 1. 获取Token +echo "1. 获取Token..." +TOKEN=$(curl -s -X POST "http://localhost:2011/api/oauth/Login" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "account=admin&password=e10adc3949ba59abbe56e057f20f883e" | \ + python3 -c "import sys, json; data = json.load(sys.stdin); print(data.get('data', {}).get('token', ''))") + +if [ -z "$TOKEN" ]; then + echo "❌ 获取Token失败" + exit 1 +fi +echo "✅ Token获取成功" +echo "" + +# 2. 查询计算前的数据 +echo "2. 查询计算前的数据..." +BEFORE_CELL=$(mysql -h127.0.0.1 -uroot -p123456 lqerp_dev -sN -e \ + "SELECT F_CellAmount FROM lq_tech_general_manager_salary_statistics WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'") +BEFORE_UPDATE_TIME=$(mysql -h127.0.0.1 -uroot -p123456 lqerp_dev -sN -e \ + "SELECT F_UpdateTime FROM lq_tech_general_manager_salary_statistics WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'") +echo "计算前 Cell金额: $BEFORE_CELL" +echo "计算前 UpdateTime: $BEFORE_UPDATE_TIME" +echo "" + +# 3. 调用计算接口 +echo "3. 调用计算接口..." +RESULT=$(curl -s -X POST "http://localhost:2011/api/Extend/lqtechgeneralmanagersalary/calculate/tech-general-manager?year=2025&month=12" \ + -H "Authorization: $TOKEN") +echo "响应: $RESULT" +echo "" + +# 4. 等待2秒 +echo "4. 等待2秒..." +sleep 2 +echo "" + +# 5. 查询计算后的数据 +echo "5. 查询计算后的数据..." +AFTER_CELL=$(mysql -h127.0.0.1 -uroot -p123456 lqerp_dev -sN -e \ + "SELECT F_CellAmount FROM lq_tech_general_manager_salary_statistics WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'") +AFTER_UPDATE_TIME=$(mysql -h127.0.0.1 -uroot -p123456 lqerp_dev -sN -e \ + "SELECT F_UpdateTime FROM lq_tech_general_manager_salary_statistics WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'") +echo "计算后 Cell金额: $AFTER_CELL" +echo "计算后 UpdateTime: $AFTER_UPDATE_TIME" +echo "" + +# 6. 验证结果 +echo "6. 验证结果..." +EXPECTED_CELL="69838.00" +if [ "$AFTER_CELL" == "$EXPECTED_CELL" ]; then + echo "✅ Cell金额正确: $AFTER_CELL (预期: $EXPECTED_CELL)" +else + echo "❌ Cell金额不正确: $AFTER_CELL (预期: $EXPECTED_CELL)" +fi + +if [ "$AFTER_UPDATE_TIME" != "$BEFORE_UPDATE_TIME" ]; then + echo "✅ UpdateTime已更新" +else + echo "⚠️ UpdateTime未更新" +fi +echo "" + +# 7. 查询门店明细 +echo "7. 查询门店明细..." +mysql -h127.0.0.1 -uroot -p123456 lqerp_dev -e \ + "SELECT JSON_EXTRACT(F_StoreDetail, '\$[2].StoreName') as StoreName, \ + JSON_EXTRACT(F_StoreDetail, '\$[2].CellAmount') as CellAmount \ + FROM lq_tech_general_manager_salary_statistics \ + WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'" +echo "" + +echo "=== 测试完成 ===" diff --git a/scripts/test/test_tech_gm_cell_amount_final.sh b/scripts/test/test_tech_gm_cell_amount_final.sh new file mode 100755 index 0000000..8fe8c1d --- /dev/null +++ b/scripts/test/test_tech_gm_cell_amount_final.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +echo "=== 科技部总经理Cell金额计算完整测试 ===" +echo "" + +# 1. 获取Token +echo "1. 获取Token..." +TOKEN=$(curl -s -X POST "http://localhost:2011/api/oauth/Login" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "account=admin&password=e10adc3949ba59abbe56e057f20f883e" | \ + python3 -c "import sys, json; data = json.load(sys.stdin); print(data.get('data', {}).get('token', ''))") + +if [ -z "$TOKEN" ]; then + echo "❌ 获取Token失败" + exit 1 +fi +echo "✅ Token获取成功: ${TOKEN:0:50}..." +echo "" + +# 2. 查询计算前的数据 +echo "2. 查询计算前的数据..." +BEFORE_CELL=$(mysql -h127.0.0.1 -uroot -p123456 lqerp_dev -sN -e \ + "SELECT F_CellAmount FROM lq_tech_general_manager_salary_statistics WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'") +BEFORE_UPDATE_TIME=$(mysql -h127.0.0.1 -uroot -p123456 lqerp_dev -sN -e \ + "SELECT F_UpdateTime FROM lq_tech_general_manager_salary_statistics WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'") +echo "计算前 Cell金额: $BEFORE_CELL" +echo "计算前 UpdateTime: $BEFORE_UPDATE_TIME" +echo "" + +# 3. 调用计算接口 +echo "3. 调用计算接口..." +RESPONSE=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST \ + "http://localhost:2011/api/Extend/lqtechgeneralmanagersalary/calculate/tech-general-manager?year=2025&month=12" \ + -H "Authorization: $TOKEN") +HTTP_CODE=$(echo "$RESPONSE" | grep "HTTP_CODE" | cut -d: -f2) +BODY=$(echo "$RESPONSE" | sed '/HTTP_CODE/d') + +echo "HTTP状态码: $HTTP_CODE" +if [ "$HTTP_CODE" = "200" ]; then + echo "响应: $BODY" | python3 -m json.tool 2>/dev/null || echo "响应: $BODY" +else + echo "❌ 接口调用失败" + echo "响应: $BODY" +fi +echo "" + +# 4. 等待3秒 +echo "4. 等待3秒..." +sleep 3 +echo "" + +# 5. 查询计算后的数据 +echo "5. 查询计算后的数据..." +AFTER_CELL=$(mysql -h127.0.0.1 -uroot -p123456 lqerp_dev -sN -e \ + "SELECT F_CellAmount FROM lq_tech_general_manager_salary_statistics WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'") +AFTER_UPDATE_TIME=$(mysql -h127.0.0.1 -uroot -p123456 lqerp_dev -sN -e \ + "SELECT F_UpdateTime FROM lq_tech_general_manager_salary_statistics WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'") +echo "计算后 Cell金额: $AFTER_CELL" +echo "计算后 UpdateTime: $AFTER_UPDATE_TIME" +echo "" + +# 6. 验证结果 +echo "6. 验证结果..." +EXPECTED_CELL="69838.00" +if [ "$AFTER_CELL" = "$EXPECTED_CELL" ]; then + echo "✅ Cell金额正确: $AFTER_CELL (预期: $EXPECTED_CELL)" +else + echo "❌ Cell金额不正确: $AFTER_CELL (预期: $EXPECTED_CELL)" +fi + +if [ "$AFTER_UPDATE_TIME" != "$BEFORE_UPDATE_TIME" ]; then + echo "✅ UpdateTime已更新" +else + echo "⚠️ UpdateTime未更新" +fi +echo "" + +echo "=== 测试完成 ==="