|  | @@ -7,8 +7,11 @@ import cn.ele6.catalyzer.ruoyi.vue.custom.Ele6RYBaseService;
 | 
	
		
			
				|  |  |  import cn.ele6.catalyzer.ruoyi.vue.enhance.TableDataInfo;
 | 
	
		
			
				|  |  |  import com.ruoyi.common.core.domain.AjaxResult;
 | 
	
		
			
				|  |  |  import com.ruoyi.common.utils.DateUtils;
 | 
	
		
			
				|  |  | +import com.ruoyi.sim.controller.RealExamCollectionController;
 | 
	
		
			
				|  |  |  import com.ruoyi.sim.domain.vo.RealExamCollectionVo;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | +import org.slf4j.Logger;
 | 
	
		
			
				|  |  | +import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  |  import org.springframework.beans.BeanUtils;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.context.annotation.Lazy;
 | 
	
	
		
			
				|  | @@ -102,6 +105,8 @@ public class RealExamCollectionService extends Ele6RYBaseService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // -------------------------------- tom add  --------------------------------
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private static final Logger l = LoggerFactory.getLogger(RealExamCollectionService.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * [教师][分页]查询考试集合列表
 | 
	
		
			
				|  |  |       *
 | 
	
	
		
			
				|  | @@ -281,43 +286,36 @@ public class RealExamCollectionService extends Ele6RYBaseService {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  | -     * [教师]打开考试/练习集合
 | 
	
		
			
				|  |  | +     * [教师]打开考试/训练集合
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  | -     * @param examCollectionId
 | 
	
		
			
				|  |  | +     * @param examCollectionId   考试集合Id
 | 
	
		
			
				|  |  | +     * @param examCollectionType 考试集合类型
 | 
	
		
			
				|  |  |       * @return
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      @Transactional
 | 
	
		
			
				|  |  |      public AjaxResult open(final Long examCollectionId, final String examCollectionType) {
 | 
	
		
			
				|  |  | -        l.debug("open examCollectionId= {}", examCollectionId);
 | 
	
		
			
				|  |  | -        l.debug("open examCollectionType= {}", examCollectionType);
 | 
	
		
			
				|  |  | -        // check 1:检查id有效。
 | 
	
		
			
				|  |  |          RealExamCollection rec = selectRealExamCollectionByExamCollectionId(examCollectionId);
 | 
	
		
			
				|  |  | -        if (rec == null) {
 | 
	
		
			
				|  |  | -            return AjaxResult.error("考试集合不存在!");
 | 
	
		
			
				|  |  | +        // Check:检查Id有效。
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            if (rec == null || rec.getExamCollectionId() == 0L) {
 | 
	
		
			
				|  |  | +                return AjaxResult.error("考试集合Id不存在!");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            l.debug("rec = {}", rec);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        l.debug("rec = {}", rec);
 | 
	
		
			
				|  |  | -        // check 2:检查考试集合类型对应。
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//        {
 | 
	
		
			
				|  |  | -//            final String dbType = rec.getExamCollectionType();
 | 
	
		
			
				|  |  | -//            if (!StringUtils.equals(dbType, examCollectionType)) {
 | 
	
		
			
				|  |  | -//                return AjaxResult.error("考试集合类型不对应!");
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -//        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // check 3:唯一open检查。
 | 
	
		
			
				|  |  | -//        if (existOpened()) {
 | 
	
		
			
				|  |  | -//            return AjaxResult.error("已经有打开的考试或者练习!");
 | 
	
		
			
				|  |  | -//        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // check datetime todo:时间到了
 | 
	
		
			
				|  |  | -        // do.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 自然人电子税务局
 | 
	
		
			
				|  |  | -        // 年报 多次  汇总表   12366
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +        // Check:检查考试集合类型对应。
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            final String dbType = rec.getExamCollectionType();
 | 
	
		
			
				|  |  | +            if (!StringUtils.equals(dbType, examCollectionType)) {
 | 
	
		
			
				|  |  | +                return AjaxResult.error("考试集合类型不对应!");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // Check:检查是否已经打开。
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            if (StringUtils.equals(rec.getExamCollectionState(), RealExamCollection.State.OPENED)) {
 | 
	
		
			
				|  |  | +                return AjaxResult.error("已经打开!");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  |          switch (examCollectionType) {
 | 
	
		
			
				|  |  |              case RealExamCollection.Type.EXERCISE: {
 | 
	
		
			
				|  |  |                  if (existOpenedByType(RealExamCollection.Type.EXAM)) {
 | 
	
	
		
			
				|  | @@ -338,26 +336,24 @@ public class RealExamCollectionService extends Ele6RYBaseService {
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              case RealExamCollection.Type.EXAM: {
 | 
	
		
			
				|  |  | -                closeAllByType(RealExamCollection.Type.EXERCISE);
 | 
	
		
			
				|  |  | -                closeAllByType(RealExamCollection.Type.SELF_EXERCISE);
 | 
	
		
			
				|  |  | +                if (existOpenedByType(RealExamCollection.Type.EXERCISE)) {
 | 
	
		
			
				|  |  | +                    closeAllByType(RealExamCollection.Type.EXERCISE);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (existOpenedByType(RealExamCollection.Type.SELF_EXERCISE)) {
 | 
	
		
			
				|  |  | +                    closeAllByType(RealExamCollection.Type.SELF_EXERCISE);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |                  closeAllExcludeIdByType(RealExamCollection.Type.EXAM, rec.getExamCollectionId());
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            default:
 | 
	
		
			
				|  |  | +                return AjaxResult.error("考试集合类型错误!");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        // Step 4:尝试打开所有Socket,提前准备,允许有打开失败的
 | 
	
		
			
				|  |  | -        // SocketOldService实现。
 | 
	
		
			
				|  |  | -        // AjaxResult ar1 = socketOldService.openSocket();
 | 
	
		
			
				|  |  | -        //
 | 
	
		
			
				|  |  | +        // Step:尝试打开所有Socket,提前准备,允许有打开失败的
 | 
	
		
			
				|  |  |          AjaxResult ar1 = socketService.tryOpenAll();
 | 
	
		
			
				|  |  |          if (ar1.isError()) {
 | 
	
		
			
				|  |  | -            return ar1;
 | 
	
		
			
				|  |  | +            l.info("AjaxResult = {}", ar1);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        //
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 更新相关数据
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // Step :修改考试集合状态。
 | 
	
		
			
				|  |  | +        // Step:修改考试集合状态。
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              rec.setExamCollectionState(RealExamCollection.State.OPENED);
 | 
	
		
			
				|  |  |              updateRealExamCollection(rec);
 | 
	
	
		
			
				|  | @@ -365,6 +361,45 @@ public class RealExamCollectionService extends Ele6RYBaseService {
 | 
	
		
			
				|  |  |          return AjaxResult.success("开启成功!");
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * [教师]关闭考试/训练集合
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param examCollectionId   考试集合Id
 | 
	
		
			
				|  |  | +     * @param examCollectionType 考试集合类型
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public AjaxResult close(final Long examCollectionId, final String examCollectionType) {
 | 
	
		
			
				|  |  | +        RealExamCollection rec = selectRealExamCollectionByExamCollectionId(examCollectionId);
 | 
	
		
			
				|  |  | +        // Check:检查Id有效。
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            if (rec == null || rec.getExamCollectionId() == 0L) {
 | 
	
		
			
				|  |  | +                return AjaxResult.error("考试集合Id不存在!");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            l.debug("rec = {}", rec);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // Check:检查考试集合类型对应。
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            final String dbType = rec.getExamCollectionType();
 | 
	
		
			
				|  |  | +            if (!StringUtils.equals(dbType, examCollectionType)) {
 | 
	
		
			
				|  |  | +                return AjaxResult.error("考试集合类型不对应!");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // Check:检查是否已经关闭。
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            if (StringUtils.equals(rec.getExamCollectionState(), RealExamCollection.State.CLOSED)) {
 | 
	
		
			
				|  |  | +                return AjaxResult.error("已经关闭!");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // todo:是否还有正在进行的考试
 | 
	
		
			
				|  |  | +        // 修改为socket常开,直接返回成功结果。
 | 
	
		
			
				|  |  | +        // Step:修改考试集合状态。
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            rec.setExamCollectionState(RealExamCollection.State.CLOSED);
 | 
	
		
			
				|  |  | +            updateRealExamCollection(rec);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return AjaxResult.success("关闭成功!");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      public List<RealExamCollection> listAllByType(String examCollectionType) {
 | 
	
		
			
				|  |  |          RealExamCollection q = new RealExamCollection();
 | 
	
		
			
				|  |  |          q.setExamCollectionType(examCollectionType);
 | 
	
	
		
			
				|  | @@ -398,28 +433,6 @@ public class RealExamCollectionService extends Ele6RYBaseService {
 | 
	
		
			
				|  |  |          return null;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    /**
 | 
	
		
			
				|  |  | -     * [教师]关闭考试/练习集合
 | 
	
		
			
				|  |  | -     *
 | 
	
		
			
				|  |  | -     * @param examCollectionId
 | 
	
		
			
				|  |  | -     * @return
 | 
	
		
			
				|  |  | -     */
 | 
	
		
			
				|  |  | -    public AjaxResult close(final Long examCollectionId) {
 | 
	
		
			
				|  |  | -        // check
 | 
	
		
			
				|  |  | -        // todo:是否还有正在进行的考试
 | 
	
		
			
				|  |  | -        RealExamCollection f = selectRealExamCollectionByExamCollectionId(examCollectionId);
 | 
	
		
			
				|  |  | -        // 修改考试集合状态。
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            f.setExamCollectionState(RealExamCollection.State.CLOSED);
 | 
	
		
			
				|  |  | -            updateRealExamCollection(f);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        // 关闭socket
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 修改为socket常开,直接返回成功结果。
 | 
	
		
			
				|  |  | -        // return commSendService.closeSocket();
 | 
	
		
			
				|  |  | -        return AjaxResult.success("关闭连接成功!");
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      public AjaxResult closeAll() {
 | 
	
		
			
				|  |  |          // SocketOldService实现
 | 
	
		
			
				|  |  |          // return socketOldService.closeSocket();
 |