提交代码修改

This commit is contained in:
zlwu committed 2025-07-18 22:08:03 +08:00
1 parent 68d470391f
commit 9562e32697
5 files changed
+502 -83

No files matched your search

@@ -450,6 +450,8 @@ await Promise.all(promises);
| 1.0.1 | 2025-07-17 | 优化题目选项获取接口,增强前端题目选项显示功能 | Cursor |
| 1.0.2 | 2025-07-17 | 修复选项排序值保存后实时更新功能,优化用户体验 | wuzilong |
| 1.0.3 | 2025-07-17 | 添加选项保存防重复提交机制,解决幂等性控制冲突 | wuzilong |
| 1.0.4 | 2025-07-18 | 优化问答题文本回答展示功能,提高Vue渲染稳定性 | wuzilong |
| 1.0.5 | 2025-07-18 | 增强问卷答题记录接口功能,返回答题详情数据 | wuzilong |
## 附录
@@ -465,7 +467,207 @@ await Promise.all(promises);
- 总分(total_score) = 所有题目的得分之和
- 平均分(avg_score) = 总分 ÷ 有分值的题目数量(不包括问答题)
### 问答题文本回答数据结构
**统计分析接口中问答题文本回答数据结构**:
问卷统计分析接口(`/hq/satSurvey/{id}/statistics`)返回的问答题文本回答数据结构如下:
```json
"textAnswers": [
{
"id": 393,
"answer_text": "用户回答内容示例",
"text_length": 12,
"answer_time": "2025-07-18 10:40:35"
}
]
```
**字段说明**:
| 字段名 | 类型 | 描述 |
|-------|-----|------|
| id | Integer | 回答ID,唯一标识 |
| answer_text | String | 回答文本内容 |
| text_length | Integer | 文本长度(字符数) |
| answer_time | String | 回答时间,格式:yyyy-MM-dd HH:mm:ss |
**前端使用注意事项**:
- 在Vue循环渲染textAnswers数组时,应使用answer.id作为key值,而非索引,确保Vue的虚拟DOM正确更新
- 示例:`<div v-for="(answer, idx) in question.textAnswers.slice(0, 5)" :key="answer.id || idx" class="answer-item">`
- 2025-07-18修复:解决了文本回答因key不唯一导致的渲染问题,详见`docs/变更管理/code-adjust-record-2025-07-18-wuzilong.md`
#### 2025-07-18 接口返回顺序与问答题答案优化
- `/hq/satSurvey/record/{recordId}` 接口返回参数调整:
1. `answers` 数组顺序严格按照问卷题目顺序返回。
2. `answers.options` 选项数组顺序严格按照题目原始选项顺序返回。
3. 问答题(`questionType=3`)的 `answerValue` 字段取自 `remark` 字段,真实还原用户填写内容。
> 以上调整保证了前端展示与问卷设计一致,提升了数据准确性。
### 获取问卷的所有答题记录列表
**请求方式**:GET
**请求路径**:`/hq/satSurvey/{surveyId}/records`
**请求参数**:
| 参数名 | 类型 | 必填 | 描述 |
|-------|-----|------|------|
| surveyId | Long | 是 | 问卷ID,路径参数 |
| status | String | 否 | 答题状态(1-已提交,0-未提交) |
| userName | String | 否 | 用户姓名,模糊查询 |
| dateRange | String[] | 否 | 日期范围 |
| pageNum | Integer | 否 | 页码,默认1 |
| pageSize | Integer | 否 | 每页条数,默认10 |
**请求示例**:
```
GET /hq/satSurvey/1945836064483778562/records?pageNum=1&pageSize=10&surveyId=1945836064483778562
```
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"total": 5,
"rows": [
{
"user_id": 2008,
"userName": "智控学院郑十",
"deptName": "智能控制学院",
"id": "1946035501017587714",
"survey_id": "1945836064483778562",
"submit_time": "2025-07-18 10:33:14",
"total_score": "24.00",
"create_time": "2025-07-18 10:33:14",
"status": "1",
"duration": 313,
"startTime": "2025-07-18T10:33:14",
"endTime": "2025-07-18T10:33:14",
"answers": [
{
"id": 1945836064483778563,
"questionId": 1945836064483778563,
"questionTitle": "您对后勤服务总体满意度如何?",
"questionType": "1",
"score": 4.0,
"answerValue": "B",
"options": [
{
"optionId": 1945836064483778569,
"optionValue": "B",
"optionText": "满意",
"isSelected": true
}
]
},
{
"id": 1945836064483778564,
"questionId": 1945836064483778564,
"questionTitle": "您认为校园环境有哪些需要改善的地方?",
"questionType": "2",
"score": 11.0,
"answerValue": "A,C,D",
"options": [
{
"optionId": 1945836064483778570,
"optionValue": "A",
"optionText": "绿化维护",
"isSelected": true
},
{
"optionId": 1945836064483778572,
"optionValue": "C",
"optionText": "卫生状况",
"isSelected": true
},
{
"optionId": 1945836064483778573,
"optionValue": "D",
"optionText": "基础设施",
"isSelected": true
}
]
},
{
"id": 1945836064483778565,
"questionId": 1945836064483778565,
"questionTitle": "您对校园后勤服务的建议",
"questionType": "3",
"score": 0,
"answerValue": "希望增加自习室的开放时间,目前晚上关门太早"
}
]
},
{
"user_id": 4,
"userName": "仅本人 密码666666",
"deptName": "行政单位",
"id": null,
"survey_id": null,
"submit_time": null,
"total_score": 0,
"create_time": null,
"status": "0",
"duration": 0
}
]
}
}
```
**特殊说明**:
1. **功能强化(2025-07-18)**:接口现在返回已提交记录的答题详情(`answers`字段),无需额外请求
2. 每条记录(已提交状态)包含完整的答题详情数据,包括:
- 题目信息:`questionId`、`questionTitle`、`questionType`
- 答案内容:`score`、`answerValue`
- 选项数据(单选/多选题):`options`数组,包含所有选中的选项
3. 问题类型(`questionType`):
- `1`:单选题
- `2`:多选题
- `3`:问答题
4. 未提交的记录(`status="0"`)不包含答题详情
**最佳实践**:
- 前端可直接使用返回的`answers`数据渲染答题详情,无需额外请求
- 单选题和多选题显示选项,问答题显示文本内容
### 相关文件
- 数据库表结构:`docs/设计文档/database/hzdyjs_xg.sql`
- 变更记录:`docs/变更管理/code-adjust-record-2025-07-01-cursor.md`
- 文本回答展示修复:`docs/变更管理/code-adjust-record-2025-07-18-wuzilong.md`
- 答题详情功能优化:`docs/变更管理/code-adjust-record-2025-07-18-wuzilong.md`
## FAQ 常见问题解答
### 1. 问卷答题记录查询报错 "Unknown column 'u.deleted' in 'where clause'"
**问题描述**:
获取问卷答题记录列表时报错:`java.sql.SQLSyntaxErrorException: Unknown column 'u.deleted' in 'where clause'`
**原因分析**:
在SQL查询中使用了 `u.deleted = 0` 条件,但实际上 `sys_user` 表中逻辑删除字段名是 `del_flag` 而非 `deleted`。这是系统表与业务表之间的字段命名差异导致的。
**解决方案**:
修改SQL查询,将 `WHERE u.deleted = 0` 改为 `WHERE u.del_flag = '0'`(注意类型也从数字改为了字符串)。
**相关代码**:
```java
// 修改前
sql.append("WHERE u.deleted = 0 ");
// 修改后
sql.append("WHERE u.del_flag = '0' ");
```
**注意事项**:
- 系统表(如sys_user, sys_role等)使用 `del_flag` 作为逻辑删除字段,类型为char(1)
- 业务表(如hq_sat_survey等)使用 `deleted` 作为逻辑删除字段,类型为tinyint(1)
- 在跨表关联查询时,务必注意这一差异,避免类似错误