Blame view

docs/test-reports/送洗记录作废接口实现总结.md 5.85 KB
83a6fd1f   “wangming”   feat: 添加员工确认状态及相关...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
  # 送洗记录作废接口实现总结
  
  ## 📋 概述
  
  为送洗记录(清洗流水表 `lq_laundry_flow`)添加了作废接口,可以将记录标记为无效(`F_IsEffective = 0`),同时可以修改备注说明作废原因。
  
  ## ✅ 数据安全性验证
  
  ### 1. 送洗记录在计算中的使用情况
  
  #### 1.1 工资计算中的使用
  
  **店长工资计算** (`LqStoreManagerSalaryService`):
  - 使用条件:`F_IsEffective = 1` 且 `F_FlowType = 0`(只统计送出的记录)
  - 字段:`F_TotalPrice`(总费用)
  - 用途:计算洗毛巾费用,用于毛利计算
  
  **主任工资计算** (`LqDirectorSalaryService`):
  - 使用条件:`F_IsEffective = 1` 且 `F_FlowType = 0`(只统计送出的记录)
  - 字段:`F_TotalPrice`(总费用)
  - 用途:计算洗毛巾费用,用于毛利计算
  
  **事业部总经理工资计算** (`LqBusinessUnitManagerSalaryService`):
  - 使用条件:`F_IsEffective = 1` 且 `F_FlowType = 0`(只统计送出的记录)
  - 字段:`F_TotalPrice`(总费用)
  - 用途:计算洗毛巾费用,用于毛利计算
  
  #### 1.2 股份计算中的使用
  
  **门店股份统计** (`LqShareStatisticsStoreService`):
  - 使用条件:`F_IsEffective = 1` 且 `F_SendTime >= startDate AND F_SendTime <= endDate`
  - 字段:`F_TotalPrice`(总费用)
  - 用途:计算主营成本-毛巾(`CostTowel`
  - 说明:虽然代码中没有显式过滤 `F_FlowType = 0`,但由于使用了 `F_SendTime` 字段(只有送出记录才有此字段),逻辑上只统计送出记录
  
  ### 2. 安全性结论
  
  **所有计算逻辑都使用了 `F_IsEffective = 1` 的条件**
  
  - 工资计算:使用 `F_IsEffective = 1` 条件
  - 股份计算:使用 `F_IsEffective = 1` 条件
  - 费用统计:使用 `F_IsEffective = 1` 条件
  
  **作废操作是安全的**
  
  - 将记录的 `F_IsEffective` 设置为 0(无效)后,这些记录不会被任何计算逻辑统计
  - 作废后的记录仍保留在数据库中,可以通过列表查询查看,但不会参与任何统计计算
  
  ## 🔧 实现内容
  
  ### 1. DTO类
  
  创建了 `LqLaundryFlowCancelInput.cs`
  
  ```csharp
  public class LqLaundryFlowCancelInput
  {
      /// <summary>
      /// 记录ID
      /// </summary>
      [Required(ErrorMessage = "记录ID不能为空")]
      public string Id { get; set; }
  
      /// <summary>
      /// 备注(作废原因等说明)
      /// </summary>
      public string Remark { get; set; }
  }
  ```
  
  ### 2. 接口实现
  
  `LqLaundryFlowService.cs` 中添加了 `Cancel` 接口:
  
  - **接口路径**`POST /api/Extend/LqLaundryFlow/Cancel`
  - **功能**
    1. 将记录的 `F_IsEffective` 设置为 0(无效)
    2. 更新备注字段,添加作废标记和作废原因
    3. 检查记录是否存在
    4. 检查记录是否已经作废
    5. 如果作废的是送出记录,检查是否有对应的送回记录(如果有,不允许单独作废送出记录)
  
  ### 3. 接口特性
  
  -**安全性检查**:检查记录是否存在、是否已经作废
  -**业务逻辑检查**:送出记录如果有对应的送回记录,不允许单独作废
  -**备注处理**:如果提供了备注,追加到原备注;如果没有提供,添加默认作废标记
  -**错误处理**:完善的异常处理和错误提示
  
  ## 📝 接口使用说明
  
  ### 请求示例
  
  ```json
  POST /api/Extend/LqLaundryFlow/Cancel
  Content-Type: application/json
  
  {
    "id": "记录ID",
    "remark": "作废原因说明(可选)"
  }
  ```
  
  ### 响应示例
  
  ```json
  {
    "message": "作废成功",
    "id": "记录ID",
    "remark": "原备注\n[作废]作废原因说明"
  }
  ```
  
  ### 错误情况
  
  1. **记录ID为空**:返回 "记录ID不能为空"
  2. **记录不存在**:返回 "送洗记录不存在"
  3. **记录已作废**:返回 "该记录已经作废"
  4. **送出记录有对应送回记录**:返回 "该送出记录已有对应的送回记录,不能单独作废送出记录。如需作废,请先作废对应的送回记录"
  
  ## 🔍 备注处理逻辑
  
  1. **如果提供了备注**
     - 如果原备注不为空:`原备注\n[作废]新备注`
     - 如果原备注为空:`[作废]新备注`
  
  2. **如果没有提供备注**
     - 如果原备注为空:`[作废]`
     - 如果原备注不为空:`原备注\n[作废]`
  
  ## ⚠️ 注意事项
  
  1. **作废后不影响已有计算**
     - 作废操作只影响后续的计算
     - 已经计算完成的工资、股份等数据不会因为作废而自动重新计算
     - 如需更新已计算的数据,需要重新执行相应的计算流程
  
  2. **送出记录和送回记录的关系**
     - 如果送出记录有对应的送回记录,需要先作废送回记录,才能作废送出记录
     - 这是为了保持数据的一致性和完整性
  
  3. **作废后的数据查询**
     - 作废后的记录仍保留在数据库中
     - 列表查询可以通过 `IsEffective` 参数筛选有效/无效记录
     - 默认情况下,列表查询可以显示所有记录(包括作废的)
  
  ## 📊 影响范围
  
  ### ✅ 不受影响的计算
  
  - ✅ 费用计算:使用 `F_IsEffective = 1` 条件
  - ✅ 成本计算:使用 `F_IsEffective = 1` 条件
  - ✅ 工资计算:使用 `F_IsEffective = 1` 条件
  - ✅ 股份计算:使用 `F_IsEffective = 1` 条件
  
  ### ✅ 受影响的查询
  
  - ✅ 列表查询:可以通过 `IsEffective` 参数筛选
  - ✅ 统计查询:只统计 `F_IsEffective = 1` 的记录
  
  ## 📋 总结
  
  1. ✅ 接口实现完成:作废接口已实现,可以安全地作废送洗记录
  2. ✅ 数据安全性验证:所有计算逻辑都使用了 `F_IsEffective = 1` 条件,作废是安全的
  3. ✅ 业务逻辑检查:实现了完善的业务逻辑检查,确保数据一致性
  4. ✅ 备注处理:实现了灵活的备注处理逻辑,可以记录作废原因
  
  **结论**:送洗记录作废接口可以安全使用,不会对费用计算、成本计算、工资计算、股份计算等产生数据问题。