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.

439 lines
18 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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