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
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 ;
|
|
}
|
|
}
|