|
|
package com.dsideal.newUniversityExamination.selectcourse.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.dsideal.newUniversityExamination.selectcourse.model.CurriculumPlanModel;
|
|
|
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.selectcourse.util.CoreUtil;
|
|
|
import com.dsideal.newUniversityExamination.util.COMMON;
|
|
|
import com.dsideal.newUniversityExamination.util.Constant;
|
|
|
import com.dsideal.newUniversityExamination.util.FileUtil;
|
|
|
import com.dsideal.newUniversityExamination.util.ToolsUtil;
|
|
|
import com.jfinal.kit.PathKit;
|
|
|
import com.jfinal.plugin.activerecord.Page;
|
|
|
import com.jfinal.plugin.activerecord.Record;
|
|
|
import com.jfinal.upload.UploadFile;
|
|
|
import org.apache.poi.hssf.usermodel.*;
|
|
|
|
|
|
import java.io.File;
|
|
|
import java.io.FileInputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
public class TeachPlanService {
|
|
|
|
|
|
public static final TeachPlanService service = new TeachPlanService();
|
|
|
|
|
|
/*获取教师列表*/
|
|
|
public String getTeacherInfoByTaskId(String taskId, String subjectId) {
|
|
|
List<Record> list=TaskModel.dao.getCurriculumPlanTeacherList(taskId, subjectId,"","");
|
|
|
return COMMON.convert2JsonStr(list);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @Description: 班级下教师上课状态
|
|
|
* @author :周明升
|
|
|
* @date: 2018-12-4 下午1:32:11
|
|
|
* @return: List<Record>
|
|
|
* @throws
|
|
|
*/
|
|
|
private List<Record> getTeacherStatusList(List<Record> classList,List<Record> classTimeList,Map<String,Record> teacherMap){
|
|
|
for(Record classRecord : classList){
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
String classId = String.valueOf(classRecord.get("class_id"));
|
|
|
String classType = String.valueOf(classRecord.get("class_type"));
|
|
|
for (Record timeObj : classTimeList ) {
|
|
|
String timeClassId = String.valueOf(timeObj.get("class_id"));
|
|
|
String timeClassType = String.valueOf(timeObj.get("class_type"));
|
|
|
if(classId.equals(timeClassId)&&classType.equals(timeClassType)){
|
|
|
JSONObject jsonOb = new JSONObject();
|
|
|
String subjectId = String.valueOf(timeObj.get("subject_id"));
|
|
|
String subjectName = String.valueOf(timeObj.get("subject_name"));
|
|
|
String edit = String.valueOf(timeObj.get("edit"));
|
|
|
String zhStr = classId+"|"+subjectId+"|"+classType;
|
|
|
Record record = teacherMap.get(zhStr);
|
|
|
jsonOb.put("subject_id",subjectId );
|
|
|
jsonOb.put("subject_name",subjectName );
|
|
|
if(COMMON.isEmpty(record)){
|
|
|
jsonOb.put("type", "1");//没有设置教师
|
|
|
}else{
|
|
|
jsonOb.put("id", String.valueOf(record.get("id")));
|
|
|
jsonOb.put("teacher_id", String.valueOf(record.get("teacher_id")));
|
|
|
jsonOb.put("person_name", String.valueOf(record.get("person_name")));
|
|
|
jsonOb.put("type", "3");//设置教师了
|
|
|
}
|
|
|
if("0".equals(edit)){
|
|
|
jsonOb.put("type", "0"); //不可设置教师
|
|
|
}
|
|
|
jsonArray.add(jsonOb);
|
|
|
}
|
|
|
}
|
|
|
classRecord.set("class_list", jsonArray);
|
|
|
}
|
|
|
return classList ;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public JSONObject getTeacherStatus(String taskId,String isOrdinary){
|
|
|
JSONObject resultJson = new JSONObject();
|
|
|
/*获取所有班级班级列表*/
|
|
|
List<Record> classList = TaskModel.dao.getClassListByTaskId(taskId,"");
|
|
|
/*班级-课时*/
|
|
|
List<Record> classTimeList = TaskModel.dao.getClassTimeList(taskId, "", "","","");
|
|
|
/*走班学科列表*/
|
|
|
List<Record> selectCourseList = new ArrayList<>();
|
|
|
for(Record record : classTimeList){
|
|
|
String classId = String.valueOf(record.get("class_id"));
|
|
|
if(!COMMON.isEmpty(record.get("times_xue"))&&"-1".equals(classId)){
|
|
|
selectCourseList.add(record);
|
|
|
}
|
|
|
}
|
|
|
/*行政班*/
|
|
|
List<Record> xzlist = new ArrayList<>();
|
|
|
/*获取教师上课的Map*/
|
|
|
Map<String,Record> teacherMap =getTeacherMap(taskId);
|
|
|
if("0".equals(isOrdinary)){
|
|
|
/*学考走班,选考走班*/
|
|
|
List<Record> xuelist = new ArrayList<>();
|
|
|
List<Record> xuanlist = new ArrayList<>();
|
|
|
/*区别班级类型*/
|
|
|
for(Record record : classList ){
|
|
|
int classType = Integer.parseInt(String.valueOf(record.get("class_type")));
|
|
|
switch (classType) {
|
|
|
case 0:
|
|
|
xuanlist.add(record);
|
|
|
break;
|
|
|
case 1:
|
|
|
xuelist.add(record);
|
|
|
break;
|
|
|
case 2:
|
|
|
xzlist.add(record);
|
|
|
break;
|
|
|
default:
|
|
|
xzlist.add(record);;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
xzlist = getTeacherStatusList(xzlist, classTimeList, teacherMap);
|
|
|
xuanlist = getTeacherStatusList(xuanlist, classTimeList, teacherMap);
|
|
|
xuelist = getTeacherStatusList(xuelist, classTimeList, teacherMap);
|
|
|
JSONArray jsonArray=getSubjectList(selectCourseList, xuanlist);
|
|
|
JSONArray jsonArrayXk=getSubjectList(selectCourseList, xuelist);
|
|
|
resultJson.put("selectXk", jsonArrayXk);
|
|
|
resultJson.put("selectSingle_table", jsonArray);
|
|
|
}else if("1".equals(isOrdinary)){
|
|
|
xzlist = getTeacherStatusList(classList, classTimeList, teacherMap);
|
|
|
}
|
|
|
resultJson.put("selectXz", COMMON.convertListRecord2(xzlist));
|
|
|
resultJson.put("success", true);
|
|
|
resultJson.put("info", Constant.SUCCESS_INFO);
|
|
|
return resultJson;
|
|
|
|
|
|
}
|
|
|
|
|
|
private Map<String,Record> getTeacherMap(String taskId){
|
|
|
List<Record> teacherList = TeachPlanModel.dao.getGoCourseTeacherList(taskId, "", "", "", "");
|
|
|
Map<String,Record> teacherMap =new HashMap<>();
|
|
|
for(Record record : teacherList){
|
|
|
String classId = String.valueOf(record.get("class_id"));
|
|
|
String subjectId = String.valueOf(record.get("subject_id"));
|
|
|
String classtype = String.valueOf(record.get("class_type"));
|
|
|
String key = classId+"|"+subjectId+"|"+classtype;
|
|
|
teacherMap.put(key, record);
|
|
|
}
|
|
|
return teacherMap ;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* @Description: 以学科为分组展示班级
|
|
|
* @author :周明升
|
|
|
* @date: 2018-12-4 下午1:32:30
|
|
|
* @return: JSONArray
|
|
|
* @throws
|
|
|
*/
|
|
|
private JSONArray getSubjectList(List<Record> subjectList,List<Record> list){
|
|
|
JSONArray jsonArrayXk=new JSONArray();
|
|
|
for (int j = 0; j < subjectList.size(); j++) {
|
|
|
JSONArray jsonArray1=new JSONArray();
|
|
|
JSONObject json1=new JSONObject();
|
|
|
json1.put("subject_name", subjectList.get(j).get("subject_name"));
|
|
|
json1.put("subject_id", subjectList.get(j).get("subject_id"));
|
|
|
for (int i = 0; i < list.size(); i++) { //循环 list
|
|
|
JSONObject json=new JSONObject();
|
|
|
Record record = list.get(i);
|
|
|
String bj= String.valueOf(record.get("course")) ;
|
|
|
JSONArray jsonArr = record.get("CLASS_LIST");
|
|
|
JSONObject jsonOb = (JSONObject) jsonArr.get(0);
|
|
|
if(bj.equals(String.valueOf(subjectList.get(j).get("subject_id"))) ){
|
|
|
json.put("id",String.valueOf(jsonOb.get("id")));
|
|
|
json.put("type", String.valueOf(jsonOb.get("type")));
|
|
|
json.put("teacher_id", String.valueOf(jsonOb.get("teacher_id")));
|
|
|
json.put("person_name",String.valueOf(jsonOb.get("person_name")));
|
|
|
json.put("class_id", String.valueOf(record.get("class_id")));
|
|
|
json.put("class_type", String.valueOf(record.get("class_type")));
|
|
|
json.put("class_name", String.valueOf(record.get("class_name")));
|
|
|
json.put("group_id", String.valueOf(record.get("group_id")));
|
|
|
}
|
|
|
if(!COMMON.isEmpty(json)){
|
|
|
jsonArray1.add(json);
|
|
|
json1.put("singleSubject", jsonArray1);
|
|
|
}
|
|
|
}
|
|
|
jsonArrayXk.add(json1);
|
|
|
}
|
|
|
return jsonArrayXk;
|
|
|
}
|
|
|
|
|
|
public String getTeacherCourseTimeInfo(String taskId, String classId,String classType,String groupId,String subjectId,String calculateType) {
|
|
|
String select ="1";
|
|
|
if("1".equals(classType)){ /*学考教学班*/
|
|
|
select="3";
|
|
|
}else if(!"2".equals(calculateType)&&"0".equals(classType)){ /*定二走一和优三选考教学班-互斥*/
|
|
|
select="2";
|
|
|
}else if("2".equals(calculateType)&&"0".equals(classType)){ /*大走班选考教学班*/
|
|
|
select="3";
|
|
|
}
|
|
|
/*定二走一和优三选考教学班此学科下老师的集合*/
|
|
|
String teacher = null;
|
|
|
if("2".equals(select)){
|
|
|
List<Record> list= TeachPlanModel.dao.getTeacherGoCourse(taskId, "", classType, "", subjectId);
|
|
|
teacher = ToolsUtil.getIds(list, "teacher_id");
|
|
|
}
|
|
|
List<Record> list=new ArrayList<>();
|
|
|
/*课程计划学科下教师课时,教师信息*/
|
|
|
List<Record> listTeacher= TaskModel.dao.getCurriculumPlanTeacherList(taskId, subjectId,"","");
|
|
|
/*当前排课任务学科课时*/
|
|
|
List<Record> timeList = TaskModel.dao.getClassTimeList(taskId, classId, classType,subjectId,"edit");
|
|
|
int times = 0 ;
|
|
|
if(!COMMON.isEmpty(timeList)){
|
|
|
times = timeList.get(0).get("times");
|
|
|
}
|
|
|
/*教师上课总课时*/
|
|
|
List<Record> teacherList= TeachPlanModel.dao.getTeacherGoCourse(taskId, "", "", "", subjectId);
|
|
|
Map<String, Record> teacherGoMap = ToolsUtil.list2Map(teacherList, "teacher_id");
|
|
|
if(!COMMON.isEmpty(listTeacher)){
|
|
|
/*教师剩余课时*/
|
|
|
for (int i = 0; i < listTeacher.size(); i++) {
|
|
|
Record recordteacher=listTeacher.get(i);
|
|
|
/*选考,学考,课时*/
|
|
|
Long personTimes = recordteacher.getLong("times"); //教师总课时
|
|
|
String personId = String.valueOf(recordteacher.get("person_id"));
|
|
|
// List<Record> teacherList= TeachPlanModel.dao.getTeacherGoCourse(taskId, "", "", personId, subjectId);
|
|
|
//int alltimes = getTeacherTimeSum(teacherList);
|
|
|
Record alltimeRecord = teacherGoMap.get(personId);
|
|
|
int alltimes = 0 ;
|
|
|
if(!COMMON.isEmpty(alltimeRecord)){
|
|
|
alltimes = Integer.parseInt(String.valueOf(alltimeRecord.get("times")));
|
|
|
}
|
|
|
long teacherMuchTime = personTimes - alltimes ;
|
|
|
if(teacherMuchTime >= times){
|
|
|
/*选考大走班教师限制&&学考教学班,此教师所选的班级的group_id的和*/
|
|
|
if("3".equals(select)){
|
|
|
//String strGroup = getGroupId(teacherList, classType);
|
|
|
/*教师选过班级 --选过的班级的group_id是否包含此次选的group_id*/
|
|
|
if(!COMMON.isEmpty(alltimeRecord)){
|
|
|
if(checkGroupAll(alltimeRecord, classType, groupId)){
|
|
|
addTeacherListValue(list, recordteacher, teacherMuchTime, classId,classType);
|
|
|
}
|
|
|
}else{ /*教师没有选过班级*/
|
|
|
addTeacherListValue(list, recordteacher, teacherMuchTime, classId,classType);
|
|
|
}
|
|
|
/*教师互斥*/
|
|
|
}else if("2".equals(select)){
|
|
|
if(COMMON.isEmpty(teacher)){ /*没有老师授课*/
|
|
|
addTeacherListValue(list, recordteacher, teacherMuchTime, classId,classType);
|
|
|
}else{/*老师没有教此班级的课*/
|
|
|
if(!teacher.contains(String.valueOf(recordteacher.get("person_id")))){
|
|
|
addTeacherListValue(list, recordteacher, teacherMuchTime, classId,classType);
|
|
|
}
|
|
|
}
|
|
|
}else if("1".equals(select)){ /*课时符合即可*/
|
|
|
addTeacherListValue(list, recordteacher, teacherMuchTime, classId,classType);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return COMMON.convert2JsonStr(list);
|
|
|
}
|
|
|
|
|
|
private void addTeacherListValue(List<Record> list,Record record,long teacherMuchTime,String classId,String classType){
|
|
|
record.set("surplusTimes", teacherMuchTime);
|
|
|
record.set("classsId", classId);
|
|
|
record.set("classs_type", classType);
|
|
|
list.add(record);
|
|
|
}
|
|
|
public String saveTeacherGoclass(String id,String taskId,String classId,String classType,String subjectId,String personId){
|
|
|
JSONObject returnJson = new JSONObject();
|
|
|
Record record=new Record();
|
|
|
record.set("task_id", taskId);
|
|
|
record.set("class_id", classId);
|
|
|
record.set("class_type", classType);
|
|
|
record.set("subject_id", subjectId);
|
|
|
record.set("teacher_id", personId);
|
|
|
boolean flag = false ;
|
|
|
if(COMMON.isEmpty(id)){
|
|
|
TeachPlanModel.dao.delTeacherGoclass(taskId, classId, classType, subjectId);
|
|
|
flag=TeachPlanModel.dao.saveTeacherGoclass(record);
|
|
|
}else{
|
|
|
record.set("id", id);
|
|
|
flag = TeachPlanModel.dao.updateTeacherGoclass(record);
|
|
|
}
|
|
|
/*删除预排课位置*/
|
|
|
PreScheduleTimetableService.service.deleteCourseTableposition(taskId, classId, subjectId, "", "");
|
|
|
returnJson.put("success", flag);
|
|
|
returnJson.put("info", Constant.SUCCESS_INFO);
|
|
|
return returnJson.toString();
|
|
|
}
|
|
|
public String delTeacherGoclass(String taskId,String classId,String classType,String subjectId){
|
|
|
JSONObject returnJson = new JSONObject();
|
|
|
boolean flag = TeachPlanModel.dao.delTeacherGoclass(taskId,classId,classType,subjectId);
|
|
|
/*删除预排课位置*/
|
|
|
if("2".equals(classType)){
|
|
|
PreScheduleTimetableService.service.deleteCourseTableposition(taskId, classId, subjectId, "", "");
|
|
|
}
|
|
|
returnJson.put("success", flag);
|
|
|
if(flag){
|
|
|
returnJson.put("info", "删除成功");
|
|
|
}else{
|
|
|
returnJson.put("info", "删除失败");
|
|
|
}
|
|
|
return returnJson.toJSONString();
|
|
|
}
|
|
|
private boolean checkGroupAll(Record alltimeRecord,String classType,String groupId){
|
|
|
String strGroup = String.valueOf(alltimeRecord.get("group_id"));
|
|
|
String classTypes = String.valueOf(alltimeRecord.get("class_type"));
|
|
|
String groupIdAll = "";
|
|
|
String [] groupArray = strGroup.split(",");
|
|
|
String [] classtype = classTypes.split(",");
|
|
|
for (int i = 0; i < classtype.length; i++) {
|
|
|
if(classtype[i].equals(classType)){
|
|
|
groupIdAll += groupArray[i]+",";
|
|
|
}
|
|
|
}
|
|
|
if(!COMMON.isEmpty(groupIdAll)){
|
|
|
groupIdAll = groupIdAll.substring(0, groupIdAll.length()-1);
|
|
|
}
|
|
|
return !ToolsUtil.arrayIncludeStr(groupIdAll, groupId);
|
|
|
}
|
|
|
|
|
|
public HSSFWorkbook exportClassTeacherExcel(String taskId, String classType) {
|
|
|
HSSFWorkbook wb = new HSSFWorkbook();
|
|
|
HSSFSheet sheet = wb.createSheet("任课计划");
|
|
|
sheet.protectSheet("edit");
|
|
|
HSSFCellStyle unLockCellStyle = wb.createCellStyle();
|
|
|
unLockCellStyle.setLocked(false);
|
|
|
//获取行政班班级列表
|
|
|
Record recordOb = new Record().set("class_id",-1).set("class_name","班级\\课程");
|
|
|
List<Record> list = TaskModel.dao.getClassListByTaskId(taskId, classType);
|
|
|
list.add(0,recordOb);
|
|
|
//获取行政班课时
|
|
|
List<Record> timeList = TaskModel.dao.getClassTimeList(taskId,"",classType,"","");
|
|
|
Map<String,Record> mapTime = TaskService.service.getClassSubjectTimeMap(timeList);
|
|
|
//教师任课计划
|
|
|
Map<String,Record> mapTeacher = getTeacherMap(taskId);
|
|
|
List<Record> subjectList = TaskModel.dao.getClassTimeList(taskId,"-1",classType,"","1");
|
|
|
for (int i = 0; i < list.size(); i++) {
|
|
|
Record record = list.get(i);
|
|
|
HSSFRow row = sheet.createRow(i);
|
|
|
String classId = String.valueOf(record.get("class_id"));
|
|
|
String className = String.valueOf(record.get("class_name"));
|
|
|
HSSFCell headCell = row.createCell(0);
|
|
|
headCell.setCellValue(className);
|
|
|
for (int i1 = 0; i1 <subjectList.size(); i1++) {
|
|
|
Record subject = subjectList.get(i1);
|
|
|
String subjectId = String.valueOf(subject.get("subject_id"));
|
|
|
String key = classId+"|"+subjectId;
|
|
|
HSSFCell cell = row.createCell(i1+1);
|
|
|
if("-1".equals(classId)){
|
|
|
String subjectName = String.valueOf(subjectList.get(i1).get("subject_name"));
|
|
|
cell.setCellValue(subjectName);
|
|
|
}else{
|
|
|
if(!COMMON.isEmpty( mapTime.get(key))){
|
|
|
Record record1 = mapTime.get(key);
|
|
|
int edit =record1.get("edit");
|
|
|
if(1==edit){
|
|
|
cell.setCellValue("");
|
|
|
String teacherKey = classId+"|"+subjectId+"|"+classType ;
|
|
|
if(!COMMON.isEmpty(mapTeacher.get(teacherKey))){
|
|
|
String personName = String.valueOf(mapTeacher.get(teacherKey).get("person_name"));
|
|
|
cell.setCellValue(personName);
|
|
|
}
|
|
|
cell.setCellStyle(unLockCellStyle);
|
|
|
}else {
|
|
|
cell.setCellValue("-");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return wb;
|
|
|
}
|
|
|
|
|
|
public JSONObject importClassTeacherExcel(int taskId, UploadFile file) {
|
|
|
JSONObject returnJson = FileUtil.CheckUploadFileObject(file.getSaveDirectory() + File.separator + file.getFileName());
|
|
|
if(!returnJson.getBooleanValue("success")){
|
|
|
return returnJson ;
|
|
|
}
|
|
|
HSSFWorkbook wb = null;
|
|
|
try {
|
|
|
wb = new HSSFWorkbook(new FileInputStream(file.getSaveDirectory() + File.separator + file.getFileName()));
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
//检验模板 是否为空
|
|
|
if(COMMON.isEmpty(wb)){
|
|
|
return SelectCourseBaseService.service.failedResult("导入模板为空");
|
|
|
}
|
|
|
//校验模板是否正确
|
|
|
HSSFSheet sheet = wb.getSheetAt(0);
|
|
|
String sheetName = sheet.getSheetName();
|
|
|
int rowNum=sheet.getLastRowNum();
|
|
|
if(!"任课计划".equals(sheetName)||rowNum<2){
|
|
|
return SelectCourseBaseService.service.failedResult("导入模板错误1");
|
|
|
}
|
|
|
String uuid = COMMON.getGuid();
|
|
|
//检验和插入临时表
|
|
|
if(!TaskService.service.checkAndInsertClassTime(sheet,uuid,taskId)){
|
|
|
return SelectCourseBaseService.service.failedResult("导入模板错误2");
|
|
|
}
|
|
|
//删除临时表数据的record
|
|
|
Record delRecord = new Record().set("field_1",uuid).set("field_2",taskId);
|
|
|
//查询排课任务对应的课程计划
|
|
|
Record record = new Record().set("pageSize", 1).set("pageNumber", 1).set("task_id", taskId);
|
|
|
Page<Record> pageRecord = TaskModel.dao.getTaskList(record);
|
|
|
List<Record> taskList = pageRecord.getList();
|
|
|
if(COMMON.isEmpty(taskList)){
|
|
|
CurriculumPlanModel.dao.delImportTeacherTime(delRecord);
|
|
|
return SelectCourseBaseService.service.failedResult("排课任务不存在");
|
|
|
}
|
|
|
int curriculumPlanId = taskList.get(0).get("curriculum_plan_id");
|
|
|
//处理临时数据 获取正确的数据
|
|
|
List<Record> batchClassList =TeachPlanModel.dao.getImportClassTime(uuid,taskId,curriculumPlanId);
|
|
|
if(COMMON.isEmpty(batchClassList)){
|
|
|
CurriculumPlanModel.dao.delImportTeacherTime(delRecord);
|
|
|
return SelectCourseBaseService.service.failedResult("导入模板不存在合格的任课教师");
|
|
|
}
|
|
|
// 删除之前的 教师任课计划
|
|
|
TeachPlanModel.dao.delTeacherGoclass(String.valueOf(taskId),"","2","");
|
|
|
//批量 新增教师任课计划
|
|
|
TeachPlanModel.dao.batchTeacherGoClass(batchClassList);
|
|
|
// 删除临时表数据
|
|
|
CurriculumPlanModel.dao.delImportTeacherTime(delRecord);
|
|
|
returnJson.put("success",Constant.TRUE);
|
|
|
returnJson.put("info","导入成功");
|
|
|
return returnJson ;
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|