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.

2093 lines
85 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.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.dsideal.newUniversityExamination.selectcourse.core.util.dto.TimeDto;
import com.dsideal.newUniversityExamination.selectcourse.model.CourseSelectTimeModel;
import com.dsideal.newUniversityExamination.selectcourse.model.MergeCourseTableModel;
import com.dsideal.newUniversityExamination.selectcourse.model.TaskModel;
import com.dsideal.newUniversityExamination.selectcourse.model.TimetableAdjustModel;
import com.dsideal.newUniversityExamination.util.BorrowUtil;
import com.dsideal.newUniversityExamination.util.COMMON;
import com.dsideal.newUniversityExamination.util.Constant;
import com.dsideal.newUniversityExamination.util.ToolsUtil;
import com.jfinal.plugin.activerecord.Record;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CourseSelectTimeService {
public static final CourseSelectTimeService service =new CourseSelectTimeService();
/*获取班级课表和教师课表*/
public JSONObject getCourseTime(String uuid,String week,String baseClassId,String baseClassType,String teacherId){
JSONObject resultJson=new JSONObject();
resultJson.put("success", false);
resultJson.put("info", "暂无课表");
/*获取课表*/
List<Record> list;
if(COMMON.isEmpty(week)){
list= CourseSelectTimeModel.dao.getCourseTableByUuid(uuid, baseClassId, baseClassType,teacherId,"","","","","");
}else {
list= CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid,week,baseClassId,baseClassType,teacherId,"","","","","");
}
/*拼接返回值*/
JSONArray jsonArr = getDaySectionArray(list, resultJson);
/*获取课节和天数*/
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
if(!COMMON.isEmpty(dayJson.get("classInfo"))){
JSONObject [][] arr = initializationArray(dayJson.getJSONObject("classInfo"));
courseTableAddToArray(jsonArr,arr);
if(!COMMON.isEmpty(arr)){
resultJson.put("table_Time",dayJson);
resultJson.put("table_arry", arr);
resultJson.put("success", true);
resultJson.put("info", Constant.SUCCESS_INFO);
return resultJson;
}
}
return resultJson;
}
public JSONArray getDaySectionArray(List<Record> list, JSONObject resultJson){
/*获取班级名*/
String classIds = ToolsUtil.getIds(list, "base_class_id");
String classTypes = ToolsUtil.getIds(list, "base_class_type");
JSONObject mapJson = SelectCourseBaseService.service.getClassInfoByClassId(classIds, classTypes, 1);
@SuppressWarnings("unchecked")
Map<String, Record> map = (Map<String, Record>) mapJson.get("map");
boolean flag = mapJson.getBooleanValue("success");
resultJson.put("error", "");
if(!flag){
resultJson.put("error", "课表班级存在异常");
if(COMMON.isEmpty(map)){
resultJson.put("success", false);
resultJson.put("info", "暂无课表");
}
}
/*拼接返回值*/
JSONArray jsonArr = new JSONArray();
for(Record records : list){
JSONObject jsonOb=getCourseTableJsonOb(records, map);
if(!COMMON.isEmpty(jsonOb)){
jsonArr.add(jsonOb);
}
}
return jsonArr ;
}
/*获取学生课表*/
public JSONObject getCouresTimeTable(String personId,String bureauId) {
JSONObject returnJson = new JSONObject();
returnJson.put("success", false);
returnJson.put("info", "暂无课表");
/*获取当前学期*/
JSONObject xqOb=BorrowUtil.getCurrentTerm();
String xqId=String.valueOf(xqOb.get("XQ_ID")) ;
/*获取学生的当前所在的班级*/
JSONObject classJson = BorrowUtil.getAllInfoOfStudent(personId);
boolean success = classJson.getBooleanValue("success");
if(success){
/*获取 学年学段和班级列表*/
JSONArray classArray = classJson.getJSONArray("class_list");
if(!COMMON.isEmpty(classArray)){
/*查询学生是否存在课表*/
JSONObject classObj = classArray.getJSONObject(0);
String year = classObj.getString("entrance_year");
String stageId = classObj.getString("stage_id");
Record record = CourseSelectTimeModel.dao.getCourseTaskYearXq(year, xqId, bureauId, stageId);
if(!COMMON.isEmpty(record)){
String uuid = String.valueOf(record.get("uuid"));
/*获取课节和天数*/
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
//获取当前周
int week = TaskService.service.getReleaseWeek(ToolsUtil.Object2Record(dayJson.getJSONObject("classInfo")));
//处理未到开学时间取第一周的 学生高级合班信息
int meringWeek = week==-1?1:week;
/*获取班级名称*/
List<Record> classList = ToolsUtil.JSONArray2List(classArray);
int classId = getStudentClassId(classList);
// 学生新合班规则
List<Record> mergingClassList = CourseSelectTimeModel.dao.getMergingClassList(uuid,personId,meringWeek);
addClassList(mergingClassList,classList);
String classIds = ToolsUtil.getIds(classList, "class_id");
String classTypes = ToolsUtil.getIds(classList, "class_type");
JSONObject mapJson = SelectCourseBaseService.service.getClassInfoByClassId(classIds, classTypes, 1);
@SuppressWarnings("unchecked")
Map<String, Record> map = (Map<String, Record>) mapJson.get("map");
boolean flag = mapJson.getBooleanValue("success");
if(!flag){
returnJson.put("error", "课表班级存在异常");
if(COMMON.isEmpty(map)){
returnJson.put("success", false);
returnJson.put("info", "暂无课表");
return returnJson ;
}
}
JSONArray jsonArr=new JSONArray();
List<Record> mergingStudentList = CourseSelectTimeModel.dao.getMergingStudentList(uuid,meringWeek);
for(Record classRecord : classList ){
String baseClassId = String.valueOf(classRecord.get("class_id"));
String baseClassType = String.valueOf(classRecord.get("class_type"));
/*获取班级课表*/
if(week < 1 ){
List<Record> list = CourseSelectTimeModel.dao.getCourseTableByUuid(uuid, baseClassId, baseClassType,"","","0","","","");
checkMeringStudent(list,map,jsonArr,mergingStudentList,personId,classId);
}else{
List<Record> list= CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid,String.valueOf(week),baseClassId,baseClassType,"","","0","","","");
checkMeringStudent(list,map,jsonArr,mergingStudentList,personId,classId);
}
}
if(!COMMON.isEmpty(dayJson.get("classInfo"))){
/*初始化和填充课表二维数组*/
JSONObject [][] arr = initializationArray(dayJson.getJSONObject("classInfo"));
courseTableAddToArray(jsonArr,arr);
if(!COMMON.isEmpty(arr)){
returnJson.put("table_Time",dayJson);
returnJson.put("table_arry", arr);
returnJson.put("success", true);
returnJson.put("info", Constant.SUCCESS_INFO);
return returnJson;
}
}
}
}
}
return returnJson;
}
private int getStudentClassId(List<Record> classList ){
int classId = 0;
for (Record record1 : classList) {
if(1 == record1.getInt("class_type")){
classId = Integer.parseInt(String.valueOf(record1.get("class_id")));
}
}
return classId;
}
/**
* @description 学生新合班规则
* @author Mr.zms
* @date 2019/5/5
* @return void
*/
private void addClassList(List<Record> list,List<Record> classList){
Map<String,Record> map = getClassMap(classList);
for (Record record : list) {
Record record1 = new Record();
String classId = String.valueOf(record.get("target_class_id"));
record1.set("class_id",classId);
record1.set("class_type",1);
if(COMMON.isEmpty(map.get(classId))){
classList.add(record1);
}
}
}
private Map<String,Record> getClassMap(List<Record> classList){
Map<String,Record> map = new HashMap<>();
for (Record record : classList) {
String classType = String.valueOf(record.get("class_type"));
String classId = String.valueOf(record.get("class_id"));
if("1".equals(classType)){
map.put(classId,record);
}
}
return map;
}
/**
* @description 学生课表 增加新合班规则校验
* @author Mr.zms
* @date 2019/5/5
* @return void
*/
private void checkMeringStudent(List<Record> list ,Map<String, Record> map,JSONArray jsonArr,List<Record> mergingStudentList,String personId,int classId){
for (Record records : list) {
int baseClassId = records.get("base_class_id");
int baseClassType = records.get("base_class_type");
int courseId = records.get("courseId");
if(checkMerging(mergingStudentList,baseClassId,baseClassType,courseId,personId,classId)||2==baseClassType){
JSONObject jsonOb=getCourseTableJsonOb(records, map);
if(!COMMON.isEmpty(jsonOb)){
jsonArr.add(jsonOb);
}
}
}
}
/*教室课表*/
public JSONObject getRoomCourseTimeTable(String uuid,String week,String roomId) {
JSONObject resultJson = new JSONObject();
resultJson.put("success", false);
resultJson.put("info", "暂无课表");
/*获取教室课表*/
List<Record> list;
if(COMMON.isEmpty(week)){
list = CourseSelectTimeModel.dao.getCourseTableByUuid(uuid, "", "","",roomId,"0","","","");
}else {
list = CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid,week,"","","",roomId,"0","","","");
}
/*查询班级名称*/
JSONArray jsonArr = getDaySectionArray(list, resultJson);
/*获取课节和天数*/
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
if(!COMMON.isEmpty(dayJson.get("classInfo"))){
JSONObject [][] arr = initializationArray(dayJson.getJSONObject("classInfo"));
courseTableAddToArray(jsonArr,arr);
if(!COMMON.isEmpty(arr)){
resultJson.put("table_Time",dayJson);
resultJson.put("table_arry", arr);
resultJson.put("success", true);
resultJson.put("info", Constant.SUCCESS_INFO);
return resultJson;
}
}
return resultJson;
}
/*获取教室列表*/
public String getRoomInfo(String uuid,String week,String roomName) {
if(!COMMON.isEmpty(week)){
return getRoomInfo(uuid,week);
}
List<Record> list = CourseSelectTimeModel.dao.getRoomListByUuid(uuid,"",roomName);
String classIds = ToolsUtil.getIds(list, "base_class_id");
String classTypes = ToolsUtil.getIds(list, "base_class_type");
JSONObject mapJson = SelectCourseBaseService.service.getClassInfoByClassId(classIds, classTypes, 1);
@SuppressWarnings("unchecked")
Map<String, Record> map = (Map<String, Record>) mapJson.get("map");
/*查询不到班级*/
if(COMMON.isEmpty(map)){
List<Record> nullList = new ArrayList<>();
return COMMON.convert2JsonStr(nullList);
}
return COMMON.convert2JsonStr(list);
}
private String getRoomInfo(String uuid,String week){
List<Record> list = CourseSelectTimeModel.dao.getRoomListByUuidWeek(uuid,week,"");
return COMMON.convert2JsonStr(list);
}
/*获取走班课节详情*/
public String getStudentInfoByClassId(String uuid,String week,String day, String section, String type, String classId,String classType) {
List<Record> list = new ArrayList<>();
Record recordOb = new Record().set("base_class_id", classId).set("base_class_type", classType);
list.add(recordOb);
List<Record> classList = new ArrayList<>() ;
if(COMMON.isEmpty(week)){
classList= CourseSelectTimeModel.dao.getCourseTableByUuid(uuid,"","","","","0",type, day, section);
}else {
classList = CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid,week,"","","","","0",type,day,section);
}
list.addAll(classList);
String classIds = ToolsUtil.getIds(list, "base_class_id");
String classTypes = ToolsUtil.getIds(list, "base_class_type");
JSONObject mapJson = SelectCourseBaseService.service.getClassInfoByClassId(classIds, classTypes, 3);
@SuppressWarnings("unchecked")
Map<String, Record> map =(Map<String, Record>) mapJson.get("map");
List<Record> returnList = new ArrayList<>();
/*获取全部人数*/
String key = classId+"|"+classType;
Record recordTotal = map.get(key);
List<Record> totalStudenttList = ToolsUtil.JSONArray2List((JSONArray) recordTotal.get("student_list")) ;
/*遍历教学班*/
for(int i = 1; i< list.size() ;i++){
Record record = list.get(i);
String key1 = record.get("base_class_id")+"|"+record.get("base_class_type");
Record recordObj = map.get(key1);
//如果 是无效班级跳过
if(COMMON.isEmpty(recordObj)){
continue ;
}
List<Record> studentList = ToolsUtil.JSONArray2List((JSONArray) recordObj.get("student_list")) ;
Record resultRecord = new Record();
resultRecord.set("class_id", recordObj.get("class_id"));
resultRecord.set("class_name", recordObj.get("class_name"));
resultRecord.set("class_room_name", COMMON.isEmpty(record.get("class_room_name"))?"":record.get("class_room_name"));
JSONArray jsonArray = new JSONArray();
/*获取行政班的学生在次节课教学班上课的学生*/
for(Record toatlStudent : totalStudenttList){
String personId = String.valueOf(toatlStudent.get("person_id"));
String personName = toatlStudent.get("person_name");
for(Record student : studentList){
String studentId = String.valueOf(student.get("person_id"));
if(personId.equals(studentId)){
JSONObject jsonOb = BorrowUtil.getAvatarSuffix(personId, "6");
jsonOb.put("student_name", personName);
jsonOb.put("student_id", personId);
jsonArray.add(jsonOb);
}
}
}
if(!COMMON.isEmpty(jsonArray)){
resultRecord.set("table_list", jsonArray);
returnList.add(resultRecord);
}
}
return COMMON.convert2JsonStr(returnList);
}
/*获取年级课表*/
public JSONObject getCouresTimeTableYear(String uuid,String week) {
//获取天数和节数
JSONObject tableTime = getCourseTableTimeByUuid(uuid);
JSONObject returnJson=new JSONObject();
//获取此次排课下所有的班级
List<Record> classArray;
if(COMMON.isEmpty(week)){
classArray = CourseSelectTimeModel.dao.getClassListByUuid(uuid,"","" ,"1,2");
}else{
classArray = CourseSelectTimeModel.dao.getClassListByReleaseWeek(uuid,week,"");
}
String classIds = ToolsUtil.getIds(classArray, "base_class_id");
String classTypes = ToolsUtil.getIds(classArray, "base_class_type");
JSONObject mapJson = SelectCourseBaseService.service.getClassInfoByClassId(classIds, classTypes, 1);
@SuppressWarnings("unchecked")
Map<String, Record> classMap = (Map<String, Record>) mapJson.get("map");
boolean flag = mapJson.getBooleanValue("success");
returnJson.put("error", "");
if(!flag){
returnJson.put("error", "课表班级存在异常");
if(COMMON.isEmpty(classMap)){
returnJson.put("success", false);
returnJson.put("info", "暂无课表");
return returnJson ;
}
}
/*获取出有效的班级列表*/
List<Record> classArrayNew = new ArrayList<>();
for(Record record : classArray){
String key = record.get("base_class_id")+"|"+record.get("base_class_type");
if(!COMMON.isEmpty(classMap.get(key))){
record.set("class_id", record.get("base_class_id"));
record.set("class_name", classMap.get(key).get("class_name"));
classArrayNew.add(record);
}
}
Map<String, Integer> map = new HashMap<>();
/*初始化二维数组*/
Object [][] arrTable = getArrTableAndMap(tableTime, map, classArrayNew);
//查询出所有班级课表
List<Record> list ;
if(COMMON.isEmpty(week)){
list = CourseSelectTimeModel.dao.getCourseTableByUuid(uuid, "", "", "", "", "", "", "", "");
}else {
list = CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid,week,"","","","","","","","");
}
for (int j = 0; j < list.size(); j++) {
Record records = list.get(j);
addArrTableValue(arrTable, records, map,classMap);
}
returnJson.put("table_Time",tableTime);
returnJson.put("success", true);
returnJson.put("table_arry", arrTable);
returnJson.put("table_vertical", verticalYearCourseTable(arrTable,classArrayNew,uuid));
returnJson.put("table_list", COMMON.convertListRecord2(classArrayNew));
return returnJson;
}
/**
* @description 竖版年级课表
* @author Mr.zms
* @date 2019/7/1
* @return com.alibaba.fastjson.JSONObject[][]
*/
private JSONObject [][] verticalYearCourseTable(Object [][] arrTable,List<Record> classArrayNew,String uuid){
Record weekOb = CourseSelectTimeModel.dao.getCourseTableTimeByUuid(uuid);
List<TimeDto> timeDtoList = CoreCourseService.service.generateTimeData("", weekOb, "", "-1");
int length1 = arrTable.length * arrTable[0].length ;
JSONObject [][] objectArray = new JSONObject[classArrayNew.size()][length1];
for (int i = 0; i < arrTable.length; i++) {
for (int j = 0; j < arrTable[i].length; j++) {
JSONArray classArray= (JSONArray) arrTable[i][j];
for(int len = 0; len < classArray.size(); len++){
int day = i+1 ;
int section = j+1 ;
TimeDto timeDto = new TimeDto(day,section);
int timeIndex =timeDto.getTimeIndex(timeDtoList);
objectArray[len][timeIndex] = classArray.getJSONObject(len);
}
}
}
return objectArray ;
}
/*获取发布后的课表的班级列表*/
public String getTimeTableClassInfoByUuid(String uuid,String week,String baseClassId,String baseClasstype) {
List<Record> list;
if(!COMMON.isEmpty(week)){
list = CourseSelectTimeModel.dao.getClassListByReleaseWeek(uuid,week,baseClasstype);
}else {
list = CourseSelectTimeModel.dao.getClassListByUuid(uuid,"",baseClassId,baseClasstype);
}
String classIds = ToolsUtil.getIds(list, "base_class_id");
String classTypes = ToolsUtil.getIds(list, "base_class_type");
JSONObject mapJson = SelectCourseBaseService.service.getClassInfoByClassId(classIds, classTypes, 1);
@SuppressWarnings("unchecked")
Map<String, Record> map = (Map<String, Record>) mapJson.get("map");
/*查询不到班级*/
if(COMMON.isEmpty(map)){
List<Record> nullList = new ArrayList<>();
return COMMON.convert2JsonStr(nullList);
}
List<Record> resultList = new ArrayList<>();
for(Record record : list){
String classId = String.valueOf(record.get("base_class_id"));
String baseclassType = String.valueOf(record.get("base_class_type"));
String key = classId+"|"+baseclassType;
Record recordClass = map.get(key);
record.set("class_id", record.get("base_class_id"));
if(!COMMON.isEmpty(recordClass)){
record.set("class_name", recordClass.get("class_name"));
resultList.add(record);
}
}
return COMMON.convert2JsonStr(resultList);
}
/**
* @description 查询uuid
* @author Mr.zms
* @return java.lang.String
*/
public String getTaskIdFromYearxq(String year, String xqId,String stageId,String bureauId) {
Record recordresult= CourseSelectTimeModel.dao.getCourseTaskYearXq(year, xqId, bureauId, stageId);
JSONObject resultJson = new JSONObject();
resultJson.put("success", false);
resultJson.put("info", "当前学期没有发布的课表");
if(!COMMON.isEmpty(recordresult)){
resultJson.put("classInfo", ToolsUtil.Record2Object(recordresult));
resultJson.put("info", Constant.SUCCESS_INFO);
resultJson.put("success", true);
}
return resultJson.toJSONString();
}
/**
* @description 获取课时
* @author Mr.zms
* @return com.alibaba.fastjson.JSONObject
*/
public JSONObject getCoursetableTime(String bureauId ,String year ,String stageId,String xqId){
JSONObject jsonOb = new JSONObject();
Record record = CourseSelectTimeModel.dao.getCourseTableTime(bureauId,year,stageId,xqId);
if(COMMON.isEmpty(record)){
return jsonOb;
}
jsonOb.put("classInfo", ToolsUtil.Record2Object(record));
jsonOb.put("success", true);
return jsonOb;
}
/**
* @description 班牌所需要的接口
* @author Mr.zms
* @return java.lang.String
*/
public String getClassWithRoom(String uuid, String roomId,String classId,String classType) {
List<Record> list = CourseSelectTimeModel.dao.getClassListByUuid(uuid, roomId, classId, classType);
for(Record record:list){
record.set("class_room_id", COMMON.isEmpty(record.get("class_room_id"))?0:record.get("class_room_id"));
record.set("class_room_name", COMMON.isEmpty(record.get("class_room_name"))?"":record.get("class_room_name"));
}
JSONObject json = new JSONObject();
json.put("success", true);
json.put("info", "操作成功");
json.put("list", COMMON.convertListRecord2(list));
return json.toJSONString();
}
public String getClassListByPeronId(String personId ,String xqId){
JSONObject returnJson = new JSONObject();
List<Record> list = CourseSelectTimeModel.dao.getClassListByPeronId(personId,xqId);
returnJson.put("list", COMMON.convertListRecord2(list));
returnJson.put("success", true);
return returnJson.toJSONString();
}
public String getTeacherInfoByUuid(String uuid,String week, String subjectId) {
if(!COMMON.isEmpty(week)){
return getTeacherInfoByUuidWeek(uuid,week,subjectId) ;
}
List<Record> list=CourseSelectTimeModel.dao.getTeacherListByUuid(uuid, subjectId,"");
String classIds = ToolsUtil.getIds(list, "base_class_id");
String classTypes = ToolsUtil.getIds(list, "base_class_type");
JSONObject mapJson = SelectCourseBaseService.service.getClassInfoByClassId(classIds, classTypes, 1);
@SuppressWarnings("unchecked")
Map<String, Record> map = (Map<String, Record>) mapJson.get("map");
/*查询不到班级*/
if(COMMON.isEmpty(map)){
List<Record> nullList = new ArrayList<>();
return COMMON.convert2JsonStr(nullList);
}
return COMMON.convert2JsonStr(list);
}
private String getTeacherInfoByUuidWeek(String uuid,String week,String subjectId){
List<Record> list= CourseSelectTimeModel.dao.getReleaseTeacherList(uuid,week,subjectId,"","");
return COMMON.convert2JsonStr(list);
}
/*初始化二维数组---年级课表*/
private Object [][] getArrTableAndMap(JSONObject tableTime,Map<String, Integer> map,List<Record> classArray ){
JSONObject dayOb = tableTime.getJSONObject("classInfo");
int rank = Integer.parseInt(String.valueOf(dayOb.get("week_of_class_count"))) ;
int row = MergeCourseTableService.service.getDayAndSectionNumber(dayOb) ;
Object [][] arrTable = new Object [rank][row];
for (int i = 0; i < arrTable.length; i++) {
for (int j = 0; j < arrTable[i].length; j++) {
arrTable[i][j] = new JSONArray() ;
for(int len = 0; len < classArray.size(); len++){
JSONObject jsonOb = getArrJsonOb();
String classId = String.valueOf(classArray.get(len).get("BASE_CLASS_ID")) ;
String baseClassType = String.valueOf(classArray.get(len).get("base_class_type")) ;
jsonOb.put("class_id", classId);
jsonOb.put("base_class_id", classId);
jsonOb.put("base_class_type", baseClassType);
String key = classId+"|"+baseClassType;
map.put(key, len);
((JSONArray) arrTable[i][j]) .add(jsonOb);
}
}
}
return arrTable ;
}
/**
* @description 年级课表 元素添加
* @author Mr.zms
* @date 2019/4/18
* @return void
*/
private void addArrTableValue(Object [][] arrTable ,Record records,Map<String, Integer> map ,Map<String, Record> classMap ){
JSONObject json=getCourseTableJsonOb(records, classMap);
if(COMMON.isEmpty(json)) {
return;
}
json.put("base_class_id",COMMON.isEmpty(records.get("base_class_id"))?-1:records.get("base_class_id")) ;
json.put("base_class_type",COMMON.isEmpty(records.get("base_class_type"))?-1:records.get("base_class_type")) ;
int day = records.get("day");
int section = records.get("section");
String baseClassId = String.valueOf(records.get("base_class_id"));
String baseClassType = String.valueOf(records.get("base_class_type"));
JSONArray jsonArray = (JSONArray) arrTable[day-1][section-1];
String key = baseClassId+"|"+baseClassType;
JSONObject jsonNew = jsonArray.getJSONObject(map.get(key));
if(baseClassId.equals(jsonNew.get("base_class_id"))&&baseClassType.equals(jsonNew.get("base_class_type"))){
JSONArray jsonOb = jsonNew.getJSONArray("jsonOb");
//如果课程id == 0
String courseId = String.valueOf(records.get("courseId")) ;
if("0".equals(courseId)) {
getZouJsonOb(json, String.valueOf(records.get("type")));
}
jsonOb.add(json);
}
}
public JSONObject getCourseTableTimeByUuid(String uuid){
JSONObject returnJson = new JSONObject();
Record record = CourseSelectTimeModel.dao.getCourseTableTimeByUuid(uuid);
returnJson.put("success", true);
returnJson.put("classInfo", ToolsUtil.Record2Object(record));
return returnJson ;
}
/**
* 课表添加到而二维数组里
*/
void courseTableAddToArray(JSONArray jsonArr, JSONObject [][] arr){
for (Object obj : jsonArr) {
JSONObject jsonOb = (JSONObject) obj;
int day = Integer.parseInt(String.valueOf(jsonOb.get("day")));
int section = Integer.parseInt(String.valueOf(jsonOb.get("section")));
int column = arr.length;
int row = arr[0].length;
/*是否是越界*/
if (day > row && section > column) {
return;
}
String courseId = String.valueOf(jsonOb.get("courseId"));
if ("0".equals(courseId)) {
String type = String.valueOf(jsonOb.get("type"));
//jsonOb = getZouJsonOb(jsonOb, type);
int sectionType = 3;
if ("1".equals(type)) {
sectionType = 4;
}
arr[section - 1][day - 1].put("section_type", sectionType);
}
JSONArray arrList = arr[section - 1][day - 1].getJSONArray("jsonOb");
arrList.add(jsonOb);
String str = JSON.toJSONString(arrList, SerializerFeature.DisableCircularReferenceDetect);
arr[section - 1][day - 1].put("number", arrList.size());
arr[section - 1][day - 1].put("jsonOb", JSONArray.parseArray(str));
String singleDouble = String.valueOf(jsonOb.get("single_double"));
if (!"0".equals(singleDouble)) {
arr[section - 1][day - 1].put("single_double_type", 1);
}
}
}
private void getZouJsonOb(JSONObject jsonOb,String type){
String zero = "0" ;
String one = "1";
if(zero.equals(type)){
jsonOb.put("className", "选考走班课");
jsonOb.put("subjectName", "选考走班课");
jsonOb.put("type", type);
}else if(one.equals(type)){
jsonOb.put("className", "学考走班课");
jsonOb.put("subjectName", "学考走班课");
jsonOb.put("type", type);
}
}
/**
* @description 初始化二维数组
* @author Mr.zms
* @date 2019/4/18
* @return com.alibaba.fastjson.JSONObject[][]
*/
public JSONObject [][] initializationArray(JSONObject jsonOb){
int row = jsonOb.getIntValue("week_of_class_count") ;
int column = MergeCourseTableService.service.getDayAndSectionNumber(jsonOb) ;
//初始化数组
JSONObject [][] arr;
arr = new JSONObject [column][row];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = getArrJsonOb() ;
}
}
return arr;
}
public JSONObject getArrJsonOb(){
JSONObject json = new JSONObject();
//0可以替换的位置1课程冲突,3选考走班4学考走班,5 灰色单元格
json.put("section_type", 0);
//0.普通 1单双周
json.put("single_double_type", 0);
//教室冲突 标记位 0 不冲突 1 冲突
json.put("room_conflict_tab", 0);
json.put("position_type", 0);
JSONArray jsonArray = new JSONArray();
json.put("jsonOb", jsonArray);
json.put("number", 0);
return json ;
}
/**
* @description 获取课表返回值JSONOb
* @author Mr.zms
* @date 2019/4/18
* @return com.alibaba.fastjson.JSONObject
*/
private JSONObject getCourseTableJsonOb(Record records,Map<String, Record> map){
JSONObject jsonOb=new JSONObject();
String key = records.get("base_class_id") +"|"+ records.get("base_class_type");
Record record = map.get(key);
String className ;
if(!COMMON.isEmpty(record)){
className = map.get(key).get("class_name") ;
}else{
return jsonOb ;
}
jsonOb.put("className", className);
jsonOb.put("teacherName",COMMON.isEmpty(records.get("person_name"))?"":records.get("person_name"));
jsonOb.put("subjectName", records.get("subject_name"));
jsonOb.put("task_id", records.get("task_id"));
jsonOb.put("single_double", records.get("single_double"));
jsonOb.put("day", records.get("day"));
jsonOb.put("section", records.get("section"));
jsonOb.put("roomId", records.get("roomId"));
jsonOb.put("roomName", COMMON.isEmpty(records.get("class_room_name"))?"":records.get("class_room_name"));
jsonOb.put("classId", records.get("classId"));
jsonOb.put("teacherId", records.get("teacherId"));
jsonOb.put("courseId", records.get("courseId"));
jsonOb.put("type", records.get("type"));
jsonOb.put("baseClassId", COMMON.isEmpty(records.get("base_class_id"))?-1:records.get("base_class_id"));
jsonOb.put("baseClassType", COMMON.isEmpty(records.get("base_class_type"))?-1:records.get("base_class_type"));
String courseId = String.valueOf(records.get("courseId"));
if("0".equals(courseId)){
getZouJsonOb(jsonOb, records.get("type").toString());
}
return jsonOb ;
}
/**
* @description 导出教师课表
* @author Mr.zms
* @date 2019/4/17
* @return java.io.File
*/
public HSSFWorkbook exportTeacherCourseTable(String uuid,String week ,String subjectId, String personId,String parameterType) {
//获取教师LIST
HSSFWorkbook wb ;
if(COMMON.isEmpty(week)){
wb = exportTeacherCourseTable(uuid,subjectId,personId,parameterType);
}else {
wb = exportTeacherCourseTableWeek(uuid,week,subjectId,personId,parameterType);
}
return wb;
}
private HSSFWorkbook exportTeacherCourseTableWeek(String uuid, String week , String subjectId, String personId, String parameterType){
List<Record> teacherList = CourseSelectTimeModel.dao.getReleaseTeacherList(uuid,week,subjectId,personId,"");
List<Record> list = CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid, week, "","",personId,"","","","","");
String[] value = {"person_name", "person_id", "teacherId"};
//获取天数
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
return getHSSFWorkbook(dayJson,list,teacherList,value,parameterType);
}
private HSSFWorkbook exportTeacherCourseTable(String uuid,String subjectId, String personId,String parameterType){
List<Record> teacherList = CourseSelectTimeModel.dao.getTeacherListByUuid(uuid, subjectId,personId); ;
List<Record> list = CourseSelectTimeModel.dao.getCourseTableByUuid(uuid, "", "",personId,"","","","","");
String[] value = {"person_name", "person_id", "teacherId"};
//获取天数
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
return getHSSFWorkbook(dayJson,list,teacherList,value,parameterType);
}
private String [] analysisParameterType(String parameterType){
//parameter_type = {subjectName:1,className:1,teacherName:1,roomName:1}
String [] parameter = {"subjectName","roomName","className","teacherName"};
JSONObject jsonObject = new JSONObject();
try {
jsonObject = JSONObject.parseObject(parameterType);
}catch (JSONException e){
e.printStackTrace();
}
List<String> list = new ArrayList<>();
if(!COMMON.isEmpty(jsonObject)){
for (String parameterObj : parameter) {
if(!COMMON.isEmpty(jsonObject.get(parameterObj))){
String status = String.valueOf(jsonObject.get(parameterObj));
if("1".equals(status)){
list.add(parameterObj);
}
}
}
}
if(!COMMON.isEmpty(list)&&list.size() > 0 ){
int size = list.size();
parameter = list.toArray(new String[size]);
}
return parameter;
}
/**
* @description 创建课表的sheet页
* @author Mr.zms
* @date 2019/4/17
* @return org.apache.poi.hssf.usermodel.HSSFSheet
*/
private HSSFSheet createCourseTableSheet(HSSFSheet sheet, String sheetName, JSONObject dayJson){
boolean success = dayJson.getBooleanValue("success");
if(success){
JSONObject dayInfo = dayJson.getJSONObject("classInfo");
int weekCount = dayInfo.getIntValue("week_of_class_count") ;
int sectionCount = dayInfo.getIntValue("morning_of_class_count") + dayInfo.getIntValue("afternoon_of_class_count");
HSSFRow row1 = sheet.createRow(0);
HSSFCell cell1 = row1.createCell(3);
cell1.setCellValue(sheetName);
//创建课表格子
sectionCount = sectionCount +2 ;
for (int i = 1; i <sectionCount ; i++) {
HSSFRow row = sheet.createRow(i);
row.setHeight((short)1000);
for (int j = 0; j < weekCount+1; j++) {
HSSFCell cell = row.createCell(j);
if(1 == i && j > 0){
cell.setCellValue("星期"+j);
}else if(0 == j && i > 1 ){
cell.setCellValue("节数"+(i-1));
}
}
}
}
return sheet ;
}
public HSSFWorkbook exportRoomCourseTable(String uuid, String week ,String roomId,String parameterType) {
//获取教室LIST
HSSFWorkbook wb ;
if(COMMON.isEmpty(week)){
wb = exportRoomCourseTable(uuid,roomId,parameterType);
}else {
wb = exportRoomCourseTableWeek(uuid,week,roomId,parameterType);
}
return wb;
}
private HSSFWorkbook exportRoomCourseTable(String uuid,String roomId,String parameterType){
//获取教室LIST
List<Record> roomList = CourseSelectTimeModel.dao.getRoomListByUuid(uuid,roomId,"");
//获取课节信息LIST
List<Record> list = CourseSelectTimeModel.dao.getCourseTableByUuid(uuid,"", "","",roomId,"","","","");
String[] value = {"class_room_name", "class_room_id", "roomId"};
//获取天数
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
return getHSSFWorkbook(dayJson,list,roomList,value,parameterType);
}
private HSSFWorkbook exportRoomCourseTableWeek(String uuid,String week,String roomId,String parameterType){
//获取教室LIST
List<Record> roomList = CourseSelectTimeModel.dao.getRoomListByUuidWeek(uuid,week,roomId);
//获取课节信息LIST
List<Record> list = CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid, week,"", "","",roomId,"","","","");
String[] value = {"class_room_name", "class_room_id", "roomId"};
//获取天数
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
return getHSSFWorkbook(dayJson,list,roomList,value,parameterType);
}
public HSSFCellStyle getCellStyle(HSSFWorkbook wb){
HSSFCellStyle cellStyle=wb.createCellStyle();
// 左右居中 上下居中
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//自动换行
cellStyle.setWrapText(true);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
return cellStyle ;
}
private HSSFWorkbook getHSSFWorkbook(JSONObject dayJson,List<Record> list ,List<Record> elementList,String [] value,String parameterType){
HSSFWorkbook wb = new HSSFWorkbook();
//单元格样式
HSSFCellStyle cellStyle=getCellStyle(wb) ;
JSONObject resultJson = new JSONObject() ;
//获取课表
JSONArray jsonArr = getDaySectionArray(list, resultJson);
for (Record teacher : elementList) {
String sheetValue = teacher.getStr(value[0]);
String compareValue = String.valueOf(teacher.get(value[1]));
if(value.length ==5 ){
compareValue += String.valueOf(teacher.get(value[3]));
}
String sheetName = sheetValue + "的课表";
HSSFSheet sheet = wb.createSheet(sheetName);
Map<Integer,Short> maxHeight = new HashMap<>();
createCourseTable(sheet,sheetName,0,dayJson,cellStyle,maxHeight);
for (int j = 0; j < jsonArr.size(); j++) {
JSONObject jsonObject = jsonArr.getJSONObject(j);
String compareValue1 = String.valueOf(jsonObject.get(value[2]));
if(value.length==5){
compareValue1 += String.valueOf(jsonObject.get(value[4]));
}
if (compareValue.equals(compareValue1)) {
String [] valueArray = analysisParameterType(parameterType);
setCellValue(jsonObject,sheet,valueArray,maxHeight);
}
}
//如果是班级课表查询走班课节
if(value.length == 5){
String uuid= String.valueOf(dayJson.get("uuid"));
getClassCourseTableSheet(uuid,teacher,sheet,maxHeight);
}
}
return wb ;
}
/**
* @description 导出班级课表
* @author Mr.zms
* @date 2019/4/18
* @return java.io.File
*/
public HSSFWorkbook exportClassCourseTable(String uuid, String week ,String baseClassId, String baseClassType,String parameterType) {
HSSFWorkbook wb = new HSSFWorkbook();
//获取班级LIST
String classStr = getTimeTableClassInfoByUuid(uuid,"",baseClassId,baseClassType);
JSONObject jsonObject = JSONObject.parseObject(classStr);
if(jsonObject.getBooleanValue("success")){
JSONArray jsonArray =jsonObject.getJSONArray("table_List");
List<Record> elementList = ToolsUtil.JSONArray2List(jsonArray);
//获取课节信息LIST
List<Record> list;
if(COMMON.isEmpty(week)){
list = CourseSelectTimeModel.dao.getCourseTableByUuid(uuid, baseClassId, baseClassType,"","","0","","","");
}else {
list = CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid,week,baseClassId, baseClassType,"","","0","","","");
}
String[] value = {"CLASS_NAME", "BASE_CLASS_ID", "baseClassId", "BASE_CLASS_TYPE","baseClassType"};
//获取天数
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
wb= getHSSFWorkbook(dayJson,list,elementList,value,parameterType);
}
return wb;
}
public HSSFWorkbook exportCourseTableYear(String uuid,String week,String parameterType,String type) {
//获取天数
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
JSONObject classInfo = dayJson.getJSONObject("classInfo");
HSSFWorkbook wb;
if(COMMON.isEmpty(week)){
wb = exportCourseTableYear(uuid,classInfo,parameterType,type);
}else {
wb = exportCourseTableYearWeek(uuid,week,classInfo,parameterType,type);
}
return wb;
}
private HSSFWorkbook exportCourseTableYear(String uuid,JSONObject classInfo,String parameterType,String verticalType){
JSONObject resultJson = new JSONObject();
HSSFWorkbook wb = new HSSFWorkbook();
//班级List
String string = getTimeTableClassInfoByUuid(uuid,"","","");
JSONArray classArray = JSON.parseObject(string).getJSONArray("table_List");
//教室List
List<Record> roomList = CourseSelectTimeModel.dao.getRoomListByUuid(uuid,"","");
//课表List
List<Record> courseList = CourseSelectTimeModel.dao.getCourseTableByUuid(uuid, "", "", "", "", "", "", "", "");
//获取课表
JSONArray jsonArray = getDaySectionArray(courseList, resultJson);
List<Record> classList = ToolsUtil.JSONArray2List(classArray);
HSSFCellStyle cellStyle = getCellStyle(wb) ;
//导出班级-年级课表
createSheet(wb,cellStyle,classList,jsonArray,classInfo,1,parameterType,verticalType);
//教室年级课表
createSheet(wb,cellStyle,roomList,jsonArray,classInfo,2,parameterType,verticalType);
return wb;
}
private HSSFWorkbook exportCourseTableYearWeek(String uuid,String week,JSONObject classInfo,String parameterType,String verticalType){
JSONObject resultJson = new JSONObject();
HSSFWorkbook wb = new HSSFWorkbook();
//班级List
String string = getTimeTableClassInfoByUuid(uuid,week,"","");
JSONArray classArray = JSON.parseObject(string).getJSONArray("table_List");
//教室List
List<Record> roomList = CourseSelectTimeModel.dao.getRoomListByUuidWeek(uuid,week,"");
//课表List
List<Record> courseList = CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid, week,"", "", "", "", "", "", "", "");
//获取课表
JSONArray jsonArray = getDaySectionArray(courseList, resultJson);
List<Record> classList = ToolsUtil.JSONArray2List(classArray);
HSSFCellStyle cellStyle = getCellStyle(wb) ;
//导出班级-年级课表
createSheet(wb,cellStyle,classList,jsonArray,classInfo,1,parameterType,verticalType);
//教室年级课表
createSheet(wb,cellStyle,roomList,jsonArray,classInfo,2,parameterType,verticalType);
return wb;
}
/**
* @description 获取教室课节细腻
* @author Mr.zms
* @date 2019/5/6
* @return java.lang.String
*/
private String getCellString(String classRoomId, JSONArray jsonArray, int day, int section,String parameterType) {
StringBuilder cellString = new StringBuilder();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
String roomId = String.valueOf(json.get("roomId"));
int day1 = json.getIntValue("day");
int section1 = json.getIntValue("section");
if(classRoomId.equals(roomId)&&day == day1 && section == section1 ){
String [] valueArray = analysisParameterType(parameterType);
if(!COMMON.isEmpty(cellString.toString())){
cellString.append("\r\n");
}
cellString.append(getAddCellValue(json, valueArray));
}
}
return cellString.toString();
}
/**
* @description 创建sheet页
* @author Mr.zms
* @date 2019/5/6
* @return void
*/
public void createSheet(HSSFWorkbook wb, HSSFCellStyle cellStyle, List<Record> classList, JSONArray jsonArray, JSONObject classInfo, int type, String parameterType, String verticalType) {
String sheetName = "班级-年级课表";
if(2 == type){
sheetName = "教室-年级课表";
}
HSSFSheet sheet = wb.createSheet(sheetName);
int weekCount = classInfo.getIntValue("week_of_class_count") ;
int row1 = Integer.parseInt(String.valueOf(classInfo.get("afternoon_of_class_count"))) ;
int row2 = Integer.parseInt(String.valueOf(classInfo.get("morning_of_class_count"))) ;
int row3 = Integer.parseInt(String.valueOf(classInfo.get("morning_study_count"))) ;
int row4 = Integer.parseInt(String.valueOf(classInfo.get("night_study_count"))) ;
if("0".equals(verticalType)){
//横版 年级课表
horizontalYearCourseTable(sheet,cellStyle,classList,jsonArray,parameterType,type,weekCount,row1,row2,row3,row4);
}else {
//竖版年级课表
verticalYearCourseTable(sheet,cellStyle,classList,jsonArray,parameterType,type,weekCount,row1,row2,row3,row4);
}
}
/**
* @description 竖版年级课表
* @author Mr.zms
* @date 2019/7/1
* @return void
*/
private void verticalYearCourseTable(HSSFSheet sheet, HSSFCellStyle cellStyle, List<Record> classList, JSONArray jsonArray, String parameterType, int type, int weekCount, int row1, int row2, int row3, int row4) {
//创建表头
short maxHeight = 500;
HSSFRow sheetRow1 = sheet.createRow(0);
HSSFRow sheetRow2 = sheet.createRow(1);
sheetRow1.setHeight(maxHeight);
int sectionCount = row1 + row2+row3+row4;;
int sumCount = weekCount * sectionCount ;
//创建了表头
for (int i = 1; i < sumCount+1; i++) {
int day = getDayInt(i,sectionCount);
int section = getSectionInt(i,sectionCount);
HSSFCell cell1 = sheetRow1.createCell(i);
cell1.setCellValue("星期"+day);
cell1.setCellStyle(cellStyle);
HSSFCell cell2 = sheetRow2.createCell(i);
String cellString = getSectionCellString(section,row1,row2,row3);
cell2.setCellValue(cellString);
cell2.setCellStyle(cellStyle);
}
//增加单元格内容
int rowCount = 2 ;
for (Record record : classList) {
HSSFRow hssfRow = sheet.createRow(rowCount);
rowCount++;
HSSFCell cell1 = hssfRow.createCell(0);
String key = "CLASS_NAME";
if(2 == type ){
key = "CLASS_ROOM_NAME";
}
cell1.setCellValue(String.valueOf(record.get(key)));
cell1.setCellStyle(cellStyle);
for (int i = 1; i < sumCount+1; i++) {
int day = getDayInt(i,sectionCount);
int section = getSectionInt(i,sectionCount);
HSSFCell cell2 = hssfRow.createCell(i);
String cellString = getTeacherSubjectInfo(record,type,jsonArray,day,section,parameterType);
short height = (short)((cellString.split("\n").length+1 ) * 225 );
if(height > maxHeight ){
maxHeight = height ;
hssfRow.setHeight(height);
}
cell2.setCellValue(cellString);
cell2.setCellStyle(cellStyle);
}
}
//合并单元格
int rowInt = 0 ;
for (int i1 = 0; i1 < weekCount; i1++) {
//起始行,结束行,起始列,结束列
int startCol = 1+(sectionCount*i1);
int endCol = sectionCount*(i1+1);
CellRangeAddress callRangeAddress = new CellRangeAddress(rowInt,rowInt, startCol, endCol);
setRegionStyle(sheet,callRangeAddress,cellStyle);
sheet.addMergedRegion(callRangeAddress);
}
}
private int getDayInt(int i ,int sectionCount){
int day;
if ((i % sectionCount) != 0) {
day = (i / sectionCount) + 1;
} else {
day = i / sectionCount;
}
return day;
}
private int getSectionInt(int i ,int sectionCount){
int section;
if ((i % sectionCount) != 0) {
section = i % sectionCount;
} else {
section = sectionCount;
}
return section;
}
private String getSectionCellString(int section,int row1,int row2,int row3){
String cellString = "节数"+(section - row3);
if(section<=row3){
cellString = "早"+section ;
}else if(section>(row1+row2+row3)){
cellString = "晚"+(section - (row1+row2+row3));
}
return cellString;
}
/**
* @description 横版年级课表
* @author Mr.zms
* @date 2019/7/1
* @return void
*/
private void horizontalYearCourseTable(HSSFSheet sheet,HSSFCellStyle cellStyle,List<Record> classList,JSONArray jsonArray,String parameterType,int type,int weekCount,int row1,int row2,int row3,int row4){
int sectionCount = row1 + row2+row3+row4;;
int sumCount = weekCount * sectionCount ;
//创建表头
short maxHeight = 500;
createLine(sheet,maxHeight,cellStyle,classList,type);
for (int i = 1; i < sumCount+1; i++) {
int day = getDayInt(i,sectionCount);
int section = getSectionInt(i,sectionCount);
HSSFRow hssfRow = sheet.createRow(i);
hssfRow.setHeight(maxHeight);
for (int j = 0; j < classList.size()+3; j++) {
String cellString = "";
int index = j -3 ;
HSSFCell cell = hssfRow.createCell(j);
if(index>=0){
Record record = classList.get(index);
cellString = getTeacherSubjectInfo(record,type,jsonArray,day,section,parameterType);
short height = (short)((cellString.split("\n").length+1 ) * 225 );
if(height > maxHeight ){
maxHeight = height ;
hssfRow.setHeight(height);
}
}
if(0 == j){
cellString = "星期"+day;
}
if(1 == j){
if(section<=row2){
cellString = "上午";
}else {
cellString = "下午";
}
}
if(2 == j){
cellString = getSectionCellString(section,row1,row2,row3);
}
cell.setCellValue(cellString);
cell.setCellStyle(cellStyle);
}
}
int colNumber = 2 ;
for (int i = 0; i < colNumber; i++) {
for (int i1 = 0; i1 < weekCount; i1++) {
int firstRow = i1*sectionCount ;
int lastRow = firstRow+row2+row3 ;
int lastRow2 = lastRow+row1+row4 ;
firstRow = firstRow+1;
if(0 ==i ){
//起始行,结束行,起始列,结束列
CellRangeAddress callRangeAddress = new CellRangeAddress(firstRow,lastRow2, i, i);
setRegionStyle(sheet,callRangeAddress,cellStyle);
sheet.addMergedRegion(callRangeAddress);
}else{
CellRangeAddress callRangeAddress = new CellRangeAddress(firstRow,lastRow, i, i);
setRegionStyle(sheet,callRangeAddress,cellStyle);
sheet.addMergedRegion(callRangeAddress);
lastRow = lastRow+1 ;
CellRangeAddress callRangeAddress2 = new CellRangeAddress(lastRow,lastRow2, i, i);
setRegionStyle(sheet,callRangeAddress,cellStyle);
sheet.addMergedRegion(callRangeAddress2);
}
sheet.getRow(firstRow).getCell(i);
sheet.getRow(lastRow).getCell(i);
}
}
}
/**
* @description 获取课节信息
* @author Mr.zms
* @date 2019/5/6
* @return java.lang.String
*/
private String getTeacherSubjectInfo(Record record,int type,JSONArray jsonArray ,int day,int section,String parameterType){
String cellString;
if(1 == type){
String baseClassId = String.valueOf(record.get("BASE_CLASS_ID"));
String baseClassType = String.valueOf(record.get("BASE_CLASS_TYPE"));
cellString = getCellString(baseClassId,baseClassType,jsonArray,day,section,parameterType);
}else{
String classRoomId = String.valueOf(record.get("CLASS_ROOM_ID"));
cellString = getCellString(classRoomId,jsonArray,day,section,parameterType);
}
return cellString;
}
/**
* @description 获取班级对应的课程信息
* @author Mr.zms
* @date 2019/5/6
* @return java.lang.String
*/
private String getCellString(String baseClassId,String baseClassType ,JSONArray jsonArray,int day,int section,String parameterType){
StringBuilder cellString = new StringBuilder();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
String classId = String.valueOf(json.get("baseClassId"));
String classType = String.valueOf(json.get("baseClassType"));
int day1 = json.getIntValue("day");
int section1 = json.getIntValue("section");
if(baseClassId.equals(classId)&&baseClassType.equals(classType)&&day == day1 && section == section1 ){
String [] valueArray = analysisParameterType(parameterType);
if(!COMMON.isEmpty(cellString.toString())){
cellString.append("\r\n");
}
cellString.append(getAddCellValue(json,valueArray));
}
}
return cellString.toString();
}
/**
* @description 创建表头
* @author Mr.zms
* @date 2019/5/6
* @return void
*/
private void createLine(HSSFSheet sheet,short maxHeight,HSSFCellStyle cellStyle,List<Record> classList,int type){
HSSFRow row = sheet.createRow(0);
row.setHeight(maxHeight);
for (int i = 0; i < classList.size()+3; i++) {
int index = i - 3 ;
HSSFCell cell = row.createCell(i);
if(index>=0){
sheet.setColumnWidth(i, 3766);
Record record = classList.get(index);
String key = "CLASS_NAME";
if(2 == type ){
key = "CLASS_ROOM_NAME";
}
String className = record.getStr(key);
cell.setCellValue(className);
}else{
sheet.setColumnWidth(i, 1800);
cell.setCellValue(" ");
}
cell.setCellStyle(cellStyle);
}
}
/**
* @description 导出学生课表
* @author Mr.zms
* @date 2019/5/6
* @return java.io.File
*/
public HSSFWorkbook exportStudentCourseTable(String uuid, String week,String baseClassId,String parameterType) {
HSSFWorkbook wb;
if(COMMON.isEmpty(week)){
wb = exportStudentCourseTable(uuid,baseClassId,parameterType);
}else {
wb = exportStudentCourseTableWeek(uuid,week,baseClassId,parameterType);
}
return wb;
}
private HSSFWorkbook exportStudentCourseTable(String uuid,String baseClassId,String parameterType){
List<Record> list = CourseSelectTimeModel.dao.getCourseTableByUuid(uuid, "", "", "", "", "0", "", "", "");
//获取学生的所在班级
List<Record> studentClassList = CourseSelectTimeModel.dao.getStudentClassList(baseClassId);
return getStudentCourseTableSheet(uuid,list,studentClassList,"",parameterType);
}
private HSSFWorkbook exportStudentCourseTableWeek(String uuid,String week ,String baseClassId,String parameterType){
List<Record> list = CourseSelectTimeModel.dao.getCourseTableByUuidWeek(uuid, week,"", "", "", "", "0", "", "", "");
//获取学生的所在班级
List<Record> studentClassList = CourseSelectTimeModel.dao.getStudentClassList(baseClassId);
return getStudentCourseTableSheet(uuid,list,studentClassList,week,parameterType);
}
/**
* @description 学生课表sheet页
* @author Mr.zms
* @date 2019/5/6
* @return org.apache.poi.hssf.usermodel.HSSFWorkbook
*/
private HSSFWorkbook getStudentCourseTableSheet(String uuid,List<Record>list,List<Record> studentClassList,String week,String parameterType){
HSSFWorkbook wb = new HSSFWorkbook();
HSSFCellStyle cellStyle=getCellStyle(wb) ;
//获取天数
JSONObject dayJson = getCourseTableTimeByUuid(uuid);
//获取课表
JSONObject resultJson = new JSONObject() ;
JSONArray jsonArr = getDaySectionArray(list, resultJson);
// 学生新合班规则
int weekInt = 1 ;
if(!COMMON.isEmpty(week)){
weekInt = Integer.parseInt(week);
}
List<Record> mergingStudentList = CourseSelectTimeModel.dao.getMergingStudentList(uuid,weekInt);
for (int i = 0; i < studentClassList.size(); i++) {
Record student = studentClassList.get(i);
String personId = String.valueOf(student.get("student_id"));
String sheetValue = student.getStr("student_name");
int classId = Integer.parseInt(String.valueOf(student.get("class_id")));
String teacherClassIds = String.valueOf(student.get("teaching_class_ids")) ;
String sheetName = sheetValue + "的课表("+(i+1)+")";
HSSFSheet sheet = wb.createSheet(sheetName);
Map<Integer,Short> maxHeight = new HashMap<>();
createCourseTable(sheet,sheetName,0,dayJson,cellStyle,maxHeight);
for (int j = 0; j < jsonArr.size(); j++) {
JSONObject jsonObject = jsonArr.getJSONObject(j);
String baseClassId = String.valueOf(jsonObject.get("baseClassId"));
String baseClassType = String.valueOf(jsonObject.get("baseClassType"));
String courseId = String.valueOf(jsonObject.get("courseId"));
boolean flag = (checkMerging(mergingStudentList,Integer.parseInt(baseClassId),Integer.parseInt(baseClassType),Integer.parseInt(courseId),personId,classId));
boolean flag1 = "2".equals(baseClassType)&&ToolsUtil.arrayIncludeStr(teacherClassIds,baseClassId);
if (flag || flag1) {
String [] value = analysisParameterType(parameterType);
setCellValue(jsonObject,sheet,value,maxHeight);
}
}
}
return wb ;
}
/**
* @description 设置单元格数据
* @author Mr.zms
* @date 2019/5/7
* @return void
*/
void setCellValue(JSONObject jsonObject,HSSFSheet sheet,String [] value,Map<Integer,Short> maxHeight){
int day = jsonObject.getIntValue("day");
int section = jsonObject.getIntValue("section") + 1;
HSSFRow row = getRow(sheet,section);
HSSFCell cell = getCell(row,day);
String addValue = getAddCellValue(jsonObject,value);
String cellValue = cell.toString();
if(!COMMON.isEmpty(cellValue)){
cellValue += "\r\n";
}
cellValue += addValue ;
int rwsTemp = cellValue.split("\r\n").length+1 ;
short height = (short)(rwsTemp * 228 );
if (!COMMON.isEmpty(maxHeight.get(section))) {
if(height > maxHeight.get(section) ){
row.setHeight(height);
maxHeight.put(section,height);
}
}
cell.setCellValue(cellValue);
}
/**
* @description 获取新增的单元格内容
* @author Mr.zms
* @date 2019/5/7
* @return java.lang.String
*/
String getAddCellValue(JSONObject jsonObject,String [] valueArray){
StringBuilder addValue = new StringBuilder(String.valueOf(jsonObject.get(valueArray[0])));
String singleDouble = String.valueOf(jsonObject.get("single_double"));
if("1".equals(singleDouble)){
addValue.append("(单周)");
}else if("2".equals(singleDouble)){
addValue.append("(双周)");
}
for (int i = 1; i < valueArray.length; i++) {
if(!COMMON.isEmpty(jsonObject.get(valueArray[i]))){
addValue.append("\r\n").append(jsonObject.get(valueArray[i]));
}
}
return addValue.toString();
}
HSSFRow getRow(HSSFSheet sheet , int section){
HSSFRow row;
if (!COMMON.isEmpty(sheet.getRow(section))) {
row = sheet.getRow(section);
} else {
row = sheet.createRow(section);
}
return row ;
}
HSSFCell getCell(HSSFRow row ,int day){
HSSFCell cell ;
if (!COMMON.isEmpty(row.getCell(day))) {
cell = row.getCell(day);
} else {
cell = row.createCell(day);
}
return cell ;
}
void createCourseTable(HSSFSheet sheet,String handName,int startLine,JSONObject dayJson,HSSFCellStyle cellStyle,Map<Integer,Short> maxHeight){
JSONObject dayInfo = dayJson.getJSONObject("classInfo");
boolean success = dayJson.getBooleanValue("success");
if(success){
int weekCount = dayInfo.getIntValue("week_of_class_count") + 1;
int row2 = Integer.parseInt(String.valueOf(dayInfo.get("morning_of_class_count"))) ;
int row3 = Integer.parseInt(String.valueOf(dayInfo.get("morning_study_count"))) ;
int row4 = Integer.parseInt(String.valueOf(dayInfo.get("afternoon_of_class_count"))) ;
int row5 = Integer.parseInt(String.valueOf(dayInfo.get("night_study_count"))) ;
int sectionCount = row2+row3+row4+row5;
HSSFRow row1 = getRow(sheet, 0);
short height = 1000;
maxHeight.put(0,height);
row1.setHeight(height);
//参数1起始行 参数2终止行 参数3起始列 参数4终止列
HSSFCell cell1 = row1.createCell(startLine);
cell1.setCellValue(handName);
CellRangeAddress region = new CellRangeAddress(0,0, (short)startLine , (short) (startLine+weekCount-1));
setRegionStyle(sheet,region,cellStyle);
sheet.addMergedRegion(region);
for (int line = 1; line < sectionCount + 2; line++) {
HSSFRow row = getRow(sheet, line);
int week = 1;
row.setHeight(height);
maxHeight.put(line,height);
sheet.setColumnWidth(line, 3766);
for (int rowInt = startLine; rowInt < startLine + weekCount; rowInt++) {
HSSFCell cell = getCell(row, rowInt);
if (line == 1 && rowInt != startLine) {
cell.setCellValue("星期" + week);
week++;
} else if (line != 1 && rowInt == startLine) {
if((line-1)<=row3){
cell.setCellValue("早" + (line - 1));
}else if ((line-1)>(row2+row3+row4)){
cell.setCellValue("晚" + (line - 1-(row2+row3+row4)));
}else {
cell.setCellValue("节数" + (line - 1-row3));
}
}
cell.setCellStyle(cellStyle);
}
}
}
}
public void setRegionStyle(HSSFSheet sheet, CellRangeAddress region,HSSFCellStyle cs) {
for (int i = region.getFirstRow(); i <= region.getLastRow(); i++) {
HSSFRow row = getRow(sheet,i);
for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {
HSSFCell cell = getCell(row,j);
cell.setCellStyle(cs);
}
}
}
/**
* @description 校验新合班规则 行政班
* @author Mr.zms
* @date 2019/5/7
* @return boolean
*/
private boolean checkMerging(List<Record> mergingStudentList,int baseClassId,int baseClassType,int courseId,String personId,int classId){
boolean flag = false ;
if(1==baseClassType){
flag = baseClassId == classId ;
for (Record record : mergingStudentList) {
String studentId = String.valueOf(record.get("student_id"));
if(personId.equals(studentId)){
int sourceClassId = record.get("source_class_id");
int sourceSubjectId = record.get("source_subject_id");
int targetClassId = record.get("target_class_id");
int targetSubjectId = record.get("target_subject_id");
if(baseClassId == sourceClassId ){
flag = sourceSubjectId != courseId;
}else if(targetClassId == baseClassId){
flag = targetSubjectId==courseId;
break;
}else{
flag = false;
}
}
}
}
return flag ;
}
/**
* @description 添加走班信息
* @author Mr.zms
* @date 2019/5/6
* @return void
*/
private void getClassCourseTableSheet(String uuid , Record classObj, HSSFSheet sheet,Map<Integer,Short> maxHeight){
String baseClassId = String.valueOf(classObj.get("BASE_CLASS_ID"));
String baseClassType = String.valueOf(classObj.get("BASE_CLASS_TYPE"));
List<Record> list = CourseSelectTimeModel.dao.getZouClassInfo(uuid,baseClassId,baseClassType);
for (Record record : list) {
JSONObject jsonObject = ToolsUtil.Record2Object(record);
String [] valueArray = {"subject_name","person_name","class_name","class_room_name"};
setCellValue(jsonObject,sheet,valueArray,maxHeight);
}
}
/**
* @description 根据班级查询id查询所有教师课表
* @author Mr.zms
* @date 2019/5/9
* @return com.alibaba.fastjson.JSONObject
*/
public JSONObject getTeacherTableByClassId(String taskId, String classId, String classType) {
JSONObject returnJson = new JSONObject();
//获取教师LIST
List<Record> teacherList = CourseSelectTimeModel.dao.getTeacherListByClassIdAndRoomId(taskId,classId,classType,"");
//获取全部课程信息
String taskIds = TaskService.service.getStepYearTaskIds(taskId);
List<Record> list = CourseSelectTimeModel.dao.getTaskCourseTable(taskIds,"","");
//获取课节和天数
Record weekOb = TaskModel.dao.getMaxCourseClassInfo(taskIds);
JSONObject dayJson = ToolsUtil.Record2Object(weekOb);
JSONArray teacherArray =getCourseTableArray(teacherList,"teacherId",list,dayJson,classId,classType,"","");
returnJson.put("list",teacherArray);
returnJson.put("table_Time",dayJson);
returnJson.put("success", true);
returnJson.put("info", Constant.SUCCESS_INFO);
return returnJson;
}
public JSONArray getCourseTableArray(List<Record> valueList,String key,List<Record> list,JSONObject dayJson,String classId,String classType,String personId,String roomId){
JSONArray teacherArray = new JSONArray();
for (Record record : valueList) {
JSONObject json = ToolsUtil.Record2Object(record);
//教师list
String value = String.valueOf(record.get(key));
addCourseTableAttribute(json,key);
//班级课表放在arr二维数组里
JSONObject [][] arr = initializationArray(dayJson);
for(Record courseRecord : list ){
String compareValue = String.valueOf(courseRecord.get(key));
// 符合条件 的放入二维数组中
if(value.equals(compareValue)){
int dayClass = courseRecord.getInt("day")-1;
int sectionClass = courseRecord.getInt("section")-1;
int status = MergeCourseTableService.service.addArrAttributeValue(sectionClass, dayClass, arr, courseRecord);
if(1==status){
courseRecordAddPosition(courseRecord,classId,classType,roomId,personId,arr);
}
}
}
json.put("table_array",arr);
teacherArray.add(json);
}
return teacherArray;
}
/**
* @description 返回前端标志是什么课表
* @author Mr.zms
* @date 2019/7/18
* @return void
*/
private void addCourseTableAttribute(JSONObject jsonObject,String key){
//设置默认值
String attribute = "class_table" ;
if("teacherId".equals(key)){
attribute = "teacher_table" ;
}
if("classId".equals(key)){
attribute = "class_table" ;
}
if("roomId".equals(key)){
attribute = "room_table" ;
}
jsonObject.put("attribute",attribute);
}
/**
* @description 根据教师id查询教师课表
* @author Mr.zms
* @date 2019/5/9
* @return void
*/
public JSONObject getTeacherTableByTeacherId(String taskId, String personId) {
JSONObject returnJson = new JSONObject();
//获取全部课程信息
String taskIds = TaskService.service.getStepYearTaskIds(taskId);
//获取教师课节信息
List<Record> list = CourseSelectTimeModel.dao.getTaskCourseTable(taskIds, personId,"");
//获取课节和天数
Record weekOb = TaskModel.dao.getMaxCourseClassInfo(taskIds);
JSONObject dayJson = ToolsUtil.Record2Object(weekOb);
//班级课表放在arr二维数组里
JSONObject[][] arr = getTeacherCourseTable(dayJson,list);
returnJson.put("success", true);
returnJson.put("info", Constant.SUCCESS_INFO);
returnJson.put("table_array",arr);
returnJson.put("table_Time",dayJson);
return returnJson;
}
/**
* @description 根据教师id,查询所有执教班级课表
* @author Mr.zms
* @date 2019/5/9
* @return void
*/
public JSONObject getCourseTableByTeacherId(String taskId, String personId) {
JSONObject returnJson = new JSONObject();
List<Record> classList = CourseSelectTimeModel.dao.getClassListByTeacherId(taskId,personId,"");
//获取课节和天数
Record weekOb = TaskService.service.getMaxDayJson(taskId);
JSONObject dayJson = ToolsUtil.Record2Object(weekOb);
//获取全部课程信息
List<Record> list = CourseSelectTimeModel.dao.getTaskCourseTable(taskId,"","");
JSONArray teacherArray = getClassCourseList(classList,list,dayJson,personId,"");
returnJson.put("success", true);
returnJson.put("info", Constant.SUCCESS_INFO);
returnJson.put("list",teacherArray);
returnJson.put("table_Time",dayJson);
return returnJson;
}
/**
* @description 班级课表List
* @author Mr.zms
* @date 2019/5/9
* @return com.alibaba.fastjson.JSONArray
*/
public JSONArray getClassCourseList(List<Record> classList,List<Record> list,JSONObject dayJson,String personId,String roomId){
JSONArray teacherArray = new JSONArray();
for (Record classObj : classList) {
JSONObject json = ToolsUtil.Record2Object(classObj);
addCourseTableAttribute(json,"classId");
//班级课表放在arr二维数组里
JSONObject [][] arr = initializationArray(dayJson);
int classId = classObj.get("class_id");
int classType = classObj.get("class_type");
for (Record courseRecord : list) {
int courseClassId = courseRecord.get("classId");
int courseClassType = courseRecord.get("classType");
if(classId == courseClassId && classType == courseClassType){
int dayClass = courseRecord.get("day");
int sectionClass = courseRecord.get("section");
courseRecordAddPosition(courseRecord,"","",roomId,personId,arr);
MergeCourseTableService.service.addArrAttributeValue(sectionClass-1, dayClass-1, arr, courseRecord);
}
}
json.put("table_array",arr);
teacherArray.add(json);
}
return teacherArray ;
}
private int compareValue(String value ,String key,Record courseRecord){
String compareValue = String.valueOf(courseRecord.get(key));
if(value.equals(compareValue)){
return 1 ;
}
return 0 ;
}
private void courseRecordAddPosition(Record courseRecord,String classId,String classType,String roomId,String personId,JSONObject [][] arr){
int position = 0 ;
int x = courseRecord.getInt("section")-1;
int y = courseRecord.getInt("day")-1;
if(!COMMON.isEmpty(classId)&&!COMMON.isEmpty(classType)){
String teacherClassId = String.valueOf(courseRecord.get("classId"));
String teacherClassType = String.valueOf(courseRecord.get("classType"));
if(teacherClassId.equals(classId)&&classType.equals(teacherClassType)){
position = 1 ;
}
}
if(!COMMON.isEmpty(personId)){
position = compareValue(personId,"teacherId",courseRecord);
}
if(!COMMON.isEmpty(roomId)){
position = compareValue(roomId,"roomId",courseRecord);
}
if(0==arr[x][y].getIntValue("position_type")&&0!=position){
arr[x][y].put("position_type", position);
}
}
/**
* @description 获取教师课表
* @author Mr.zms
* @date 2019/5/10
* @return com.alibaba.fastjson.JSONObject[][]
*/
public JSONObject[][] getTeacherCourseTable(JSONObject dayJson,List<Record> list){
JSONObject[][] arr = initializationArray(dayJson);
for (Record courseRecord : list) {
int section = courseRecord.getInt("section")-1;
int day = courseRecord.getInt("day")-1;
int status = MergeCourseTableService.service.addArrAttributeValue(section, day, arr, courseRecord);
if(1==status){
arr[section][day].put("section_type", 0);
}
}
return arr ;
}
public JSONObject getTeacherList(String taskId) {
JSONObject returnJson = new JSONObject();
List<Record> classList = CourseSelectTimeModel.dao.getTeacherList(taskId);
returnJson.put("list", COMMON.convertListRecord2(classList));
returnJson.put("success",Constant.TRUE);
return returnJson;
}
public JSONObject getRoomTableByClassId(String taskId, String classId, String classType) {
JSONObject returnJson = new JSONObject();
//获取教室LIST
List<Record> roomList = CourseSelectTimeModel.dao.getRoomList(taskId,classId,classType,"");
//获取全部课程信息
List<Record> list = CourseSelectTimeModel.dao.getTaskCourseTable(taskId,"","");
//获取课节和天数
Record weekOb = TaskService.service.getMaxDayJson(taskId);
JSONObject dayJson = ToolsUtil.Record2Object(weekOb);
JSONArray jsonArray = getCourseTableArray(roomList,"roomId",list,dayJson,classId,classType,"","");
returnJson.put("list",jsonArray);
returnJson.put("table_Time",dayJson);
returnJson.put("success", true);
returnJson.put("info", Constant.SUCCESS_INFO);
return returnJson;
}
public String getRoomListByTaskId(String taskId) {
List<Record> list = CourseSelectTimeModel.dao.getRoomList(taskId,"","","");
return COMMON.convert2JsonStr(list);
}
/**
* @description 根据教师ID 获取教室课表
* @author Mr.zms
* @date 2019/7/5
* @return com.alibaba.fastjson.JSONObject
*/
public JSONObject getRoomTableByTeacherId(String taskId, String personId) {
JSONObject returnJson = new JSONObject();
//教室列表
List<Record> roomList = CourseSelectTimeModel.dao.getRoomList(taskId,"","",personId);
//获取课节和天数
Record weekOb = TaskService.service.getMaxDayJson(taskId);
JSONObject dayJson = ToolsUtil.Record2Object(weekOb);
//获取全部课程信息
List<Record> list = CourseSelectTimeModel.dao.getTaskCourseTable(taskId,"","");
JSONArray teacherArray = getCourseTableArray(roomList,"roomId",list,dayJson,"","",personId,"");
returnJson.put("success", true);
returnJson.put("info", Constant.SUCCESS_INFO);
returnJson.put("list",teacherArray);
returnJson.put("table_Time",dayJson);
return returnJson;
}
public JSONObject getRoomTableByRoomId(String taskId, String roomId) {
JSONObject returnJson = new JSONObject();
//获取教师课节信息
List<Record> list = CourseSelectTimeModel.dao.getTaskCourseTable(taskId, "",roomId);
//获取课节和天数
Record weekOb = TaskService.service.getMaxDayJson(taskId);
JSONObject dayJson = ToolsUtil.Record2Object(weekOb);
//班级课表放在arr二维数组里
JSONObject[][] arr = getTeacherCourseTable(dayJson,list);
returnJson.put("success", true);
returnJson.put("info", Constant.SUCCESS_INFO);
returnJson.put("table_array",arr);
returnJson.put("table_Time",dayJson);
return returnJson;
}
public JSONObject getCourseTableByRoomId(String taskId, String roomId) {
JSONObject returnJson = new JSONObject();
List<Record> classList = CourseSelectTimeModel.dao.getClassListByTeacherId(taskId,"",roomId);
//获取课节和天数
Record weekOb = TaskService.service.getMaxDayJson(taskId);
JSONObject dayJson = ToolsUtil.Record2Object(weekOb);
//获取全部课程信息
List<Record> list = CourseSelectTimeModel.dao.getTaskCourseTable(taskId,"","");
JSONArray teacherArray = getClassCourseList(classList,list,dayJson,"",roomId);
returnJson.put("success", true);
returnJson.put("info", Constant.SUCCESS_INFO);
returnJson.put("list",teacherArray);
returnJson.put("table_Time",dayJson);
return returnJson;
}
public JSONObject getTeacherTableByRoomId(String taskId, String roomId) {
JSONObject returnJson = new JSONObject();
//获取教师LIST
List<Record> teacherList = CourseSelectTimeModel.dao.getTeacherListByClassIdAndRoomId(taskId,"","",roomId);
//获取全部课程信息
List<Record> list = CourseSelectTimeModel.dao.getTaskCourseTable(taskId,"","");
//获取课节和天数
Record weekOb = TaskService.service.getMaxDayJson(taskId);
JSONObject dayJson = ToolsUtil.Record2Object(weekOb);
JSONArray teacherArray =getCourseTableArray(teacherList,"teacherId",list,dayJson,"","","",roomId);
returnJson.put("list",teacherArray);
returnJson.put("table_Time",dayJson);
returnJson.put("success", true);
returnJson.put("info", Constant.SUCCESS_INFO);
return returnJson;
}
public JSONObject getTeacherCourseTable(String bureauId ,String week,String personId) {
JSONObject resultJson=new JSONObject();
resultJson.put("success", false);
resultJson.put("info", "暂无课表");
/*获取当前学期*/
JSONObject xqOb=BorrowUtil.getCurrentTerm();
String xqId=String.valueOf(xqOb.get("XQ_ID")) ;
List<Record> list = CourseSelectTimeModel.dao.getTeacherCourseTableWeek(bureauId,xqId,week,personId);
if(COMMON.isEmpty(list)){
return resultJson ;
}
/*拼接返回值*/
JSONArray jsonArr = getDaySectionArray(list, resultJson);
/*获取课节和天数(取最大值)*/
Record dayRecord = new Record().set("bureau_id",bureauId).set("xq_id",xqId);
Record record =TimetableAdjustModel.DAO.getCourseTableMaxTime(dayRecord);
JSONObject dayJson = ToolsUtil.Record2Object(record);
JSONObject dayJsonResult = new JSONObject();
if(!COMMON.isEmpty(dayJson)){
JSONObject [][] arr = initializationArray(dayJson);
courseTableAddToArray(jsonArr,arr);
if(!COMMON.isEmpty(arr)){
dayJsonResult.put("classInfo",dayJson);
resultJson.put("table_Time",dayJsonResult);
resultJson.put("table_arry", arr);
resultJson.put("success", true);
resultJson.put("info", Constant.SUCCESS_INFO);
return resultJson;
}
}
return resultJson;
}
public HSSFWorkbook exportTeacherCourseTableByTaskIds(String taskIds) {
List<Record> teacherList = CourseSelectTimeModel.dao.getTeacherListByTaskIds(taskIds); ;
List<Record> list = CourseSelectTimeModel.dao.getCourseTableByTaskIds(taskIds,"0");
HSSFWorkbook wb = new HSSFWorkbook();
//单元格样式
HSSFCellStyle cellStyle=getCellStyle(wb) ;
String [] taskIdArray = taskIds.split("");
//获取天数
Record dayRecord = MergeCourseTableModel.dao.getWeekOfClassByTaskId(taskIdArray[0]);
JSONObject classInfo = ToolsUtil.Record2Object(dayRecord);
JSONObject dayJson = new JSONObject();
dayJson.put("success",true);
dayJson.put("classInfo",classInfo);
//获取课表
for (int i = 0; i < teacherList.size(); i++) {
Record teacher = teacherList.get(i);
String sheetValue = teacher.getStr("person_name");
String compareValue = String.valueOf(teacher.get("person_id"));
String sheetName = sheetValue + "的课表"+i;
HSSFSheet sheet = wb.createSheet(sheetName);
Map<Integer,Short> maxHeight = new HashMap<>();
createCourseTable(sheet,sheetName,0,dayJson,cellStyle,maxHeight);
for (Record record : list) {
JSONObject jsonObject = ToolsUtil.Record2Object(record);
String compareValue1 = String.valueOf(jsonObject.get("person_id"));
if (compareValue.equals(compareValue1)) {
String[] valueArray = {"subject_name", "room_name", "class_name", "teacher_name"};
setCellValue(jsonObject, sheet, valueArray, maxHeight);
}
}
}
return wb;
}
public JSONObject getTeacherCourseWeekList(String bureauId,String stageId) throws ParseException {
return TimetableAdjustWeekService.service.getAdjustWeekList( bureauId, stageId, "", "");
}
public HSSFWorkbook exportYearCourseTableByTaskIds(String taskIds,String type,String parameterType) {
// 获取所有班级
List<Record> classList = CourseSelectTimeModel.dao.getClassListByTaskIds(taskIds);
//所有课节信息
List<Record> list = CourseSelectTimeModel.dao.getCourseTableByTaskIds(taskIds,"");
HSSFWorkbook wb = new HSSFWorkbook();
//获取课表
JSONArray jsonArray = getDaySectionArray(list, new JSONObject());
HSSFCellStyle cellStyle = getCellStyle(wb) ;
//获取天数
String [] taskIdArray = taskIds.split("");
Record dayRecord = MergeCourseTableModel.dao.getWeekOfClassByTaskId(taskIdArray[0]);
JSONObject classInfo = ToolsUtil.Record2Object(dayRecord);
//导出班级-年级课表 {"subject_name", "room_name", "class_name", "teacher_name"};
createSheet(wb,cellStyle,classList,jsonArray,classInfo,1,parameterType,type);
return wb;
}
public HSSFWorkbook downloadTeacherCourseTable(String bureauId, String week, String personId,String personName,String parameterType) {
/*获取当前学期*/
JSONObject xqOb=BorrowUtil.getCurrentTerm();
String xqId=String.valueOf(xqOb.get("XQ_ID")) ;
List<Record> list = CourseSelectTimeModel.dao.getTeacherCourseTableWeek(bureauId,xqId,week,personId);
if(COMMON.isEmpty(list)){
return new HSSFWorkbook() ;
}
/*获取课节和天数(取最大值)*/
Record dayRecord = CourseSelectTimeModel.dao.getCourseTableMaxTime(bureauId,xqId);
JSONObject dayJson = new JSONObject();
dayJson.put("classInfo", ToolsUtil.Record2Object(dayRecord));
dayJson.put("success",true);
List<Record> teacherList = new ArrayList<>();
Record record = new Record().set("person_id",personId).set("person_name",personName);
teacherList.add(record);
String[] value = {"person_name", "person_id", "teacherId"};
return getHSSFWorkbook(dayJson,list,teacherList,value,parameterType);
}
public HSSFWorkbook downloadTeacherClassCourseTable(String bureauId, String week, String stagId,String personId, String parameterType) {
/*获取当前学期*/
JSONObject xqOb=BorrowUtil.getCurrentTerm();
String xqId=String.valueOf(xqOb.get("XQ_ID")) ;
//获取教师授课班级
List<Record> classList = CourseSelectTimeModel.dao.getClassListByStepTeacherId( bureauId,stagId, xqId,week,personId);
// 获取所有课节信息
List<Record> list = CourseSelectTimeModel.dao.getStepCourseTable(bureauId,stagId, xqId,week,"");
String[] value = {"CLASS_NAME", "BASE_CLASS_ID", "baseClassId", "BASE_CLASS_TYPE","baseClassType"};
/*获取课节和天数(取最大值)*/
Record dayRecord = CourseSelectTimeModel.dao.getCourseTableMaxTime(bureauId,xqId);
JSONObject dayJson = new JSONObject();
dayJson.put("classInfo", ToolsUtil.Record2Object(dayRecord));
dayJson.put("success",true);
return getHSSFWorkbook(dayJson,list,classList,value,parameterType);
}
public HSSFWorkbook downloadAllTeacherCourseTable(String bureauId, String week, String stagId, String xqId, String parameterType) {
HSSFWorkbook wb = new HSSFWorkbook();
List<Record> teacherList = CourseSelectTimeModel.dao.getStepTeacherList(bureauId,stagId,xqId,week);
// 获取所有课节信息
List<Record> list = CourseSelectTimeModel.dao.getStepCourseTable(bureauId,stagId, xqId,week,"");
Record dayRecord = CourseSelectTimeModel.dao.getCourseTableMaxTime(bureauId,xqId);
JSONArray jsonArr = getDaySectionArray(list, new JSONObject());
//单元格样式
HSSFCellStyle cellStyle=getCellStyle(wb) ;
int startRow = 0 ;
Map<Integer,HSSFSheet> sheetMap = new HashMap<>();
for (Record teacher : teacherList) {
int courseId= teacher.get("course_id");
String compareValue = String.valueOf(teacher.get("teacher_id"));
String className = teacher.getStr("class_name");
String teacherName = String.valueOf(teacher.get("person_name"));
teacherName = teacherName+"("+className+")";
Map<Integer,Short> maxHeight = new HashMap<>();
HSSFSheet sheet = null ;
if(COMMON.isEmpty(sheetMap.get(courseId))){
String sheetValue = teacher.getStr("subject_name");
String sheetName = sheetValue+ "的课表";
sheet = wb.createSheet(sheetName);
sheetMap.put(courseId,sheet);
startRow =0 ;
}else {
sheet = sheetMap.get(courseId);
}
int rowNUmber = createTable(sheet,dayRecord,teacherName,cellStyle,startRow,maxHeight);
for (Object obj : jsonArr) {
JSONObject jsonObject = (JSONObject)obj ;
String compareValue1 = String.valueOf(jsonObject.get("teacherId"));
if (compareValue.equals(compareValue1)) {
String [] valueArray = analysisParameterType(parameterType);
jsonObject.put("section",jsonObject.getIntValue("section")+startRow);
setCellValue(jsonObject,sheet,valueArray,maxHeight);
jsonObject.put("section",jsonObject.getIntValue("section")-startRow);
}
}
startRow= rowNUmber;
}
return wb;
}
private int createTable(HSSFSheet sheet ,Record dayRecord,String teacherName ,HSSFCellStyle cellStyle,int startRow, Map<Integer,Short> maxHeight){
int weekCount = dayRecord.getInt("week_of_class_count") + 1;
int row2 = Integer.parseInt(String.valueOf(dayRecord.get("morning_of_class_count"))) ;
int row3 = Integer.parseInt(String.valueOf(dayRecord.get("morning_study_count"))) ;
int row4 = Integer.parseInt(String.valueOf(dayRecord.get("afternoon_of_class_count"))) ;
int row5 = Integer.parseInt(String.valueOf(dayRecord.get("night_study_count"))) ;
int sectionCount = row2+row3+row4+row5;
HSSFRow row1 = getRow(sheet, startRow);
short height = 1000;
maxHeight.put(0,height);
row1.setHeight(height);
//参数1起始行 参数2终止行 参数3起始列 参数4终止列
HSSFCell cell1 = row1.createCell(0);
cell1.setCellValue(teacherName);
CellRangeAddress region = new CellRangeAddress(startRow,startRow, 0 , (short) (weekCount-1));
setRegionStyle(sheet,region,cellStyle);
sheet.addMergedRegion(region);
for (int line = 1; line < sectionCount + 2; line++) {
HSSFRow row = getRow(sheet, line+startRow);
int week = 1;
row.setHeight(height);
maxHeight.put(line,height);
sheet.setColumnWidth(line, 3766);
for (int rowInt = 0; rowInt < weekCount; rowInt++) {
HSSFCell cell = getCell(row, rowInt);
if (line == 1 && rowInt != 0) {
cell.setCellValue(getWeekDetail(week));
week++;
} else if (line != 1 && rowInt == 0) {
cell.setCellValue( (line - 1));
}
cell.setCellStyle(cellStyle);
}
}
return startRow+sectionCount+2;
}
public Map<Integer,String> getWeek(){
Map<Integer,String> map = new HashMap<>(7);
map.put(1,"星期一");
map.put(2,"星期二");
map.put(3,"星期三");
map.put(4,"星期四");
map.put(5,"星期五");
map.put(6,"星期六");
map.put(7,"星期日");
return map;
}
public String getWeekDetail(int week){
return getWeek().get(week);
}
public HSSFWorkbook downloadAllClassCourseTable(String bureauId, String week, String stagId, String xqId, String parameterType) {
HSSFWorkbook wb = new HSSFWorkbook();
List<Record> classList = CourseSelectTimeModel.dao.getStepClassList(bureauId,stagId,xqId,week);
// 获取所有课节信息
List<Record> list = CourseSelectTimeModel.dao.getStepCourseTable(bureauId,stagId, xqId,week,"");
Record dayRecord = CourseSelectTimeModel.dao.getCourseTableMaxTime(bureauId,xqId);
JSONArray jsonArr = getDaySectionArray(list, new JSONObject());
//单元格样式
HSSFCellStyle cellStyle=getCellStyle(wb) ;
int startRow = 0 ;
Map<Integer,HSSFSheet> sheetMap = new HashMap<>();
for (Record teacher : classList) {
int year= teacher.get("year");
String classId = String.valueOf(teacher.get("class_id"));
String baseClassType = String.valueOf(teacher.get("base_class_type"));
String className = String.valueOf(teacher.get("class_name"));
Map<Integer,Short> maxHeight = new HashMap<>();
HSSFSheet sheet = null ;
if(COMMON.isEmpty(sheetMap.get(year))){
String sheetName = year+ "年级的课表";
sheet = wb.createSheet(sheetName);
sheetMap.put(year,sheet);
startRow =0 ;
}else {
sheet = sheetMap.get(year);
}
int rowNUmber = createTable(sheet,dayRecord,className,cellStyle,startRow,maxHeight);
for (Object obj : jsonArr) {
JSONObject jsonObject = (JSONObject)obj ;
String compareValue1 = String.valueOf(jsonObject.get("baseClassId"));
String compareValue2 = String.valueOf(jsonObject.get("baseClassType"));
if (classId.equals(compareValue1)&&baseClassType.equals(compareValue2)) {
String [] valueArray = analysisParameterType(parameterType);
int day = jsonObject.getIntValue("day");
int section = jsonObject.getIntValue("section") + 1+startRow;
HSSFRow row = getRow(sheet,section);
HSSFCell cell = getCell(row,day);
StringBuilder addValue = new StringBuilder(String.valueOf(jsonObject.get(valueArray[0])));
String singleDouble = String.valueOf(jsonObject.get("single_double"));
if("1".equals(singleDouble)){
addValue.append("-单");
}else if("2".equals(singleDouble)){
addValue.append("-双");
}
for (int i = 1; i < valueArray.length; i++) {
if(!COMMON.isEmpty(jsonObject.get(valueArray[i]))){
addValue.append("(").append(jsonObject.get(valueArray[i])).append(")");
}
}
String cellValue= cell.toString();
if(!COMMON.isEmpty(cellValue)){
cellValue += "\r\n";
}
cellValue += addValue ;
cell.setCellValue(cellValue);
}
}
startRow= rowNUmber;
}
return wb;
}
}