后端代码实现

2022SC@SDUSC

package org.jeecg.modules.demo.atupai.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import liquibase.pro.packaged.S;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.demo.atupai.entity.*;
import org.jeecg.modules.demo.atupai.service.*;
import org.jeecg.modules.flowable.apithird.entity.SysUser;
import org.jeecg.modules.flowable.apithird.service.IFlowThirdService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;

/**
 * @Description: 自动排考
 * @Author: jeecg-boot
 * @Date:   2022-04-02
 * @Version: V1.0
 */
@Api(tags="自动排考")
@RestController
@RequestMapping("/atupai/arrangement")
@Slf4j
public class ArrangementController extends JeecgController<Arrangement, IArrangementService> {
	@Autowired
	private IArrangementService arrangementService;
	 @Autowired
	 private IClassroominfoService classroominfoService;
	@Autowired
	private IRoomService roomService;
	@Autowired
	private ITimetableService timetableService;
	@Autowired
	private ISelectstudentService selectstudentService;
	@Autowired
	private IExamSeatInfoService examSeatInfoService;
	@Autowired
	private IStuInfoService stuInfoService;
	@Autowired
	private ISitService sitService;
	@Autowired
	IFlowThirdService iFlowThirdService;
	/**
	 * 分页列表查询
	 *
	 * @param arrangement
	 * @param pageNo
	 * @param pageSize
	 * @param req
	 * @return
	 */
	//@AutoLog(value = "自动排考-分页列表查询")
	@ApiOperation(value="自动排考-分页列表查询", notes="自动排考-分页列表查询")
	@GetMapping(value = "/list")
	public Result<IPage<Arrangement>> queryPageList(Arrangement arrangement,
													@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
													@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
													HttpServletRequest req) {
		QueryWrapper<Arrangement> queryWrapper = QueryGenerator.initQueryWrapper(arrangement, req.getParameterMap());
		Page<Arrangement> page = new Page<Arrangement>(pageNo, pageSize);
		IPage<Arrangement> pageList = arrangementService.page(page, queryWrapper);
		return Result.OK(pageList);
	}


	/**
	 * 教师申请进度
	 *
	 * @param arrangement
	 * @param pageNo
	 * @param pageSize
	 * @param req
	 * @return
	 */
	//@AutoLog(value = "自动排考-分页列表查询")
	@ApiOperation(value="自动排考-分页列表查询", notes="自动排考-分页列表查询")
	@GetMapping(value = "/list0")
	public Result<IPage<Arrangement>> queryPageList0(Arrangement arrangement,
													@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
													@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
													HttpServletRequest req) {
		SysUser sysUser = iFlowThirdService.getLoginUser();
		String tid = sysUser.getUsername();
		String name=sysUser.getRealname();
		QueryWrapper<Arrangement> queryWrapper = QueryGenerator.initQueryWrapper(arrangement, req.getParameterMap());
		Page<Arrangement> page = new Page<Arrangement>(pageNo, pageSize);
		queryWrapper.eq("teachername",name);
		queryWrapper.eq("notice","已通知");
		IPage<Arrangement> pageList = arrangementService.page(page, queryWrapper);
		return Result.OK(pageList);
	}


	/**
	 * 教师申请列表
	 *
	 * @param arrangement
	 * @param pageNo
	 * @param pageSize
	 * @param req
	 * @return
	 */
	//@AutoLog(value = "自动排考-分页列表查询")
	@ApiOperation(value="自动排考-分页列表查询", notes="自动排考-分页列表查询")
	@GetMapping(value = "/list1")
	public Result<IPage<Arrangement>> queryPageList1(Arrangement arrangement,
													 @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
													 @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
													 HttpServletRequest req) {
		SysUser sysUser = iFlowThirdService.getLoginUser();
		String tid = sysUser.getUsername();
		String name=sysUser.getRealname();
		QueryWrapper<Arrangement> queryWrapper = QueryGenerator.initQueryWrapper(arrangement, req.getParameterMap());
		Page<Arrangement> page = new Page<Arrangement>(pageNo, pageSize);
		queryWrapper.eq("teachername",name);
		IPage<Arrangement> pageList = arrangementService.page(page, queryWrapper);
		return Result.OK(pageList);
	}


