|
@@ -84,95 +84,88 @@ public class TaCheckItemServiceImpl extends BaseServiceImpl<TaCheckItemMapper, T
|
84
|
84
|
throw new Exception("验证部分题干信息出错");
|
85
|
85
|
}
|
86
|
86
|
|
87
|
|
- if (Constants.CHECK_OF_LOC.equals(taCheckItem.getItemType())) {
|
88
|
|
- // 如果是实地问卷, 试卷份数不能多于规定份数
|
89
|
|
- int count = taCheckAnswerMapper.countByItem(taCheckItem.getItemId());
|
90
|
|
- if (count >= taCheckItem.getNum()) {
|
91
|
|
- throw new Exception("当前实地问卷已收齐, 无须作答");
|
92
|
|
- }
|
93
|
|
- }
|
94
|
|
-
|
95
|
|
- // 答题的时候, 顺便把问题单生成好
|
96
|
|
- double[] scores = answerItems(taCheckItem, taCheckAnswer, quList, answerItemList, sysUser);
|
97
|
|
-
|
98
|
|
- if (Constants.CHECK_OF_SURVEY.equals(taCheckItem.getItemType())) {
|
99
|
|
- // 调查问卷不需要计算当前试卷的分数, 最后才能计算出来
|
100
|
|
- taCheckAnswerMapper.insert(taCheckAnswer);
|
101
|
|
-
|
102
|
|
-// // 但是需要更新答卷份数
|
|
87
|
+// if (Constants.CHECK_OF_LOC.equals(taCheckItem.getItemType())) {
|
|
88
|
+// // 如果是实地问卷, 试卷份数不能多于规定份数
|
103
|
89
|
// int count = taCheckAnswerMapper.countByItem(taCheckItem.getItemId());
|
104
|
|
-// taCheckItem.setNum(count);
|
105
|
|
-// updateById(taCheckItem);
|
106
|
|
- return;
|
107
|
|
- }
|
108
|
|
-
|
109
|
|
- if (Constants.CHECK_OF_LOC.equals(taCheckItem.getItemType())) {
|
110
|
|
- // 实地调查, 需要计算当前这份试卷的分数
|
111
|
|
- double positiveScore = scores[0];
|
112
|
|
- double negativeScore = scores[1];
|
113
|
|
-
|
114
|
|
- // 每份试卷的得分 = 总分 / 份数
|
115
|
|
- double maxScore = taCheckItem.getFullScore() / taCheckItem.getNum();
|
116
|
|
- double score = negativeScore + positiveScore;
|
117
|
|
-//
|
118
|
|
- if (score > 0) {
|
119
|
|
- // 没有扣分就是满分
|
120
|
|
- score = maxScore;
|
121
|
|
- } else {
|
122
|
|
- // 有扣分项, 总分 - 扣分
|
123
|
|
- score = maxScore + score;
|
124
|
|
- }
|
125
|
|
-
|
126
|
|
- // 如果得分超过总分
|
127
|
|
- if (score > maxScore) {
|
128
|
|
- score = maxScore;
|
129
|
|
- }
|
130
|
|
-
|
131
|
|
- taCheckAnswer.setScore(score);
|
132
|
|
- taCheckAnswerMapper.insert(taCheckAnswer);
|
133
|
|
- }
|
|
90
|
+// if (count >= taCheckItem.getNum()) {
|
|
91
|
+// throw new Exception("当前实地问卷已收齐, 无须作答");
|
|
92
|
+// }
|
|
93
|
+// }
|
|
94
|
+
|
|
95
|
+ // 计算每一题的得分, 以及总分
|
|
96
|
+ // 并同步生成问题单
|
|
97
|
+ double score = calcAnswerItems(sysUser, taCheckItem, taCheckAnswer, quList, answerItemList);
|
|
98
|
+ taCheckAnswer.setScore(score);
|
|
99
|
+ taCheckAnswerMapper.insert(taCheckAnswer);
|
134
|
100
|
}
|
135
|
101
|
|
136
|
102
|
/**
|
137
|
|
- * 计算每份试卷份数
|
|
103
|
+ * 作答计算分数
|
|
104
|
+ * 试卷总分 = 每一题分数求和
|
|
105
|
+ * 选择题分数 = 选中的选项分数
|
|
106
|
+ * 填空题分数 = 填写的数字 * 对应的分值
|
|
107
|
+ * @param sysUser
|
138
|
108
|
* @param taCheckItem
|
139
|
109
|
* @param taCheckAnswer
|
|
110
|
+ * @param quList
|
|
111
|
+ * @param answerItemList
|
140
|
112
|
* @throws Exception
|
141
|
113
|
*/
|
142
|
|
- private double[] answerItems(TaCheckItem taCheckItem,
|
143
|
|
- TaCheckAnswer taCheckAnswer,
|
144
|
|
- List<TaCheckItemQu> quList,
|
145
|
|
- List<TaCheckAnswerItem> answerItemList,
|
146
|
|
- SysUser sysUser
|
147
|
|
- ) throws Exception {
|
|
114
|
+ private double calcAnswerItems(
|
|
115
|
+ SysUser sysUser,
|
|
116
|
+ TaCheckItem taCheckItem,
|
|
117
|
+ TaCheckAnswer taCheckAnswer,
|
|
118
|
+ List<TaCheckItemQu> quList,
|
|
119
|
+ List<TaCheckAnswerItem> answerItemList
|
|
120
|
+ ) throws Exception{
|
148
|
121
|
LocalDateTime now = LocalDateTime.now();
|
149
|
|
- double negativeScore = 0.0; // 扣分
|
150
|
|
- double positiveScore = 0.0; // 得分
|
|
122
|
+ //题目分值
|
|
123
|
+ double totalScore = 0.0;
|
151
|
124
|
for(TaCheckAnswerItem item : answerItemList) {
|
152
|
|
- boolean mustCreateIssue = false;
|
|
125
|
+ // 每一题分值
|
|
126
|
+ double score = 0.0;
|
153
|
127
|
// 找到对应的题目
|
154
|
128
|
TaCheckItemQu qu = getQu(quList, item.getQuId());
|
155
|
129
|
// 如果是选择题, 对应的答案
|
156
|
130
|
TaCheckItemAn standAn = null;
|
157
|
|
- // + 代表得分, 否则代表扣分
|
158
|
|
- int sign = "+".equals(qu.getComputeType()) ? 1 : -1;
|
159
|
131
|
|
160
|
|
- double score = 0.0;
|
161
|
132
|
if (Constants.QU_OF_FILL.equals(qu.getQuType())) {
|
162
|
133
|
// 如果是填空题, 用户填的应该是数字, 没填就是 0
|
163
|
|
- Double an = StringUtils.isEmpty(item.getAnswer()) ? 0.0 : Double.parseDouble(item.getAnswer());
|
164
|
|
- score = an * qu.getAnScore();
|
|
134
|
+ Double fillNum = StringUtils.isEmpty(item.getAnswer()) ? 0.0 : Double.parseDouble(item.getAnswer());
|
|
135
|
+
|
|
136
|
+ // 填空得分 = 填空的数字 * 每个数字的分数
|
|
137
|
+ Double fillScore = fillNum * qu.getAnScore();
|
|
138
|
+
|
|
139
|
+ // 如果是扣分项, 那么得分 = 总分 - 扣分
|
|
140
|
+ if (fillScore < 0) {
|
|
141
|
+ score = qu.getMaxScore() + fillScore;
|
|
142
|
+ if (score < 0) {
|
|
143
|
+ score = 0;
|
|
144
|
+ }
|
|
145
|
+ } else {
|
|
146
|
+ // 如果是得分项, 那么 分数 = 得分
|
|
147
|
+ score = fillScore;
|
|
148
|
+ }
|
165
|
149
|
} else if (Constants.QU_OF_RADIO.equals(qu.getQuType())) {
|
166
|
150
|
// 如果是选择题, 找到对应的答案
|
167
|
151
|
standAn = taCheckItemAnMapper.getOneBy(qu.getQuId(), item.getAnswerCode());
|
168
|
|
-
|
169
|
152
|
score = standAn.getScore();
|
170
|
153
|
}
|
171
|
154
|
|
|
155
|
+ // 如果得分超过最大值
|
172
|
156
|
if (score > qu.getMaxScore()) {
|
173
|
157
|
score = qu.getMaxScore();
|
174
|
158
|
}
|
175
|
|
- score *= sign;
|
|
159
|
+
|
|
160
|
+ // 判断是否需要生成问题单
|
|
161
|
+ boolean isIssue = false;
|
|
162
|
+ if (score < qu.getMaxScore()) {
|
|
163
|
+ // 如果当前这个题目, 没有得到满分, 就生成问题单
|
|
164
|
+ isIssue = true;
|
|
165
|
+ }
|
|
166
|
+
|
|
167
|
+ // 每份试卷的分数 = 各题目的分数求和
|
|
168
|
+ totalScore += score;
|
176
|
169
|
|
177
|
170
|
item.setItemId(StringUtils.uuid());
|
178
|
171
|
item.setAnswerId(taCheckAnswer.getAnswerId());
|
|
@@ -182,13 +175,6 @@ public class TaCheckItemServiceImpl extends BaseServiceImpl<TaCheckItemMapper, T
|
182
|
175
|
item.setStatus(Constants.STATUS_NORMAL);
|
183
|
176
|
taCheckAnswerItemMapper.insert(item);
|
184
|
177
|
|
185
|
|
- if (score > 0) {
|
186
|
|
- positiveScore += score;
|
187
|
|
- } else {
|
188
|
|
- mustCreateIssue = true;
|
189
|
|
- negativeScore += score;
|
190
|
|
- }
|
191
|
|
-
|
192
|
178
|
// 保存附件
|
193
|
179
|
if (null != item.getAttachList()) {
|
194
|
180
|
for (TaAttach taAttach : item.getAttachList()) {
|
|
@@ -202,13 +188,13 @@ public class TaCheckItemServiceImpl extends BaseServiceImpl<TaCheckItemMapper, T
|
202
|
188
|
}
|
203
|
189
|
}
|
204
|
190
|
|
205
|
|
- // 如果得分小于0, 说明是扣分项, 生成问题单
|
206
|
|
- if (mustCreateIssue && Constants.CHECK_OF_LOC.equals(taCheckItem.getItemType())) {
|
|
191
|
+ // 点位问题,生成问题单
|
|
192
|
+ if (Constants.CHECK_OF_LOC.equals(taCheckItem.getItemType()) && isIssue) {
|
207
|
193
|
createNewIssue(sysUser, taCheckItem, qu, standAn, taCheckAnswer, item);
|
208
|
194
|
}
|
209
|
195
|
}
|
210
|
196
|
|
211
|
|
- return new double[] {positiveScore, negativeScore};
|
|
197
|
+ return totalScore;
|
212
|
198
|
}
|
213
|
199
|
|
214
|
200
|
private void createNewIssue(SysUser sysUser,
|