You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

287 lines
12 KiB

package com.dsideal.newUniversityExamination.selectcourse.service;
import com.alibaba.fastjson.JSONObject;
import com.dsideal.newUniversityExamination.selectcourse.model.MergeCourseTableModel;
import com.dsideal.newUniversityExamination.selectcourse.model.PreScheduleTimetableModel;
import com.dsideal.newUniversityExamination.selectcourse.model.TaskModel;
import com.dsideal.newUniversityExamination.selectcourse.model.TeachPlanModel;
import com.dsideal.newUniversityExamination.util.COMMON;
import com.dsideal.newUniversityExamination.util.ToolsUtil;
import com.jfinal.plugin.activerecord.Record;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author zms
*/
public class PreScheduleTimetableService {
public static final PreScheduleTimetableService service = new PreScheduleTimetableService();
/**
* @description 获取教师列表 By taskId
* @author Mr.zms
* @date 2019/4/30
* @return java.lang.String
*/
public String getCourseTeacherTime(String taskId, String classId,String classType) {
List<Record> teacherList = TeachPlanModel.dao.getTeacherListAndTimeByTaskId(taskId,classId,classType);
//获取预排课 上课信息 非单双周
List<Record> timeList = PreScheduleTimetableModel.dao.getPerTableCourseTime(taskId, classId,"","0");
Map<Integer, Integer> timeMap =new HashMap<>(timeList.size());
for(Record timeOb : timeList){
int count = Integer.parseInt(String.valueOf(timeOb.get("count")));
int courseId = Integer.parseInt(String.valueOf(timeOb.get("course_id")));
timeMap.put(courseId, count);
}
//获取单双周的课
List<Record> doubleList = PreScheduleTimetableModel.dao.getSingleDoubleCourseInfo(taskId,classId,classType);
String singleStr = ToolsUtil.getIds(doubleList, "subject_id")+","+ToolsUtil.getIds(doubleList, "subject_id2");
/*查询出本班级存在 合班合分层走班 的学科*/
Record heSubjectRecord = PreScheduleTimetableModel.dao.getSubjectListFromClassAndShift(taskId, classId);
String heSubjectIds = "" ;
if(!COMMON.isEmpty(heSubjectRecord)){
heSubjectIds = String.valueOf(heSubjectRecord.get("subject_id"));
}
for(Record teacherOb : teacherList){
teacherOb.set("person_id", COMMON.isEmpty(teacherOb.get("person_id"))?"":teacherOb.get("person_id"));
teacherOb.set("person_name", COMMON.isEmpty(teacherOb.get("person_name"))?"":teacherOb.get("person_name"));
//学科课时 - 已经上课的课时
int subjectId = teacherOb.get("subject_id") ;
int count = 0;
if(!COMMON.isEmpty(timeMap.get(subjectId))){
count = timeMap.get(subjectId);
}
int times = Integer.parseInt(String.valueOf(teacherOb.get("times")));
//单双周 课时 -1
String strSubject = String.valueOf(subjectId );
if(ToolsUtil.arrayIncludeStr(singleStr, strSubject)){
count = count+1;
}
teacherOb.set("times", times-count);
/*课时=0 不可用*/
if((times-count)<1){
teacherOb.set("b_use", 0);
}
/*合班学科 不可用*/
if(ToolsUtil.arrayIncludeStr(heSubjectIds, strSubject)){
teacherOb.set("b_use", 0);
}else{
teacherOb.set("b_use", 1);
}
}
if(!COMMON.isEmpty(doubleList)){
//获取预排课 上课信息 非单双周
List<Record> timeList2 = PreScheduleTimetableModel.dao.getPerTableCourseTime(taskId, classId,"","-1");
Map<Integer, Integer> timeMap2 =new HashMap<>(timeList2.size());
for(Record timeOb : timeList2){
int courseId = Integer.parseInt(String.valueOf(timeOb.get("course_id")));
timeMap2.put(courseId, 1);
}
for (Record record : doubleList) {
int subjectId = record.get("subject_id");
if(!COMMON.isEmpty(timeMap2.get(subjectId))){
record.set("times",0);
}
}
teacherList.addAll(doubleList);
}
JSONObject resultJson = new JSONObject();
resultJson.put("table_list", COMMON.convertListRecord2(teacherList));
resultJson.put("success", true);
return resultJson.toJSONString();
}
public JSONObject saveCourseTablePosition(String courseJson,String day, String section) {
//检验保存
JSONObject resultJson = checkSaveCourseTablePosition(courseJson, day, section);
boolean flag = resultJson.getBooleanValue("success");
if(!flag){
return resultJson ;
}
JSONObject jsonObject = JSONObject.parseObject(courseJson);
String taskId = String.valueOf(jsonObject.get("task_id"));
String classId = String.valueOf(jsonObject.get("class_id"));
String subjectId = String.valueOf(jsonObject.get("subject_id"));
String subjectId2 = String.valueOf(jsonObject.get("subject_id2"));
//保存预排课
if(COMMON.isEmpty(subjectId2)){
flag = PreScheduleTimetableModel.dao.saveCourseTablePosition(taskId,day,section,classId,subjectId,"0");
}else {
PreScheduleTimetableModel.dao.saveCourseTablePosition(taskId,day,section,classId,subjectId,"1");
flag = PreScheduleTimetableModel.dao.saveCourseTablePosition(taskId,day,section,classId,subjectId2,"2");
}
return SelectCourseBaseService.service.returnJsonResult(flag);
}
public String getPreCourseTable(String taskId, String classId,String courseJson) {
Record weekOb = MergeCourseTableModel.dao.getWeekOfClassByTaskId(taskId);
JSONObject dayJson = ToolsUtil.Record2Object(weekOb) ;
JSONObject [][] arr = CourseSelectTimeService.service.initializationArray(dayJson);
/*查询预排课课表*/
List<Record> classList = getPerTimeTableList(taskId,classId);
for(Record record : classList){
int day = record.get("day");
int section = record.get("section");
MergeCourseTableService.service.addArrAttributeValue(section-1, day-1, arr, record);
}
//增加走班课节
goClassSection(taskId, arr);
//新增校验冲突
addPreConfigCourseClass(taskId,courseJson,arr);
JSONObject resultJson = new JSONObject();
resultJson.put("success", true);
resultJson.put("info", "操作成功");
resultJson.put("table_Time", dayJson);
resultJson.put("arr", arr);
return resultJson.toJSONString();
}
private void addPreConfigCourseClass(String taskId,String courseJson,JSONObject [][] arr){
if(COMMON.isEmpty(courseJson)){
return;
}
JSONObject jsonObject = JSONObject.parseObject(courseJson);
List<Record> recordList = new ArrayList<>();
if(!COMMON.isEmpty(jsonObject.get("person_id"))){
String personId = String.valueOf(jsonObject.get("person_id"));
recordList.addAll( PreScheduleTimetableModel.dao.getPerScheduleTimeTable(taskId, "", personId, "", ""));
}
if(!COMMON.isEmpty(jsonObject.get("person_id2"))){
String personId = String.valueOf(jsonObject.get("person_id2"));
recordList.addAll( PreScheduleTimetableModel.dao.getPerScheduleTimeTable(taskId, "", personId, "", ""));
}
for (Record record : recordList) {
int day = record.getInt("day")-1;
int section = record.getInt("section")-1;
JSONObject jsonObjects = arr[section][day];
jsonObjects.put("section_type",1);
}
}
public List<Record> getPerTimeTableList(String taskId,String classId){
return PreScheduleTimetableModel.dao.getPerScheduleTimeTable(taskId, classId, "", "", "");
}
public String deleteCourseTableposition(String taskId, String classId,String course,String day, String section) {
JSONObject returnJson = new JSONObject();
//处理单双周删除
List<Record> doubleList = PreScheduleTimetableModel.dao.getSingleDoubleCourseInfo(taskId,classId,"2");
if(!COMMON.isEmpty(doubleList)){
for (Record record : doubleList) {
String subjectId = String.valueOf(record.get("subject_id"));
String subjectId2 = String.valueOf(record.get("subject_id2"));
if(course.equals(subjectId)){
PreScheduleTimetableModel.dao.deleteTimeTablePre(taskId, classId, subjectId2, day, section);
}
if(course.equals(subjectId2)){
PreScheduleTimetableModel.dao.deleteTimeTablePre(taskId, classId, subjectId, day, section);
}
}
}
boolean flag = PreScheduleTimetableModel.dao.deleteTimeTablePre(taskId, classId, course, day, section);
if(flag){
returnJson.put("success", true);
returnJson.put("info", "操作成功");
}else{
returnJson.put("success", false);
returnJson.put("info", "操作失败");
}
return returnJson.toJSONString();
}
/*预排课的走班课节拼接*/
private void goClassSection(String taskId,JSONObject [][] arr){
List<Record> timeList = TaskModel.dao.getTaskTimeList(taskId,"");
if(!COMMON.isEmpty(timeList)){
for(Record timeRecord : timeList ){
int type = Integer.parseInt(String.valueOf(timeRecord.get("type")));
int day = timeRecord.get("day");
int section = timeRecord.get("section");
Record recordOb = new Record();
recordOb.set("single_double", 0);
int i = section-1 ;
int j = day-1 ;
if(0 == type){
recordOb.set("person_name", "选考走班");
MergeCourseTableService.service.addArrAttributeValue(i, j, arr, recordOb);
//选考
arr[i][j].put("section_type", 3);
}else if (1 == type ){
recordOb.set("person_name", "学考走班");
MergeCourseTableService.service.addArrAttributeValue(i, j, arr, recordOb);
//学考
arr[i][j].put("section_type", 4);
}
}
}
}
public JSONObject checkSaveCourseTablePosition(String courseJson,String day,String section) {
JSONObject resultJson = new JSONObject() ;
resultJson.put("success", false);
JSONObject jsonObject = JSONObject.parseObject(courseJson);
String taskId = String.valueOf(jsonObject.get("task_id"));
String classId = String.valueOf(jsonObject.get("class_id"));
String classType = String.valueOf(jsonObject.get("class_type"));
/*校验当前课时是否有课*/
List<Record> classList = PreScheduleTimetableModel.dao.getPerScheduleTimeTable(taskId, classId, "", day, section);
if(!COMMON.isEmpty(classList)){
resultJson.put("info", "当前课节已经存在课程");
return resultJson;
}
String personId = String.valueOf(jsonObject.get("person_id"));
String personId2 = String.valueOf(jsonObject.get("person_id2"));
/*当教师 不为空 ,查询教师是否冲突*/
List<Record> teacherList = new ArrayList<>();
if(!COMMON.isEmpty(personId)){
teacherList.addAll(PreScheduleTimetableModel.dao.getPerScheduleTimeTable(taskId, "", personId, day, section));
}
if(!COMMON.isEmpty(personId2)){
teacherList.addAll(PreScheduleTimetableModel.dao.getPerScheduleTimeTable(taskId, "", personId2, day, section));
}
if(!COMMON.isEmpty(teacherList)){
String className = ToolsUtil.getIds(teacherList,"class_name");
resultJson.put("info", "与"+className+"存在教师冲突");
return resultJson;
}
String subjectId = String.valueOf(jsonObject.get("subject_id"));
String subjectId2 = String.valueOf(jsonObject.get("subject_id2"));
/*校验学科剩余课时*/
// 不是单双周
if(COMMON.isEmpty(subjectId2)){
List<Record> timeList = TaskModel.dao.getClassTimeList(taskId, classId, classType, subjectId, "1");
if(!COMMON.isEmpty(timeList)){
Record timeOb = timeList.get(0);
int times = Integer.parseInt(String.valueOf(timeOb.get("times")));
/*获取预排课 上课信息*/
List<Record> goCourseList = PreScheduleTimetableModel.dao.getPerTableCourseTime(taskId, classId,subjectId,"");
int userTimes = goCourseList.size();
if(times<=userTimes){
resultJson.put("info", "学科课时不足");
return resultJson;
}
}
}else {
// 单双周情况
List<Record> goCourseList1 = PreScheduleTimetableModel.dao.getPerTableCourseTime(taskId, classId,subjectId,"-1");
List<Record> goCourseList2 = PreScheduleTimetableModel.dao.getPerTableCourseTime(taskId, classId,subjectId2,"-1");
if(!COMMON.isEmpty(goCourseList1)||!COMMON.isEmpty(goCourseList2)){
resultJson.put("info", "学科课时不足");
return resultJson;
}
}
resultJson.put("success", true);
return resultJson ;
}
}