	/**
	 *   添加
	 *
	 * @param arrangement
	 * @return
	 */
	@AutoLog(value = "自动排考-添加")
	@ApiOperation(value="自动排考-添加", notes="自动排考-添加")
	@PostMapping(value = "/add")
	public Result<String> add(@RequestBody Arrangement arrangement) throws Exception {

		if(arrangementService.courseidexist(arrangement.getCourseid(),arrangement.getCourseord()))
		{arrangementService.save(arrangement);
		return Result.OK("添加成功!");}
		else
			return Result.error("课程已申请");
	}

	 /**
	  *   安排考场
	  *
	  * @param id
	  * @return
	  */
	 @GetMapping(value = "/anpaikaochang")
	 public Result<String> anpaikaochang( @RequestParam(name="id",required=true) String id) throws Exception {
		 Arrangement arrangement = arrangementService.getById(id);
		 		 //逻辑顺序,安排后变成已安排
		 if(arrangement.getArrange()!=null&&arrangement.getArrange().equals("已排"))
		 {return Result.error("已安排");}
		 else
		 { arrangement.setArrange("已排");
		 	//取属性
		 String testtime=arrangement.getTesttimehope();//申请考试时间,如:17/星期一/1-2
		 String []testtimeset=testtime.split("/");
		 String weektime=testtimeset[0];
		 int week=Integer.parseInt(weektime);//考试周
		 String weekday=testtimeset[1];//考试星期
		 String weekdaytime=testtimeset[2];//考试节次
		 int selectstudents=arrangement.getCoursepeoplesum();
		 //取出所有可用教室
		 List<Classroominfo> allclassroom=classroominfoService.selectAllkeyong();
		 //排序,大教室优先
		 allclassroom.sort((b,a)->a.getTestsit().compareTo(b.getTestsit()));
		 String classroom = arrangement.getCourseposition();
		 //转换班级,将大范围的班级转换为每个班级
		 String classes=arrangement.getCourseclass();
		 List <String>classessearch = getclass(classes);
		 //取出上课教室的座位数
		 Classroominfo classsit = classroominfoService.selectByClassroomName(classroom);
		 if(classsit==null)
			 return Result.error("暂未有该教室信息,不能随堂");
		 else{
		 int sit=0;
		 if(classsit.getTestsit()!=null)
		 	sit = Integer.parseInt(classsit.getTestsit());
		 //如果随堂考,则不用考虑班级时间冲突,只考虑空间冲突(找可使用的教室)。
		 if(arrangement.getChapel()!=null&&arrangement.getChapel().equals("是"))
		 {      //可使用教室去掉上课教室
		 	     allclassroom.remove(classsit);
		 	     //如果上课教室座位数>选课人数,考场一为上课教室,考场二为“空”,必须为空,不能不写
			 	if (arrangement.getCoursepeoplesum() < sit)
				 {     arrangement.setTestpositionfirst(classroom);
					   arrangement.setTestpositionsecond("空");
				 }//<,找申请时间的空教室
			 	else
				  {
					 arrangement.setTestpositionfirst(classroom);
					 //第二个教室排考人数改变
					 int less=arrangement.getCoursepeoplesum()-sit;
					 //去掉可用座位数小于排考人数的教室
					 for(int i=0;i<allclassroom.size();i++)
					 {  if(allclassroom.get(i).getTestsit()==null)
                         System.out.println(allclassroom.get(i));
					 	else
					 	{if(Integer.parseInt(allclassroom.get(i).getTestsit())<less)
					 	    allclassroom.remove(i);
					    }
					 }
					 //找到一个申请时间可用的教室,停止,判断并更新教室的使用状态
					 for(Classroominfo second:allclassroom)
					  {   Room secjiaoshi=roomService.selectByClassroomAndWeek(second.getClassroomname(),week);
					 	if(roomupdate(secjiaoshi,weekday,weekdaytime))
					 	{   arrangement.setTestpositionsecond(secjiaoshi.getClassroom());
							break;
					 	}
					  }
				  }
		 } //不随堂,考虑申请时间与班级上课时间的冲突,需要参考课表信息
		 else
		 {  //冲突标志,初始化为0,有冲突变为1
		 	int sign=0;
		 	//冲突班级,冲突课程,需要返回冲突信息
		 	//遍历班级列表,从课表中拿出申请星期,节次与申请时间的课程的周数,
			 // 不冲突1:取出数据为空
			 // 不冲突2:取出数据不为空,但申请周数不包含在课程周数
		 	for (String classtime:classessearch)
		     {  String conclass="";
				 String concourse="";
				 List<String> timeset=timetableService.selectWeek(classtime,weekday,weekdaytime);
		     	if (timeset!=null)
				{ //考虑之后发现形势与政策应该不会比安排时间早,所以不考虑
					for(String eveweektime:timeset)
					{  if (!eveweektime.contains(","))
					    {String[] range=eveweektime.split("-");
							System.out.println(range[0]);
							System.out.println(week);
							System.out.println(classtime);
							System.out.println(timetableService.selectName(classtime,weekday,weekdaytime).get(0));
							System.out.println(range[1]);
							Boolean temp1=week>Integer.parseInt(range[0])&&week<Integer.parseInt(range[1]);
							Boolean temp2=week==Integer.parseInt(range[1]);
							System.out.println((week>Integer.parseInt(range[0])&&week<Integer.parseInt(range[1])));
							System.out.println(week==Integer.parseInt(range[1]));
					      if (temp1||temp2) {
								System.out.println("oadeugusu");
								conclass=classtime;
								concourse=timetableService.selectName(classtime,weekday,weekdaytime).get(0);
								sign=1;
								break;
							}
				        }
					}
				}
				 if (sign==1)
					 return Result.error("与"+conclass+concourse+"时间冲突");

		     }
		 	//返回冲突信息
		 	//不冲突继续执行,时间解决,解决空间,找空教室
			 //遍历可用教室(允许笔试)
		 	List<String>classroomlist= new ArrayList();
		 	for(Classroominfo classroom0:allclassroom)
			{ if(classroom0.getTestsit()!=null&&!classroom0.getTestsit().equals("0"))
				{ 	int classroomsit=Integer.parseInt(classroom0.getTestsit());
			      	Room roomsec=roomService.selectByClassroomAndWeek(classroom0.getClassroomname(),week);
				    if(roomupdate(roomsec,weekday,weekdaytime))
				      {  //需要安排考试人数<教室有效座位数,停止
				      	if(selectstudents<classroomsit)
				           { classroomlist.add(roomsec.getClassroom());
                              break; }
					    else
					    //更新需要安排考试人数
				          {   classroomlist.add(roomsec.getClassroom());
				    	      selectstudents=selectstudents-classroomsit; }
				      }
			      }
			}
			 int size=classroomlist.size();
		 	//只需要一个教室
		 	if(size==1)
			{arrangement.setTestpositionfirst(classroomlist.get(0));
		 	arrangement.setTestpositionsecond("空");}
		 	//需要两个教室
		 	if(size==2) {arrangement.setTestpositionfirst(classroomlist.get(0));
				  arrangement.setTestpositionsecond(classroomlist.get(1));}
		 }
		 //更新排考信息,返回成功提示
			 arrangementService.updateById(arrangement);
		 return Result.OK("安排成功");}
	 }}


	/**
	 *   取消排考
	 *
	 * @param id
	 * @return
	 */

	@GetMapping(value = "/cancelpaikao")
	public Result<String> cancelpaikao( @RequestParam(name="id",required=true) String id) throws Exception {
		Arrangement arrangement = arrangementService.getById(id);
		//取属性
		String testtime = arrangement.getTesttimehope();
		String[] testtimeset = testtime.split("/");
		String weektime = testtimeset[0];
		int week = Integer.parseInt(weektime);
		String weekday = testtimeset[1];
		String weekdaytime = testti
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值