Making.School.Asignment.app/lib/common/utils/utils.dart

148 lines
5.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:school_asignment_app/common/job/homework_details.dart';
import 'package:school_asignment_app/page/home_page/children/quick_data_check/quick_data_check_state.dart';
class Utils{
Utils._internal();
/// 关闭键盘
static void hideKeyboard() {
FocusScopeNode? currentFocus = Get.focusScope?.nearestScope;
if (currentFocus == null) {
return;
}
if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
FocusManager.instance.primaryFocus?.unfocus();
}
}
// 是否是平板
static bool isPad([double mobilePhoneScale = 1.2]) {
return ScreenUtil().scaleWidth > mobilePhoneScale;
}
static String getDoubleRemoveZero(double? val, [String? defaultVal]) {
try {
if (val == null) throw Exception('数据为空');
List<String> _valArr = val.toString().split('.');
if (_valArr.length >= 2) {
if (int.parse(_valArr[1]) == 0) {
return val.toInt().toString();
}
return val.toString();
}
return val.toInt().toString();
} catch (e) {
return defaultVal ?? '';
}
}
/// 去除小数点
static String doubleToStringAsFixed(double val, {int fractionDigits = 2}) {
return val.toStringAsFixed(fractionDigits).replaceAll(RegExp(r'\.0*$'), '');
}
static calcRate (int divisor, int dividend) {
if(dividend != 0){
return ((100 * divisor) / dividend);
// return ((100 * divisor) / dividend).toStringAsFixed(0);
}else{
return 0;
}
}
static getHomeworkData(HomeworkDetails data){
CountData dataCount = CountData();
List<Dtls> kgt = data.dtls.where((w) => w.questionType == 1).toList();
dataCount.kgtAnswerCount = kgt.where((w) => w.state != 0).length;
dataCount.kgtOkCount = kgt.where((w) => w.state == 4).length;
dataCount.kgtDtlCount = kgt.length;
dataCount.kgtAnswerRate = Utils.calcRate(dataCount.kgtAnswerCount!, dataCount.kgtDtlCount!);
dataCount.kgtOkRate = Utils.calcRate(dataCount.kgtOkCount!, dataCount.kgtDtlCount!);
dataCount.kgtCount = data.questions.where((w) => w.questionType == 1).length;
List<Dtls> zgt = data.dtls.where((w) => w.questionType == 2).toList();
dataCount.zgtAnswerCount = zgt.where((w) => w.state != 0).length;
dataCount.zgtOkCount = zgt.where((w) => w.state == 4).length;
dataCount.zgtDtlCount = zgt.length;
dataCount.zgtAnswerRate = Utils.calcRate(dataCount.zgtAnswerCount!, dataCount.zgtDtlCount!);
dataCount.zgtOkRate = Utils.calcRate(dataCount.zgtOkCount!, dataCount.zgtDtlCount!);
dataCount.zgtCount = data.questions.where((w) => w.questionType == 2).length;
dataCount.studentCount = data.students.length;
dataCount.priorityStudents = data.students.where((w) => w.priorityAnnotate).toList();
for(var que in data.questions){
List<Dtls> ques = data.dtls.where((w) => w.templateId == que.templateId && w.questionNo == que.questionNo).toList();
que.answerCount = ques.where((w) => w.state != 0).length;
que.answerRate = Utils.calcRate(que.answerCount!, dataCount.studentCount!);
int okCount = ques.where((w) => w.state == 4).length;
que.okRate = Utils.calcRate(okCount, dataCount.studentCount!) ;
que.priorityInfo = ques.where((w) {
return dataCount.priorityStudents!.indexWhere((s) {
w.studentName = s.studentName;
return s.studentId == w.studentId;
}) > -1 && w.state != 4;
}).toList();
que.answerNgStudents = ques.where((w) {
w.studentName = data.students.firstWhere((s) => s.studentId == w.studentId).studentName;
return w.state == 2;
}).toList();
que.noAnswerStudents = ques.where((w) {
return w.state == 0;
}).toList();
que.answerOkStudents = ques.where((w) {
return w.state == 4;
}).toList();
}
dataCount.studentSubmitCount = data.students.where((s) => s.state != 0).length;
for(var stu in data.students){
stu.kgtStu = kgt.where((w) => w.studentId == stu.studentId).toList();
stu.kgtStu!.sort((a, b) => a.questionNo.compareTo(b.questionNo));
stu.kgtOkCount = stu.kgtStu!.where((w) => w.state == 4).length;
stu.kgtErrorCount = stu.kgtStu!.where((w) => w.state == 2).length;
stu.kgtAnswerCount = stu.kgtStu!.where((w) => w.state != 0).length;
stu.zgtStu = zgt.where((w) => w.studentId == stu.studentId).toList();
stu.zgtStu!.sort((a, b) => a.questionNo.compareTo(b.questionNo));
stu.zgtOkCount = stu.zgtStu!.where((w) => w.state == 4).length;
stu.zgtErrorCount = stu.zgtStu!.where((w) => w.state == 2).length;
stu.zgtUnrated = stu.zgtStu!.where((w) => w.state == 1).length;
stu.zgtAnswerCount = stu.zgtStu!.where((w) => w.state != 0).length;
stu.allOk = data.dtls.where((w) => w.studentId == stu.studentId && w.state != 4).length??0;
if( (stu.kgtStu!.length - stu.kgtAnswerCount!) + (stu.zgtStu!.length-stu.zgtAnswerCount!) == (stu.kgtStu!.length + stu.zgtStu!.length)){
stu.allNotDone = true;
}else{
stu.allNotDone = false;
}
}
data.students.sort((a, b) {
int num1 = a.state;
int num2 = b.state;
return num2.compareTo(num1);
});
for(var know in data.knows){
List<Questions> ques = data.questions.where((w) => w.knows.indexWhere((k) => k.knowledgeId == know.knowledgeId) > -1).toList();
List<Dtls> queDtls = data.dtls.where((w) => ques.indexWhere((q) => w.templateId == q.templateId && w.questionNo == q.questionNo) > -1).toList();
know.okCount = queDtls.where((w) => w.state == 4).length;
know.ttlCount = queDtls.length;
know.okRate = Utils.calcRate(know.okCount!, know.ttlCount!);
}
return dataCount;
}
}