| | |
| | | |
| | | public interface AttendanceService { |
| | | /** |
| | | * 打卡 |
| | | * 打卡 |
| | | */ |
| | | String attendanceUpAndAdd(String studentId,String SubjectId); |
| | | |
| | | /** |
| | | * 查询考勤信息 |
| | | * 查询考勤信息 |
| | | */ |
| | | List<StuStudent> findAttendanceList(Integer limit, Integer pageNum, String keyword, String subjectId); |
| | | |
| | | /** |
| | | *修改打卡状态 |
| | | *修改打卡状态 |
| | | */ |
| | | Result updateAttendanceStatus(String studentId, String attendanceStatus); |
| | | |
| | |
| | | |
| | | try{ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); |
| | | //上课时间 |
| | | String s1 = "9:00:00"; |
| | | //如果上课时间(9点)>当前时间 |
| | | //上课时间 |
| | | String s1 = "9:00:00"; |
| | | //如果上课时间(9点)>当前时间 |
| | | String s2 = sdf.format(new Date()); |
| | | int compareTo = s1.compareTo(s2); |
| | | if(compareTo>0) |
| | | { |
| | | s="签到时间已过,本节课按照旷课处理"; |
| | | stuStudent.setAttendanceStatus("旷课"); |
| | | s="签到时间已过,本节课按照旷课处理"; |
| | | stuStudent.setAttendanceStatus("旷课"); |
| | | } |
| | | else |
| | | { |
| | | String s3 = "8:50:00"; |
| | | String s3 = "8:50:00"; |
| | | compareTo = s2.compareTo(s3); |
| | | if(compareTo<0) |
| | | { |
| | | s="未到签到时间,请与上课时间前10分钟签到"; |
| | | stuStudent.setAttendanceStatus("未打卡"); |
| | | s="未到签到时间,请与上课时间前10分钟签到"; |
| | | stuStudent.setAttendanceStatus("未打卡"); |
| | | } |
| | | else |
| | | { |
| | | if(stuStudent!=null && subjectId!=null){ |
| | | stuStudent.setSubjectId(subjectId); |
| | | stuStudent.setAttendanceStatus("已打卡"); |
| | | s = "成功完成签到"; |
| | | stuStudent.setAttendanceStatus("已打卡"); |
| | | s = "成功完成签到"; |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取这个通知的总人数 |
| | | * 获取这个通知的总人数 |
| | | */ |
| | | public int getStudentCount(List<String> classIds) { |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取通知的班级名称 |
| | | * 获取通知的班级名称 |
| | | */ |
| | | public List<String> getClassNameByclsId(List<String> classIds) { |
| | | List<ClsClass> clsLst = findByComplexHql("from ClsClass where deleteFlag is false and classId in(:ids)", CollectionUtils.newObjectMap("ids", classIds), ClsClass.class); |
| | |
| | | import com.qxueyou.scc.base.service.IBaseJpaRepository; |
| | | |
| | | /** |
| | | * 评估 |
| | | * 评估 |
| | | * @author zhiyong |
| | | * |
| | | */ |
| | | @Repository |
| | | public interface ClassRepository extends IBaseJpaRepository<ClsClass>{ |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | /** |
| | | * The persistent class for the org_class database table. |
| | | * |
| | | * |
| | | */ |
| | | @Entity |
| | | @Table(name = "cls_class") |
| | |
| | | * UID |
| | | */ |
| | | private static final long serialVersionUID = 5971007065116777117L; |
| | | |
| | | /** 面授 */ |
| | | |
| | | /** 面授 */ |
| | | public static final String CLASS_FACE = "FACE_TO_FACE"; |
| | | /** 网络 */ |
| | | /** 网络 */ |
| | | public static final String CLASS_NETWORK = "NETWORK"; |
| | | |
| | | /** 有直播 */ |
| | | /** 有直播 */ |
| | | public static final int HAVE_LIVE = 1; |
| | | |
| | | /** 无直播 */ |
| | | |
| | | /** 无直播 */ |
| | | public static final int NOT_HAVE_LIVE = 0; |
| | | |
| | | /** 有视频 */ |
| | | /** 有视频 */ |
| | | public static final int HAVE_VIDEO = 1; |
| | | /** 无视频 */ |
| | | /** 无视频 */ |
| | | public static final int NOT_HAVE_VIDEO = 0; |
| | | |
| | | /** 有讲义 */ |
| | | /** 有讲义 */ |
| | | public static final int HAVE_HANDOUT = 1; |
| | | /** 无讲义 */ |
| | | /** 无讲义 */ |
| | | public static final int NOT_HAVE_HANDOUT = 0; |
| | | |
| | | /** 有推荐奖励 */ |
| | | /** 有推荐奖励 */ |
| | | public static final int HAVE_AWARD = 1; |
| | | /** 无推荐奖励 */ |
| | | /** 无推荐奖励 */ |
| | | public static final int NOT_HAVE_AWARD = 0; |
| | | |
| | | /** 消息处理业务类型:发送消息 */ |
| | | /** 消息处理业务类型:发送消息 */ |
| | | public static final String MSG_ACTION_TYPE_SEND = "send_sms"; |
| | | /** 消息处理业务类型:新建班级 */ |
| | | /** 消息处理业务类型:新建班级 */ |
| | | public static final String MSG_ACTION_TYPE_ADD = "add_Class"; |
| | | /** 消息处理业务类型:复制班级 */ |
| | | /** 消息处理业务类型:复制班级 */ |
| | | public static final String MSG_ACTION_TYPE_COPY = "copy_Class"; |
| | | |
| | | /** 班级进度:报名 */ |
| | | public static final String CLASS_PROGRESS_START = "报名"; |
| | | /** 班级进度:学习 */ |
| | | public static final String CLASS_PROGRESS_STUDY = "ѧϰ"; |
| | | /** 班级进度:结束 */ |
| | | public static final String CLASS_PROGRESS_END = "结束"; |
| | | /** 班级进度:报名 */ |
| | | public static final String CLASS_PROGRESS_START = "报名"; |
| | | /** 班级进度:学习 */ |
| | | public static final String CLASS_PROGRESS_STUDY = "学习"; |
| | | /** 班级进度:结束 */ |
| | | public static final String CLASS_PROGRESS_END = "结束"; |
| | | |
| | | @Id |
| | | @GeneratedValue(generator = "hibernate-uuid") |
| | |
| | | @Column(name = "ARRANGEMENT", length = 255) |
| | | private String arrangement; |
| | | |
| | | /** 班级优势 */ |
| | | /** 班级优势 */ |
| | | @Column(name = "ADVANTAGE", length = 255) |
| | | private String advantage; |
| | | |
| | |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") |
| | | private Date endTime; |
| | | |
| | | /** 当前已报名学生人数 */ |
| | | /** 当前已报名学生人数 */ |
| | | @Column(name = "STUDENT_COUNT") |
| | | private int studentCount; |
| | | |
| | |
| | | @JsonIgnore |
| | | private String updator; |
| | | |
| | | /** 是否推广 false:不推广 true:推广 */ |
| | | /** 是否推广 false:不推广 true:推广 */ |
| | | @Column(name = "EXTENDED") |
| | | private boolean extended; |
| | | |
| | |
| | | @Column(name = "SCORE", precision = 10, scale = 2) |
| | | private BigDecimal score; |
| | | |
| | | /** 学生总数 计划招生人数,用于机构 指定 */ |
| | | /** 学生总数 计划招生人数,用于机构 指定 */ |
| | | @Column(name = "STU_ALL_COUNT") |
| | | private BigInteger stuAllCount; |
| | | |
| | |
| | | @Column(name = "POINTER", length = 255) |
| | | private String pointer; |
| | | |
| | | /*** 点击次数 **/ |
| | | /*** 点击次数 **/ |
| | | @Column(name = "CLICK_NUM", precision = 11, scale = 0) |
| | | private BigDecimal clickNum; |
| | | |
| | | /*** 省份 **/ |
| | | /*** 省份 **/ |
| | | @Column(name = "PROVINCE", length = 255) |
| | | private String province; |
| | | |
| | | /*** 城市 **/ |
| | | /*** 城市 **/ |
| | | @Column(name = "CITY", length = 255) |
| | | private String city; |
| | | |
| | | /*** 区域 **/ |
| | | /*** 区域 **/ |
| | | @Column(name = "REGION", length = 255) |
| | | private String region; |
| | | |
| | | /*** 是否置顶 **/ |
| | | /*** 是否置顶 **/ |
| | | @Column(name = "TOP_FLAG", length = 255) |
| | | private Boolean topFlag; |
| | | |
| | | /*** 方式 **/ |
| | | /*** 方式 **/ |
| | | @Column(name = "MODE", length = 255) |
| | | private String mode; |
| | | |
| | | /*** 商品ID **/ |
| | | /*** 商品ID **/ |
| | | @Column(name = "GOOD_ID", length = 32) |
| | | private String goodId; |
| | | |
| | | /*** 产品ID **/ |
| | | /*** 产品ID **/ |
| | | @Column(name = "PRODUCT_ID", length = 255) |
| | | private String productId; |
| | | |
| | | /*** 机构ID **/ |
| | | /*** 机构ID **/ |
| | | @Column(name = "ORG_ID", length = 32) |
| | | private String orgId; |
| | | |
| | | /*** 是否有直播 **/ |
| | | /*** 是否有直播 **/ |
| | | @Column(name = "HAVE_LIVE", length = 1) |
| | | private Integer haveLive; |
| | | |
| | | /*** 是否有视频 **/ |
| | | /*** 是否有视频 **/ |
| | | @Column(name = "HAVE_VIDEO", length = 1) |
| | | private Integer haveVideo; |
| | | |
| | | /*** 是否有讲义 **/ |
| | | /*** 是否有讲义 **/ |
| | | @Column(name = "HAVE_HANDOUT", length = 1) |
| | | private Integer haveHandout; |
| | | |
| | | /*** 经度 **/ |
| | | /*** 经度 **/ |
| | | @Column(name = "LONGITUDE_X", length = 32) |
| | | private String logitudeX; |
| | | |
| | | /*** 纬度 **/ |
| | | /*** 纬度 **/ |
| | | @Column(name = "LATITUDE_Y", length = 32) |
| | | private String latitudeY; |
| | | |
| | | /*** 付款人数 **/ |
| | | /*** 付款人数 **/ |
| | | @Column(name = "PAYMENT_NUM", length = 11) |
| | | private BigInteger paymentNum; |
| | | |
| | | /*** 是否有推荐奖励 **/ |
| | | /*** 是否有推荐奖励 **/ |
| | | @Column(name = "HAVA_AWARD", length = 32) |
| | | private Integer haveAward; |
| | | |
| | |
| | | @Transient |
| | | private String orgShortName; |
| | | |
| | | // 班级引荐费 |
| | | // 班级引荐费 |
| | | @Transient |
| | | private BigDecimal referFee; |
| | | |
| | | /** 激活人数 **/ |
| | | /** 激活人数 **/ |
| | | @Transient |
| | | private Integer registCount; |
| | | |
| | | // ============================新添加字段================================= |
| | | /** 是否有学生加班审批 */ |
| | | // ============================新添加字段================================= |
| | | /** 是否有学生加班审批 */ |
| | | |
| | | @Column(name = "NEED_JOIN_AUDIT", nullable = false) |
| | | private Boolean needJoinAudit; |
| | | |
| | | /** 班级编码 */ |
| | | /** 班级编码 */ |
| | | @Column(name = "CLASS_NUMBER", nullable = false) |
| | | private String classNumber; |
| | | |
| | | /** 是否有需要学生退班审批 */ |
| | | /** 是否有需要学生退班审批 */ |
| | | @Column(name = "NEED_QUIT_AUDIT", nullable = false) |
| | | private Boolean needQuitAudit; |
| | | |
| | | /** 完成练习是否显示答案 */ |
| | | /** 完成练习是否显示答案 */ |
| | | @Column(name = "SHOU_ANALYSIS_AFTER_EXER", nullable = false) |
| | | private Boolean showAnalysisAfterExer; |
| | | |
| | | /** 是否允许重复练习 */ |
| | | /** 是否允许重复练习 */ |
| | | @Column(name = "CAN_MULTI_EXER", nullable = false) |
| | | private Boolean canMultiExer; |
| | | |
| | | /** 是否开通班级论坛 */ |
| | | /** 是否开通班级论坛 */ |
| | | @Column(name = "NEED_FORUM", nullable = false) |
| | | private Boolean needForum; |
| | | |
| | | /** 班级老师 */ |
| | | /** 班级老师 */ |
| | | @Column(name = "TEACHER_ID", length = 32) |
| | | private String teacherId; |
| | | |
| | | |
| | | @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH) |
| | | @JoinTable(name = "CLS_CLASS_RE_SUBJECT", joinColumns = { |
| | | @JoinColumn(name = "CLASS_ID") }, |
| | | @JoinTable(name = "CLS_CLASS_RE_SUBJECT", joinColumns = { |
| | | @JoinColumn(name = "CLASS_ID") }, |
| | | inverseJoinColumns = { @JoinColumn(name = "SUBJECT_ID") }) |
| | | @GeneratedValue(generator = "hibernate-uuid") |
| | | @GenericGenerator(name = "hibernate-uuid", strategy = "uuid") |
| | | @CollectionId( |
| | | columns = @Column(name="CLS_RE_SUBJECT_ID"), |
| | | type=@Type(type="string"), |
| | | generator = "hibernate-uuid" |
| | | ) |
| | | columns = @Column(name="CLS_RE_SUBJECT_ID"), |
| | | type=@Type(type="string"), |
| | | generator = "hibernate-uuid" |
| | | ) |
| | | @Where(clause="DELETE_FLAG=0") |
| | | private List<Subject> subjects = new ArrayList<>(); |
| | | |
| | | |
| | | |
| | | |
| | | @ManyToMany(fetch = FetchType.LAZY, mappedBy = "classes") |
| | | @JsonIgnore |
| | | private List<MediaVideoLive> videoLives; |
| | | |
| | | |
| | | |
| | | public String getTeacherId() { |
| | | return teacherId; |
| | |
| | | import com.qxueyou.scc.base.model.Result; |
| | | |
| | | /** |
| | | * 班级管理服务层 |
| | | * 班级管理服务层 |
| | | * |
| | | * @author chenjunliang |
| | | */ |
| | | public interface IClassService { |
| | | |
| | | /** |
| | | * 新增班级 |
| | | * 新增班级 |
| | | * |
| | | * @param course |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * |
| | | *新增补考分组 |
| | | *新增补考分组 |
| | | * @param classTypes |
| | | * @return |
| | | */ |
| | | Result insertReClass(String className, String classNumber, Date startTime, Date endTime, String subjectId, |
| | | String teacherId,String classTypes); |
| | | /** |
| | | * 修改班级 |
| | | * 修改班级 |
| | | * |
| | | * @param course |
| | | * @return |
| | |
| | | boolean canMultiExer, boolean needForum, String teacherId); |
| | | |
| | | /** |
| | | * 获取班级列表 |
| | | * 获取班级列表 |
| | | * |
| | | * @return |
| | | */ |
| | | List<ClsClass> getClassLst(String keyword, String teacherId, Integer pageSize, Integer pageNum, Integer pageType); |
| | | |
| | | /** |
| | | * 获取班级列表数量 |
| | | * 获取班级列表数量 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | List<ClsClass> listMyClass(); |
| | | |
| | | /** |
| | | * 获取班级考试、作业等活动信息 |
| | | * 获取班级考试、作业等活动信息 |
| | | * |
| | | * @return |
| | | */ |
| | | Map<String, Object> getClassActivityInfo(String classId); |
| | | |
| | | /** |
| | | * 获取班级详情 |
| | | * 获取班级详情 |
| | | * |
| | | * @return |
| | | */ |
| | | ClsClass read(String classId); |
| | | |
| | | /** |
| | | * 删除班级 |
| | | * 删除班级 |
| | | * |
| | | * @param classIds |
| | | * @return |
| | |
| | | Result deleteClass(String[] classIds); |
| | | |
| | | /** |
| | | * 新增学生 |
| | | * 新增学生 |
| | | * |
| | | * @param count 学生数量 |
| | | * @param count 学生数量 |
| | | * @return |
| | | */ |
| | | Result addStudent(String classId, int count); |
| | | |
| | | /** |
| | | * 获取个人已加入班级的课程及学习情况 |
| | | * 获取个人已加入班级的课程及学习情况 |
| | | * |
| | | * @param classId |
| | | * @return |
| | |
| | | Result getAllClassLst(); |
| | | |
| | | /** |
| | | * 老师获取班级列表 |
| | | * 老师获取班级列表 |
| | | */ |
| | | List<ClsClass> getClassLstByTeacherId(); |
| | | |
| | | /** |
| | | * 查询老师或管理员可用的班级ID和名称列表 |
| | | * @param teacherId 根据教师ID过滤 |
| | | * @param subjectId 根据课程ID过滤 |
| | | * 查询老师或管理员可用的班级ID和名称列表 |
| | | * @param teacherId 根据教师ID过滤 |
| | | * @param subjectId 根据课程ID过滤 |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> queryAvailableClassIdAndName(String teacherId,String subjectId); |
| | | |
| | | /** |
| | | * app教师端班级列表 |
| | | * app教师端班级列表 |
| | | * |
| | | * @param keyword |
| | | * @param limit |
| | |
| | | Result classList(String keyword, Pager pager, int type); |
| | | |
| | | /** |
| | | * 根据班级ID获取班级名字,顺序与传入的id顺序一致 |
| | | * 根据班级ID获取班级名字,顺序与传入的id顺序一致 |
| | | * @param classIds |
| | | * @return |
| | | */ |
| | | String [] queryClassNamesByIds(String[] classIds); |
| | | |
| | | /** |
| | | * 根据用户ID查询所用户加入的班级 |
| | | * 根据用户ID查询所用户加入的班级 |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | List<ClsClass> queryStudentClassesByUserId(String userId); |
| | | |
| | | /** |
| | | * 查询所有班级信息 |
| | | * 查询所有班级信息 |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> queryAllClassIdAndName(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课程课件 |
| | | * 课程课件 |
| | | * |
| | | */ |
| | | @Override |
| | | public Map<String,Object> listLectureBySubjectOrderCreateTime(String subjectId, String classId, String sort, Pager pager) { |
| | | Subject subject = this.read(Subject.class, subjectId); |
| | | if(Subject.TYPE_PUBLIC_SUBJECT == subject.getType()) {//公开课课件 |
| | | if(Subject.TYPE_PUBLIC_SUBJECT == subject.getType()) {//公开课课件 |
| | | return this.listOpenLectureBySubjectOrderCreateTime(subjectId, sort, pager); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 公开课课件 |
| | | * 公开课课件 |
| | | * |
| | | * @param subjectId |
| | | * @param sort |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除单个章节 |
| | | * 删除单个章节 |
| | | * |
| | | * @param chapterId 章节id |
| | | * @param chapterId 章节id |
| | | * @return |
| | | */ |
| | | private Result deleteChapter(String chapterId) { |
| | |
| | | lecture.setStatus(res.getStatus()); |
| | | save(lecture); |
| | | |
| | | // 发送消息 |
| | | // 发送消息 |
| | | doPublishMsg(lecture); |
| | | |
| | | return new Result(true, "success"); |
| | | } |
| | | |
| | | //添加课程,发送消息 |
| | | //添加课程,发送消息 |
| | | private void doPublishMsg(ClsSubjectLecture lecture){ |
| | | Subject subject = this.read(Subject.class, lecture.getSubjectId()); |
| | | |
| | |
| | | return ; |
| | | } |
| | | |
| | | //查询直播关联的班级 |
| | | //查询直播关联的班级 |
| | | String hql = "select userId from StuStudent where classId =:classId and deleteFlag is false "; |
| | | |
| | | List<String> lstUserIds = this.findByComplexHql(hql, CollectionUtils.newObjectMap("classId",lecture.getClassId()), String.class); |
| | |
| | | Map<String,String> attrs = CollectionUtils.newStringMap("lectureId",lecture.getLectureId(),"lectureName",lecture.getName(),"subjectId",subject.getSubjectId(), |
| | | "lectureType",lecture.getLectureType(),"subjectName",subject.getName()); |
| | | |
| | | msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]),MsgInfo.TYPE_COURSEWARE,"发布了课件",attrs); |
| | | msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]),MsgInfo.TYPE_COURSEWARE,"发布了课件",attrs); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * @param lectureId 课件id |
| | | * @param lectureId 课件id |
| | | * @return |
| | | */ |
| | | private Result deleteLecture(String lectureId) { |
| | |
| | | TraceUtils.setUpdateTrace(lecture); |
| | | lecture.setDeleteFlag(true); |
| | | save(lecture); |
| | | deleteProgress(lectureId);// 删除对应的进度 |
| | | deleteProgress(lectureId);// 删除对应的进度 |
| | | return new Result(true, "success"); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 我的公开课课件查询 |
| | | * 我的公开课课件查询 |
| | | * |
| | | * @param subjectId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询数量 |
| | | * 查询数量 |
| | | * |
| | | * @param subjectId |
| | | * @param classId |
| | |
| | | ClsSubjectLecture lecture = read(ClsSubjectLecture.class, lectureId); |
| | | String resItemId = null; |
| | | if(lecture == null) { |
| | | resItemId = read(SubjectLecture.class, lectureId).getResItemId();//班级课件 |
| | | resItemId = read(SubjectLecture.class, lectureId).getResItemId();//班级课件 |
| | | }else { |
| | | resItemId = lecture.getResItemId(); |
| | | } |
| | |
| | | @Override |
| | | public Result listSubjectLecture(String classId, String sort, Pager pager) { |
| | | if(StringUtils.isEmpty(classId)) { |
| | | return new Result(false, "班级id不能为空"); |
| | | return new Result(false, "班级id不能为空"); |
| | | } |
| | | QMyLectureV qMyLectureV = QMyLectureV.myLectureV; |
| | | |
| | |
| | | |
| | | long count = query.fetchCount(); |
| | | |
| | | // 获取查询结果集合 |
| | | // 获取查询结果集合 |
| | | QueryResults<MyLectureV> results = query.limit(pager.getPageSize()).offset(pager.getOffset()).orderBy(order).fetchResults(); |
| | | |
| | | List<Map<String,Object>> resultLst = |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除对应的课件 |
| | | * 删除对应的课件 |
| | | * |
| | | * @param chapterId |
| | | * @return |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取章节下的课件 |
| | | * 获取章节下的课件 |
| | | * |
| | | * @param chapterLst |
| | | * @param lectures |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取章节的第一层数据 |
| | | * 获取章节的第一层数据 |
| | | * |
| | | * @param chapterLst |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件按目录分类 |
| | | * 课件按目录分类 |
| | | * |
| | | * @param classId |
| | | * @param subjectId |
| | |
| | | public Result coursewareChapterList(String classId,String subjectId, String type) { |
| | | Subject subject = this.read(Subject.class, subjectId); |
| | | |
| | | if(Subject.TYPE_PUBLIC_SUBJECT == subject.getType() || Subject.TYPE_ORG_SUBJECT == subject.getType()) {//公开课和管理员课程 |
| | | if(Subject.TYPE_PUBLIC_SUBJECT == subject.getType() || Subject.TYPE_ORG_SUBJECT == subject.getType()) {//公开课和管理员课程 |
| | | QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture; |
| | | //课件 |
| | | //课件 |
| | | List<Map<String, Object>> lectures = this.listStuLectureByOpenSubject(subjectId); |
| | | |
| | | List<SubjectChapter> lstSubjectChapterLst = this.getListOpenChapter(subjectId); |
| | |
| | | try { |
| | | BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter); |
| | | } catch (IllegalAccessException e) { |
| | | log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e); |
| | | log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e); |
| | | } catch (InvocationTargetException e) { |
| | | log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e); |
| | | log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e); |
| | | } |
| | | |
| | | lstClsSubjectChapter.add(objClsSubjectChapter); |
| | | } |
| | | } |
| | | //章节 |
| | | //章节 |
| | | List<ClsSubjectChapter> chapterLst = this.getChapterLectures(lstClsSubjectChapter, lectures); |
| | | |
| | | long count = this.getQueryFactory().selectFrom(qSubjectLecture) |
| | |
| | | CollectionUtils.newStringMap("name", "name", "chapterId", "chapterId", "lectures", "lectures")))); |
| | | |
| | | }else{ |
| | | //课件 |
| | | //课件 |
| | | List<Map<String, Object>> lectures = this.listStuLectureBySubject(subjectId, classId); |
| | | //章节 |
| | | //章节 |
| | | List<ClsSubjectChapter> chapterLst = this.getChapterLectures(this.getListChapter(classId, subjectId, null), lectures); |
| | | |
| | | return new Result(true, "success", CollectionUtils.newObjectMap("count",this.stuLectureCountBySubject(subjectId, classId), "listData", QBeanUtils.listBean2ListMap(chapterLst, |
| | |
| | | import com.qxueyou.scc.teach.subject.model.Subject; |
| | | |
| | | /** |
| | | * 班级服务类 |
| | | * 班级服务类 |
| | | * |
| | | * @author xiadehu |
| | | */ |
| | |
| | | ILectureService lectureService; |
| | | |
| | | /** |
| | | * 添加班级 |
| | | * 添加班级 |
| | | */ |
| | | @Override |
| | | public Result insertClass(String className, String classNumber, Date startTime, Date endTime, String subjectId, |
| | |
| | | return new Result(true, "success",CollectionUtils.newStringMap("classId",cls.getClassId())); |
| | | } |
| | | /** |
| | | * 添加补考班级班级 |
| | | * 添加补考班级班级 |
| | | */ |
| | | @Override |
| | | public Result insertReClass(String className, String classNumber, Date startTime, Date endTime, String subjectId, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取班级列表 |
| | | * 获取班级列表 |
| | | */ |
| | | @Override |
| | | public List<ClsClass> getClassLst(String keyword, String teacherId, Integer pageSize, Integer pageNum, Integer pageType) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除班级 |
| | | * 删除班级 |
| | | */ |
| | | @Override |
| | | public Result deleteClass(String[] classIds) { |
| | | for (String classId : classIds) { |
| | | deleteClass(classId); |
| | | //删除班级学员 |
| | | //删除班级学员 |
| | | this.deleteStudent(classId); |
| | | //删除班级课程 |
| | | //删除班级课程 |
| | | this.deleteClassSubject(classId); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除班级学员 |
| | | * 删除班级学员 |
| | | */ |
| | | private void deleteStudent(String classId) { |
| | | this.bulkUpdate("update StuStudent set deleteFlag = 1 where classId = ?", new Object[] {classId}); |
| | | } |
| | | |
| | | /** |
| | | * 删除班级课程 |
| | | * 删除班级课程 |
| | | */ |
| | | private void deleteClassSubject(String classId) { |
| | | this.bulkUpdate("delete from ClsClassReSubject where classId=?", new Object[] {classId}); |
| | | } |
| | | |
| | | /** |
| | | * @param classId 班级id |
| | | * @param classId 班级id |
| | | * @return |
| | | */ |
| | | private Result deleteClass(String classId) { |
| | |
| | | @Override |
| | | public List<Map<String,Object>> queryAvailableClassIdAndName(String teacherId,String subjectId) { |
| | | StringBuffer hql = new StringBuffer(1000); |
| | | // and c.endTime>=sysdate() 增加条件过滤掉历史班级 |
| | | // and c.endTime>=sysdate() 增加条件过滤掉历史班级 |
| | | hql.append("select c.classId as classId ,c.name as className from ClsClass c where c.deleteFlag is false and c.orgId=:orgId and c.createId=:createId " ); |
| | | Map<String,Object> queryParam = new HashMap<String,Object>(); |
| | | queryParam.put("orgId", ClientUtils.getOrgId()); |
| | |
| | | |
| | | |
| | | /** |
| | | * 查询班级 |
| | | * 查询班级 |
| | | * |
| | | * type 1正常班級,2历史班級 |
| | | * type 1正常班級,2历史班級 |
| | | */ |
| | | public Result classList(String keyword, Pager pager, int type) { |
| | | //获取老师id |
| | | //获取老师id |
| | | String teacherId = teacherService.getTeacherIdByUserId(ClientUtils.getUserId()); |
| | | if (StringUtils.isEmpty(teacherId)) { |
| | | return new Result(false, "非老师角色无法查看班级"); |
| | | return new Result(false, "非老师角色无法查看班级"); |
| | | } |
| | | QClsClass qClsClass = QClsClass.clsClass; |
| | | QSubject qSubject = QSubject.subject; |
| | | QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject; |
| | | QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV; |
| | | |
| | | //查询脚本 |
| | | //查询脚本 |
| | | JPAQuery<Tuple> queryDsl = this.getQueryFactory() |
| | | .select(qClsClass.name, qClsClass.classId, qClsClass.classNumber, qClsClass.studentCount, |
| | | qClsClass.createTime, qClsClass.startTime, qClsClass.endTime, qSubject) |
| | |
| | | .and(qClsClassReSubject.subjectId.eq(qSubject.subjectId))) |
| | | .groupBy(qClsClass.classId); |
| | | |
| | | //总数 |
| | | //总数 |
| | | long count = queryDsl.fetchCount(); |
| | | |
| | | //listData |
| | |
| | | .and(qSubjectProgressTreeV.nodeType.eq(Progress.PROGRESS_TYPE_SUBJECT))) |
| | | .groupBy(qSubjectProgressTreeV.id.nodeId).fetchOne()); |
| | | } else { |
| | | map.put("subjectName", "暂无开班课程"); |
| | | map.put("subjectName", "暂无开班课程"); |
| | | map.put("progressPercent", 0); |
| | | } |
| | | return map; |
| | |
| | | private static final long serialVersionUID = -8815707507227185401L; |
| | | |
| | | /* |
| | | * 草稿 :0 已发布:1 |
| | | * 草稿 :0 已发布:1 |
| | | */ |
| | | public static final short STATUS_DRAFT = 0; |
| | | |
| | |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name = "UPDATE_ID", length = 32) |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name = "UPDATE_TIME", nullable = false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name = "UPDATOR", length = 100) |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name = "DELETE_FLAG", nullable = false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | | |
| | | /** ״̬ */ |
| | | /** 状态 */ |
| | | private short status; |
| | | |
| | | @Column(name="ORG_ID") |
| | |
| | | public interface IClassRoomService { |
| | | |
| | | /** |
| | | * 新增教室 |
| | | * 新增教室 |
| | | * |
| | | * @param ClassRoom 教室 |
| | | * @param ClassRoom 教室 |
| | | * |
| | | * @return |
| | | */ |
| | | String add(ClassRoom classRoom); |
| | | |
| | | /** |
| | | * 修改教室 |
| | | * 修改教室 |
| | | * |
| | | * @param ClassRoom 教室 |
| | | * @param ClassRoom 教室 |
| | | * |
| | | * @return |
| | | */ |
| | | Result update(ClassRoom classRoom); |
| | | |
| | | /** |
| | | * 删除教室 |
| | | * 删除教室 |
| | | * |
| | | * @param roomIds 课表ID数组 |
| | | * @param roomIds 课表ID数组 |
| | | * |
| | | */ |
| | | Result delete(String[] roomIds); |
| | | |
| | | /** |
| | | * 发布教室 |
| | | * 发布教室 |
| | | * |
| | | * @param roomIds 教室ID数组 |
| | | * @param roomIds 教室ID数组 |
| | | * |
| | | */ |
| | | Result doRelease(String[] roomIds); |
| | | |
| | | /** |
| | | * 撤回教室 |
| | | * 撤回教室 |
| | | * |
| | | * @param roomIds 教室id数组 |
| | | * @param roomIds 教室id数组 |
| | | * |
| | | */ |
| | | Result doCancel(String[] roomIds); |
| | | |
| | | /** |
| | | * 查询教室 |
| | | * 查询教室 |
| | | * |
| | | * @param keyword 搜索文本(教室名称) |
| | | * @param keyword 搜索文本(教室名称) |
| | | * |
| | | * @param status ״̬ |
| | | * @param status 状态 |
| | | * |
| | | * @param pageSize 页码 |
| | | * @param pageSize 页码 |
| | | * |
| | | * @param pageNum 每页显示行数 |
| | | * @param pageNum 每页显示行数 |
| | | * |
| | | * @return 返回课程列表 |
| | | * @return 返回课程列表 |
| | | */ |
| | | List<ClassRoom> list(String keyword,Short status,Integer pageSize, Integer pageNum); |
| | | |
| | | /** |
| | | * 查询教室个数 |
| | | * 查询教室个数 |
| | | * |
| | | * @param keyword 搜索文本(教室名称) |
| | | * @param keyword 搜索文本(教室名称) |
| | | * |
| | | * @return 返回教室总数 |
| | | * @return 返回教室总数 |
| | | */ |
| | | int listCount(String keyword,Short status); |
| | | |
| | | /** |
| | | * 读取教室详情 |
| | | * 读取教室详情 |
| | | * |
| | | * @param roomId 教室ID |
| | | * @param roomId 教室ID |
| | | * |
| | | * @return 返回教室详情信息 |
| | | * @return 返回教室详情信息 |
| | | */ |
| | | ClassRoom detail(String roomId); |
| | | |
| | | /** |
| | | * 获取教室ID和名称列表 |
| | | * 获取教室ID和名称列表 |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> queryAllRoomIdAndNames(); |
| | |
| | | ClassRoom newClassRoom = read(ClassRoom.class, classRoom.getRoomId()); |
| | | |
| | | if (newClassRoom == null) { |
| | | return new Result(false, "教室不存在"); |
| | | return new Result(false, "教室不存在"); |
| | | } |
| | | |
| | | TraceUtils.setUpdateTrace(newClassRoom); |
| | |
| | | @Override |
| | | public Result doRelease(String[] roomIds) { |
| | | if(roomIds==null || roomIds.length==0){ |
| | | return new Result(false, "没有选择要发布的教室"); |
| | | return new Result(false, "没有选择要发布的教室"); |
| | | } |
| | | |
| | | List<ClassRoom> lstClsRoom = this.findByComplexHql("from ClassRoom where roomId in (:roomIds)", |
| | |
| | | |
| | | for (ClassRoom room : lstClsRoom) { |
| | | if (ExamInfo.STATUS_DRAFT != room.getStatus()) { |
| | | return new Result(false, "只有草稿状态的教室,才能发布。"); |
| | | return new Result(false, "只有草稿状态的教室,才能发布。"); |
| | | } |
| | | room.setStatus(ClassRoom.STATUS_PUBLISH); |
| | | TraceUtils.setUpdateTrace(room); |
| | |
| | | @Override |
| | | public Result doCancel(String[] roomIds) { |
| | | if(roomIds==null || roomIds.length==0){ |
| | | return new Result(false, "没有选择要撤回的教室"); |
| | | return new Result(false, "没有选择要撤回的教室"); |
| | | } |
| | | |
| | | List<ClassRoom> lstClsRoom = this.findByComplexHql("from ClassRoom where roomId in (:roomIds)", |
| | |
| | | |
| | | for (ClassRoom room : lstClsRoom) { |
| | | if (ExamInfo.STATUS_PUBLISH != room.getStatus()) { |
| | | return new Result(false, "只有发布状态的 教室,才能撤回"); |
| | | return new Result(false, "只有发布状态的 教室,才能撤回"); |
| | | } |
| | | room.setStatus(ExamInfo.STATUS_DRAFT); |
| | | TraceUtils.setUpdateTrace(room); |
| | |
| | | private static final long serialVersionUID = -6281684815713519425L; |
| | | |
| | | /* |
| | | * 草稿 :0 已发布:1 |
| | | * 草稿 :0 已发布:1 |
| | | */ |
| | | public static final short STATUS_DRAFT = 0; |
| | | |
| | | public static final short STATUS_PUBLISH = 1; |
| | | |
| | | /* |
| | | * 非开放 :0 ,开放:1 |
| | | * 非开放 :0 ,开放:1 |
| | | */ |
| | | public static final short OPEN_FALSE = 0; |
| | | |
| | |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name = "UPDATE_ID", length = 32) |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name = "UPDATE_TIME", nullable = false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name = "UPDATOR", length = 100) |
| | | private String updator; |
| | | |
| | | @Column(name="ORG_ID") |
| | | private String orgId; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name = "DELETE_FLAG", nullable = false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name = "UPDATE_ID", length = 32) |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name = "UPDATE_TIME", nullable = false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name = "UPDATOR", length = 100) |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name = "DELETE_FLAG", nullable = false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name = "UPDATE_ID", length = 32) |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name = "UPDATE_TIME", nullable = false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name = "UPDATOR", length = 100) |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name = "DELETE_FLAG", nullable = false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | |
| | | public interface ICourseScheduleService { |
| | | |
| | | /** |
| | | * 新增课表 |
| | | * 新增课表 |
| | | * |
| | | * @param courseSchedule 课表 |
| | | * @param courseSchedule 课表 |
| | | * |
| | | * @return |
| | | */ |
| | | String add(CourseSchedule courseSchedule) throws Exception; |
| | | |
| | | /** |
| | | * 修改课表 |
| | | * 修改课表 |
| | | * |
| | | * @param courseSchedule 课表 |
| | | * @param courseSchedule 课表 |
| | | * |
| | | * @return |
| | | */ |
| | | Result update(CourseSchedule courseSchedule) throws Exception; |
| | | |
| | | /** |
| | | * 删除课表 |
| | | * 删除课表 |
| | | * |
| | | * @param scheduleIds 课表ID数组 |
| | | * @param scheduleIds 课表ID数组 |
| | | * |
| | | */ |
| | | Result delete(String[] scheduleIds); |
| | | |
| | | /** |
| | | * 发布课表 |
| | | * 发布课表 |
| | | * |
| | | * @param scheduleIds 课表ID数组 |
| | | * @param scheduleIds 课表ID数组 |
| | | * |
| | | */ |
| | | Result doRelease(String[] scheduleIds); |
| | | |
| | | /** |
| | | * 撤回课表 |
| | | * 撤回课表 |
| | | * |
| | | * @param scheduleIds 课表id数组 |
| | | * @param scheduleIds 课表id数组 |
| | | * |
| | | */ |
| | | Result doCancel(String[] scheduleIds); |
| | | |
| | | /** |
| | | * 查询课表 |
| | | * 查询课表 |
| | | * |
| | | * @param keyword 搜索文本(课程名称) |
| | | * @param keyword 搜索文本(课程名称) |
| | | * |
| | | * @param status ״̬ |
| | | * @param status 状态 |
| | | * |
| | | * @param pageSize 页码 |
| | | * @param pageSize 页码 |
| | | * |
| | | * @param pageNum 每页显示行数 |
| | | * @param pageNum 每页显示行数 |
| | | * |
| | | * @return 返回课程列表 |
| | | * @return 返回课程列表 |
| | | */ |
| | | List<CourseSchedule> list(String keyword,Short status,Integer pageSize, Integer pageNum); |
| | | |
| | | /** |
| | | * 查询课表个数 |
| | | * 查询课表个数 |
| | | * |
| | | * @param keyword 搜索文本 |
| | | * @param keyword 搜索文本 |
| | | * |
| | | * @return 返回课表总数 |
| | | * @return 返回课表总数 |
| | | */ |
| | | int listCount(String keyword,Short status); |
| | | |
| | | /** |
| | | * 读取课表详情 |
| | | * 读取课表详情 |
| | | * |
| | | * @param scheduleId 课表ID |
| | | * @param scheduleId 课表ID |
| | | * |
| | | * @return 返回课表列表 |
| | | * @return 返回课表列表 |
| | | */ |
| | | CourseSchedule detail(String scheduleId); |
| | | |
| | | /** |
| | | * 获取课程列表 |
| | | * 获取课程列表 |
| | | * @param date |
| | | * @param pageSize |
| | | * @param pageNum |
| | |
| | | List<CourseSchedule> listTeacherOfSchedule(String date, Integer pageSize, Integer pageNum) throws Exception; |
| | | |
| | | /** |
| | | * 获取课程列表数量 |
| | | * 获取课程列表数量 |
| | | * @param date |
| | | * @param pageSize |
| | | * @param pageNum |
| | |
| | | int listTeacherOfScheduleCount(String date, Integer pageSize, Integer pageNum) throws ParseException; |
| | | |
| | | /** |
| | | * 获取学生课表列表 |
| | | * 获取学生课表列表 |
| | | * @param date |
| | | * @param pageSize |
| | | * @param pageNum |
| | |
| | | List<CourseSchedule> listStudentSchedule(String date, Integer pageSize, Integer pageNum) throws Exception; |
| | | |
| | | /** |
| | | * 获取学生课表列表数量 |
| | | * 获取学生课表列表数量 |
| | | * @param date |
| | | * @param pageSize |
| | | * @param pageNum |
| | |
| | | int listStudentScheduleCount(String date, Integer pageSize, Integer pageNum) throws Exception; |
| | | |
| | | /** |
| | | * 查询有课日期标识 |
| | | * 查询有课日期标识 |
| | | * @param year |
| | | * @param month |
| | | * @return |
| | |
| | | courseSchedule.setOrgId(ClientUtils.getOrgId()); |
| | | courseSchedule.setStatus(CourseSchedule.STATUS_DRAFT); |
| | | |
| | | //保存教师信息 |
| | | //保存教师信息 |
| | | UserTeacher teacher= teacherService.getTeacherByUserId(ClientUtils.getUserId()); |
| | | |
| | | if(teacher!=null){ |
| | |
| | | |
| | | this.insert(courseSchedule); |
| | | |
| | | //生成关联关系 |
| | | //生成关联关系 |
| | | List<String> lstClassIds= QBeanUtils.listPropertyVal(courseSchedule.getReClasses(), "classId"); |
| | | this.doClearAndAddReClass(courseSchedule.getScheduleId(),lstClassIds==null?null:lstClassIds.toArray(new String[lstClassIds.size()])); |
| | | |
| | | //生成明细 |
| | | //生成明细 |
| | | this.doCreateScheduleDetail(courseSchedule); |
| | | |
| | | return courseSchedule.getScheduleId(); |
| | |
| | | CourseSchedule newCourseSchedule = read(CourseSchedule.class, courseSchedule.getScheduleId()); |
| | | |
| | | if (newCourseSchedule == null) { |
| | | return new Result(false, "课表不存在"); |
| | | return new Result(false, "课表不存在"); |
| | | } |
| | | |
| | | TraceUtils.setUpdateTrace(newCourseSchedule); |
| | |
| | | newCourseSchedule.setSatTime(courseSchedule.getSatTime()); |
| | | newCourseSchedule.setSumTime(courseSchedule.getSumTime()); |
| | | |
| | | //保存教师信息 |
| | | //保存教师信息 |
| | | UserTeacher teacher= teacherService.getTeacherByUserId(ClientUtils.getUserId()); |
| | | |
| | | if(teacher!=null){ |
| | |
| | | |
| | | List<String> lstClassIds= QBeanUtils.listPropertyVal(newCourseSchedule.getReClasses(), "classId"); |
| | | |
| | | //更新关联关系 |
| | | //更新关联关系 |
| | | this.doClearAndAddReClass(courseSchedule.getScheduleId(),lstClassIds==null?null:lstClassIds.toArray(new String[lstClassIds.size()])); |
| | | |
| | | //生成明细 |
| | | //生成明细 |
| | | this.doCreateScheduleDetail(courseSchedule); |
| | | |
| | | // 保存课程班级信息 |
| | | // 保存课程班级信息 |
| | | return new Result(true); |
| | | } |
| | | |
| | | /** |
| | | * 清理并添加直播权限班级 |
| | | * 清理并添加直播权限班级 |
| | | * @param liveId |
| | | * @param classIds |
| | | */ |
| | |
| | | List<String> reIdLst = this.find("select r.reId from CourseScheduleReCls r where r.scheduleId=?", |
| | | CollectionUtils.newList(scheduleId), String.class); |
| | | |
| | | //删除关联关系 |
| | | //删除关联关系 |
| | | if(reIdLst!=null && reIdLst.size()>0){ |
| | | this.bulkUpdateInLoop("delete from CourseScheduleReCls where reId=?", reIdLst.toArray()); |
| | | } |
| | |
| | | @Override |
| | | public Result doRelease(String[] scheduleIds) { |
| | | if(scheduleIds==null || scheduleIds.length==0){ |
| | | return new Result(false, "没有选择要发布的课表"); |
| | | return new Result(false, "没有选择要发布的课表"); |
| | | } |
| | | |
| | | List<CourseSchedule> lstCourseSchedule = this.findByComplexHql("from CourseSchedule where scheduleId in (:scheduleIds)", |
| | |
| | | |
| | | for (CourseSchedule schedule : lstCourseSchedule) { |
| | | if (CourseSchedule.STATUS_DRAFT != schedule.getStatus()) { |
| | | return new Result(false, "只有草稿状态的课表,才能发布。"); |
| | | return new Result(false, "只有草稿状态的课表,才能发布。"); |
| | | } |
| | | schedule.setStatus(ClassRoom.STATUS_PUBLISH); |
| | | TraceUtils.setUpdateTrace(schedule); |
| | |
| | | @Override |
| | | public Result doCancel(String[] scheduleIds) { |
| | | if(scheduleIds==null || scheduleIds.length==0){ |
| | | return new Result(false, "没有选择要撤回的课表"); |
| | | return new Result(false, "没有选择要撤回的课表"); |
| | | } |
| | | |
| | | List<CourseSchedule> lstCourseSchedule = this.findByComplexHql("from CourseSchedule where scheduleId in (:scheduleIds)", |
| | |
| | | |
| | | for (CourseSchedule schedule : lstCourseSchedule) { |
| | | if (CourseSchedule.STATUS_PUBLISH != schedule.getStatus()) { |
| | | return new Result(false, "只有发布状态的课表,才能撤回"); |
| | | return new Result(false, "只有发布状态的课表,才能撤回"); |
| | | } |
| | | schedule.setStatus(ExamInfo.STATUS_DRAFT); |
| | | TraceUtils.setUpdateTrace(schedule); |
| | |
| | | return this.read(CourseSchedule.class, courseScheduleId); |
| | | } |
| | | |
| | | //查询当前的课表明细信息, |
| | | //查询当前的课表明细信息, |
| | | @Override |
| | | public List<CourseSchedule> listTeacherOfSchedule(String date,Integer pageSize, Integer pageNum) throws Exception{ |
| | | |
| | |
| | | return findList(hql.toString(),new Pager(pageSize, pageNum),params, CourseSchedule.class); |
| | | } |
| | | |
| | | //查询当前的课表明细信息 |
| | | //查询当前的课表明细信息 |
| | | @Override |
| | | public int listTeacherOfScheduleCount(String date,Integer pageSize, Integer pageNum) throws ParseException{ |
| | | |
| | |
| | | return findCount(hql.toString(),params); |
| | | } |
| | | |
| | | //查询当前的课表明细信息 |
| | | //查询当前的课表明细信息 |
| | | @Override |
| | | public List<CourseSchedule> listStudentSchedule(String date,Integer pageSize, Integer pageNum) throws Exception{ |
| | | StringBuffer hql = new StringBuffer(1000); |
| | |
| | | return findList(hql.toString(),new Pager(pageSize, pageNum),params, CourseSchedule.class); |
| | | } |
| | | |
| | | //查询当前的课表明细信息 |
| | | //查询当前的课表明细信息 |
| | | @Override |
| | | public int listStudentScheduleCount(String date,Integer pageSize, Integer pageNum) throws Exception{ |
| | | StringBuffer hql = new StringBuffer(1000); |
| | |
| | | } |
| | | |
| | | |
| | | //生成明细数据 |
| | | //生成明细数据 |
| | | private void doCreateScheduleDetail(CourseSchedule courseSchedule) throws Exception{ |
| | | SimpleDateFormat sdf = new SimpleDateFormat(SHORT_DATE_FORMAT); |
| | | String scheduleId = courseSchedule.getScheduleId(); |
| | | |
| | | //清理旧的关联关系 |
| | | //清理旧的关联关系 |
| | | List<String> detailIdLst = this.find("select d.detailId from CourseScheduleDetail d where d.scheduleId=?", |
| | | CollectionUtils.newList(scheduleId), String.class); |
| | | |
| | |
| | | this.bulkUpdateInLoop("delete from CourseScheduleDetail where detailId=?", detailIdLst.toArray()); |
| | | } |
| | | |
| | | //重新生成新的明细 |
| | | //重新生成新的明细 |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(courseSchedule.getBeginTime()); |
| | | cal.set(Calendar.HOUR, 0); |
| | |
| | | private static final long serialVersionUID = -8815707507227185401L; |
| | | |
| | | /* |
| | | * 草稿 :0 已发布:1 |
| | | * 草稿 :0 已发布:1 |
| | | */ |
| | | public static final short STATUS_DRAFT = 0; |
| | | |
| | |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name = "UPDATE_ID", length = 32) |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name = "UPDATE_TIME", nullable = false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name = "UPDATOR", length = 100) |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name = "DELETE_FLAG", nullable = false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | | |
| | | /** ״̬ */ |
| | | /** 状态 */ |
| | | private short status; |
| | | |
| | | public ExamRoom() { |
| | |
| | | public interface IExamRoomService { |
| | | |
| | | /** |
| | | * 新增考场 |
| | | * 新增考场 |
| | | * |
| | | * @param examRoom 考场 |
| | | * @param examRoom 考场 |
| | | * |
| | | * @return |
| | | */ |
| | | String add(ExamRoom examRoom); |
| | | |
| | | /** |
| | | * 修改考场 |
| | | * 修改考场 |
| | | * |
| | | * @param examRoom 考场 |
| | | * @param examRoom 考场 |
| | | * |
| | | * @return |
| | | */ |
| | | Result update(ExamRoom examRoom); |
| | | |
| | | /** |
| | | * 删除考场 |
| | | * 删除考场 |
| | | * |
| | | * @param roomIds 课表ID数组 |
| | | * @param roomIds 课表ID数组 |
| | | * |
| | | */ |
| | | Result delete(String[] roomIds); |
| | | |
| | | /** |
| | | * 发布考场 |
| | | * 发布考场 |
| | | * |
| | | * @param roomIds 考场ID数组 |
| | | * @param roomIds 考场ID数组 |
| | | * |
| | | */ |
| | | Result doRelease(String[] roomIds); |
| | | |
| | | /** |
| | | * 撤回考场 |
| | | * 撤回考场 |
| | | * |
| | | * @param roomIds 考场id数组 |
| | | * @param roomIds 考场id数组 |
| | | * |
| | | */ |
| | | Result doCancel(String[] roomIds); |
| | | |
| | | /** |
| | | * 查询考场 |
| | | * 查询考场 |
| | | * |
| | | * @param keyword 搜索文本(考场名称) |
| | | * @param keyword 搜索文本(考场名称) |
| | | * |
| | | * @param status ״̬ |
| | | * @param status 状态 |
| | | * |
| | | * @param pageSize 页码 |
| | | * @param pageSize 页码 |
| | | * |
| | | * @param pageNum 每页显示行数 |
| | | * @param pageNum 每页显示行数 |
| | | * |
| | | * @return 返回课程列表 |
| | | * @return 返回课程列表 |
| | | */ |
| | | List<ExamRoom> list(String roomId, String keyword, Short status, Integer pageSize, Integer pageNum); |
| | | |
| | | /** |
| | | * 查询考场个数 |
| | | * 查询考场个数 |
| | | * |
| | | * @param keyword 搜索文本(考场名称) |
| | | * @param keyword 搜索文本(考场名称) |
| | | * |
| | | * @return 返回考场总数 |
| | | * @return 返回考场总数 |
| | | */ |
| | | int listCount(String roomId,String keyword, Short status); |
| | | |
| | | /** |
| | | * 读取考场详情 |
| | | * 读取考场详情 |
| | | * |
| | | * @param roomId 考场ID |
| | | * @param roomId 考场ID |
| | | * |
| | | * @return 返回考场详情信息 |
| | | * @return 返回考场详情信息 |
| | | */ |
| | | ExamRoom detail(String roomId); |
| | | |
| | | /** |
| | | * 获取考场ID和名称列表 |
| | | * 获取考场ID和名称列表 |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> queryAllRoomIdAndNames(); |
| | |
| | | ExamRoom newExamRoom = read(ExamRoom.class, examRoom.getExamroomId()); |
| | | |
| | | if (newExamRoom == null) { |
| | | return new Result(false, "考场不存在"); |
| | | return new Result(false, "考场不存在"); |
| | | } |
| | | |
| | | TraceUtils.setUpdateTrace(newExamRoom); |
| | |
| | | @Override |
| | | public Result doRelease(String[] examroomIds) { |
| | | if(examroomIds==null || examroomIds.length==0){ |
| | | return new Result(false, "没有选择要发布的考场"); |
| | | return new Result(false, "没有选择要发布的考场"); |
| | | } |
| | | |
| | | List<ExamRoom> lstClsRoom = this.findByComplexHql("from ExamRoom where examroomId in (:examroomIds)", |
| | |
| | | |
| | | for (ExamRoom room : lstClsRoom) { |
| | | if (ExamInfo.STATUS_DRAFT != room.getStatus()) { |
| | | return new Result(false, "只有草稿状态的考场,才能发布。"); |
| | | return new Result(false, "只有草稿状态的考场,才能发布。"); |
| | | } |
| | | room.setStatus(ExamRoom.STATUS_PUBLISH); |
| | | TraceUtils.setUpdateTrace(room); |
| | |
| | | @Override |
| | | public Result doCancel(String[] examroomIds) { |
| | | if(examroomIds==null || examroomIds.length==0){ |
| | | return new Result(false, "没有选择要撤回的考场"); |
| | | return new Result(false, "没有选择要撤回的考场"); |
| | | } |
| | | |
| | | List<ExamRoom> lstClsRoom = this.findByComplexHql("from ExamRoom where examroomId in (:examroomIds)", |
| | |
| | | |
| | | for (ExamRoom room : lstClsRoom) { |
| | | if (ExamInfo.STATUS_PUBLISH != room.getStatus()) { |
| | | return new Result(false, "只有发布状态的 考场,才能撤回"); |
| | | return new Result(false, "只有发布状态的 考场,才能撤回"); |
| | | } |
| | | room.setStatus(ExamInfo.STATUS_DRAFT); |
| | | TraceUtils.setUpdateTrace(room); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 记录已读的学员 |
| | | * 记录已读的学员 |
| | | * |
| | | * @param noticeId |
| | | * @param userId |
| | | */ |
| | | public void addReadCount(String noticeId, String userId) { |
| | | cache.lstRemove("noticeReadCount" + noticeId, userId);//删除用户之前查看的记录,避免重复记录; |
| | | cache.lstRemove("noticeReadCount" + noticeId, userId);//删除用户之前查看的记录,避免重复记录; |
| | | cache.lstRightPush("noticeReadCount" + noticeId, userId); |
| | | } |
| | | |
| | | /** |
| | | * 获取已读的学员人数 |
| | | * 获取已读的学员人数 |
| | | */ |
| | | public int getReadCount(String noticeId) { |
| | | List<Object> lstAll = cache.lstAll("noticeReadCount" + noticeId); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除cache的key |
| | | * 删除cache的key |
| | | */ |
| | | public void deleteNoticeForCache(String noticeId) { |
| | | cache.delete("noticeReadCount" + noticeId); |
| | |
| | | public interface INoticeService { |
| | | |
| | | /** |
| | | * 新增通知 |
| | | * 新增通知 |
| | | * |
| | | * @param name 通知名称 |
| | | * @param content 通知介绍 |
| | | * @param type 通知类型 |
| | | * @param classIds 班级ids |
| | | * @param name 通知名称 |
| | | * @param content 通知介绍 |
| | | * @param type 通知类型 |
| | | * @param classIds 班级ids |
| | | * @return |
| | | */ |
| | | Result add(String name, String content, String type, List<String> classIds); |
| | | |
| | | /** |
| | | * 修改通知 |
| | | * 修改通知 |
| | | * |
| | | * @param noticeId ֪ͨID |
| | | * @param name 通知名称 |
| | | * @param content 通知介绍 |
| | | * @param type 通知类型 |
| | | * @param classIds 班级ids |
| | | * @param noticeId 通知ID |
| | | * @param name 通知名称 |
| | | * @param content 通知介绍 |
| | | * @param type 通知类型 |
| | | * @param classIds 班级ids |
| | | * @return |
| | | */ |
| | | Result update(String noticeId, String name, String content, String type, List<String> classIds); |
| | | |
| | | /** |
| | | * 查询通知 |
| | | * 查询通知 |
| | | * |
| | | * @param noticeId ֪ͨId |
| | | * @param noticeId 通知Id |
| | | * @return |
| | | */ |
| | | Notice read(String noticeId); |
| | | |
| | | /** |
| | | * 查询通知 |
| | | * 查询通知 |
| | | * |
| | | * @param noticeIdLst ֪ͨId |
| | | * @param noticeIdLst 通知Id |
| | | * @return |
| | | */ |
| | | List<Notice> readByStatus(Collection<String> noticeIdLst, short status); |
| | | |
| | | /** |
| | | * 查询通知 |
| | | * 查询通知 |
| | | * |
| | | * @param keyword 查询关键字 |
| | | * @param pageNum 页码 |
| | | * @param pageSize 每页数据大小 |
| | | * @param sort 排序 |
| | | * @param keyword 查询关键字 |
| | | * @param pageNum 页码 |
| | | * @param pageSize 每页数据大小 |
| | | * @param sort 排序 |
| | | * @return |
| | | */ |
| | | List<Notice> list(String keyword, Integer pageNum, Integer pageSize, String createId, String sort); |
| | | |
| | | /** |
| | | * 查询通知总数 |
| | | * 查询通知总数 |
| | | * |
| | | * @param keyword 查询关键字 |
| | | * @param keyword 查询关键字 |
| | | * @return |
| | | */ |
| | | int listCount(String keyword, String createId); |
| | | |
| | | /** |
| | | * 删除通知 |
| | | * 删除通知 |
| | | * |
| | | * @param noticeId ֪ͨID |
| | | * @param noticeId 通知ID |
| | | * @return |
| | | */ |
| | | Result delete(String noticeId); |
| | | |
| | | /** |
| | | * 删除通知 |
| | | * 删除通知 |
| | | * |
| | | * @param noticeIds 通知ID数组 |
| | | * @param noticeIds 通知ID数组 |
| | | * @return |
| | | */ |
| | | Result delete(String[] noticeIds); |
| | | |
| | | /** |
| | | * 发布通知 |
| | | * 发布通知 |
| | | * |
| | | * @param noticeId ֪ͨID |
| | | * @param noticeId 通知ID |
| | | * @return |
| | | */ |
| | | Result doIssue(String noticeId); |
| | | |
| | | /** |
| | | * 发布通知 |
| | | * 发布通知 |
| | | * |
| | | * @param noticeId ֪ͨID |
| | | * @param noticeId 通知ID |
| | | * @return |
| | | */ |
| | | Result doIssue(String[] noticeIds); |
| | | |
| | | /** |
| | | * 取消通知 |
| | | * 取消通知 |
| | | * |
| | | * @param noticeId ֪ͨID |
| | | * @param noticeId 通知ID |
| | | * @return |
| | | */ |
| | | Result doCancel(String noticeId); |
| | | |
| | | /** |
| | | * 取消通知 |
| | | * 取消通知 |
| | | * |
| | | * @param noticeId ֪ͨID |
| | | * @param noticeId 通知ID |
| | | * @return |
| | | */ |
| | | Result doCancel(String[] noticeIds); |
| | | |
| | | |
| | | /** |
| | | * 读取通知班级 |
| | | * 读取通知班级 |
| | | * |
| | | * @param noticeId ֪ͨID |
| | | * @param noticeId 通知ID |
| | | * @return |
| | | */ |
| | | List<String> getNoticeClasses(String noticeId); |
| | | |
| | | /** |
| | | * 查看通知 |
| | | * 查看通知 |
| | | * |
| | | * @param noticeId ֪ͨID |
| | | * @param noticeId 通知ID |
| | | * @return |
| | | */ |
| | | Result view(String noticeId); |
| | |
| | | if(lstClassIds == null || lstClassIds.size()==0){ |
| | | return ; |
| | | } |
| | | //查询直播关联的班级 |
| | | //查询直播关联的班级 |
| | | String hql = "select userId from StuStudent where classId in (:classIds) and deleteFlag is false "; |
| | | |
| | | List<String> lstUserIds = this.findByComplexHql(hql, CollectionUtils.newObjectMap("classIds",lstClassIds.toArray(new String[lstClassIds.size()])), String.class); |
| | |
| | | "creator",notice.getCreator(),"noticeTypeName",notice.getNoticeTypeName()); |
| | | |
| | | msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]), |
| | | MsgInfo.TYPE_NOTICE," 发布了公告", attrs); |
| | | MsgInfo.TYPE_NOTICE," 发布了公告", attrs); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据targetId和learnerId获取进度 |
| | | * 根据targetId和learnerId获取进度 |
| | | * |
| | | * @param targetId |
| | | * targetId |
| | | * @param learnerId |
| | | * 学习者id |
| | | * 学习者id |
| | | * @return |
| | | */ |
| | | @Cacheable(value = "progress", key = "#targetId+#learnerId") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取学生的各个节点的学习进度,进度值 |
| | | * 获取学生的各个节点的学习进度,进度值 |
| | | * |
| | | * @param parentId |
| | | * @param userId |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取当前节点下的父节点 |
| | | * 获取当前节点下的父节点 |
| | | * |
| | | * @param nodeId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据subjectId获取章节列表 |
| | | * 根据subjectId获取章节列表 |
| | | * |
| | | * @param parentId |
| | | * @param userId |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取progress 对象 |
| | | * 获取progress 对象 |
| | | */ |
| | | public Progress getProgressObject(String targetId, String userId) { |
| | | return findUniqueByHql( |
| | |
| | | } |
| | | |
| | | /** |
| | | * 记录用户每个课程学习的位置 |
| | | * 记录用户每个课程学习的位置 |
| | | */ |
| | | @CachePut(value = "lastStudied", key = "#userId + #subjectId + #classId") |
| | | public Map<String, Object> putStudyById(String userId, String subjectId, String lectureId, String lectureParentId, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取用户每个课程上次学习的数据 |
| | | * 获取用户每个课程上次学习的数据 |
| | | */ |
| | | @Cacheable(value = "lastStudied", key = "#userId + #subjectId +#classId") |
| | | public Map<String, Object> getStudyById(String userId, String subjectId, String classId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取用户上次学习的数据 |
| | | * 获取用户上次学习的数据 |
| | | */ |
| | | @Cacheable(value = "lastStudied", key = "#userId") |
| | | public Map<String, Object> getStudyByUserId(String userId) { |
| | |
| | | import com.qxueyou.scc.base.model.ITrace; |
| | | |
| | | /** |
| | | * 学习进度明细 |
| | | * 学习进度明细 |
| | | * |
| | | * @author sven |
| | | * |
| | |
| | | stuStudent.setClassId(classId); |
| | | save(stuStudent); |
| | | }else { |
| | | return new Result(false,"班级不存在或学生不存在"); |
| | | return new Result(false,"班级不存在或学生不存在"); |
| | | } |
| | | } |
| | | |
| | |
| | | List<StuStudent> stuStudents = find(hql.toString(), args, StuStudent.class); |
| | | |
| | | ExcelExportUtils<StuStudent> ex = new ExcelExportUtils<StuStudent>(); |
| | | String[] headers = { "姓名", "性别" ,"手机号" ,"身份证"}; |
| | | String[] headers = { "姓名", "性别" ,"手机号" ,"身份证"}; |
| | | List<StuStudent> dataset = new ArrayList<StuStudent>(); |
| | | for (StuStudent stuStudent: |
| | | stuStudents) { |
| | |
| | | obj.setOut(out); |
| | | ex.exportExcel(obj); |
| | | out.close(); |
| | | System.out.println("excel导出成功!"); |
| | | System.out.println("excel导出成功!"); |
| | | } catch (FileNotFoundException e) { |
| | | e.printStackTrace(); |
| | | } catch (IOException e) { |
| | |
| | | obj.setOut(out); |
| | | ex.exportExcelByColomn(obj); |
| | | out.close(); |
| | | System.out.println("excel指定列导出成功!"); |
| | | System.out.println("excel指定列导出成功!"); |
| | | } catch (FileNotFoundException e) { |
| | | e.printStackTrace(); |
| | | } catch (IOException e) { |
| | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Api(tags = "成绩管理接口") |
| | | @Api(tags = "成绩管理接口") |
| | | @Controller |
| | | @CrossOrigin(origins="*",maxAge=3600) |
| | | @RequestMapping(value = "admin/score") |
| | | public class ScoreController { |
| | | |
| | | // 分页查询中,默认记录条数和页数 |
| | | // 分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE = 10; |
| | | private static final int DEFAULT_PAGE_NUM = 1; |
| | | |
| | |
| | | List<Map<String,Object>> mapList = new ArrayList<>(); |
| | | List<ExamResultV> examResultVS = scoreService.allExamResultV(classId); |
| | | List<ExerciseResultV> exerciseResultVS = scoreService.allExerciseResultV(classId); |
| | | //总成绩数量 |
| | | //总成绩数量 |
| | | int totalCount = scoreService.findCount("from ExamResultV where class_Id Like ? and score != null and score != 0",CollectionUtils.newList(classId)); |
| | | if (examResultVS.size() < exerciseResultVS.size()){ |
| | | totalCount = exerciseResultVS.size(); |
| | |
| | | public interface IScoreService { |
| | | |
| | | /** |
| | | * 获取班级考试成绩信息 |
| | | * 获取班级考试成绩信息 |
| | | * @param classId |
| | | * @return |
| | | */ |
| | | Map<String,Object> queryClassExamScoreInfo(String classId); |
| | | |
| | | /** |
| | | * 获取班级作业成绩信息 |
| | | * 获取班级作业成绩信息 |
| | | * @param classId |
| | | * @return |
| | | */ |
| | | Map<String,Object> queryClassHomeworkScoreInfo(String classId); |
| | | |
| | | /** |
| | | * 获取考试成绩信息 |
| | | * 获取考试成绩信息 |
| | | * @return |
| | | */ |
| | | List<ExamResultV> allExamResultV(String classId); |
| | | |
| | | /** |
| | | *获取作业成绩信息 |
| | | *获取作业成绩信息 |
| | | */ |
| | | List<ExerciseResultV> allExerciseResultV(String classId); |
| | | |
| | |
| | | |
| | | public interface ITeacherService { |
| | | /** |
| | | * 教师管理新增 |
| | | * 教师管理新增 |
| | | */ |
| | | Result add(String teacherName, String password, String mobilePhone, String teacherNo); |
| | | |
| | | /** |
| | | * 更新 |
| | | * 更新 |
| | | */ |
| | | Result update(String teacherId, String teacherName, String account, String password, String mobilePhone, |
| | | String teacherNo); |
| | | |
| | | /** |
| | | * 教师管理显示列表 |
| | | * 教师管理显示列表 |
| | | */ |
| | | List<UserTeacher> lstTeacher(String keyword, Integer pageSize, Integer pageNum); |
| | | |
| | | /** |
| | | * 删除教师 |
| | | * 删除教师 |
| | | */ |
| | | Result deleteTeacher(String[] teacherIds); |
| | | |
| | |
| | | int findTeacherCount(String keyword); |
| | | |
| | | /** |
| | | * 新增班级获取教师列表 |
| | | * 新增班级获取教师列表 |
| | | */ |
| | | List<UserTeacher> LstTeacher4Cls(); |
| | | |
| | | /** |
| | | * 角色管理获取教师列表 |
| | | * 角色管理获取教师列表 |
| | | * |
| | | * @param keyword |
| | | * @param pageSize |
| | |
| | | List<Map<String, Object>> findLstToRole(String keyword, Integer pageSize, Integer pageNum, String roleId); |
| | | |
| | | /** |
| | | * 角色管理获取教师总条数 |
| | | * 角色管理获取教师总条数 |
| | | * |
| | | * @param roleId |
| | | * @param keyword |
| | |
| | | int findLstCountToRole(String roleId, String keyword); |
| | | |
| | | /** |
| | | * 获取userId |
| | | * 获取userId |
| | | */ |
| | | String getTeacherIdByUserId(String teacherId); |
| | | |
| | | /** |
| | | * 获取userId |
| | | * 获取userId |
| | | */ |
| | | UserTeacher getTeacherByUserId(String userId); |
| | | |
| | | /** |
| | | * 获取教师信息 |
| | | * 获取教师信息 |
| | | * |
| | | * @param teacherId |
| | | * @return |
| | |
| | | TeacherDAO dao; |
| | | |
| | | /** |
| | | * 教师管理新增 |
| | | * 教师管理新增 |
| | | */ |
| | | @Override |
| | | public Result add(String teacherName, String password, String mobilePhone, String teacherNo) { |
| | | |
| | | if (dao.exists(teacherNo) || userService.exists(teacherNo)) { |
| | | return new Result(false, "老师编号已存在或被其他用户占用"); |
| | | return new Result(false, "老师编号已存在或被其他用户占用"); |
| | | } |
| | | |
| | | User user = userService.insertUser(teacherName, teacherNo, mobilePhone, password, Boolean.FALSE, ClientUtils.getOrgId()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新 |
| | | * 更新 |
| | | */ |
| | | @Override |
| | | public Result update(String teacherId, String teacherName, String account, String password, String mobilePhone, |
| | | String teacherNo) { |
| | | if (StringUtils.isNotEmpty(mobilePhone) && dao.exists(mobilePhone, teacherId)) { |
| | | return new Result(false, "手机号已存在"); |
| | | return new Result(false, "手机号已存在"); |
| | | } |
| | | |
| | | UserTeacher teacher = read(UserTeacher.class, teacherId); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 教师管理显示列表 |
| | | * 教师管理显示列表 |
| | | */ |
| | | @Override |
| | | public List<UserTeacher> lstTeacher(String keyword, Integer pageSize, Integer pageNum) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取教师总条数 |
| | | * 获取教师总条数 |
| | | */ |
| | | @Override |
| | | public int findTeacherCount(String keyword) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 教师管理 删除教师 |
| | | * 教师管理 删除教师 |
| | | */ |
| | | @Override |
| | | public Result deleteTeacher(String[] teacherIds) { |
| | |
| | | User u = this.read(User.class, ClientUtils.getUserId()); |
| | | String teacherId = this.getTeacherIdByUserId(u.getUserId()); |
| | | if(StringUtils.isEmpty(teacherId)) { |
| | | return new Result(false, "当前用户无教师角色信息"); |
| | | return new Result(false, "当前用户无教师角色信息"); |
| | | } |
| | | |
| | | long subjectCount = this.getQueryFactory().selectDistinct(subject.subjectId).from(subject) |
| | |
| | | import com.qxueyou.scc.sys.service.IOssService; |
| | | |
| | | /** |
| | | * aliyun资源临时授权 |
| | | * aliyun资源临时授权 |
| | | * @author cyq |
| | | * |
| | | */ |
| | |
| | | IOssService ossService; |
| | | |
| | | /** |
| | | * 公共数据访问对象 |
| | | * 公共数据访问对象 |
| | | */ |
| | | @Autowired |
| | | private CommonDAO commonDAO; |
| | | |
| | | /** |
| | | * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径 |
| | | * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径 |
| | | * @param videoId |
| | | * @param definition |
| | | * @return |
| | |
| | | @RequestMapping(value="video/m3u8", method=RequestMethod.GET, produces = "application/json;charset=utf-8") |
| | | public @ResponseBody Result videoM3u8(@RequestParam("videoId") String videoId, String definition) { |
| | | if (StringUtils.isEmpty(videoId)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | // json.put("result", "success"); |
| | | // // 检查缓存中是否有可用的url,如果有,则直接返回 |
| | | // // 检查缓存中是否有可用的url,如果有,则直接返回 |
| | | // String urlCache = cacheService.get("sts_url_" + resId, String.class); |
| | | // if (StringUtils.isNotEmpty(urlCache)) { |
| | | // json.put("url", urlCache); |
| | |
| | | MediaVideo video = commonDAO.read(MediaVideo.class, videoId); |
| | | |
| | | if (video == null) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | |
| | | String resId = ""; |
| | | String resUrl = null; |
| | | JSONObject json = null; |
| | | |
| | | //判断是否是mp3等音乐格式文件,如果是则直接返回original地址 |
| | | //判断是否是mp3等音乐格式文件,如果是则直接返回original地址 |
| | | if(checkIsVoiceMedia(video)){ |
| | | json = new JSONObject(); |
| | | json.put("result", "success"); |
| | |
| | | |
| | | resUrl = this.getM3u8ResUrl(def, video); |
| | | |
| | | //判断是否是加密视频,未加密则直接返回视频地址 |
| | | //判断是否是加密视频,未加密则直接返回视频地址 |
| | | if(StringUtils.isEmpty(video.getSecretKey())){ |
| | | //如果未转码加密,且m3u8视频不存在,则尝试读取MP4视频。 |
| | | //如果未转码加密,且m3u8视频不存在,则尝试读取MP4视频。 |
| | | if (StringUtils.isEmpty(resUrl)) { |
| | | resUrl = StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD() : StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD() : video.getAndroidLD(); |
| | | |
| | | if (StringUtils.isEmpty(resUrl)) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | } |
| | | |
| | |
| | | json.put("url", video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1)); |
| | | json.put("isConver",false); |
| | | }else{ |
| | | //如果转码加密后,依然不能读取到M3U8视频或读取到的是MP4直接返回,提示视屏不存在 |
| | | //如果转码加密后,依然不能读取到M3U8视频或读取到的是MP4直接返回,提示视屏不存在 |
| | | if (StringUtils.isEmpty(resUrl)||resUrl.endsWith(MP4)) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | |
| | | resId = resUrl.substring(resUrl.indexOf("/video/") + 1); |
| | |
| | | |
| | | // String resDir = resId.substring(0, resId.lastIndexOf('/')); |
| | | |
| | | //获取原视频VideoId |
| | | //获取原视频VideoId |
| | | // String keyAddr = video.getOriginVideoId(); |
| | | // if(StringUtils.isBlank(keyAddr)){ |
| | | // keyAddr = video.getVideoId(); |
| | | // } |
| | | |
| | | // // 获取解密key的临时访问权限 |
| | | // // 获取解密key的临时访问权限 |
| | | // if(StringUtils.isNotEmpty(video.getM3u8KeyPath())){ |
| | | // json.put("url", video.getM3u8KeyPath().substring(video.getM3u8KeyPath().indexOf("/video/") + 1)); |
| | | // }else{ |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径 |
| | | * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径 |
| | | * @param videoId |
| | | * @param definition |
| | | * @return |
| | |
| | | @RequestMapping(value="video/mp4", method=RequestMethod.GET, produces = "application/json;charset=utf-8") |
| | | public @ResponseBody Result videoMp4(@RequestParam("videoId") String videoId, String definition) { |
| | | if (StringUtils.isEmpty(videoId)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | BufferedReader bf = null; |
| | |
| | | MediaVideo video = commonDAO.read(MediaVideo.class, videoId); |
| | | |
| | | if (video == null) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | |
| | | String resId = ""; |
| | | String resUrl = null; |
| | | JSONObject json = null; |
| | | |
| | | //判断是否是mp3等音乐格式文件,如果是则直接返回original地址 |
| | | //判断是否是mp3等音乐格式文件,如果是则直接返回original地址 |
| | | if(checkIsVoiceMedia(video)){ |
| | | json = new JSONObject(); |
| | | json.put("result", "success"); |
| | |
| | | |
| | | resUrl = this.getMp4ResUrl(def, video); |
| | | |
| | | //如果转码地址不存在,并且源码地址是mp4则直接使用原视频地址播放 |
| | | //如果转码地址不存在,并且源码地址是mp4则直接使用原视频地址播放 |
| | | if(StringUtils.isEmpty(resUrl) && video.getOrigUrl().endsWith(MP4)){ |
| | | resUrl = video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1); |
| | | } |
| | | |
| | | //查看原视频是否是MP4 |
| | | //查看原视频是否是MP4 |
| | | if (StringUtils.isEmpty(resUrl)) { |
| | | return new Result(false, "资源不存在"); |
| | | return new Result(false, "资源不存在"); |
| | | } |
| | | |
| | | json = new JSONObject(); |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取resurl |
| | | * 获取resurl |
| | | * |
| | | * @param def |
| | | * @param video |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取resurl |
| | | * 获取resurl |
| | | * |
| | | * @param def |
| | | * @param video |
| | |
| | | } |
| | | |
| | | /** |
| | | * 判断是否是音频media,精确判断需要枚举音频格式 |
| | | * 判断是否是音频media,精确判断需要枚举音频格式 |
| | | * @return |
| | | */ |
| | | private boolean checkIsVoiceMedia(MediaVideo media){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 测试接口专用 |
| | | * 测试接口专用 |
| | | * @param request |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置过期时间的set方法 |
| | | * 设置过期时间的set方法 |
| | | * |
| | | * @param key |
| | | * 键 |
| | | * 键 |
| | | * @param value |
| | | * value |
| | | * @param timeout |
| | | * 过期时间 单位(s) |
| | | * 过期时间 单位(s) |
| | | */ |
| | | public void setex(String key, String value, int timeout) { |
| | | ShardedJedis client = null; |
| | |
| | | return expire(key, timeOut); |
| | | } |
| | | |
| | | /** 根据键获取字符串值 */ |
| | | /** 根据键获取字符串值 */ |
| | | public String get(String key) { |
| | | ShardedJedis client = null; |
| | | String value = ""; |
| | |
| | | return value; |
| | | } |
| | | |
| | | /** 获取并删除键 */ |
| | | /** 获取并删除键 */ |
| | | public String getAndDel(String key) { |
| | | ShardedJedis client = null; |
| | | String value = ""; |
| | |
| | | return value; |
| | | } |
| | | |
| | | /** 删除键 */ |
| | | /** 删除键 */ |
| | | public void del(String key) { |
| | | ShardedJedis client = null; |
| | | try { |
| | |
| | | } |
| | | } |
| | | |
| | | /** 获取并删除键 */ |
| | | /** 获取并删除键 */ |
| | | public void del(String[] keys) { |
| | | ShardedJedis client = null; |
| | | try { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 多长时间内尝试获取锁 |
| | | * 多长时间内尝试获取锁 |
| | | * |
| | | * @param key |
| | | * @param timeOut |
| | |
| | | return false; |
| | | } |
| | | try { |
| | | // 每隔200ms秒尝试获取锁 |
| | | // 每隔200ms秒尝试获取锁 |
| | | Thread.sleep(200); |
| | | } catch (InterruptedException e) { |
| | | throw e; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 |
| | | * 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 |
| | | * |
| | | * @param key |
| | | * @param start |
| | |
| | | /****************************************************************************** |
| | | * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd |
| | | * All Rights Reserved. |
| | | * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | *****************************************************************************/ |
| | | |
| | | package com.qxueyou.scc.base.dao; |
| | |
| | | import com.qxueyou.scc.base.model.Result; |
| | | |
| | | /** |
| | | * 基础DAO类,自动注入sessionFactory |
| | | * 基础DAO类,自动注入sessionFactory |
| | | * |
| | | * @author 夏德虎 |
| | | * @author 夏德虎 |
| | | * @since JDK1.6 |
| | | * @history 2010-07-28 夏德虎 新建 |
| | | * @history 2010-07-28 夏德虎 新建 |
| | | */ |
| | | public class BaseDAO extends HibernateDaoSupport { |
| | | |
| | | /** 注释 rawtypes */ |
| | | /** 注释 rawtypes */ |
| | | private static final String RAW_TYPES = "rawtypes"; |
| | | |
| | | /** |
| | | * 注入sessionFactory |
| | | * 注入sessionFactory |
| | | * |
| | | * @param sessionFactory |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 读取对象 |
| | | * 读取对象 |
| | | * |
| | | * @param <T> 泛型类型 |
| | | * @param clz VO CLASS类型 |
| | | * @param key VO 主键 |
| | | * @return 查找到的结果,如果没找到,返回null |
| | | * @param <T> 泛型类型 |
| | | * @param clz VO CLASS类型 |
| | | * @param key VO 主键 |
| | | * @return 查找到的结果,如果没找到,返回null |
| | | */ |
| | | public <T> T read(Class<T> clz, Serializable key) { |
| | | if(key==null){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存对象 |
| | | * 保存对象 |
| | | */ |
| | | public void update(Object obj) { |
| | | this.getHibernateTemplate().update(obj); |
| | | } |
| | | |
| | | /** |
| | | * 保存对象 |
| | | * 保存对象 |
| | | */ |
| | | public void save(Object obj) { |
| | | this.getHibernateTemplate().save(obj); |
| | | } |
| | | |
| | | /** |
| | | * 保存或更新对象 |
| | | * 保存或更新对象 |
| | | */ |
| | | public void saveOrUpdate(Object obj) { |
| | | this.getHibernateTemplate().saveOrUpdate(obj); |
| | | } |
| | | |
| | | /** |
| | | * 保存或更新集合对象 |
| | | * 保存或更新集合对象 |
| | | */ |
| | | public void saveOrUpdateAll(@SuppressWarnings(RAW_TYPES) Collection collection) { |
| | | for(Object obj:collection){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存或更新对象 |
| | | * 保存或更新对象 |
| | | */ |
| | | public void deleteAll(@SuppressWarnings(RAW_TYPES) Collection col) { |
| | | this.getHibernateTemplate().deleteAll(col); |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public <T> List<T> find(final String hql,final List<Object> args,final Class<T> cls) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表 |
| | | * 根据hql查询,并返回执行类型的列表 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,返回列表数据总数 |
| | | * 根据hql查询,返回列表数据总数 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public int findCount(final String hql, final List<Object> args) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,返回列表数据总数 |
| | | * 根据hql查询,返回列表数据总数 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public int findCountBySql(final String sql, final List<Object> args) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,返回列表分页数据 |
| | | * 根据hql查询,返回列表分页数据 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({ "unchecked" }) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,返回唯一的数据 |
| | | * 根据hql查询,返回唯一的数据 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({ RAW_TYPES, "unchecked" }) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({ RAW_TYPES}) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({ RAW_TYPES}) |
| | |
| | | |
| | | |
| | | /** |
| | | * hql只含单一参数 |
| | | * hql只含单一参数 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数数组 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数数组 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public Result bulkUpdateInLoop(String hql, Object args[]) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * hql只含单一参数 |
| | | * hql只含单一参数 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数数组 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数数组 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public Result bulkUpdate(String hql, Object args[]) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 存储过程语句 |
| | | * 存储过程语句 |
| | | * |
| | | * @param hql call 存储语句 sql语句 |
| | | * @param args 参数数组 |
| | | * @param hql call 存储语句 sql语句 |
| | | * @param args 参数数组 |
| | | * @return |
| | | */ |
| | | public Result executeProduce(final String sql, final Object args[]) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 执行sql删除 |
| | | * 执行sql删除 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数数组 |
| | | * @param hql 查询语句 |
| | | * @param args 参数数组 |
| | | * @return |
| | | */ |
| | | public int executeSqlDelete(final String sql, final Object args[]) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({RAW_TYPES, "unchecked" }) |
| | | public List<Object[]> findRawByComplexHql(final String hql, final Map<String, Object> map) { |
| | | // 查询结果 |
| | | // 查询结果 |
| | | return (List<Object[]>)this.getHibernateTemplate().execute(new HibernateCallback<List>() { |
| | | public List doInHibernate(Session session) { |
| | | Query query = session.createQuery(hql); |
| | |
| | | Set<String> keySet = map.keySet(); |
| | | for (String string : keySet) { |
| | | Object obj = map.get(string); |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | if(obj instanceof Collection<?>){ |
| | | query.setParameterList(string, (Collection<?>)obj); |
| | | }else if(obj instanceof Object[]){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,返回列表数据总数 |
| | | * 根据hql查询,返回列表数据总数 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public int findCountByComplexHql(final String hql, final Map<String, Object> map) { |
| | |
| | | Set<String> keySet = map.keySet(); |
| | | for (String string : keySet) { |
| | | Object obj = map.get(string); |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | if(obj instanceof Collection<?>){ |
| | | queryHql.setParameterList(string, (Collection<?>)obj); |
| | | }else if(obj instanceof Object[]){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据sql查询,返回列表数据总数 |
| | | * 根据sql查询,返回列表数据总数 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public int findCountByComplexSql(final String hql, final Map<String, Object> map) { |
| | |
| | | Set<String> keySet = map.keySet(); |
| | | for (String string : keySet) { |
| | | Object obj = map.get(string); |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | if(obj instanceof Collection<?>){ |
| | | querySql.setParameterList(string, (Collection<?>)obj); |
| | | }else if(obj instanceof Object[]){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public <T> List<T> findByComplexHql(final String hql, final Map<String, Object> map, Class<T> cls) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复杂hql |
| | | * 复杂hql |
| | | * @param sql |
| | | * @param map |
| | | * @param cls |
| | | * @return |
| | | */ |
| | | public <T> T findUniqueByHql(final String hql, final Map<String, Object> map){ |
| | | // 查询结果 |
| | | // 查询结果 |
| | | List<T> lst = this.getHibernateTemplate().execute(new HibernateCallback<List<T>>() { |
| | | |
| | | @SuppressWarnings("unchecked") |
| | |
| | | Set<String> keySet = map.keySet(); |
| | | for (String string : keySet) { |
| | | Object obj = map.get(string); |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | if(obj instanceof Collection<?>){ |
| | | queryHql.setParameterList(string, (Collection<?>)obj); |
| | | }else if(obj instanceof Object[]){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果,列表数据为Map |
| | | * 根据hql查询,并返回执行类型的列表结果,列表数据为Map |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @return |
| | | */ |
| | | public List<Map<String,Object>> findListWithMapByHql(final String hql, final Map<String, Object> map) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果,列表数据为Map |
| | | * 根据hql查询,并返回执行类型的列表结果,列表数据为Map |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public List<Map<String,Object>> findListWithMapByHql(final String hql, final Map<String, Object> map,final Pager page) { |
| | | // 查询结果 |
| | | // 查询结果 |
| | | List<Map<String,Object>> lst = getHibernateTemplate().execute(new HibernateCallback<List<Map<String,Object>>>() { |
| | | public List<Map<String,Object>> doInHibernate(Session session) { |
| | | Query query = session.createQuery(hql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); |
| | |
| | | Set<String> keySet = map.keySet(); |
| | | for (String string : keySet) { |
| | | Object obj = map.get(string); |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | if(obj instanceof Collection<?>){ |
| | | query.setParameterList(string, (Collection<?>)obj); |
| | | }else if(obj instanceof Object[]){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回唯一一条结果 |
| | | * 根据hql查询,并返回唯一一条结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({RAW_TYPES }) |
| | | public <T> T findUniqueByComplexHql(final String hql, final Map<String, Object> map, Class<T> cls) { |
| | | // 查询结果 |
| | | // 查询结果 |
| | | List<T> lst = this.getHibernateTemplate().execute(new HibernateCallback<List<T>>() { |
| | | public List doInHibernate(Session session) { |
| | | Query query = session.createQuery(hql); |
| | |
| | | Set<String> keySet = map.keySet(); |
| | | for (String string : keySet) { |
| | | Object obj = map.get(string); |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | if(obj instanceof Collection<?>){ |
| | | query.setParameterList(string, (Collection<?>)obj); |
| | | }else if(obj instanceof Object[]){ |
| | |
| | | |
| | | |
| | | /** |
| | | * 根据Sql查询,并返回执行类型的列表结果 |
| | | * 根据Sql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public <T> List<T> findByComplexSql(final String sql, final Map<String, Object> map, Class<T> cls) { |
| | |
| | | |
| | | |
| | | /** |
| | | * 根据Sql查询,并返回执行类型的列表结果 |
| | | * 根据Sql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({RAW_TYPES, "unchecked" }) |
| | | public List<Object[]> findRawByComplexSql(final String sql, final Map<String, Object> map) { |
| | | // 查询结果 |
| | | // 查询结果 |
| | | return (List<Object[]>)this.getHibernateTemplate().execute(new HibernateCallback<List>() { |
| | | public List doInHibernate(Session session) { |
| | | SQLQuery query = session.createSQLQuery(sql); |
| | |
| | | Set<String> keySet = map.keySet(); |
| | | for (String string : keySet) { |
| | | Object obj = map.get(string); |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | if(obj instanceof Collection<?>){ |
| | | query.setParameterList(string, (Collection<?>)obj); |
| | | }else if(obj instanceof Object[]){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({RAW_TYPES }) |
| | | public <T> List<T> findByComplexHql(final String hql,final Pager page, final Map<String, Object> map, Class<T> cls) { |
| | | // 查询结果 |
| | | // 查询结果 |
| | | List lst = this.getHibernateTemplate().execute(new HibernateCallback<List>() { |
| | | public List doInHibernate(Session session) { |
| | | Query queryHql = session.createQuery(hql); |
| | |
| | | Set<String> keySet = map.keySet(); |
| | | for (String string : keySet) { |
| | | Object obj = map.get(string); |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | if(obj instanceof Collection<?>){ |
| | | queryHql.setParameterList(string, (Collection<?>)obj); |
| | | }else if(obj instanceof Object[]){ |
| | |
| | | |
| | | }); |
| | | |
| | | // 组装结果 |
| | | // 组装结果 |
| | | List<T> result = new ArrayList<T>(); |
| | | for (Object obj : lst) { |
| | | result.add(cls.cast(obj)); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据Sql查询,并返回执行类型的列表结果 |
| | | * 根据Sql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({RAW_TYPES }) |
| | | public <T> List<T> findByComplexSql(final String sql,final Pager page, final Map<String, Object> map, Class<T> cls) { |
| | | // 查询结果 |
| | | // 查询结果 |
| | | List lst = this.getHibernateTemplate().execute(new HibernateCallback<List>() { |
| | | public List doInHibernate(Session session) { |
| | | SQLQuery querySql = session.createSQLQuery(sql); |
| | |
| | | Set<String> keySet = map.keySet(); |
| | | for (String string : keySet) { |
| | | Object obj = map.get(string); |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | //这里考虑传入的参数是什么类型,不同类型使用的方法不同 |
| | | if(obj instanceof Collection<?>){ |
| | | querySql.setParameterList(string, (Collection<?>)obj); |
| | | }else if(obj instanceof Object[]){ |
| | |
| | | |
| | | }); |
| | | |
| | | // 组装结果 |
| | | // 组装结果 |
| | | List<T> result = new ArrayList<T>(); |
| | | for (Object obj : lst) { |
| | | result.add(cls.cast(obj)); |
| | |
| | | /****************************************************************************** |
| | | O * Copyright (C) 2014 Shenzhen Penguin Network Technology Co., Ltd |
| | | * All Rights Reserved. |
| | | * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | *****************************************************************************/ |
| | | |
| | | package com.qxueyou.scc.base.dao; |
| | |
| | | |
| | | @Repository(value="commonDao") |
| | | /** |
| | | * 通用DAO类 |
| | | * 通用DAO类 |
| | | * |
| | | * @author 夏德虎 |
| | | * @author 夏德虎 |
| | | * @since JDK1.7 |
| | | * @history 2014-11-18 夏德虎 新建 |
| | | * @history 2014-11-18 夏德虎 新建 |
| | | */ |
| | | public class CommonDAO extends BaseDAO{ |
| | | |
| | | /** |
| | | * 根据配置key查询value值 |
| | | * 根据配置key查询value值 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据字典类型查询字典内容的list |
| | | * 根据字典类型查询字典内容的list |
| | | * @param dicType |
| | | * @return |
| | | */ |
| | |
| | | import redis.clients.jedis.ShardedJedis; |
| | | |
| | | /*** |
| | | * redis常用操作类 |
| | | * redis常用操作类 |
| | | * |
| | | * @author kevin |
| | | * @date 2017-05-15 17:00 |
| | |
| | | jedisClient = reidsSharedPoolWrapper.getResource(); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("获取redisClient异常!"); |
| | | log.error("获取redisClient异常!"); |
| | | } |
| | | return jedisClient; |
| | | } |
| | |
| | | jedisClient.close(); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("关闭redis连接失败"); |
| | | log.error("关闭redis连接失败"); |
| | | } |
| | | } |
| | | |
| | |
| | | import redis.clients.jedis.ShardedJedis; |
| | | |
| | | /*** |
| | | * redis常用操作类 |
| | | * redis常用操作类 |
| | | * |
| | | * @author kevin |
| | | * @date 2017-05-15 17:00 |
| | |
| | | jedisClient = reidsSharedPoolWrapper.getResource(); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("获取redisClient异常!"); |
| | | log.error("获取redisClient异常!"); |
| | | } |
| | | return jedisClient; |
| | | } |
| | |
| | | jedisClient.close(); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("关闭redis连接失败"); |
| | | log.error("关闭redis连接失败"); |
| | | } |
| | | } |
| | | |
| | |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Inherited |
| | | public @interface QCacheCleaner { |
| | | //阀值(暂不用) |
| | | //阀值(暂不用) |
| | | public int threshold() default 0; |
| | | |
| | | //需要清理的keyTag |
| | | //需要清理的keyTag |
| | | public String clearBucket() default ""; |
| | | |
| | | //tag分割正则表达式 |
| | | //tag分割正则表达式 |
| | | public String bucketSplitReg() default ""; |
| | | } |
| | |
| | | |
| | | private static Pattern argPattern = Pattern.compile("\\$\\{arg([0-9])\\}"); |
| | | |
| | | //判断当前线程是否已经执行过目标方法的标志 |
| | | //判断当前线程是否已经执行过目标方法的标志 |
| | | private final ThreadLocal<Map<String, Object>> targetMethodResult = new ThreadLocal<Map<String, Object>>(); |
| | | |
| | | private Configuration cfg; |
| | | |
| | | /** 缓存 **/ |
| | | /** 缓存 **/ |
| | | @Autowired |
| | | ICacheService cache; |
| | | |
| | |
| | | |
| | | excuteMethodKey = this.getExecuteMethodKey(pjp); |
| | | |
| | | //读取缓存的注解 |
| | | //读取缓存的注解 |
| | | annoQCacheReader = AnnotationUtils.findAnnotation(methodSignature.getMethod(), QCacheReader.class); |
| | | //清理缓存注解 |
| | | //清理缓存注解 |
| | | annoQCacheCleaner = AnnotationUtils.findAnnotation(methodSignature.getMethod(), QCacheCleaner.class); |
| | | |
| | | if(annoQCacheReader!=null && annoQCacheCleaner==null){ |
| | |
| | | this.processReadCache(pjp, annoQCacheReader, methodSignature); |
| | | } |
| | | } catch (Exception e) { |
| | | logger.error("缓存处理失败,msg=" + e.getMessage(), e); |
| | | logger.error("缓存处理失败,msg=" + e.getMessage(), e); |
| | | } |
| | | |
| | | return clearAndReturnMethodResult(pjp,excuteMethodKey); |
| | |
| | | |
| | | strCacheKey = this.checkAndGenerateCacheKey(pjp.getTarget().getClass(), qCacheReader.cacheKey(), methodSignature, |
| | | converToParamMap(pjp.getArgs())); |
| | | //执行方法对应的key值 |
| | | //执行方法对应的key值 |
| | | String excuteMethodKey = this.getExecuteMethodKey(pjp); |
| | | |
| | | if (StringUtils.isNotEmpty(strCacheKey)) { |
| | |
| | | targetMethodResult.get().get(excuteMethodKey), expireTime); |
| | | } |
| | | }else{ |
| | | //如果result存在,则直接放入targetMethodResult中 |
| | | //如果result存在,则直接放入targetMethodResult中 |
| | | Map<String,Object> map = new HashMap<String,Object>(); |
| | | map.put(excuteMethodKey, result); |
| | | targetMethodResult.set(map); |
| | |
| | | executeTargetMethod(pjp,excuteMethodKey); |
| | | } |
| | | } catch (Throwable e) { |
| | | throw new Exception("添加缓存发生异常,strCacheKey=" + strCacheKey, e); |
| | | throw new Exception("添加缓存发生异常,strCacheKey=" + strCacheKey, e); |
| | | } |
| | | } |
| | | |
| | |
| | | for (int i = 0; i < strClearBucketArr.length; i++) { |
| | | strClearBucketArr[i] = CacheConstants.QXY_SERVICE_CACHE_NS.concat(strClearBucketArr[i]); |
| | | } |
| | | logger.info("清理的bucket:"+ArrayUtils.toString(strClearBucketArr)); |
| | | logger.info("清理的bucket:"+ArrayUtils.toString(strClearBucketArr)); |
| | | this.qCacheRedis.del(strClearBucketArr); |
| | | } |
| | | } catch (Throwable e) { |
| | | logger.error("清理缓存发生异常,strClearBucketArr" + ArrayUtils.toString(strClearBucketArr, ""), e); |
| | | logger.error("清理缓存发生异常,strClearBucketArr" + ArrayUtils.toString(strClearBucketArr, ""), e); |
| | | } |
| | | } |
| | | |
| | |
| | | String strNewKey = null; |
| | | |
| | | if (StringUtils.isNotEmpty(key)) { |
| | | logger.info("处理前的key:" + key); |
| | | logger.info("处理前的key:" + key); |
| | | |
| | | // 对部分参数进行替换处理 |
| | | // 对部分参数进行替换处理 |
| | | strNewKey = replaceArgInfo(key, paramMap); |
| | | // freeMarker解析cackeKey |
| | | // freeMarker解析cackeKey |
| | | strNewKey = parseCacheKey(strNewKey, targetClass, methodSignature, paramMap); |
| | | |
| | | logger.info("处理后的key:" + strNewKey); |
| | | logger.info("处理后的key:" + strNewKey); |
| | | if (strNewKey.length() > MAX_KEY_LENGTH) { |
| | | throw new Exception("Service缓存时Key过长,大于250个字符"); |
| | | throw new Exception("Service缓存时Key过长,大于250个字符"); |
| | | } |
| | | } |
| | | return strNewKey; |
| | |
| | | out.flush(); |
| | | return new String(stream.toByteArray(), "UTF-8"); |
| | | } catch (Exception e) { |
| | | logger.error("使用freemark解析cacheKey失败", e); |
| | | logger.error("使用freemark解析cacheKey失败", e); |
| | | throw e; |
| | | } finally { |
| | | IoUtils.closeQuietly(stream); |
| | |
| | | String strParamName = null; |
| | | Class<?> paramClz = null; |
| | | |
| | | logger.info("替换前的key:" + strCacheKey); |
| | | logger.info("替换前的key:" + strCacheKey); |
| | | if (StringUtils.isNotEmpty(strCacheKey) && paramMap != null && !paramMap.isEmpty()) { |
| | | matcher = argPattern.matcher(strCacheKey); |
| | | while (matcher.find()) { |
| | | strParamName = "arg" + matcher.group(1); |
| | | // 参数类型判断 |
| | | // 参数类型判断 |
| | | if (paramMap.containsKey(strParamName)) { |
| | | if(paramMap.get(strParamName)!=null){ |
| | | paramClz = paramMap.get(strParamName).getClass(); |
| | | if (paramClz.isAssignableFrom(java.lang.Object.class)) { |
| | | throw new Exception("错误:缓存参数类型不能是Object.class类型的对象"); |
| | | throw new Exception("错误:缓存参数类型不能是Object.class类型的对象"); |
| | | } else if (paramClz.isAssignableFrom(java.util.List.class) || paramClz.isArray()) { |
| | | matcher.appendReplacement(sbBuffer, "<#list " + strParamName + " as node>_${node}</#list>"); |
| | | } else if (paramClz.isAssignableFrom(java.util.Map.class)) { |
| | |
| | | } |
| | | } |
| | | } else { |
| | | throw new Exception("错误:参数表达式中存在不合法的参数"); |
| | | throw new Exception("错误:参数表达式中存在不合法的参数"); |
| | | } |
| | | } |
| | | matcher.appendTail(sbBuffer); |
| | | logger.info("替换后的key:" + sbBuffer.toString()); |
| | | logger.info("替换后的key:" + sbBuffer.toString()); |
| | | return sbBuffer.toString(); |
| | | }else{ |
| | | return strCacheKey; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 执行目标方法,只允许执行一次,并保存当前结果 |
| | | * 执行目标方法,只允许执行一次,并保存当前结果 |
| | | * @param pjp |
| | | * @param key |
| | | * @throws Throwable |
| | |
| | | if(StringUtils.isEmpty(excuteMethodKey)){ |
| | | excuteMethodKey = this.getExecuteMethodKey(pjp); |
| | | } |
| | | //是否需要判断是否是void方法 |
| | | //是否需要判断是否是void方法 |
| | | if(targetMethodResult.get()==null || !targetMethodResult.get().containsKey(excuteMethodKey)){ |
| | | Map<String,Object> map = new HashMap<String,Object>(); |
| | | map.put(excuteMethodKey, pjp.proceed()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 返回并清理ThreadLocal<Map<String, Object>>的MAP中的KEY |
| | | * 返回并清理ThreadLocal<Map<String, Object>>的MAP中的KEY |
| | | * @param pjp |
| | | * @param key |
| | | * @throws Throwable |
| | |
| | | if(StringUtils.isEmpty(excuteMethodKey)){ |
| | | excuteMethodKey = getExecuteMethodKey(pjp); |
| | | } |
| | | //是否需要判断是否是void方法(TODO) |
| | | //是否需要判断是否是void方法(TODO) |
| | | if(targetMethodResult.get()!=null && targetMethodResult.get().containsKey(excuteMethodKey)){ |
| | | result =targetMethodResult.get().get(excuteMethodKey); |
| | | targetMethodResult.get().remove(excuteMethodKey); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 返回当前目标方法的执行结果存储在ThreadLocal<Map<String, Object>>的MAP中的KEY |
| | | * 返回当前目标方法的执行结果存储在ThreadLocal<Map<String, Object>>的MAP中的KEY |
| | | * @param pjp |
| | | * @return key |
| | | */ |
| | |
| | | // } |
| | | // es.shutdown(); |
| | | // if(es.awaitTermination(1, java.util.concurrent.TimeUnit.HOURS)){ |
| | | // System.out.println("线程执行完成"); |
| | | // System.out.println("线程执行完成"); |
| | | // } |
| | | // long end = System.currentTimeMillis(); |
| | | // System.out.println(start-end); |
| | |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Inherited |
| | | public @interface QCacheReader { |
| | | //缓存时间单位枚举(秒,分,时) |
| | | //缓存时间单位枚举(秒,分,时) |
| | | public enum TimeUnit{SECOND,MINUTE,HOUR,DAY}; |
| | | |
| | | public enum ClearStrategy {KEY,TAG}; |
| | | |
| | | //缓存的KEY |
| | | //缓存的KEY |
| | | public String cacheKey(); |
| | | |
| | | //标签 方便多数据的清理 |
| | | //标签 方便多数据的清理 |
| | | public String bucket() default ""; |
| | | |
| | | //阀值(暂不用) |
| | | //阀值(暂不用) |
| | | public int threshold() default 0; |
| | | |
| | | //缓存时长 |
| | | //缓存时长 |
| | | public int cacheTime() default 60; |
| | | |
| | | //缓存时间单位(默认秒) |
| | | //缓存时间单位(默认秒) |
| | | public TimeUnit timeUnit() default TimeUnit.SECOND; |
| | | |
| | | } |
| | |
| | | // Object obj = ReisUtils.unserialize(client.hget(bucket.getBytes(), cachekey.getBytes())); |
| | | if(obj!=null){ |
| | | Map<String, Object> valueMap =(Map<String, Object>)obj; |
| | | //判断是否过期 |
| | | //判断是否过期 |
| | | if(checkIsExpire((Long)valueMap.get("expireTime"))){ |
| | | //删除键 |
| | | //删除键 |
| | | client.hdel(bucket.getBytes(), cachekey.getBytes()); |
| | | result = null; |
| | | }else{ |
| | |
| | | } |
| | | } |
| | | |
| | | /** 校验是否过期 */ |
| | | /** 校验是否过期 */ |
| | | private boolean checkIsExpire(long expireTime){ |
| | | //负数表示永不过期 |
| | | //负数表示永不过期 |
| | | if(expireTime>0){ |
| | | return new Date(expireTime).compareTo(Calendar.getInstance().getTime())==-1; |
| | | }else{ |
| | |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Inherited |
| | | public @interface QLog { |
| | | //日志类型枚举 SYS:系统,BUSINESS:业务 |
| | | //日志类型枚举 SYS:系统,BUSINESS:业务 |
| | | public enum LogType{SYS,BUSINESS}; |
| | | |
| | | //日志类型 |
| | | //日志类型 |
| | | public LogType type() default LogType.BUSINESS; |
| | | |
| | | //日志内容 |
| | | //日志内容 |
| | | public String content() default ""; |
| | | |
| | | //描述信息 |
| | | //描述信息 |
| | | public String desp() default ""; |
| | | |
| | | //模块 |
| | | //模块 |
| | | public String module() default ""; |
| | | |
| | | |
| | |
| | | strModule = parserSpel(qLog.module(), joinPoint); |
| | | qLogType = qLog.type(); |
| | | } |
| | | // 默认为参数相关信息 |
| | | // 默认为参数相关信息 |
| | | if (StringUtils.isEmpty(strContent)) { |
| | | strContent = createDefaultContentInfo(joinPoint, methodSignature); |
| | | } |
| | | // 默认为请求的URI信息 |
| | | // 默认为请求的URI信息 |
| | | if(StringUtils.isEmpty(strDesp) && request!=null){ |
| | | strDesp =request.getRequestURI(); |
| | | } |
| | | // 默认为:控制器模块注解value值+方法名 |
| | | // 默认为:控制器模块注解value值+方法名 |
| | | if (StringUtils.isEmpty(strModule)) { |
| | | strModule = createDefaultModuleInfo(joinPoint); |
| | | } |
| | |
| | | |
| | | this.saveLog(strContent, strDesp, strModule.toUpperCase(), sLogType, ip,userAgent); |
| | | } catch (Exception e) { |
| | | logger.error("记录action操作日志发生异常!,errMsg:" + e.getMessage(), e); |
| | | logger.error("记录action操作日志发生异常!,errMsg:" + e.getMessage(), e); |
| | | } |
| | | } |
| | | |
| | |
| | | MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); |
| | | ExpressionParser parser = new SpelExpressionParser(); |
| | | EvaluationContext ctx = new StandardEvaluationContext(); |
| | | // 设置变量 |
| | | // 设置变量 |
| | | if (joinPoint.getArgs() != null && joinPoint.getArgs().length > 0) { |
| | | for (int i = 0; i < joinPoint.getArgs().length; i++) { |
| | | if (joinPoint.getArgs()[i] != null && this.checkParam(joinPoint.getArgs()[i].getClass())) { |
| | |
| | | import org.springframework.web.servlet.ModelAndView; |
| | | |
| | | /** |
| | | * Spring MVC 异常处理类 |
| | | * @author 德虎 |
| | | * Spring MVC 异常处理类 |
| | | * @author 德虎 |
| | | * |
| | | */ |
| | | @ControllerAdvice |
| | |
| | | throws Exception { |
| | | |
| | | long exepCode = System.currentTimeMillis(); |
| | | log.error(req.getRequestURL() + ",诊断代码:" + exepCode + ":" + e.getMessage(), e); |
| | | log.error(req.getRequestURL() + ",诊断代码:" + exepCode + ":" + e.getMessage(), e); |
| | | |
| | | if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) { |
| | | throw e; |
| | |
| | | package com.qxueyou.scc.base.model; |
| | | |
| | | /** |
| | | * api专用返回结果model |
| | | * api专用返回结果model |
| | | * @author cyq |
| | | * |
| | | */ |
| | | public class ApiResult { |
| | | |
| | | /** |
| | | * 返回结果的枚举 |
| | | * 返回结果的枚举 |
| | | * @author cyq |
| | | * |
| | | */ |
| | | public enum ResultCode { |
| | | Success(1), // 成功 |
| | | UserNotExist(40001), // 用户不存在 |
| | | PasswordInvalid(40002), // 密码不正确 |
| | | TokenInvalid(50001), // Token无效 |
| | | ParamInvalid(60001), // 参数无效 |
| | | SystemException(60002), // 系统异常 |
| | | DataNotExist(60003); // 数据不存在 |
| | | Success(1), // 成功 |
| | | UserNotExist(40001), // 用户不存在 |
| | | PasswordInvalid(40002), // 密码不正确 |
| | | TokenInvalid(50001), // Token无效 |
| | | ParamInvalid(60001), // 参数无效 |
| | | SystemException(60002), // 系统异常 |
| | | DataNotExist(60003); // 数据不存在 |
| | | |
| | | private Integer resultCode; |
| | | |
| | |
| | | private boolean result; |
| | | |
| | | /** |
| | | * 40001用户不存在 |
| | | * 40002密码错误 |
| | | * 50001token无效 |
| | | * 60001参数错误 |
| | | * 60001系统异常 |
| | | * 60003数据不存在 |
| | | * 40001用户不存在 |
| | | * 40002密码错误 |
| | | * 50001token无效 |
| | | * 60001参数错误 |
| | | * 60001系统异常 |
| | | * 60003数据不存在 |
| | | */ |
| | | private int code = 1; |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 缓存常量实体类 |
| | | * 缓存常量实体类 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | | public class CacheConstants { |
| | | /** 业务缓存模块,通过模块删除对应的key |
| | | * 1.app机构介绍 |
| | | /** 业务缓存模块,通过模块删除对应的key |
| | | * 1.app机构介绍 |
| | | * 2. |
| | | * */ |
| | | public static final int CACHE_MODULE_H5_ORG_INFO = 1 ; |
| | | |
| | | /** 手机短信最小间隔时间-缓存前缀 */ |
| | | /** 手机短信最小间隔时间-缓存前缀 */ |
| | | public static final String SMS_MB_MIN_INTERVAL_PREFIX = "SMS_MB_MIN_INTERVAL_"; |
| | | |
| | | /** 手机短信最小间隔时间-缓存时间 */ |
| | | /** 手机短信最小间隔时间-缓存时间 */ |
| | | public static final Integer SMS_MB_MIN_INTERVAL_CACHE_TIME = 60; |
| | | |
| | | /** 手机、IP短信最小间隔时间-缓存时间 */ |
| | | /** 手机、IP短信最小间隔时间-缓存时间 */ |
| | | public static final Integer SMS_MB_IP_DAY_MAX_CACHE_TIME = 24 * 60 * 60 ; |
| | | |
| | | /** 手机短信同一天最多次数-缓存前缀 */ |
| | | /** 手机短信同一天最多次数-缓存前缀 */ |
| | | public static final String SMS_MB_DAY_MAX_PREFIX = "SMS_MB_DAY_MAX_"; |
| | | |
| | | /** 缓存当天发送短信次数 */ |
| | | /** 缓存当天发送短信次数 */ |
| | | public static final String SMS_DAY_NUM = "SMS_DAY_NUM_"; |
| | | |
| | | /** 手机短信同一天最多次数-最大次数 */ |
| | | /** 手机短信同一天最多次数-最大次数 */ |
| | | public static final Integer SMS_MB_DAY_MAX_TIME = 15; |
| | | |
| | | /** IP短信同一天最多次数 -缓存前缀*/ |
| | | /** IP短信同一天最多次数 -缓存前缀*/ |
| | | public static final String SMS_IP_DAY_MAX_PREFIX = "SMS_IP_DAY_MAX_"; |
| | | |
| | | /** IP短信同一天最多次数-最大次数 */ |
| | | /** IP短信同一天最多次数-最大次数 */ |
| | | public static final Integer SMS_IP_DAY_MAX_TIME = 20; |
| | | |
| | | /** 机构层级删除缓存orgIds 缓存前缀 */ |
| | | /** 机构层级删除缓存orgIds 缓存前缀 */ |
| | | public static final String ORG_DELETE_ORGIDS_PREFIX = "ORG_DEL_ORG_IDS_"; |
| | | |
| | | /** 机构层级删除缓存classIds 缓存前缀 */ |
| | | /** 机构层级删除缓存classIds 缓存前缀 */ |
| | | public static final String ORG_DELETE_CLASSIDS_PREFIX = "ORG_DEL_CLS_IDS_"; |
| | | |
| | | /** 机构层级删除缓存classIds 缓存时间 3小时 */ |
| | | /** 机构层级删除缓存classIds 缓存时间 3小时 */ |
| | | public static final Integer ORG_DELETE_ORG_CLASS_IDS_TIME = 60 * 60 * 3; |
| | | |
| | | /** 用户唯一编码:数字水印 */ |
| | | /** 用户唯一编码:数字水印 */ |
| | | public static final String USER_UNIQUE_CODE_PREFIX = "USER_UNIQUE_CODE_MAIN_WEB"; |
| | | |
| | | /** 用户唯一编码:数字水印 */ |
| | | /** 用户唯一编码:数字水印 */ |
| | | public static final Integer USER_UNIQUE_CODE_MAX_TIME = 60 * 60 * 24 ; |
| | | |
| | | /** 抽奖间隔缓存前缀 */ |
| | | /** 抽奖间隔缓存前缀 */ |
| | | public static final String LOTTERY_MAX_INTERNAL_PREFIX = "LOTTERY_MAX_INTERNAL_PREFIX_ID_"; |
| | | |
| | | /** 抽奖间隔缓存时间 */ |
| | | /** 抽奖间隔缓存时间 */ |
| | | public static final Integer LOTTERY_MAX_INTERNAL_TIME = 5 ; |
| | | |
| | | /** 流量班级对应机构ID */ |
| | | /** 流量班级对应机构ID */ |
| | | public static final String FLOW_CLASS_ORG_ID_PREFIX = "FLOW_CLASS_ORG_ID_"; |
| | | |
| | | /** 流量班级对应顶层机构ID */ |
| | | /** 流量班级对应顶层机构ID */ |
| | | public static final String FLOW_ORG_TOP_ORG_ID_PREFIX = "FLOW_ORG_TOP_ORG_ID_"; |
| | | |
| | | /** 流量班级对应机构层级编码 */ |
| | | /** 流量班级对应机构层级编码 */ |
| | | public static final String FLOW_ORG_CODE_ORG_ID_PREFIX = "FLOW_ORG_CODE_ORG_ID_"; |
| | | |
| | | /** 流量班级对应顶层机构ID */ |
| | | /** 流量班级对应顶层机构ID */ |
| | | public static final String FLOW_ORG_CLASS_ID_PREFIX = "FLOW_ORG_CLASS_ID_"; |
| | | |
| | | /** 流量班级对应视频名 */ |
| | | /** 流量班级对应视频名 */ |
| | | public static final String FLOW_ORG_VIDEO_NAME_PREFIX = "FLOW_ORG_VIDEO_NAME_"; |
| | | |
| | | /** 流量班级对应直播名 */ |
| | | /** 流量班级对应直播名 */ |
| | | public static final String FLOW_ORG_LIVE_NAME_PREFIX = "FLOW_ORG_LIVE_NAME_"; |
| | | |
| | | /** 流量班级对应顶层机构、机构ID缓存时间 5min */ |
| | | /** 流量班级对应顶层机构、机构ID缓存时间 5min */ |
| | | public static final Integer FLOW_CLASS_TOP_ORG_ID_TIME = 60 * 5 ; |
| | | |
| | | /** 机构人民币账户是否合法 */ |
| | | /** 机构人民币账户是否合法 */ |
| | | public static final String FLOW_ORG_RMB_ACCOUNT_VALIDATE_PREFIX = "FLOW_ORG_RMB_ACCOUNT_VALIDATE_ORG_ID_"; |
| | | |
| | | /** 流量班级对应顶层机构、机构ID缓存时间 1 HOUR */ |
| | | /** 流量班级对应顶层机构、机构ID缓存时间 1 HOUR */ |
| | | public static final Integer FLOW_ORG_RMB_ACCOUNT_VALIDATE_TIME = 60 * 60 ; |
| | | |
| | | /** 激活学员:缓存班级key前缀 */ |
| | | /** 激活学员:缓存班级key前缀 */ |
| | | public static final String USER_REG_ACT_CLASS= "USER_REG_ACT_CLASS_INFO"; |
| | | |
| | | /** 激活学员:缓存班级 */ |
| | | /** 激活学员:缓存班级 */ |
| | | public static final Integer USER_REG_ACT_CLASS_MAX_TIME = 60 * 60 * 1 ; |
| | | |
| | | /** 基础数据缓存:地址省 */ |
| | | /** 基础数据缓存:地址省 */ |
| | | public static final String BASE_DATA_PROVICE_PREFIX = "BASE_DATA_PROVICE_PREFIX"; |
| | | |
| | | /** 基础数据缓存:地址市 */ |
| | | /** 基础数据缓存:地址市 */ |
| | | public static final String BASE_DATA_CITY_PREFIX = "BASE_DATA_CITY_"; |
| | | |
| | | /** 基础数据缓存:非高校公共科目 */ |
| | | /** 基础数据缓存:非高校公共科目 */ |
| | | public static final String BASE_DATA_COURSE_CATEGORY_PREFIX = "BASE_DATA_COURSE_CATEGORY_"; |
| | | |
| | | /** 基础数据缓存:非高校公共科目(直播慧眼端) */ |
| | | /** 基础数据缓存:非高校公共科目(直播慧眼端) */ |
| | | public static final String BASE_DATA_COURSE_CATEGORY_LIVE_PREFIX = "BASE_DATA_COURSE_CATEGORY_LIVE_"; |
| | | |
| | | /** 基础数据缓存时长:一天 */ |
| | | /** 基础数据缓存时长:一天 */ |
| | | public static final Integer BASE_DATA_TIME = 60 * 60 * 24 ; |
| | | |
| | | /** 业务数据缓存:机构介绍(App接口) */ |
| | | /** 业务数据缓存:机构介绍(App接口) */ |
| | | public static final String BUSINESS_DATA_ORG_INFO_PREFIX = "BUSINESS_DATA_ORG_INFO_PREFIX_"; |
| | | |
| | | /** 业务数据缓存时长:一小时 */ |
| | | /** 业务数据缓存时长:一小时 */ |
| | | public static final Integer BUSINESS_DATA_TIME = 60 * 60 ; |
| | | |
| | | /** 签到:缓存签到主表前缀 */ |
| | | /** 签到:缓存签到主表前缀 */ |
| | | public static final String SCH_SIGN_ID_PREFIX = "SCH_SIGN_ID_"; |
| | | |
| | | /** 签到:缓存签到时长 , 10min */ |
| | | /** 签到:缓存签到时长 , 10min */ |
| | | public static final Integer SCH_SIGN_ID_TIME = 60 * 10 ; |
| | | |
| | | /** 签到:缓存签到第一页明细前缀 */ |
| | | /** 签到:缓存签到第一页明细前缀 */ |
| | | public static final String SCH_SIGN_STATISTICS_FIRST_PAGE_PREFIX = "SCH_SIGN_STATISTICS_FIRST_PAGE_"; |
| | | |
| | | /** 签到:缓存签到第一页明细时长 , 10min */ |
| | | /** 签到:缓存签到第一页明细时长 , 10min */ |
| | | public static final Integer SCH_SIGN_STATISTICS_FIRST_PAGE_TIME = 60 * 10 ; |
| | | |
| | | /** 签到:缓存签到活动主表前缀 */ |
| | | /** 签到:缓存签到活动主表前缀 */ |
| | | public static final String SCH_SIGN_ACTIVITY_PREFIX = "SCH_SIGN_ACTIVITY_"; |
| | | |
| | | /** 签到:缓存签到活动时长 , 10min */ |
| | | /** 签到:缓存签到活动时长 , 10min */ |
| | | public static final Integer SCH_SIGN_ACTIVITY_TIME = 60 * 10 ; |
| | | |
| | | /** 签到:缓存签到机构前缀 */ |
| | | /** 签到:缓存签到机构前缀 */ |
| | | public static final String SCH_SIGN_ORG_PREFIX = "SCH_SIGN_ORG_"; |
| | | |
| | | /** 签到:缓存签到机构时长 , 10min */ |
| | | /** 签到:缓存签到机构时长 , 10min */ |
| | | public static final Integer SCH_SIGN_ORG_TIME = 60 * 10 ; |
| | | |
| | | /** 签到:缓存签到活动第一页明细前缀 */ |
| | | /** 签到:缓存签到活动第一页明细前缀 */ |
| | | public static final String SCH_SIGN_STATISTICS_FIRST_ACTPAGE_PREFIX = "SCH_SIGN_STATISTICS_FIRST_PAGE_"; |
| | | |
| | | /** 签到:缓存签到活动第一页明细时长 , 10min */ |
| | | /** 签到:缓存签到活动第一页明细时长 , 10min */ |
| | | public static final Integer SCH_SIGN_STATISTICS_FIRST_ACTPAGE_TIME = 60 * 10 ; |
| | | |
| | | /** 获取地址:调用百度IP缓存Key:已达当日最大上限 */ |
| | | /** 获取地址:调用百度IP缓存Key:已达当日最大上限 */ |
| | | public static final String USER_OPERATE_LAT_LNG_MAX = "USER_OPERATE_IP_LAT_LNG_MAX_NUM"; |
| | | |
| | | /** 获取地址:调用百度IP缓存Key:获取地址失败 */ |
| | | /** 获取地址:调用百度IP缓存Key:获取地址失败 */ |
| | | public static final String USER_OPERATE_LAT_LNG_FAIL = "USER_OPERATE_IP_LAT_LNG_FAIL_"; |
| | | |
| | | /** 签到:缓存签到活动第一页明细时长 , 24小时 */ |
| | | /** 签到:缓存签到活动第一页明细时长 , 24小时 */ |
| | | public static final Integer USER_OPERATE_LAT_LNG_TIME = 60 * 60 * 24 ; |
| | | |
| | | /** 配置项:配置项缓存前缀 */ |
| | | /** 配置项:配置项缓存前缀 */ |
| | | public static final String QXY_SYSCONFIG_CACHE_PREFIX = "QXY_SYSCONFIG_CACHE_"; |
| | | |
| | | /** 积分上限配置项时长 */ |
| | | /** 积分上限配置项时长 */ |
| | | public static final Integer QXY_SYSCONFIG_SCORE_CACHE_TIME = 60 * 60 ; |
| | | |
| | | /** 个人当日积分缓存前缀 */ |
| | | /** 个人当日积分缓存前缀 */ |
| | | public static final String QXY_DAY_SCORE_RECORD_PREFIX = "QXY_DAY_SCORE_RECORD_"; |
| | | |
| | | /** 个人当日积分缓存时长 */ |
| | | /** 个人当日积分缓存时长 */ |
| | | public static final Integer QXY_DAY_SCORE_RECORD_TIME = 60 * 60 * 24 ; |
| | | |
| | | /** 个人当日登录积分前缀 */ |
| | | /** 个人当日登录积分前缀 */ |
| | | public static final String QXY_DAY_LOGIN_SCORE_RECORD_PREFIX = "QXY_DAY_LOGIN_SCORE_RECORD_"; |
| | | |
| | | /** 个人当日登录积分缓存时长 */ |
| | | /** 个人当日登录积分缓存时长 */ |
| | | public static final Integer QXY_DAY_LOGIN_SCORE_RECORD_TIME = 60 * 60 * 24 ; |
| | | |
| | | /** 个人当日签到积分前缀 */ |
| | | /** 个人当日签到积分前缀 */ |
| | | public static final String QXY_DAY_SIGN_SCORE_RECORD_PREFIX = "QXY_DAY_SIGN_SCORE_RECORD_"; |
| | | |
| | | /** 个人当日签到积分缓存时长 */ |
| | | /** 个人当日签到积分缓存时长 */ |
| | | public static final Integer QXY_DAY_SIGN_SCORE_RECORD_TIME = 60 * 60 * 24 ; |
| | | |
| | | |
| | | /** app首页:推荐讲义缓存前缀 */ |
| | | /** app首页:推荐讲义缓存前缀 */ |
| | | public static final String APP_INDEX_HANDOUT_RECOMMEND_PREFIX = "APP_INDEX_HANDOUT_RECOMMEND_CLASSID_"; |
| | | |
| | | /** app首页:推荐视频缓存前缀 */ |
| | | /** app首页:推荐视频缓存前缀 */ |
| | | public static final String APP_INDEX_VIDEO_RECOMMEND_PREFIX = "APP_INDEX_VIDEO_RECOMMEND_CLASSID_"; |
| | | |
| | | /** app首页:推荐直播缓存前缀 */ |
| | | /** app首页:推荐直播缓存前缀 */ |
| | | public static final String APP_INDEX_LIVE_RECOMMEND_PREFIX = "APP_INDEX_LIVE_RECOMMEND_CLASSID_"; |
| | | |
| | | /** app首页:推荐讲义、直播及直播缓存时间 一天 */ |
| | | /** app首页:推荐讲义、直播及直播缓存时间 一天 */ |
| | | public static final Integer APP_INDEX_CONTENT_RECOMMEND_PREFIX = 60 * 60 * 24 ; |
| | | |
| | | /** ping++ 消息处理错误次数缓存前缀 */ |
| | | /** ping++ 消息处理错误次数缓存前缀 */ |
| | | public static final String PINGPP_MQ_EXCEPTION_COUNT_PREFIX = "PINGPP_MQ_EXCEPTION_COUNT_" ; |
| | | |
| | | /** ping++ 消息处理错误次数缓存时间*/ |
| | | /** ping++ 消息处理错误次数缓存时间*/ |
| | | public static final Integer PINGPP_MQ_EXCEPTION_COUNT_TIME = 60 * 60 ; |
| | | |
| | | /** 订单防止重复执行 缓存前缀 */ |
| | | /** 订单防止重复执行 缓存前缀 */ |
| | | public static final String GLOBAL_TRANS_ORDER_ID_PREFIX = "GLOBAL_TRANS_ORDER_ID_" ; |
| | | |
| | | /** 订单防止重复执行 缓存时间*/ |
| | | /** 订单防止重复执行 缓存时间*/ |
| | | public static final Integer GLOBAL_TRANS_ORDER_ID_TIME = 60 ; |
| | | |
| | | /** 服务层缓存空间 缓存前缀*/ |
| | | /** 服务层缓存空间 缓存前缀*/ |
| | | public static final String QXY_SERVICE_CACHE_NS ="QXU_SERVICE_CACHE_NS_"; |
| | | |
| | | } |
| | |
| | | import com.qxueyou.scc.base.util.CollectionUtils; |
| | | |
| | | /** |
| | | * 常量实体类 |
| | | * 常量实体类 |
| | | * @author zhiyong |
| | | * |
| | | */ |
| | | public class Constants { |
| | | /** 实体类 */ |
| | | /** 实体类 */ |
| | | |
| | | /** int型常量 */ |
| | | /** int型常量 */ |
| | | public static final int INT_0 = 0; |
| | | |
| | | public static final int INT_1 = 1; |
| | | |
| | | /**定时发送消息类型 :1、修改班级进度*/ |
| | | /**定时发送消息类型 :1、修改班级进度*/ |
| | | public static final String MSG_TYPE_CLASS_PROGRESS = "progress"; |
| | | |
| | | /** 虚拟一个 错题 收藏本的groupId */ |
| | | /** 虚拟一个 错题 收藏本的groupId */ |
| | | public static final String EXERCISE_FAULT_GROUP_ID="faultExercise001"; |
| | | |
| | | public static final String EXERCISE_FAVOR_GROUP_ID="favorExercise001"; |
| | | |
| | | /** 错题 收藏本类型 */ |
| | | /** 错题 收藏本类型 */ |
| | | public static final String EXERCISE_TYPE_FAULT="fault"; |
| | | |
| | | public static final String EXERCISE_TYPE_FAVORT="favor"; |
| | |
| | | /** android app versionCODE */ |
| | | public static final String CONFIG_ANDROID_APP_VERSION_CODE="appVersionCode"; |
| | | |
| | | /**下载路径 */ |
| | | /**下载路径 */ |
| | | public static final String CONFIG_ANDROID_APP_DOWNLOAD_URL="appVersionDownloadUrl"; |
| | | |
| | | /** android app version tips*/ |
| | |
| | | /** score day max limit */ |
| | | public static final String CONFIG_QXY_SCORE_DYA_LIMIT = "scoreDayLimit"; |
| | | |
| | | /** 游客班级id */ |
| | | /** 游客班级id */ |
| | | public static final String VISITOR_CLASS_ID="1"; |
| | | |
| | | /** 游客用户id */ |
| | | /** 游客用户id */ |
| | | public static final String VISITOR_USER_ID="visitor_001"; |
| | | |
| | | /** 游客手机号 */ |
| | | /** 游客手机号 */ |
| | | public static final String VISITOR_USER_PHONE="0000"; |
| | | |
| | | /** 选课报名 不限值 */ |
| | | /** 选课报名 不限值 */ |
| | | public static final String NOT_LIMIT_VALUE="00"; |
| | | |
| | | /** 报名码 */ |
| | | /** 报名码 */ |
| | | public static final String USER_SALES_CODE="qxueyou"; |
| | | |
| | | /** 报名码来源微信 */ |
| | | /** 报名码来源微信 */ |
| | | public static final String USER_SALES_CODE_WEIXIN="qxueyou_weixin"; |
| | | |
| | | /** 签到码时效性是否开启 */ |
| | | /** 签到码时效性是否开启 */ |
| | | public static final boolean SIGN_CODE_VALIDATE_FLAG = false; |
| | | |
| | | /** boolean:false */ |
| | |
| | | /** boolean:true */ |
| | | public static final boolean BOOLEAN_FLAG_TRUE = true; |
| | | |
| | | /** 签到码时效性开启时的具体值,前后几天 */ |
| | | /** 签到码时效性开启时的具体值,前后几天 */ |
| | | public static final Integer SIGN_CODE_VALIDATE_VALUE = 1; |
| | | |
| | | /** 文档处理URL */ |
| | | /** 文档处理URL */ |
| | | public static final String CONFIG_DOC_DEAL_URL = "docdealUrl"; |
| | | |
| | | /** 积分,QXUEYOU积分账户userId */ |
| | | /** 积分,QXUEYOU积分账户userId */ |
| | | public static final String COMMON_TRASACT_USER_ID = "admin.qie"; |
| | | |
| | | /** Q学友机构编码 */ |
| | | /** Q学友机构编码 */ |
| | | public static final String QXUEYOU_ORG_CODE = "QIE"; |
| | | |
| | | /** 登录有效获取积分额度 */ |
| | | /** 登录有效获取积分额度 */ |
| | | public static final BigDecimal SCORE_LOGIN_VALUE = BigDecimal.ONE; |
| | | |
| | | /** 习题纠错有效获取积分额度 */ |
| | | /** 习题纠错有效获取积分额度 */ |
| | | public static final BigDecimal SCORE_EXE_CORRECTION_VALUE = new BigDecimal("2"); |
| | | |
| | | /** 习题纠错被处理有效获取积分额度 */ |
| | | /** 习题纠错被处理有效获取积分额度 */ |
| | | public static final BigDecimal SCORE_EXECORREC_DEAL_VALUE = new BigDecimal("3"); |
| | | |
| | | /** APP签到有效获取积分额度 */ |
| | | /** APP签到有效获取积分额度 */ |
| | | public static final BigDecimal SCORE_SIGN_VALUE = new BigDecimal("4"); |
| | | |
| | | /** 评论有效获取积分额度 */ |
| | | /** 评论有效获取积分额度 */ |
| | | public static final BigDecimal SCORE_COMMENT_VALUE = new BigDecimal("2"); |
| | | |
| | | /** 赞评论有效获取积分额度 */ |
| | | /** 赞评论有效获取积分额度 */ |
| | | public static final BigDecimal SCORE_COMMENT_PRAISE_VALUE = BigDecimal.ONE; |
| | | |
| | | /** 评论被赞有效获取积分额度 */ |
| | | /** 评论被赞有效获取积分额度 */ |
| | | public static final BigDecimal SCORE_COMMENT_PRAISED_VALUE = BigDecimal.ONE; |
| | | |
| | | /**发布问题有效获取积分额度*/ |
| | | /**发布问题有效获取积分额度*/ |
| | | public static final BigDecimal SCORE_QA_NEWQUESTION_VALUE = new BigDecimal("2"); |
| | | |
| | | /**回答问题有效获取积分额度*/ |
| | | /**回答问题有效获取积分额度*/ |
| | | public static final BigDecimal SCORE_QA_ANSWER_VALUE = new BigDecimal("2"); |
| | | |
| | | /**点赞问题或答案或人有效获取积分额度*/ |
| | | /**点赞问题或答案或人有效获取积分额度*/ |
| | | public static final BigDecimal SCORE_QA_PRAISE_VALUE = BigDecimal.ONE; |
| | | |
| | | /**被点赞问题或答案或人有效获取积分额度*/ |
| | | /**被点赞问题或答案或人有效获取积分额度*/ |
| | | public static final BigDecimal SCORE_QA_PRAISED_VALUE = new BigDecimal("2"); |
| | | |
| | | /**分享问题或答案或人有效获取积分额度*/ |
| | | /**分享问题或答案或人有效获取积分额度*/ |
| | | public static final BigDecimal SCORE_QA_SHARE_VALUE = new BigDecimal("5"); |
| | | |
| | | /**被分享问题或答案或人有效获取积分额度*/ |
| | | /**被分享问题或答案或人有效获取积分额度*/ |
| | | public static final BigDecimal SCORE_QA_SHARED_VALUE = new BigDecimal("2"); |
| | | |
| | | /**回复答案有效获取积分额度*/ |
| | | /**回复答案有效获取积分额度*/ |
| | | public static final BigDecimal SCORE_QA_REPLY_VALUE = BigDecimal.ONE; |
| | | |
| | | /**被回复答案有效获取积分额度*/ |
| | | /**被回复答案有效获取积分额度*/ |
| | | public static final BigDecimal SCORE_QA_REPLYED_VALUE = BigDecimal.ONE; |
| | | |
| | | /** 刷新统计缓存键值 :根据groupId 统计按钮的统计 */ |
| | | /** 刷新统计缓存键值 :根据groupId 统计按钮的统计 */ |
| | | public static final String REFRESH_STATIS_GROUPID_CACHE_KEY = "refresh_statis_groupid_cache_key"; |
| | | |
| | | /** 刷新统计缓存键值 :根据groupId 学员提交数据的统计 */ |
| | | /** 刷新统计缓存键值 :根据groupId 学员提交数据的统计 */ |
| | | public static final String REFRESH_STATIS_GROUPID_LSTNEWANSWERU_CACHE_KEY = "refresh_statis_groupid_lstnewansweru_cache_key"; |
| | | |
| | | /** 刷新统计练习组班级正确率缓存键值*/ |
| | | /** 刷新统计练习组班级正确率缓存键值*/ |
| | | public static final String EXER_GROUP_ACCURACY_CACHE_KEY = "exer_group_accuracy_cache_key"; |
| | | |
| | | /** 刷新统计练习统计分析结果缓存键值*/ |
| | | /** 刷新统计练习统计分析结果缓存键值*/ |
| | | public static final String EXER_ITEM_STATISTICAL_CACHE_KEY = "exer_item_statistical_cache_key"; |
| | | |
| | | /** 后台登录:获取菜单缓存 */ |
| | | /** 后台登录:获取菜单缓存 */ |
| | | public static final String WEB_LOGIN_MENU_CACHE_KEY = "web_login_menu_cache_key"; |
| | | |
| | | /** 系统app自定义菜单基础数据 :获取菜单缓存 */ |
| | | /** 系统app自定义菜单基础数据 :获取菜单缓存 */ |
| | | public static final String SYS_APP_COMMON_MENU_CACHE_KEY = "sys_app_common_menu_cache_key"; |
| | | |
| | | /** 后台登录:获取用户菜单缓存 */ |
| | | /** 后台登录:获取用户菜单缓存 */ |
| | | public static final String WEB_USER_MENU_CACHE_KEY = "web_user_menu_cache_key"; |
| | | |
| | | /** 团购课程值*/ |
| | | /** 团购课程值*/ |
| | | public static final String PURCHASE_COURSE = "purchase_course"; |
| | | |
| | | /** 课程表背景颜色 透明度 */ |
| | | /** 课程表背景颜色 透明度 */ |
| | | public static final String SCHEDULE_COLOR_TRANSPARENT = "255"; |
| | | |
| | | /** 练习来源(1:练习题库 2:考试题库 3:家庭作业) */ |
| | | /** 练习来源(1:练习题库 2:考试题库 3:家庭作业) */ |
| | | public static final String EXERCISE_SOURCE_EXERICSE = "1"; |
| | | |
| | | public static final String EXERCISE_SOURCE_EXAMS = "2"; |
| | | |
| | | public static final String EXERCISE_SOURCE_HOMEWORK = "3"; |
| | | |
| | | /** 做题方式(1:未做题优先 2:错题优先) */ |
| | | /** 做题方式(1:未做题优先 2:错题优先) */ |
| | | public static final String EXERCISE_STRATEGY_NO_DO = "1"; |
| | | |
| | | public static final String EXERCISE_STRATEGY_FAULT = "2"; |
| | | |
| | | /** 问答排名CACHE key */ |
| | | /** 问答排名CACHE key */ |
| | | public static final String QA_HOT_RANK_CACHE_KEY="qa_hot_rank_cache_key"; |
| | | |
| | | /** 百度推广报名码 */ |
| | | /** 百度推广报名码 */ |
| | | public static final String USER_SALES_CODE_BAIDU="qxy_groupbuy_baidu"; |
| | | |
| | | |
| | | /** 注册service */ |
| | | /** 注册service */ |
| | | |
| | | /** 学生 */ |
| | | /** 学生 */ |
| | | public static final String REG_ROLE_STUDENT="student"; |
| | | |
| | | /** 班主任 */ |
| | | /** 班主任 */ |
| | | public static final String REG_ROLE_CHARGER="charger"; |
| | | |
| | | /** 讲师 */ |
| | | /** 讲师 */ |
| | | public static final String REG_ROLE_TEACHER="teacher"; |
| | | |
| | | /** 销售人员*/ |
| | | /** 销售人员*/ |
| | | public static final String REG_ROLE_SALESMAN="salesman"; |
| | | |
| | | /** 管理员*/ |
| | | /** 管理员*/ |
| | | public static final String REG_ROLE_ADMIN="admin"; |
| | | |
| | | /** 游客 */ |
| | | /** 游客 */ |
| | | public static final String REG_ROLE_VISITOR="visitor"; |
| | | |
| | | /** 后台 */ |
| | | /** 后台 */ |
| | | public static final String REG_TYPE_BACKSTAGE="backstage"; |
| | | |
| | | /** 微信*/ |
| | | /** 微信*/ |
| | | public static final String REG_TYPE_WEIXIN="weixin"; |
| | | |
| | | /** APP */ |
| | | public static final String REG_TYPE_APP="app"; |
| | | |
| | | /** 网页端(课程超市) */ |
| | | /** 网页端(课程超市) */ |
| | | public static final String REG_TYPE_WEB="web"; |
| | | |
| | | /** sdk */ |
| | | public static final String REG_TYPE_SDK="sdk"; |
| | | |
| | | /** 内容分享 、课程分享、直播互动*/ |
| | | /** 内容分享 、课程分享、直播互动*/ |
| | | public static final String REG_TYPE_CONTENT_SHARE="content_share"; |
| | | |
| | | /** 增加学员*/ |
| | | /** 增加学员*/ |
| | | public static final String REG_MODE_ADD="add"; |
| | | |
| | | /** 激活*/ |
| | | /** 激活*/ |
| | | public static final String REG_MODE_ACTIVATION="activation"; |
| | | |
| | | /** 冻结*/ |
| | | /** 冻结*/ |
| | | public static final String REG_MODE_FROZEN="frozen"; |
| | | |
| | | /** 授权 */ |
| | | /** 授权 */ |
| | | public static final String REG_MODE_AUTHOR="author"; |
| | | |
| | | /** 报名 */ |
| | | /** 报名 */ |
| | | public static final String REG_MODE_SIGNUP="signup"; |
| | | |
| | | /** 注册*/ |
| | | /** 注册*/ |
| | | public static final String REG_MODE_REGIST="regist"; |
| | | |
| | | /** 生成用户*/ |
| | | /** 生成用户*/ |
| | | public static final String REG_MODE_GENERATE="generate"; |
| | | |
| | | /** 编辑用户*/ |
| | | /** 编辑用户*/ |
| | | public static final String REG_MODE_EDIT="edit"; |
| | | |
| | | /** 加入班级(活动)*/ |
| | | /** 加入班级(活动)*/ |
| | | public static final String REG_MODE_JOIN="join"; |
| | | |
| | | /** IMEI加入班级*/ |
| | | /** IMEI加入班级*/ |
| | | public static final String REG_MODE_IMEI_JOIN="imei_join"; |
| | | |
| | | /** 不加入班级(活动)*/ |
| | | /** 不加入班级(活动)*/ |
| | | public static final String REG_MODE_NOT_JOIN="not_join"; |
| | | |
| | | /** 微信加入当前机构体验班 */ |
| | | /** 微信加入当前机构体验班 */ |
| | | public static final String REG_MODE_WX_VISITOR="wx_visitor"; |
| | | |
| | | /** 不加入班级(内容分享、课程分享、直播互动) wx端 */ |
| | | /** 不加入班级(内容分享、课程分享、直播互动) wx端 */ |
| | | public static final String REG_MODE_NOT_CLASS_SHARE_WX ="share_wx"; |
| | | |
| | | /** 不加入班级(直播互动) 其他:PC、手机浏览器 */ |
| | | /** 不加入班级(直播互动) 其他:PC、手机浏览器 */ |
| | | public static final String REG_MODE_NOT_CLASS_OTHER="other"; |
| | | |
| | | /** Q学友账号用户初始化key */ |
| | | /** Q学友账号用户初始化key */ |
| | | public static final String QXUEYOU_ACCOUNT_MAX_VALUE = "qxy_account_max_value"; |
| | | |
| | | /** Q学友账号用户初始化值 */ |
| | | /** Q学友账号用户初始化值 */ |
| | | public static final int QXUEYOU_ACCOUNT_INIT_VALUE = 20000; |
| | | |
| | | /** Q学友账号用户初始化值 */ |
| | | /** Q学友账号用户初始化值 */ |
| | | public static final String WEIXIN_MICRO_DOMAIN = "wx"; |
| | | |
| | | /** ffmpeg转码及截图缓存的key */ |
| | | /** ffmpeg转码及截图缓存的key */ |
| | | public static final String FFMPEG_VIDEO_LIST_KEY_PREFIX = "qxueyou-ffmpeg-transcode-list-"; |
| | | |
| | | /** ffmpeg转码及截图缓存的key */ |
| | | /** ffmpeg转码及截图缓存的key */ |
| | | public static final String FFMPEG_VIDEO_TRANSCODEING_KEY_PREFIX = "qxueyou-ffmpeg-transcode-executing-"; |
| | | |
| | | /** ffmpeg转码及截图临时存放oss原始video及转码文件的路径 */ |
| | | /** ffmpeg转码及截图临时存放oss原始video及转码文件的路径 */ |
| | | public static final String FFMPEG_VIDEO_FILE_DIR = "/usr/qxueyou/ossVideo/"; |
| | | |
| | | /** 获取媒体信息缓存服务 默认缓存时间1天 */ |
| | | /** 获取媒体信息缓存服务 默认缓存时间1天 */ |
| | | public static final Integer FFMPEG_TRANS_LIST_CACHE_TIME = 86400; |
| | | |
| | | /** 使用ffmpeg转码 */ |
| | | /** 使用ffmpeg转码 */ |
| | | public static final String VIDEO_TRANS_TYPE_FFMPEG = "1"; |
| | | |
| | | /** 视频默认封面 */ |
| | | /** 视频默认封面 */ |
| | | public static final String VIDEO_DEFAULT_IMG = "/web/res/img/app/sys-video-home.png"; |
| | | |
| | | /**流米回调 结果标识 成功 */ |
| | | public static final String FLOW_ORDER_SUCCESS = "成功"; |
| | | /**流米回调 结果标识 成功 */ |
| | | public static final String FLOW_ORDER_SUCCESS = "成功"; |
| | | |
| | | /** 流米回调结果标识 失败 */ |
| | | public static final String FLOW_ORDER_FAILED = "失败"; |
| | | /** 流米回调结果标识 失败 */ |
| | | public static final String FLOW_ORDER_FAILED = "失败"; |
| | | |
| | | /** 默认缓存登录信息时长:三小时 */ |
| | | /** 默认缓存登录信息时长:三小时 */ |
| | | public static final int SYS_DEFAULT_LOGOUT_TIME = 3 * 60 * 60; |
| | | |
| | | /** 练习成绩统计更新时间,5分钟更新一次 */ |
| | | /** 练习成绩统计更新时间,5分钟更新一次 */ |
| | | public static final int EXE_STATIS_UPDATE_MINUTES = 300; |
| | | |
| | | /** 后台登录:获取菜单缓存 更新时间,5秒钟更新一次 */ |
| | | /** 后台登录:获取菜单缓存 更新时间,5秒钟更新一次 */ |
| | | public static final int WEB_LOGIN_MENU_UPDATE_MINUTES = 5; |
| | | |
| | | /** 后台登录:获取菜单缓存 更新时间,一天 */ |
| | | /** 后台登录:获取菜单缓存 更新时间,一天 */ |
| | | public static final int WEB_USER_MENU_UPDATE_MINUTES = 86400; |
| | | |
| | | /** SysLog module */ |
| | | public static final String LOG_MODULE_SIGN_PRAISE = "MODULE_SIGN_PRAISE"; |
| | | |
| | | /** 二维码直播模板配置 */ |
| | | /** 二维码直播模板配置 */ |
| | | public static final String DICT_LIVE_QR_TEMPLATE = "LIVE_QR_TEMPLATE"; |
| | | |
| | | public static final String DEVICE_ANDROID = "android"; |
| | | |
| | | public static final String DEVICE_IOS = "ios"; |
| | | |
| | | /** 学情监控常量:专业、用户、练习、账号、校区、视频、班级、讲义、通用(可用账号—+学员) */ |
| | | /** 学情监控常量:专业、用户、练习、账号、校区、视频、班级、讲义、通用(可用账号—+学员) */ |
| | | public static final Map<String,String> LEARING_MONITOR_MAP = CollectionUtils.newStringMap( |
| | | "MAJOR","1", |
| | | "USER","2", |
| | |
| | | "HANDOUT","8", |
| | | "COMMON","9"); |
| | | |
| | | /** 消息队列:同时接收消息线程数 1,5,10*/ |
| | | /** 消息队列:同时接收消息线程数 1,5,10*/ |
| | | public static final int ONS_CONSUME_THREAD_NUMS_ONE = 1 ; |
| | | |
| | | public static final int ONS_CONSUME_THREAD_NUMS_FIVE = 5 ; |
| | | |
| | | public static final int ONS_CONSUME_THREAD_NUMS_TEN = 10 ; |
| | | |
| | | /** ping++ 消息处理错误重发次数 */ |
| | | /** ping++ 消息处理错误重发次数 */ |
| | | public static final Integer PINGPP_MQ_EXCEPTION_COUNT = 2 ; |
| | | |
| | | /** 活动报名来源 */ |
| | | public static final String ACTIVITYS_REG_IMPORT = "后台导入" ; |
| | | /** 活动报名来源 */ |
| | | public static final String ACTIVITYS_REG_IMPORT = "后台导入" ; |
| | | |
| | | public static final String ACTIVITYS_REG_WEIXIN = "微信报名" ; |
| | | public static final String ACTIVITYS_REG_WEIXIN = "微信报名" ; |
| | | |
| | | /**-------- 登录平台------ */ |
| | | /**-------- 登录平台------ */ |
| | | /** APP */ |
| | | public static final String LOGIN_PLATFORM_APP = "app" ; |
| | | |
| | | /** web后台 */ |
| | | /** web后台 */ |
| | | public static final String LOGIN_PLATFORM_WEB = "web" ; |
| | | |
| | | /** Q慧眼 直播 */ |
| | | /** Q慧眼 直播 */ |
| | | public static final String LOGIN_PLATFORM_APP_LIVE = "qLive" ; |
| | | |
| | | /** PC */ |
| | | public static final String LOGIN_PLATFORM_PC = "pc" ; |
| | | |
| | | /** 微信 */ |
| | | /** 微信 */ |
| | | public static final String LOGIN_PLATFORM_WEIXIN = "weixin" ; |
| | | |
| | | |
| | | |
| | | /** 练习导入解析,分割参数的值 */ |
| | | /** 练习导入解析,分割参数的值 */ |
| | | public static final String EXERCISE_PARSE_SPLIT_VALUE = " $ML-EP-V1$ " ; |
| | | |
| | | /** 练习导入解析,结果的值 */ |
| | | /** 练习导入解析,结果的值 */ |
| | | public static final String EXERCISE_PARSE_CONTENT_VALUE_VALUE = "c" ; |
| | | |
| | | /** 练习导入解析,结果的键 */ |
| | | /** 练习导入解析,结果的键 */ |
| | | public static final String EXERCISE_PARSE_RESULT_CODE_VALUE = "k" ; |
| | | |
| | | /** 练习导入解析,结果的值 */ |
| | | /** 练习导入解析,结果的值 */ |
| | | public static final String EXERCISE_PARSE_RESULT_VALUE_VALUE = "v" ; |
| | | |
| | | public static final String EXERCISE_PARSE_PY_URL = "py-exercise-parse-url" ; |
| | |
| | | |
| | | |
| | | /** |
| | | * 导出excel时的参数 |
| | | * 导出excel时的参数 |
| | | * |
| | | */ |
| | | public class ExcelExportParam<T> implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | //导出文件名称 |
| | | //导出文件名称 |
| | | private String fileName; |
| | | |
| | | //sheet页名称 |
| | | //sheet页名称 |
| | | private String title; |
| | | |
| | | //导出的题头 |
| | | //导出的题头 |
| | | private String[] headers; |
| | | |
| | | //需要导出的内容 |
| | | //需要导出的内容 |
| | | private Collection<T> colData; |
| | | |
| | | //输出流 |
| | | //输出流 |
| | | private OutputStream out; |
| | | |
| | | //如果需要格式化日期,默认"yyyy-MM-dd" |
| | | //如果需要格式化日期,默认"yyyy-MM-dd" |
| | | private String pattern; |
| | | |
| | | //数字类型是否使用需要格式化 |
| | | //数字类型是否使用需要格式化 |
| | | private boolean numberFormat; |
| | | |
| | | //导出指定列 |
| | | //导出指定列 |
| | | private List<String> lstColumn; |
| | | |
| | | //指定各列宽度 |
| | | //指定各列宽度 |
| | | private List<Integer> lstColumnWidth; |
| | | |
| | | public String getFileName() { |
| | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * app及后台默认图片设置 |
| | | * app及后台默认图片设置 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | | public class FilePathConstants { |
| | | |
| | | /** 点播视频默认封面 */ |
| | | /** 点播视频默认封面 */ |
| | | public static final String VIDEO_DEFAULT_IMG = "/web/res/img/app/sys-video-home.png"; |
| | | |
| | | /** 直播视频默认封面 */ |
| | | /** 直播视频默认封面 */ |
| | | public static final String VIDEO_LIVE_DEFAULT_IMG = "/web/res/img/app/sys-video-live.png"; |
| | | |
| | | /** 班级默认图标 */ |
| | | /** 班级默认图标 */ |
| | | public static final String CLASS_DEFAULT_IMG = "/web/res/img/app/course-detail-default-cover.png"; |
| | | |
| | | /** 课程表默认图标 */ |
| | | /** 课程表默认图标 */ |
| | | public static final String SCHEDULE_DEFAULT_IMG = "/web/res/img/app/default-schedule-info.png"; |
| | | |
| | | /** 机构默认图标 */ |
| | | /** 机构默认图标 */ |
| | | public static final String ORG_DEFAULT_IMG = "/web/res/img/app/org-log.png"; |
| | | |
| | | /** 班级通知、学校通知默认图标 */ |
| | | /** 班级通知、学校通知默认图标 */ |
| | | public static final String NOTICE_DEFAULT_IMG = "/web/res/img/app/notice-default.png"; |
| | | |
| | | /** 固定默认评估图标 */ |
| | | /** 固定默认评估图标 */ |
| | | public static final String EVALUATE_DEFAULT_IMG = "/web/res/img/app/evaluate-default.png"; |
| | | |
| | | /** 固定默认用户图标 */ |
| | | /** 固定默认用户图标 */ |
| | | public static final String USER_DEFAULT_IMG = "/web/res/img/user/user-default-square.png"; |
| | | |
| | | /** 所有图片 */ |
| | | /** 所有图片 */ |
| | | public static final Map<Integer, String> USER_DEFAULT_IMG_MAP = new HashMap<Integer, String>(); |
| | | static{ |
| | | USER_DEFAULT_IMG_MAP.put(0, "/web/res/img/user/user-default-square.png"); |
| | |
| | | USER_DEFAULT_IMG_MAP.put(5, "/web/res/img/user/user-default-square5.png"); |
| | | } |
| | | |
| | | /** 随机获取头像 **/ |
| | | /** 随机获取头像 **/ |
| | | public static String getUserDefaultImg(){ |
| | | return USER_DEFAULT_IMG_MAP.get((int)(Math.random()*6)); |
| | | } |
| | |
| | | package com.qxueyou.scc.base.model; |
| | | |
| | | /** |
| | | * 流量定价实体类 |
| | | * 流量定价实体类 |
| | | * @author zhanglinqing |
| | | * |
| | | */ |
| | | public class FlowPrice { |
| | | |
| | | /** 流量规格值 */ |
| | | /** 流量规格值 */ |
| | | public static final int FLOW_VALUE_10 = 10; |
| | | public static final int FLOW_VALUE_30 = 30; |
| | | public static final int FLOW_VALUE_70 = 70; |
| | |
| | | public static final int FLOW_VALUE_3072 = 3072; |
| | | public static final int FLOW_VALUE_4096 = 4096; |
| | | |
| | | /** 流量定价值 */ |
| | | /** 流量定价值 */ |
| | | public static final double FLOW_PRICING_VALUE_10 = 0.2400; |
| | | public static final double FLOW_PRICING_VALUE_30 = 0.0800; |
| | | public static final double FLOW_PRICING_VALUE_70 = 0.1000; |
| | |
| | | public static final double FLOW_PRICING_VALUE_3072 = 0.0234; |
| | | public static final double FLOW_PRICING_VALUE_4096 = 0.0234; |
| | | |
| | | /** 折后售价 */ |
| | | /** 折后售价 */ |
| | | public static final double FLOW_PRICE_10 = 2.4; |
| | | public static final double FLOW_PRICE_30 = 4; |
| | | public static final double FLOW_PRICE_70 = 8; |
| | |
| | | |
| | | |
| | | /** |
| | | * 消息类型常量实体类 |
| | | * 消息类型常量实体类 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | | public class MsgTypeConstants { |
| | | |
| | | /** 直播:生成回放 */ |
| | | /** 直播:生成回放 */ |
| | | public static final String LIVE_DOWN_LOAD_VIDEO = "DOWN_LOAD_RECORD"; |
| | | |
| | | /** 直播:编辑 -生成回放 */ |
| | | /** 直播:编辑 -生成回放 */ |
| | | public static final String LIVE_EDIT_GENERATE_VIDEO = "EDIT_GENERATE_VIDEO"; |
| | | |
| | | /** 直播:重新初始化(预处理)*/ |
| | | /** 直播:重新初始化(预处理)*/ |
| | | public static final String LIVE_REPLAY_DATA_INIT = "REPLAY_DATA_INIT"; |
| | | |
| | | /** 直播:上传视频截图*/ |
| | | /** 直播:上传视频截图*/ |
| | | public static final String LIVE_REPLAY_SCREENSHOT = "REPLAY_SCREENSHOT"; |
| | | } |
| | |
| | | public class Pager { |
| | | |
| | | /* |
| | | * 每页显示条数 |
| | | * 每页显示条数 |
| | | */ |
| | | private int pageSize; |
| | | |
| | | /* |
| | | * 当前页码 |
| | | * 当前页码 |
| | | */ |
| | | private int pageNum; |
| | | |
| | | /* |
| | | * 记录总数 |
| | | * 记录总数 |
| | | */ |
| | | private int totalCount; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 计算总页数 |
| | | * 计算总页数 |
| | | * @return |
| | | */ |
| | | public int getPageCount(){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 计算分页栏起始页 |
| | | * 计算分页栏起始页 |
| | | * @return |
| | | */ |
| | | public int getPageDispayStart(){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 计算分页栏结束页 |
| | | * 计算分页栏结束页 |
| | | * @return |
| | | */ |
| | | public int getPageDispayEnd(){ |
| | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | |
| | | /** |
| | | * 后端分页时使用,接收前端传来分页信息 |
| | | * 后端分页时使用,接收前端传来分页信息 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | | @ApiModel(description="接收前台分页、查询和排序") |
| | | @ApiModel(description="接收前台分页、查询和排序") |
| | | public class PaginationData { |
| | | |
| | | //从第几条记录开始(从0开始) |
| | | @ApiModelProperty(name="从第几条记录开始(从0开始)", value="offset") |
| | | //从第几条记录开始(从0开始) |
| | | @ApiModelProperty(name="从第几条记录开始(从0开始)", value="offset") |
| | | private Integer offset; |
| | | |
| | | //每页显示记录数 |
| | | @ApiModelProperty(name="每页显示记录数", value="limit") |
| | | //每页显示记录数 |
| | | @ApiModelProperty(name="每页显示记录数", value="limit") |
| | | private Integer limit; |
| | | |
| | | //排序字段 |
| | | @ApiModelProperty(name="排序字段", example="createTime", value="sort") |
| | | //排序字段 |
| | | @ApiModelProperty(name="排序字段", example="createTime", value="sort") |
| | | private String sort; |
| | | |
| | | //排序方式,默认升序 |
| | | @ApiModelProperty(name="排序方式,默认升序", example="desc", value="order") |
| | | //排序方式,默认升序 |
| | | @ApiModelProperty(name="排序方式,默认升序", example="desc", value="order") |
| | | private String order = "asc"; |
| | | |
| | | //总记录数 |
| | | @ApiModelProperty(name="总记录数", value="total") |
| | | //总记录数 |
| | | @ApiModelProperty(name="总记录数", value="total") |
| | | private Integer total; |
| | | |
| | | //查询输入框 |
| | | @ApiModelProperty(name="查询输入框", value="keyword") |
| | | //查询输入框 |
| | | @ApiModelProperty(name="查询输入框", value="keyword") |
| | | private String keyword = ""; |
| | | |
| | | //查询输入框 |
| | | @ApiModelProperty(name="查询输入框", value="search") |
| | | //查询输入框 |
| | | @ApiModelProperty(name="查询输入框", value="search") |
| | | private String search = ""; |
| | | |
| | | /* |
| | | * 每页显示条数 |
| | | * 每页显示条数 |
| | | */ |
| | | @ApiModelProperty(name="每页显示记录数", value="pageSize") |
| | | @ApiModelProperty(name="每页显示记录数", value="pageSize") |
| | | private Integer pageSize; |
| | | |
| | | /* |
| | | * 当前页码 |
| | | * 当前页码 |
| | | */ |
| | | @ApiModelProperty(name="从第几条记录开始(从0开始)", value="pageNum") |
| | | @ApiModelProperty(name="从第几条记录开始(从0开始)", value="pageNum") |
| | | private Integer pageNum; |
| | | |
| | | public String getKeyword() { |
| | |
| | | package com.qxueyou.scc.base.model; |
| | | |
| | | /** |
| | | * 查询参数 |
| | | * 查询参数 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | | public class Param { |
| | | |
| | | //查询字段 |
| | | //查询字段 |
| | | private String name; |
| | | |
| | | // |
| | | private String code; |
| | | |
| | | //查询值 |
| | | //查询值 |
| | | private String value; |
| | | |
| | | public Param(){ |
| | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 操作结果类 接口统一返回数据类型 |
| | | * 操作结果类 接口统一返回数据类型 |
| | | * |
| | | * { |
| | | * "result": 返回结果(boolean值), |
| | | * "data": 返回数据(object), |
| | | * "msg": 返回消息, |
| | | * "result": 返回结果(boolean值), |
| | | * "data": 返回数据(object), |
| | | * "msg": 返回消息, |
| | | * } |
| | | * |
| | | * @author zhiyong |
| | |
| | | |
| | | private static final long serialVersionUID = -9024761391789730558L; |
| | | |
| | | /** 成功:true,失败:false */ |
| | | /** 成功:true,失败:false */ |
| | | private boolean success; |
| | | |
| | | /** 返回编码 */ |
| | | /** 返回编码 */ |
| | | private int resultCode ; |
| | | |
| | | /** 返回消息 */ |
| | | /** 返回消息 */ |
| | | private String msg; |
| | | |
| | | /** 结果数据 */ |
| | | /** 结果数据 */ |
| | | private Object data; |
| | | |
| | | /** |
| | | * 非法请求状态码 |
| | | * 非法请求状态码 |
| | | */ |
| | | public static final int CODE_FORBIDDEN = 403; |
| | | |
| | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * 操作结果类 接口统一返回数据类型 |
| | | * 操作结果类 接口统一返回数据类型 |
| | | * |
| | | * { |
| | | * "result": 返回结果(boolean值), |
| | | * "data": 返回数据(object), |
| | | * "msg": 返回消息, |
| | | * "result": 返回结果(boolean值), |
| | | * "data": 返回数据(object), |
| | | * "msg": 返回消息, |
| | | * } |
| | | * |
| | | * @author zhiyong |
| | |
| | | |
| | | private static final long serialVersionUID = -9024761391789730558L; |
| | | |
| | | /** 成功:true,失败:false */ |
| | | /** 成功:true,失败:false */ |
| | | private boolean result; |
| | | |
| | | /** 返回编码 */ |
| | | /** 返回编码 */ |
| | | private int resultCode ; |
| | | |
| | | /** 返回消息 */ |
| | | /** 返回消息 */ |
| | | private String msg; |
| | | |
| | | /** 结果数据 */ |
| | | /** 结果数据 */ |
| | | private Object data; |
| | | |
| | | public ResultJson() { |
| | |
| | | package com.qxueyou.scc.base.model; |
| | | |
| | | /** |
| | | * 自定义事务异常 |
| | | * 自定义事务异常 |
| | | * @author zhiyong |
| | | * |
| | | */ |
| | |
| | | |
| | | private static final long serialVersionUID = 898178024362728710L; |
| | | |
| | | // 用户ID |
| | | // 用户ID |
| | | @Id |
| | | @Column(name = "user_id", unique = true, nullable = false, length = 32) |
| | | private String userId; |
| | | |
| | | // RSA密钥模 |
| | | // RSA密钥模 |
| | | @Column(name = "MODULUS", length = 255) |
| | | private String modulus; |
| | | |
| | | // RSA公钥指数 |
| | | // RSA公钥指数 |
| | | @Column(name = "PUBLIC_EXPONENT", length = 255) |
| | | private String publicExponent; |
| | | |
| | | // RSA私钥指数 |
| | | // RSA私钥指数 |
| | | @Column(name = "PRIVATE_EXPONENT", length = 255) |
| | | private String privateExponent; |
| | | |
| | |
| | | import com.qxueyou.scc.user.model.User; |
| | | |
| | | /** |
| | | * 保存用户缓存信息 |
| | | * @author 德虎 |
| | | * 保存用户缓存信息 |
| | | * @author 德虎 |
| | | * |
| | | */ |
| | | public class UserInfoWrapper implements Serializable{ |
| | |
| | | |
| | | private boolean admin = false; |
| | | |
| | | /** 用户信息map */ |
| | | /** 用户信息map */ |
| | | private final Map<String,Object> currentUser = new HashMap<String,Object>(10); |
| | | |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | public final static String INF_ROLE = "role"; |
| | | |
| | | /** "roleId":session中UserInfoWrapper保存的key */ |
| | | /** "roleId":session中UserInfoWrapper保存的key */ |
| | | public static final String SESSION_USER_INFO_KEY = "SESSION_USER_INFO_KEY"; |
| | | |
| | | /**保存当前在线用户ID与sessionID*/ |
| | | /**保存当前在线用户ID与sessionID*/ |
| | | public static final String REDIS_USER_ONLINE_MAP_KEY="redis.user.online.map.key"; |
| | | |
| | | /** "roleId":角色ID */ |
| | | /** "roleId":角色ID */ |
| | | public final static String INF_ROLE_ID = "roleId"; |
| | | |
| | | /** "roleIsAdmin":是否为管理员 */ |
| | | /** "roleIsAdmin":是否为管理员 */ |
| | | public final static String INF_ROLE_IS_ADMIN = "roleIsAdmin"; |
| | | |
| | | /** "roleValue":"角色值" */ |
| | | /** "roleValue":"角色值" */ |
| | | public final static String INF_ROLE_VALUE = "roleValue"; |
| | | |
| | | /** "roleValue":"角色" */ |
| | | /** "roleValue":"角色" */ |
| | | public final static String INF_ROLE_ENAME = "roleEname"; |
| | | |
| | | /** "userId":"用户ID" */ |
| | | /** "userId":"用户ID" */ |
| | | public final static String INF_USER_ID = "userId"; |
| | | |
| | | /** "userName":"用户名" */ |
| | | /** "userName":"用户名" */ |
| | | public final static String INF_USER_NAME = "userName"; |
| | | |
| | | /** "userNickName":"用户昵称" */ |
| | | /** "userNickName":"用户昵称" */ |
| | | public final static String INF_USER_NICK_NAME = "userNickName"; |
| | | |
| | | /** "userMobilePhone":"手机号" */ |
| | | /** "userMobilePhone":"手机号" */ |
| | | public final static String INF_USER_MOBILE_PHONE = "userMobilePhone"; |
| | | |
| | | /** "userAccount":"帐号" */ |
| | | /** "userAccount":"帐号" */ |
| | | public final static String INF_USER_ACCOUNT = "userAccount"; |
| | | |
| | | /** "userHeadImg":"头像" */ |
| | | /** "userHeadImg":"头像" */ |
| | | public final static String INF_USER_HEAD_IMG = "userHeadImg"; |
| | | |
| | | /** "orgId":"机构ID" */ |
| | | /** "orgId":"机构ID" */ |
| | | public final static String INF_ORG_ID = "orgId"; |
| | | |
| | | /** "topOrgId":"最上层机构ID" */ |
| | | /** "topOrgId":"最上层机构ID" */ |
| | | public final static String INF_TOP_ORG_ID = "topOrgId"; |
| | | |
| | | /** "orgName":"机构名称" */ |
| | | /** "orgName":"机构名称" */ |
| | | public final static String INF_ORG_NAME = "orgName"; |
| | | |
| | | /** "orgShortName":"机构简称" */ |
| | | /** "orgShortName":"机构简称" */ |
| | | public final static String INF_ORG_SHORT_NAME = "orgShortName"; |
| | | |
| | | /** "orgCode":"机构代码" */ |
| | | /** "orgCode":"机构代码" */ |
| | | public final static String INF_ORG_CODE = "orgCode"; |
| | | |
| | | /** "orgType":"机构类型" */ |
| | | /** "orgType":"机构类型" */ |
| | | public final static String INF_ORG_TYPE = "orgType"; |
| | | |
| | | /** "orgLogPath":"机构LOGO" */ |
| | | /** "orgLogPath":"机构LOGO" */ |
| | | public final static String INF_ORG_LOGO_PATH = "orgLogPath"; |
| | | |
| | | /** "courseId":"科目ID" */ |
| | | /** "courseId":"科目ID" */ |
| | | public final static String INF_COURSE_ID = "courseId"; |
| | | |
| | | /** "courseCode":"科目代码" */ |
| | | /** "courseCode":"科目代码" */ |
| | | public final static String INF_COURSE_CODE = "courseCode"; |
| | | |
| | | /** "courseName":"科目名称" */ |
| | | /** "courseName":"科目名称" */ |
| | | public final static String INF_COURSE_NAME = "courseName"; |
| | | |
| | | /** "courseType":"科目类型" */ |
| | | /** "courseType":"科目类型" */ |
| | | public final static String INF_COURSE_TYPE = "courseType"; |
| | | |
| | | /** "classId":"班级ID" */ |
| | | /** "classId":"班级ID" */ |
| | | public final static String INF_CLASS_ID = "classId"; |
| | | |
| | | /** "className":"班级名" */ |
| | | /** "className":"班级名" */ |
| | | public final static String INF_CLASS_NAME = "className"; |
| | | |
| | | /** "classCharger":"班主任" */ |
| | | /** "classCharger":"班主任" */ |
| | | public final static String INF_CLASS_CHARGER = "classCharger"; |
| | | |
| | | /** "teacher":"讲师" */ |
| | | /** "teacher":"讲师" */ |
| | | public final static String ROLE_TEACHER = "teacher"; |
| | | |
| | | /** "assistantTeacher":"助理讲师" */ |
| | | /** "assistantTeacher":"助理讲师" */ |
| | | public final static String ROLE_ASSISTANT_TEACHER = "assistantTeacher"; |
| | | |
| | | /** "salesman":"销售" */ |
| | | /** "salesman":"销售" */ |
| | | public final static String ROLE_SALESMAN = "salesman"; |
| | | |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | public final static String ROLE_CHARGER = "charger"; |
| | | |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | public final static String ROLE_ADMIN = "admin"; |
| | | |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | public final static String ROLE_STUDENT = "student"; |
| | | |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */ |
| | | public final static String ROLE_CUSTOM = "custom"; |
| | | |
| | | /** "buttonPrivilege":"" */ |
| | | public final static String INF_BUTTON_PRIVILEGE_EDIT = "buttonPrivilege"; |
| | | |
| | | /** "loginIp":"登录IP" */ |
| | | /** "loginIp":"登录IP" */ |
| | | public final static String INF_LOGIN_IP = "loginIp"; |
| | | |
| | | /** "loginPlatForm":"登录平台" */ |
| | | /** "loginPlatForm":"登录平台" */ |
| | | public final static String INF_LOGIN_PLAT_FORM = "loginPlatForm"; |
| | | |
| | | /** "loginCacheIpFlag":"是否需要在过滤器对当前用户增加缓存(用于保证一个用户只能在一个IP上登录)" */ |
| | | /** "loginCacheIpFlag":"是否需要在过滤器对当前用户增加缓存(用于保证一个用户只能在一个IP上登录)" */ |
| | | public final static String INF_LOGIN_CACHE_IP_FLAG = "loginCacheIpFlag"; |
| | | |
| | | /** "rolesKey":"", */ |
| | |
| | | private final Map<String,List<Map<String,Object>>> roles = new HashMap<String,List<Map<String,Object>>>(5); |
| | | |
| | | /** |
| | | * 根据key值获取当前用户信息 |
| | | * 根据key值获取当前用户信息 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取当前用户角色 |
| | | * 获取当前用户角色 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取当前用户角色ID |
| | | * 获取当前用户角色ID |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取当前用户角色值 |
| | | * 获取当前用户角色值 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据key值设置当前用户信息 |
| | | * 根据key值设置当前用户信息 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置用户信息 |
| | | * 设置用户信息 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置机构信息 |
| | | * 设置机构信息 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置班级信息 |
| | | * 设置班级信息 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置科目信息 |
| | | * 设置科目信息 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置当前客户是否编辑过角色的按钮权限信息 |
| | | * 设置当前客户是否编辑过角色的按钮权限信息 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取当前用户角色是否处理过按钮权限 |
| | | * 获取当前用户角色是否处理过按钮权限 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置用户登录IP信息 |
| | | * @param cacheIpFlag 是否需要缓存 |
| | | * 设置用户登录IP信息 |
| | | * @param cacheIpFlag 是否需要缓存 |
| | | * @param ip |
| | | */ |
| | | public void setLoginInfo(boolean cacheIpFlag,String ip, String platForm){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取当前用户登录IP |
| | | * 获取当前用户登录IP |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取当前用户是否需要缓存 |
| | | * 获取当前用户是否需要缓存 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取当前登录平台 |
| | | * 获取当前登录平台 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 添加角色 |
| | | * 添加角色 |
| | | * @param key |
| | | * @param value |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取最高优先级角色 |
| | | * 获取最高优先级角色 |
| | | * @return |
| | | */ |
| | | public List<Map<String,Object>> getDefaultRole(){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取指定角色的信息 |
| | | * 获取指定角色的信息 |
| | | * @return |
| | | */ |
| | | public List<Map<String,Object>> getRoleInfo(String roleKey){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取最高优先级角色名字 |
| | | * 获取最高优先级角色名字 |
| | | * @return |
| | | */ |
| | | public String getDefaultRoleName(){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取所有菜单 |
| | | * 获取所有菜单 |
| | | * @return |
| | | */ |
| | | public List<SysMenu> getMenus() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置所有菜单 |
| | | * 设置所有菜单 |
| | | * @return |
| | | */ |
| | | public void setMenus(List<SysMenu> menus) { |
| | |
| | | import com.fasterxml.jackson.annotation.JsonIgnore; |
| | | |
| | | /** |
| | | * 微商缓存表 |
| | | * 微商缓存表 |
| | | * @author zhiyong |
| | | * |
| | | */ |
| | |
| | | @Column(name="cache_key", length=255) |
| | | private String cacheKey; |
| | | |
| | | /** 课程id */ |
| | | /** 课程id */ |
| | | @Column(name="SUBJECT_ID", length=32) |
| | | private String subjectId; |
| | | |
| | | /** 对象id */ |
| | | /** 对象id */ |
| | | @Column(name="object_id", length=32) |
| | | private String objectId; |
| | | |
| | | /** 对象type 1:机构 2:班级 */ |
| | | /** 对象type 1:机构 2:班级 */ |
| | | @Column(name="OBJECT_TYPE") |
| | | private int objectType; |
| | | |
| | |
| | | |
| | | public static final int OBJECT_TYPE_CLASS = 2; |
| | | |
| | | /** 创建时间 */ |
| | | /** 创建时间 */ |
| | | @Column(name="CREATE_TIME") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @JsonIgnore |
| | | private Date createTime; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name="DELETE_FLAG", nullable=false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | |
| | | package com.qxueyou.scc.base.model; |
| | | |
| | | /** |
| | | * 微信发送公用实体类 |
| | | * 微信发送公用实体类 |
| | | * @author ody |
| | | * |
| | | */ |
| | | public class WeixinContants { |
| | | |
| | | /** 报名成功消息模板 */ |
| | | /** 报名成功消息模板 */ |
| | | public static final String TEMPLATE_REGISTRATION_SUCCESS = "-qY8x7f_2vUf_vle1O6kxHL5iWeTD-eSCUSmzfTfwWs"; |
| | | |
| | | /** 学校通知消息模板 */ |
| | | /** 学校通知消息模板 */ |
| | | public static final String TEMPLATE_ORG_NOTICE = "MI4bTdEoElJy5BaCWm_9P-tvAftVwFmvTZm8Bq0lV-s"; |
| | | |
| | | /** 班级通知消息模板 */ |
| | | /** 班级通知消息模板 */ |
| | | public static final String TEMPLATE_CLASS_NOTICE = "Qm9Vbypj6y7-x6_jI2TudmqxjPs7krxr9OsYYg3Nt3A"; |
| | | |
| | | } |
| | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 微信模板消息 |
| | | * @author 德虎 |
| | | * 微信模板消息 |
| | | * @author 德虎 |
| | | */ |
| | | public class WxTemplateMsg extends BaseVO { |
| | | |
| | |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * 缓存服务接口 |
| | | * 缓存服务接口 |
| | | * |
| | | * @author 德虎 |
| | | * @author 德虎 |
| | | * |
| | | */ |
| | | public interface ICacheService { |
| | | |
| | | /** |
| | | * 根据key值获取指定类型对象 |
| | | * 根据key值获取指定类型对象 |
| | | * |
| | | * @param key |
| | | * 对象key值 |
| | | * 对象key值 |
| | | * @param cls |
| | | * 对象类型 |
| | | * 对象类型 |
| | | * @return |
| | | */ |
| | | <T> T get(String key, Class<T> cls); |
| | | |
| | | /** |
| | | * 根据key值获取指定类型对象 |
| | | * 根据key值获取指定类型对象 |
| | | * |
| | | * @param key |
| | | * 对象key值 |
| | | * 对象key值 |
| | | * @return |
| | | */ |
| | | <T> T get(String key); |
| | |
| | | Long decr(String key); |
| | | |
| | | /** |
| | | * 根据key值获取指定类型对象 |
| | | * 根据key值获取指定类型对象 |
| | | * |
| | | * @param keys |
| | | * @return |
| | |
| | | Map<String, Object> getBulk(String... keys); |
| | | |
| | | /** |
| | | * 将对象缓存到缓存池 |
| | | * 将对象缓存到缓存池 |
| | | * |
| | | * @param key |
| | | * 对象key值 |
| | | * 对象key值 |
| | | * @param expiredTime |
| | | * 超时时间,单位秒 |
| | | * 超时时间,单位秒 |
| | | * @param obj |
| | | * 要缓存的对象 |
| | | * 要缓存的对象 |
| | | * @return |
| | | */ |
| | | void set(String key, int expiredTime, Object obj); |
| | | |
| | | /** |
| | | * 将对象缓存到缓存池,永不过期 |
| | | * 将对象缓存到缓存池,永不过期 |
| | | * |
| | | * @param key |
| | | * 对象key值 |
| | | * 对象key值 |
| | | * @param obj |
| | | * 要缓存的对象 |
| | | * 要缓存的对象 |
| | | * @return |
| | | */ |
| | | void set(String key, Object obj); |
| | | |
| | | /** |
| | | * 将对象缓存到缓存池 |
| | | * 将对象缓存到缓存池 |
| | | * |
| | | * @param key |
| | | * cache名称 |
| | | * cache名称 |
| | | * @param hashKey |
| | | * 键值 |
| | | * 键值 |
| | | * @param obj |
| | | * 要缓存的对象 |
| | | * 要缓存的对象 |
| | | * @return |
| | | */ |
| | | void set(String key, String hashKey, Object obj); |
| | | |
| | | /** |
| | | * 将对象缓存到缓存池 |
| | | * 将对象缓存到缓存池 |
| | | * |
| | | * @param key |
| | | * 对象key值 |
| | | * 对象key值 |
| | | * @param expiredTime |
| | | * 超时时间,单位秒 |
| | | * 超时时间,单位秒 |
| | | * @param obj |
| | | * 要缓存的对象 |
| | | * 要缓存的对象 |
| | | * @return |
| | | */ |
| | | boolean add(String key, int expiredTime, Object obj); |
| | | |
| | | /** |
| | | * 将对象从缓存池删除 |
| | | * 将对象从缓存池删除 |
| | | * |
| | | * @param key |
| | | * 对象key值 |
| | | * 对象key值 |
| | | * @return |
| | | */ |
| | | void delete(String key); |
| | | |
| | | /** |
| | | * 追加缓存池的值 |
| | | * 追加缓存池的值 |
| | | * |
| | | * @param key |
| | | * 对象key值 |
| | | * 对象key值 |
| | | * @return |
| | | */ |
| | | void append(String key, String value); |
| | | |
| | | /** |
| | | * 获取list缓存中key所有value值 |
| | | * 获取list缓存中key所有value值 |
| | | */ |
| | | <T> List<T> lstAll(String key); |
| | | |
| | | /** |
| | | * 向list缓存中放入值 |
| | | * 向list缓存中放入值 |
| | | */ |
| | | void lstRightPush(String key, Object value); |
| | | |
| | | /** |
| | | * 向list缓存中放入值 |
| | | * 向list缓存中放入值 |
| | | */ |
| | | <T> void lstRightPushAll(String key, Collection<T> values); |
| | | |
| | | /** |
| | | * 从列表获取指定范围内的数据 |
| | | * 从列表获取指定范围内的数据 |
| | | * |
| | | * @param key |
| | | * @param start |
| | |
| | | void lstClear(String key); |
| | | |
| | | /** |
| | | * 根据key,index删除list中的value |
| | | * 根据key,index删除list中的value |
| | | */ |
| | | void lstRemove(String key, Object value); |
| | | |
| | | /** |
| | | * 通过key返回list中的值,并移除值 |
| | | * 通过key返回list中的值,并移除值 |
| | | */ |
| | | String lstLeftPop(String key); |
| | | |
| | | /** |
| | | * 向hash缓存中存入对象 |
| | | * 向hash缓存中存入对象 |
| | | * |
| | | * @param key |
| | | * @param hashKey |
| | |
| | | void putKeyForHash(Object key, Object hashKey, Object value); |
| | | |
| | | /** |
| | | * 对key设置过其实键 |
| | | * 对key设置过其实键 |
| | | * @param key |
| | | * @param timeout |
| | | * @param unit |
| | |
| | | void expire(String key, long timeout, TimeUnit unit); |
| | | |
| | | /** |
| | | * 如果不存在就添加 |
| | | * 如果不存在就添加 |
| | | * @param key |
| | | * @param obj |
| | | * @return |
| | |
| | | /****************************************************************************** |
| | | * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd |
| | | * All Rights Reserved. |
| | | * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | *****************************************************************************/ |
| | | |
| | | package com.qxueyou.scc.base.service; |
| | |
| | | import com.qxueyou.scc.base.model.Result; |
| | | |
| | | /** |
| | | * 通用服务 |
| | | * @history 2010-09-12 夏德虎 新建 |
| | | * 通用服务 |
| | | * @history 2010-09-12 夏德虎 新建 |
| | | * |
| | | */ |
| | | public interface ICommonService { |
| | | |
| | | /** |
| | | * 读取对象 |
| | | * @param <T> 泛型 |
| | | * @param clz 实体类型 |
| | | * @param pk 实体主键 |
| | | * @return 查询结果 |
| | | * 读取对象 |
| | | * @param <T> 泛型 |
| | | * @param clz 实体类型 |
| | | * @param pk 实体主键 |
| | | * @return 查询结果 |
| | | */ |
| | | <T> T read(Class<T> clz,Serializable pk); |
| | | |
| | | /** |
| | | * 保存对象 |
| | | * @return 查询结果 |
| | | * 保存对象 |
| | | * @return 查询结果 |
| | | */ |
| | | public Result save(Object obj); |
| | | |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | <T> List<T> find(String hql,List<Object> args,Class<T> cls); |
| | |
| | | public interface IDictionaryService { |
| | | |
| | | /** |
| | | * 获取配置 |
| | | * 获取配置 |
| | | * @param key |
| | | * @return |
| | | */ |
| | | String getConfig(String key); |
| | | |
| | | /** |
| | | * 更新配置 |
| | | * 更新配置 |
| | | * @param key |
| | | * @param value |
| | | * @return |
| | |
| | | import com.qxueyou.scc.base.model.Result; |
| | | |
| | | /** |
| | | * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法 |
| | | * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * 从oss将文件拿到应用服务器 |
| | | * @param key 相对路径 |
| | | * @param directory 拿到应用服务器的存储路径 |
| | | * @param module 调用业务模块编码 |
| | | * @param userId 操作人 |
| | | * 从oss将文件拿到应用服务器 |
| | | * @param key 相对路径 |
| | | * @param directory 拿到应用服务器的存储路径 |
| | | * @param module 调用业务模块编码 |
| | | * @param userId 操作人 |
| | | * @return |
| | | */ |
| | | File doGetOssFile(String key, String directory,String module,String userId); |
| | | |
| | | /** |
| | | * 从杭州 oss将音视频文件拿到本地 |
| | | * @param key 相对路径 |
| | | * @param directory 拿到应用服务器的存储路径 |
| | | * @param module 调用业务模块编码 |
| | | * @param userId 操作人 |
| | | * 从杭州 oss将音视频文件拿到本地 |
| | | * @param key 相对路径 |
| | | * @param directory 拿到应用服务器的存储路径 |
| | | * @param module 调用业务模块编码 |
| | | * @param userId 操作人 |
| | | * @return |
| | | */ |
| | | File doGetOssVideoFile(String key, String directory,String module,String userId); |
| | | |
| | | /** |
| | | * 操作完之后,删除临时文件 |
| | | * @param derectory 拿到应用服务器的存储路径 |
| | | * @param module 调用业务模块编码 |
| | | * @param userId 操作人 |
| | | * 操作完之后,删除临时文件 |
| | | * @param derectory 拿到应用服务器的存储路径 |
| | | * @param module 调用业务模块编码 |
| | | * @param userId 操作人 |
| | | * @return |
| | | */ |
| | | Result doDeleteTempOssFile(String directory,String module,String userId); |
| | | |
| | | /** |
| | | * 操作完之后,删除临时文件 |
| | | * @param file 拿到应用服务器的文件 |
| | | * @param module 调用业务模块编码 |
| | | * @param userId 操作人 |
| | | * 操作完之后,删除临时文件 |
| | | * @param file 拿到应用服务器的文件 |
| | | * @param module 调用业务模块编码 |
| | | * @param userId 操作人 |
| | | * @return |
| | | */ |
| | | Result doDeleteTempOssFile(File file,String module,String userId); |
| | | /** |
| | | * 更新上传文件使用轨迹 |
| | | * @param fullPath 路径 |
| | | * 更新上传文件使用轨迹 |
| | | * @param fullPath 路径 |
| | | * @param module |
| | | * @param useFlag 使用状态 |
| | | * @param bussinessId 业务ID |
| | | * @param useFlag 使用状态 |
| | | * @param bussinessId 业务ID |
| | | * @return |
| | | */ |
| | | Result updateUploadTrace(String fullPath,String module,int useFlag,String bussinessId); |
| | | |
| | | /** |
| | | * 通过路径下载微信图像到服务器 |
| | | * 通过路径下载微信图像到服务器 |
| | | * @return |
| | | */ |
| | | String downloadWxImg(String strUrl,String openId); |
| | |
| | | import com.qxueyou.scc.base.model.Result; |
| | | |
| | | /** |
| | | * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中 |
| | | * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * ONS 日志记录 |
| | | * ONS 日志记录 |
| | | * |
| | | * @param topic 订阅主题 |
| | | * @param msgType 同一订阅主题支撑多个业务类型时,业务类型 |
| | | * @param businessId异常堆栈:自定义ID |
| | | * @param desp 参数列表 |
| | | * @param topic 订阅主题 |
| | | * @param msgType 同一订阅主题支撑多个业务类型时,业务类型 |
| | | * @param businessId异常堆栈:自定义ID |
| | | * @param desp 参数列表 |
| | | * @return |
| | | */ |
| | | Result logSaveExceptionLog(String topic, String msgType, String businessId, String desp); |
| | |
| | | /****************************************************************************** |
| | | * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd |
| | | * All Rights Reserved. |
| | | * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | *****************************************************************************/ |
| | | |
| | | package com.qxueyou.scc.base.service.impl; |
| | |
| | | |
| | | @Service(value = "commonAppService") |
| | | /** |
| | | * @author 夏德虎 |
| | | * @author 夏德虎 |
| | | * @since JDK1.7 |
| | | * @history 2014-11-18 夏德虎 新建 |
| | | * @history 2014-11-18 夏德虎 新建 |
| | | */ |
| | | public class CommonAppService implements ICommonService { |
| | | /** |
| | | * 获取事务管理器 |
| | | * 获取事务管理器 |
| | | */ |
| | | @PersistenceContext |
| | | public EntityManager em; |
| | | |
| | | /** |
| | | * 获取querydsl 查询工厂 |
| | | * 获取querydsl 查询工厂 |
| | | */ |
| | | public JPAQueryFactory queryFactory; |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 删除实体 |
| | | * 删除实体 |
| | | * @param trace |
| | | */ |
| | | public void deleteTrace(ITrace trace) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除实体集合 |
| | | * 删除实体集合 |
| | | * @param traces |
| | | */ |
| | | public <T extends ITrace> void deleteTraces(List<T> traces) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 依赖注入 |
| | | * 依赖注入 |
| | | * |
| | | * @param commonDAO |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 读取对象 |
| | | * @param <T> 泛型 |
| | | * @param clz 实体类型 |
| | | * @param pk 实体主键 |
| | | * @return 查询结果 |
| | | * 读取对象 |
| | | * @param <T> 泛型 |
| | | * @param clz 实体类型 |
| | | * @param pk 实体主键 |
| | | * @return 查询结果 |
| | | */ |
| | | public <T> T read(Class<T> clz,Serializable pk){ |
| | | return this.commonDAO.read(clz, pk); |
| | |
| | | |
| | | |
| | | /** |
| | | * 保存对象 |
| | | * @return 查询结果 |
| | | * 保存对象 |
| | | * @return 查询结果 |
| | | */ |
| | | public Result save(Object obj){ |
| | | this.commonDAO.saveOrUpdate(obj); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 刷新对象 手动提交 |
| | | * @return 查询结果 |
| | | * 刷新对象 手动提交 |
| | | * @return 查询结果 |
| | | */ |
| | | public void flush(){ |
| | | getCommonDAO().getHibernateTemplate().flush(); |
| | | } |
| | | |
| | | /** |
| | | * 清除缓存 |
| | | * 清除缓存 |
| | | */ |
| | | public void clearCache(){ |
| | | getCommonDAO().getHibernateTemplate().clear(); |
| | | } |
| | | |
| | | /** |
| | | * 清除单个缓存 |
| | | * 清除单个缓存 |
| | | */ |
| | | public void evict(Object obj){ |
| | | getCommonDAO().getHibernateTemplate().evict(obj); |
| | | } |
| | | |
| | | /** |
| | | * 保存对象 |
| | | * @return 查询结果 |
| | | * 保存对象 |
| | | * @return 查询结果 |
| | | */ |
| | | public Result insert(Object obj){ |
| | | this.commonDAO.save(obj); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存对象 |
| | | * @return 查询结果 |
| | | * 保存对象 |
| | | * @return 查询结果 |
| | | */ |
| | | @SuppressWarnings("rawtypes") |
| | | public Result saveOrUpdateAll(Collection collection){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public <T> List<T> find(String hql,List<Object> args,Class<T> cls){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * 根据hql查询,并返回执行类型的列表结果 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public int findCount(String hql, List<Object> args) { |
| | |
| | | |
| | | |
| | | /** |
| | | * 保存或更新对象 |
| | | * 保存或更新对象 |
| | | */ |
| | | public void deleteAll(@SuppressWarnings("rawtypes") Collection col) { |
| | | this.commonDAO.deleteAll(col); |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的唯一结果 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * 根据hql查询,并返回执行类型的唯一结果 |
| | | * @param hql 查询语句 |
| | | * @param args 参数 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public <T> T findUnique(String hql,List<Object> args,Class<T> cls){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 使用sql查询结果 |
| | | * 使用sql查询结果 |
| | | * @param sql |
| | | * @param args |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 使用sql查询结果 |
| | | * 使用sql查询结果 |
| | | * @param sql |
| | | * @param args |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 使用sql查询结果 |
| | | * 使用sql查询结果 |
| | | * @param sql |
| | | * @param args |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * hql只含单一参数 |
| | | * hql只含单一参数 |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param args 参数数组 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param args 参数数组 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public Result bulkUpdateInLoop(String hql, Object args[]) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复杂hql |
| | | * 复杂hql |
| | | * @param sql |
| | | * @param map |
| | | * @param cls |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复杂hql |
| | | * 复杂hql |
| | | * @param sql |
| | | * @param map |
| | | * @param cls |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复杂hql |
| | | * 复杂hql |
| | | * @param sql |
| | | * @param map |
| | | * @param cls |
| | |
| | | } |
| | | |
| | | /** |
| | | * 返回个数 复杂hql |
| | | * 返回个数 复杂hql |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public int findCountByComplexHql(final String hql, final Map<String, Object> map) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 返回个数 复杂sql |
| | | * 返回个数 复杂sql |
| | | * |
| | | * @param hql 查询语句 |
| | | * @param cls 返回类型 |
| | | * @param hql 查询语句 |
| | | * @param cls 返回类型 |
| | | * @return |
| | | */ |
| | | public int findCountByComplexSql(final String hql, final Map<String, Object> map) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复杂sql |
| | | * 复杂sql |
| | | * @param sql |
| | | * @param map |
| | | * @param cls |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复杂hql |
| | | * 复杂hql |
| | | * @param sql |
| | | * @param map |
| | | * @param cls |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果,列表数据为Map |
| | | * 根据hql查询,并返回执行类型的列表结果,列表数据为Map |
| | | * @param hql |
| | | * @param map |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据hql查询,并返回执行类型的列表结果,列表数据为Map |
| | | * 根据hql查询,并返回执行类型的列表结果,列表数据为Map |
| | | * @param hql |
| | | * @param args |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 分页查询 |
| | | * 分页查询 |
| | | * @param hql |
| | | * @param page |
| | | * @param args |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询 |
| | | * 查询 |
| | | * @param hql |
| | | * @param args |
| | | * @return |
| | |
| | | |
| | | |
| | | /** |
| | | * 根据配置key查询value值 |
| | | * 根据配置key查询value值 |
| | | * @param key |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据字典类型查询字典内容的list |
| | | * 根据字典类型查询字典内容的list |
| | | * @param dicType |
| | | * @return |
| | | */ |
| | |
| | | import com.qxueyou.scc.base.util.CollectionUtils; |
| | | |
| | | /** |
| | | * 配置服务,读取配置项 |
| | | * 配置服务,读取配置项 |
| | | * |
| | | * @author lyl |
| | | * |
| | |
| | | |
| | | |
| | | /** |
| | | * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法 |
| | | * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | |
| | | file = ossService.getObject(key, directory); |
| | | return file; |
| | | }catch( Exception e ){ |
| | | log.error(userId + "失败:OSS下载路径:" + key + " ;应用服务器路径:" + directory + " ; errMsg=" + e.getMessage() , e ); |
| | | log.error(userId + "失败:OSS下载路径:" + key + " ;应用服务器路径:" + directory + " ; errMsg=" + e.getMessage() , e ); |
| | | return file ; |
| | | } |
| | | |
| | |
| | | file = ossVideoService.getObject(key, directory); |
| | | return file; |
| | | }catch( Exception e ){ |
| | | log.error(userId + "失败:OSSVideo下载路径:" + key + " ;应用服务器路径:" + directory + " ; errMsg=" + e.getMessage() , e ); |
| | | log.error(userId + "失败:OSSVideo下载路径:" + key + " ;应用服务器路径:" + directory + " ; errMsg=" + e.getMessage() , e ); |
| | | return file ; |
| | | } |
| | | |
| | |
| | | Boolean result = FileUtils.deleteQuietly(new File(directory)); |
| | | |
| | | if( result ){ |
| | | this.insertUploadLog(userId,"成功删除:OSS-OSSVideo0:" + directory , module ); |
| | | this.insertUploadLog(userId,"成功删除:OSS-OSSVideo0:" + directory , module ); |
| | | return new Result(true); |
| | | }else{ |
| | | return new Result(false); |
| | |
| | | Boolean result = FileUtils.deleteQuietly(file); |
| | | |
| | | if( result ){ |
| | | this.insertUploadLog(userId,"成功删除:OSS-OSSVideo1:" + file.getAbsolutePath() , module ); |
| | | this.insertUploadLog(userId,"成功删除:OSS-OSSVideo1:" + file.getAbsolutePath() , module ); |
| | | return new Result(true); |
| | | }else{ |
| | | log.error(userId + "失败:OSS-OSSVideo删除本地文件1:" + file.getAbsolutePath() ); |
| | | this.insertUploadLog(userId,"失败删除:OSS-OSSVideo1:" + file.getAbsolutePath() , module ); |
| | | log.error(userId + "失败:OSS-OSSVideo删除本地文件1:" + file.getAbsolutePath() ); |
| | | this.insertUploadLog(userId,"失败删除:OSS-OSSVideo1:" + file.getAbsolutePath() , module ); |
| | | return new Result(false); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 插入本地文件下载日志 |
| | | * @param content 内容 |
| | | * @param desp 上传模块 |
| | | * 插入本地文件下载日志 |
| | | * @param content 内容 |
| | | * @param desp 上传模块 |
| | | * @return |
| | | */ |
| | | private Result insertUploadLog(String userId ,String content, String desp ){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新上传文件使用轨迹 |
| | | * @param fullPath 路径 |
| | | * 更新上传文件使用轨迹 |
| | | * @param fullPath 路径 |
| | | * @param module |
| | | * @param useFlag 使用状态 |
| | | * @param bussinessId 业务ID |
| | | * @param useFlag 使用状态 |
| | | * @param bussinessId 业务ID |
| | | * @return |
| | | */ |
| | | public Result updateUploadTrace(String fullPath,String module,int useFlag,String bussinessId){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 通过路径下载微信图像到服务器 |
| | | * 通过路径下载微信图像到服务器 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unused") |
| | |
| | | HttpURLConnection conn = (HttpURLConnection)url.openConnection(); |
| | | conn.setRequestMethod("GET"); |
| | | conn.setConnectTimeout(5 * 1000); |
| | | InputStream inStream = conn.getInputStream();//通过输入流获取图片数据 |
| | | InputStream inStream = conn.getInputStream();//通过输入流获取图片数据 |
| | | String uuid = UUIDUtils.generateUUID(); |
| | | String imgPath = "/web/res/img/user/"+uuid+"/" + openId + ".png"; |
| | | // Result result = ossService.uplpadImage(inStream, "png", imgPath); |
| | |
| | | // } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("微信头像上传失败" + e); |
| | | log.error("微信头像上传失败" + e); |
| | | } |
| | | |
| | | return null; |
| | |
| | | private void exit(String msg) { |
| | | log.error("license invalid:"+msg); |
| | | /** |
| | | * 临时屏蔽 |
| | | * 临时屏蔽 |
| | | */ |
| | | // System.exit(-1); |
| | | } |
| | |
| | | public boolean isValid() { |
| | | return true; |
| | | /** |
| | | * 临时屏蔽 |
| | | * 临时屏蔽 |
| | | */ |
| | | // if(isLicenseNull()) { |
| | | // return false; |
| | |
| | | private boolean isLicenseNull() { |
| | | return false; |
| | | /** |
| | | * 临时屏蔽 |
| | | * 临时屏蔽 |
| | | */ |
| | | // if(license==null && (license=checker.getLicense())==null) { |
| | | // return true; |
| | |
| | | @Override |
| | | public String getCustomerName() { |
| | | /** |
| | | * 临时屏蔽 |
| | | * 临时屏蔽 |
| | | */ |
| | | return "开发公司"; |
| | | return "开发公司"; |
| | | // if(isLicenseNull()) { |
| | | // return null; |
| | | // } |
| | |
| | | @Override |
| | | public String getProductName() { |
| | | /** |
| | | * 临时屏蔽 |
| | | * 临时屏蔽 |
| | | */ |
| | | return "开发产品"; |
| | | return "开发产品"; |
| | | // if(isLicenseNull()) { |
| | | // return null; |
| | | // } |
| | |
| | | import com.qxueyou.scc.sys.service.ISysLogService; |
| | | |
| | | /** |
| | | * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中 |
| | | * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | |
| | | @Transactional(propagation=Propagation.REQUIRES_NEW) |
| | | public Result logSaveExceptionLog(String topic, String msgType,String businessId ,String desp ) { |
| | | |
| | | // 处理长度 |
| | | // 处理长度 |
| | | String currTopic = null == topic ? "" : topic ; |
| | | String currDesp = StringUtils.isNotBlank(desp) && desp.length() > 125 ? desp.substring(0,125) : desp ; |
| | | |
| | |
| | | import javax.annotation.Resource; |
| | | |
| | | /** |
| | | * 阿里云OCS缓存服务 |
| | | * 阿里云OCS缓存服务 |
| | | * |
| | | * @author 德虎 |
| | | * @author 德虎 |
| | | * |
| | | */ |
| | | @Service |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将16进制转换为二进制 |
| | | * 将16进制转换为二进制 |
| | | * |
| | | * @param hexStr |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将二进制转换成16进制 |
| | | * 将二进制转换成16进制 |
| | | * |
| | | * @param buf |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * AES解密 |
| | | * AES解密 |
| | | */ |
| | | public static String decode(String aesKey, String encryptText) { |
| | | try { |
| | |
| | | private static final String UTF8 = "utf-8"; |
| | | |
| | | /** |
| | | * BASE64编码 |
| | | * BASE64编码 |
| | | * @param src |
| | | * @return |
| | | * @throws Exception |
| | |
| | | } |
| | | |
| | | /** |
| | | * BASE64解码 |
| | | * BASE64解码 |
| | | * @param dest |
| | | * @return |
| | | * @throws Exception |
| | |
| | | |
| | | |
| | | /** |
| | | * 客户端信息处理工具类 |
| | | * @author 德虎 2014-12-29 |
| | | * 客户端信息处理工具类 |
| | | * @author 德虎 2014-12-29 |
| | | * |
| | | */ |
| | | public final class ClientUtils { |
| | | |
| | | /* |
| | | * 线程变量: 用户信息 |
| | | * 线程变量: 用户信息 |
| | | */ |
| | | private static ThreadLocal<UserInfoWrapper> threadLocalUserInfo = new ThreadLocal<UserInfoWrapper>(); |
| | | private static UserInfoWrapper wrapper = threadLocalUserInfo.get(); |
| | | |
| | | private static RedisTemplate redisTemplate = (RedisTemplate)SpringContextHolder.getBean("redisTemplate"); |
| | | |
| | | /** 得到用户信息*/ |
| | | /** 得到用户信息*/ |
| | | public static UserInfoWrapper getUserInfo() { |
| | | // UserInfoWrapper wrapper = threadLocalUserInfo.get(); |
| | | // if(wrapper == null) { |
| | |
| | | if (wrapper == null) { |
| | | wrapper = new UserInfoWrapper(); |
| | | User user = new User(); |
| | | //默认值,上传可以作为默认上传者 |
| | | //默认值,上传可以作为默认上传者 |
| | | user.setUserId(Constants.VISITOR_USER_ID); |
| | | user.setName(Constants.VISITOR_USER_ID); |
| | | wrapper.setUser(user); |
| | |
| | | } |
| | | |
| | | |
| | | /** 设置用户信息*/ |
| | | /** 设置用户信息*/ |
| | | public static void setUserInfo(UserInfoWrapper wrapper) { |
| | | threadLocalUserInfo.remove(); |
| | | threadLocalUserInfo.set(wrapper); |
| | | } |
| | | |
| | | /** 得到userId*/ |
| | | /** 得到userId*/ |
| | | public static String getUserId(){ |
| | | HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
| | | HttpSession session = request.getSession(); |
| | |
| | | return info; |
| | | } |
| | | |
| | | /** 得到userName*/ |
| | | /** 得到userName*/ |
| | | public static String getUserName(){ |
| | | HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
| | | HttpSession session = request.getSession(); |
| | |
| | | return info; |
| | | } |
| | | |
| | | /** 得到用户头像*/ |
| | | /** 得到用户头像*/ |
| | | public static String getUserImg(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_USER_HEAD_IMG); |
| | | // return session.getAttribute(); |
| | | } |
| | | |
| | | /** 得到手机号*/ |
| | | /** 得到手机号*/ |
| | | public static String getUserMobilePhone(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_USER_MOBILE_PHONE); |
| | | } |
| | | |
| | | /** 得到帐号*/ |
| | | /** 得到帐号*/ |
| | | public static String getUserAccount(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_USER_ACCOUNT); |
| | | } |
| | | |
| | | /** 得到classId*/ |
| | | /** 得到classId*/ |
| | | public static String getClassId(){ |
| | | HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
| | | HttpSession session = request.getSession(); |
| | |
| | | // return getUserInfo().getInfo(UserInfoWrapper.); |
| | | } |
| | | |
| | | /** 得到className*/ |
| | | /** 得到className*/ |
| | | public static String getClassName(){ |
| | | HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
| | | HttpSession session = request.getSession(); |
| | |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_CLASS_CHARGER); |
| | | } |
| | | |
| | | /** 得到科目ID*/ |
| | | /** 得到科目ID*/ |
| | | public static String getCourseId(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_COURSE_ID); |
| | | } |
| | | |
| | | /** 得到科目Name*/ |
| | | /** 得到科目Name*/ |
| | | public static String getCourseName(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_COURSE_NAME); |
| | | } |
| | | |
| | | /** 得到机构ID*/ |
| | | /** 得到机构ID*/ |
| | | public static String getOrgId(){ |
| | | return "1"; |
| | | } |
| | | |
| | | /** 得到最上层机构ID*/ |
| | | /** 得到最上层机构ID*/ |
| | | public static String getTopOrgId(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_TOP_ORG_ID); |
| | | } |
| | | |
| | | /** 得到机构CODE*/ |
| | | /** 得到机构CODE*/ |
| | | public static String getOrgCode(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_CODE); |
| | | } |
| | | |
| | | /** 得到机构NAME*/ |
| | | /** 得到机构NAME*/ |
| | | public static String getOrgName(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_NAME); |
| | | } |
| | | |
| | | /** 得到机构SHORTNAME*/ |
| | | /** 得到机构SHORTNAME*/ |
| | | public static String getOrgShortName(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_SHORT_NAME); |
| | | } |
| | | |
| | | /** 得到机构LOGO*/ |
| | | /** 得到机构LOGO*/ |
| | | public static String getOrgLogoPath(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_LOGO_PATH); |
| | | } |
| | | |
| | | /** 得到当前角色*/ |
| | | /** 得到当前角色*/ |
| | | public static String getCurrentRole(){ |
| | | return getUserInfo().getCurrentRole(); |
| | | } |
| | | |
| | | |
| | | /** 得到当前角色编码*/ |
| | | /** 得到当前角色编码*/ |
| | | public static String getCurrentRoleEName(){ |
| | | return getUserInfo().getInfo(UserInfoWrapper.INF_ROLE_ENAME); |
| | | } |
| | | |
| | | /** 得到当前角色ID*/ |
| | | /** 得到当前角色ID*/ |
| | | public static String getCurrentRoleId(){ |
| | | return getUserInfo().getCurrentRoleId(); |
| | | } |
| | | |
| | | /** 得到当前角色值*/ |
| | | /** 得到当前角色值*/ |
| | | public static String getCurrentRoleValue(){ |
| | | return getUserInfo().getCurrentRoleValue(); |
| | | } |
| | | |
| | | /** 得到当前角色信息*/ |
| | | /** 得到当前角色信息*/ |
| | | public static List<Map<String,Object>> getRoleInfo(String role){ |
| | | return getUserInfo().getRoleInfo(role); |
| | | } |
| | | |
| | | /** 获取当前就是 菜单信息*/ |
| | | /** 获取当前就是 菜单信息*/ |
| | | public static List<SysMenu> getMenuInfo(){ |
| | | return getUserInfo().getMenus(); |
| | | } |
| | |
| | | return getUserInfo().getButtonPrivilegeEdit(); |
| | | } |
| | | |
| | | /** 当前登录IP*/ |
| | | /** 当前登录IP*/ |
| | | public static String getCurrentLoginIp(){ |
| | | return getUserInfo().getCurrentLoginIp(); |
| | | } |
| | | |
| | | /** |
| | | * 获取用户基本信息 |
| | | * 获取用户基本信息 |
| | | * @return |
| | | */ |
| | | public static ResponseResult getUserBaseInfo(User user){ |
| | | ResponseResult userInfo = new ResponseResult(); |
| | | // 用户 |
| | | // 用户 |
| | | userInfo.setUserId(user.getUserId()); |
| | | userInfo.setUserName(user.getName()); |
| | | userInfo.setImgPath(StringUtils.isNotBlank(user.getImgPath()) ? user.getImgPath() : FilePathConstants.USER_DEFAULT_IMG ); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 是否为管理员 |
| | | * 是否为管理员 |
| | | * @return |
| | | */ |
| | | public static boolean isAdmin(){ |
| | |
| | | public final class CollectionUtils { |
| | | |
| | | /** |
| | | * 构造list |
| | | * 构造list |
| | | * @param objs |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 构造list |
| | | * 构造list |
| | | * @param objs |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 构造Map |
| | | * @param objs 数组串 |
| | | * 构造Map |
| | | * @param objs 数组串 |
| | | * @return |
| | | */ |
| | | public static Map<String,String> newStringMap(String... objs){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 构造Map |
| | | * @param objs 数组串 |
| | | * 构造Map |
| | | * @param objs 数组串 |
| | | * @return |
| | | */ |
| | | public static Map<String,Object> newObjectMap(Object... objs){ |
| | |
| | | import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU; |
| | | |
| | | public class CommonUtils { |
| | | /** 一位小数 */ |
| | | /** 一位小数 */ |
| | | public static final String PARTEN_ONE = "#.#"; |
| | | /** 二位小数 */ |
| | | /** 二位小数 */ |
| | | public static final String PARTEN_TWO = "#.##"; |
| | | |
| | | //地球半径 |
| | | //地球半径 |
| | | private static final double EARTH_RADIUS = 6378.137; |
| | | |
| | | /** |
| | | * 答案显示图形颜色 自定义 |
| | | * 答案显示图形颜色 自定义 |
| | | * @return |
| | | */ |
| | | public static String[] getColors(){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课程表显示图形颜色 自定义 |
| | | * 课程表显示图形颜色 自定义 |
| | | * @return |
| | | */ |
| | | public static String[] getRGBColors(){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 换算为2位小数 |
| | | * 换算为2位小数 |
| | | * @return |
| | | */ |
| | | public static String formatDecimalFormat(Object obj, String parten){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除字符最后的符号 |
| | | * 删除字符最后的符号 |
| | | * @return |
| | | */ |
| | | public static String removeStrLastComma(String string){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 转换答案值 0,1,2 |
| | | * 转换答案值 0,1,2 |
| | | * @param correct |
| | | * @return |
| | | */ |
| | |
| | | byte value; |
| | | |
| | | if("true".equals(correct)){ |
| | | value=ExerciseItemAnswerU.CORRECT_RIGHT;//正确 |
| | | value=ExerciseItemAnswerU.CORRECT_RIGHT;//正确 |
| | | }else if("false".equals(correct)){ |
| | | value=ExerciseItemAnswerU.CORRECT_ERROR;//错误 |
| | | value=ExerciseItemAnswerU.CORRECT_ERROR;//错误 |
| | | }else{ |
| | | value=7;//δ֪ |
| | | value=7;//未知 |
| | | } |
| | | |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * // 进行加法运算 |
| | | * // 进行加法运算 |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * // 进行减法运算 |
| | | * // 进行减法运算 |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * // 进行乘法运算 |
| | | * // 进行乘法运算 |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * // 进行除法运算 四舍五入 |
| | | * // 进行除法运算 四舍五入 |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | | */ |
| | | public static double divide(double d1,double d2,int len) {// 进行除法运算 |
| | | public static double divide(double d1,double d2,int len) {// 进行除法运算 |
| | | BigDecimal b1 = new BigDecimal(String.valueOf(d1)); |
| | | BigDecimal b2 = new BigDecimal(String.valueOf(d2)); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * // 进行除法运算 四舍五入 |
| | | * // 进行除法运算 四舍五入 |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | | */ |
| | | public static double divide(String d1,String d2,int len) {// 进行除法运算 |
| | | public static double divide(String d1,String d2,int len) {// 进行除法运算 |
| | | BigDecimal b1 = new BigDecimal(d1); |
| | | BigDecimal b2 = new BigDecimal(d2); |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * // 进行除法运算 四舍五入 |
| | | * // 进行除法运算 四舍五入 |
| | | * @param d1 |
| | | * @param d2 |
| | | * @return |
| | | */ |
| | | public static BigDecimal divide(BigDecimal b1,BigDecimal b2,int len) {// 进行除法运算 |
| | | public static BigDecimal divide(BigDecimal b1,BigDecimal b2,int len) {// 进行除法运算 |
| | | |
| | | return b1.divide(b2, new MathContext(len)); |
| | | } |
| | |
| | | } |
| | | /* |
| | | * |
| | | * 按指定长度截取源字符串,若源字符串不大于指定长度,则原样返回 |
| | | * 按指定长度截取源字符串,若源字符串不大于指定长度,则原样返回 |
| | | */ |
| | | public static String cutString(String res, Integer length, String suffix) { |
| | | if (StringUtils.isEmpty(res)) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 生成流水号 : module+时间戳 + 5位随机数,长度20位 |
| | | * 生成流水号 : module+时间戳 + 5位随机数,长度20位 |
| | | */ |
| | | public static String generateNo(String module){ |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 计算单位数字 |
| | | * 计算单位数字 |
| | | * |
| | | * @param number |
| | | * @return |
| | |
| | | return "0"; |
| | | } |
| | | |
| | | if(number.compareTo(new BigInteger("10000")) < 0){// 小于1万 |
| | | if(number.compareTo(new BigInteger("10000")) < 0){// 小于1万 |
| | | return String.valueOf(number); |
| | | } |
| | | |
| | | if(number.compareTo(new BigInteger("10000")) >= 0 |
| | | && number.compareTo(new BigInteger("100000000")) < 0){// 大于1万 小于一亿 前进1位为1.2万 |
| | | && number.compareTo(new BigInteger("100000000")) < 0){// 大于1万 小于一亿 前进1位为1.2万 |
| | | |
| | | return Math.ceil(number.doubleValue()/1000)/10 + "万"; |
| | | return Math.ceil(number.doubleValue()/1000)/10 + "万"; |
| | | |
| | | } |
| | | |
| | | if(number.compareTo(new BigInteger("100000000")) >= 0){// 大于一亿 前进1位为1.2亿 |
| | | if(number.compareTo(new BigInteger("100000000")) >= 0){// 大于一亿 前进1位为1.2亿 |
| | | |
| | | return Math.ceil(number.doubleValue()/1000000)/10 + "亿"; |
| | | return Math.ceil(number.doubleValue()/1000000)/10 + "亿"; |
| | | } |
| | | |
| | | return "0"; |
| | | } |
| | | |
| | | /** |
| | | * 格式化文本 |
| | | * 格式化文本 |
| | | * @param str |
| | | * @return |
| | | */ |
| | |
| | | return d * Math.PI / 180.0; |
| | | } |
| | | |
| | | //获取两个坐标距离 |
| | | //获取两个坐标距离 |
| | | public static double GetDistance(double long1, double lat1, double long2, double lat2) { |
| | | double a, b, d, sa2, sb2; |
| | | double latA = rad(lat1); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 银行卡验证 |
| | | * 银行卡验证 |
| | | * |
| | | * @param cardNo |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * ftl-返回错误信息页面 |
| | | * ftl-返回错误信息页面 |
| | | * @param mv |
| | | * @param msg |
| | | * @return |
| | |
| | | return mv; |
| | | } |
| | | |
| | | /** 得到classId*/ |
| | | /** 得到classId*/ |
| | | public static String getClassId(String classId){ |
| | | return StringUtils.isEmpty(classId)?(StringUtils.isEmpty(ClientUtils.getClassId())?StringUtils.EMPTY:ClientUtils.getClassId()):classId; |
| | | } |
| | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * 提供日期或者是时间格式化处理工具类。 |
| | | * 提供日期或者是时间格式化处理工具类。 |
| | | * |
| | | * @author 邓志永 |
| | | * @author 邓志永 |
| | | * @since JDK1.6 |
| | | * @history 2014-11-28 邓志永 新建 |
| | | * @history 2014-11-28 邓志永 新建 |
| | | */ |
| | | public final class DateTimeFormatUtils { |
| | | /** ISO_DATETIME_FORMAT*/ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。 |
| | | * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。 |
| | | * |
| | | * @param value |
| | | * 需要被转换的日期时间对象引用。 |
| | | * @return 返回的是格式化后的字符串。 |
| | | * 需要被转换的日期时间对象引用。 |
| | | * @return 返回的是格式化后的字符串。 |
| | | */ |
| | | public static String formatDateTime(Timestamp value) { |
| | | return formatDateTime(value, ISO_DATETIME_FORMAT); |
| | | } |
| | | |
| | | /** |
| | | * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。 |
| | | * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。 |
| | | * |
| | | * @param value |
| | | * 需要被转换的日期时间对象引用。 |
| | | * 需要被转换的日期时间对象引用。 |
| | | * @param defaultFormat |
| | | * 按照指定的格式来处理当前的日期时间对象。 |
| | | * @return 返回的是格式化后的字符串。 |
| | | * 按照指定的格式来处理当前的日期时间对象。 |
| | | * @return 返回的是格式化后的字符串。 |
| | | */ |
| | | public static String formatDateTime(Timestamp value, String defaultFormat) { |
| | | if (value == null) { |
| | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * 扩展有关日期工具类的方法。 |
| | | * 扩展有关日期工具类的方法。 |
| | | * |
| | | * @author 邓志永 |
| | | * @author 邓志永 |
| | | * @since JDK1.6 |
| | | * @history 2014-11-28 邓志永 新建 |
| | | * @history 2014-11-28 邓志永 新建 |
| | | */ |
| | | public class DateTimeUtils { |
| | | |
| | | /** |
| | | * 设置 UTC time zone (often referred to as GMT)区域. |
| | | * 设置 UTC time zone (often referred to as GMT)区域. |
| | | */ |
| | | public static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone("GMT"); |
| | | |
| | |
| | | public final static int YEAR_RANGE_SCOPE = 4; |
| | | |
| | | /** |
| | | * 设置毫秒和秒之间的对应关系 |
| | | * 设置毫秒和秒之间的对应关系 |
| | | */ |
| | | public static final long MILLIS_PER_SECOND = 1000; |
| | | |
| | | /** |
| | | * 设置毫秒和分之间的关系. |
| | | * 设置毫秒和分之间的关系. |
| | | */ |
| | | public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND; |
| | | |
| | | /** |
| | | * 设置毫秒和分之间的约束关系。 |
| | | * 设置毫秒和分之间的约束关系。 |
| | | */ |
| | | public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE; |
| | | |
| | | /** |
| | | * 设置一天为多少小时. |
| | | * 设置一天为多少小时. |
| | | */ |
| | | public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR; |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。 |
| | | * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。 |
| | | * |
| | | * @param value |
| | | * 需要被转换的日期时间对象引用。 |
| | | * @return 返回的是格式化后的字符串。 |
| | | * 需要被转换的日期时间对象引用。 |
| | | * @return 返回的是格式化后的字符串。 |
| | | */ |
| | | public static String formatDateTime(Timestamp value) { |
| | | return formatDateTime(value, ISO_DATETIME_FORMAT); |
| | | } |
| | | |
| | | /** |
| | | * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。 |
| | | * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。 |
| | | * |
| | | * @param value |
| | | * 需要被转换的日期时间对象引用。 |
| | | * 需要被转换的日期时间对象引用。 |
| | | * @param defaultFormat |
| | | * 按照指定的格式来处理当前的日期时间对象。 |
| | | * @return 返回的是格式化后的字符串。 |
| | | * 按照指定的格式来处理当前的日期时间对象。 |
| | | * @return 返回的是格式化后的字符串。 |
| | | */ |
| | | public static String formatDateTime(Timestamp value, String defaultFormat) { |
| | | if (value == null) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 确定两个日期是否是同一天 |
| | | * 确定两个日期是否是同一天 |
| | | * |
| | | * @param dateSource |
| | | * 需要执行判断的第一个日期时间 |
| | | * 需要执行判断的第一个日期时间 |
| | | * @param dateDesti |
| | | * 需要执行的第二个日期时间。 |
| | | * @return true 如果两个日期都代表了同一天,那么将会返回true。 |
| | | * 需要执行的第二个日期时间。 |
| | | * @return true 如果两个日期都代表了同一天,那么将会返回true。 |
| | | */ |
| | | public static boolean isSameDay(Date dateSource, Date dateDesti) { |
| | | if (dateSource == null || dateDesti == null) { |
| | |
| | | date.setTime(time); |
| | | val.setTime(date); |
| | | } |
| | | //子方法 |
| | | //子方法 |
| | | modifyChild(val, field, round); |
| | | |
| | | throw new IllegalArgumentException("The field " + field + " is not supported"); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到指定周的第一天(周日)00:00:00秒,返回对应的Timestamp,可以用作时间区间的计算 |
| | | * 得到指定周的第一天(周日)00:00:00秒,返回对应的Timestamp,可以用作时间区间的计算 |
| | | * |
| | | * @param cal |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * @param week |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到指定周的最后一天(周日)23:23:59秒,返回对应的Timestamp,可以用作时间区间的计算 |
| | | * 得到指定周的最后一天(周日)23:23:59秒,返回对应的Timestamp,可以用作时间区间的计算 |
| | | * |
| | | * @param cal |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * @param week |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到当前周在一年中的周数 |
| | | * 得到当前周在一年中的周数 |
| | | * |
| | | * @param cal |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * @return |
| | | */ |
| | | public static int getCurrentWeek() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到当前周在一年中的周数 |
| | | * 得到当前周在一年中的周数 |
| | | * |
| | | * @param cal |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * @return |
| | | */ |
| | | public static int getCurrentWeek(Calendar calen) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到指定Timestamp代表的日期第一年中第几周 |
| | | * 得到指定Timestamp代表的日期第一年中第几周 |
| | | * |
| | | * @param cal |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * Calendar对象,如果为null,则使用本地JVM中的Calendar对象 |
| | | * @param ts |
| | | * 指定Timestamp |
| | | * @return 周数 |
| | | * 指定Timestamp |
| | | * @return 周数 |
| | | */ |
| | | public static int getWeekOfYear(Calendar cale, Timestamp ts) { |
| | | Calendar cal =cale; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到当前年份 |
| | | * 得到当前年份 |
| | | * |
| | | * @return 年 |
| | | * @return 年 |
| | | */ |
| | | public static int getCurrentYear() { |
| | | Calendar calendar = new GregorianCalendar(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到当前月份 |
| | | * 得到当前月份 |
| | | * |
| | | * @return 月份 |
| | | * @return 月份 |
| | | */ |
| | | public static int getCurrentMonth() { |
| | | Calendar calendar = new GregorianCalendar(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取指定时间的前后多少天的日期以分秒 |
| | | * 获取指定时间的前后多少天的日期以分秒 |
| | | */ |
| | | public static Timestamp getTimestamp(Timestamp timestamp, int day, int hour, int minute) { |
| | | Calendar calendar = new GregorianCalendar(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 给出两个日期,计算他们之间相差的年数|月数|天数 |
| | | * 给出两个日期,计算他们之间相差的年数|月数|天数 |
| | | * |
| | | * @param c1 |
| | | * 日期1 |
| | | * 日期1 |
| | | * @param c2 |
| | | * 日期2 |
| | | * 日期2 |
| | | * @param what |
| | | * 比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形) |
| | | * @return 相差的年数或月数或天数 |
| | | * 比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形) |
| | | * @return 相差的年数或月数或天数 |
| | | */ |
| | | public static int compare(Calendar c1, Calendar c2, int what) { |
| | | int number = 0; |
| | |
| | | } |
| | | |
| | | /* |
| | | * 得到指定日期的所在年份的最后一天 |
| | | * 得到指定日期的所在年份的最后一天 |
| | | */ |
| | | public static Timestamp getLastOfYear(Timestamp t1) { |
| | | Calendar a = new GregorianCalendar(); |
| | | a.setTime(t1); |
| | | a.set(Calendar.MONTH, 11); |
| | | a.set(Calendar.DATE, 1);// 把日期设置为12月第一天 |
| | | a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是当年最后一天 |
| | | a.set(Calendar.DATE, 1);// 把日期设置为12月第一天 |
| | | a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是当年最后一天 |
| | | return new Timestamp(a.getTimeInMillis()); |
| | | } |
| | | |
| | | /* |
| | | * 得到指定日期的所在年份的第一天 |
| | | * 得到指定日期的所在年份的第一天 |
| | | */ |
| | | public static Timestamp getFirstOfYear(Timestamp t1) { |
| | | Calendar a = new GregorianCalendar(); |
| | | a.setTime(t1); |
| | | a.set(Calendar.MONTH, 0); |
| | | a.set(Calendar.DATE, 1);// 把日期设置为12月第一天 |
| | | a.set(Calendar.DATE, 1);// 把日期设置为12月第一天 |
| | | return new Timestamp(a.getTimeInMillis()); |
| | | } |
| | | |
| | | /* |
| | | * 得到指定日期的所在月份的最后一天 |
| | | * 得到指定日期的所在月份的最后一天 |
| | | */ |
| | | public static Timestamp getLastOfMonth(Timestamp t1) { |
| | | Calendar a = new GregorianCalendar(); |
| | | a.setTime(t1); |
| | | a.set(Calendar.DATE, 1);// 把日期设置为当月第一天 |
| | | a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 |
| | | a.set(Calendar.DATE, 1);// 把日期设置为当月第一天 |
| | | a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 |
| | | return new Timestamp(a.getTimeInMillis()); |
| | | } |
| | | |
| | | /** |
| | | * 得到指定日期的所在月份的第一天 |
| | | * 得到指定日期的所在月份的第一天 |
| | | * |
| | | * @param t1 |
| | | * @return |
| | |
| | | public static Timestamp getFirstOfMonth(Timestamp t1) { |
| | | Calendar a = new GregorianCalendar(); |
| | | a.setTime(t1); |
| | | a.set(Calendar.DATE, 1);// 把日期设置为当月第一天 |
| | | a.set(Calendar.DATE, 1);// 把日期设置为当月第一天 |
| | | return new Timestamp(a.getTimeInMillis()); |
| | | } |
| | | |
| | | /** |
| | | * 给出两个日期,计算他们之间相差的年数|月数|天数 |
| | | * 给出两个日期,计算他们之间相差的年数|月数|天数 |
| | | * |
| | | * @param c1 |
| | | * 日期1 |
| | | * 日期1 |
| | | * @param c2 |
| | | * 日期2 |
| | | * 日期2 |
| | | * @param what |
| | | * 比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形) |
| | | * @return 相差的年数或月数或天数 |
| | | * 比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形) |
| | | * @return 相差的年数或月数或天数 |
| | | */ |
| | | public static int compare(Timestamp t1, Timestamp t2, int what) { |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 把字符串的日期转成Timestamp |
| | | * 把字符串的日期转成Timestamp |
| | | * |
| | | * @param time |
| | | * 字符串的日期 |
| | | * @return int Timestamp型日期 |
| | | * 字符串的日期 |
| | | * @return int Timestamp型日期 |
| | | */ |
| | | public static Timestamp stringConvertTimestamp(String stime) { |
| | | String time =stime; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 把字符串的日期转成Timestamp |
| | | * 把字符串的日期转成Timestamp |
| | | * |
| | | * @param date |
| | | * 字符串的日期 |
| | | * @return int Timestamp型日期 |
| | | * 字符串的日期 |
| | | * @return int Timestamp型日期 |
| | | */ |
| | | public static Date stringConvertDate(String sdate) { |
| | | String date =sdate; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 把字符串的日期转成Timestamp |
| | | * 把字符串的日期转成Timestamp |
| | | * |
| | | * @param date |
| | | * 字符串的日期 |
| | | * @return int Timestamp型日期 |
| | | * 字符串的日期 |
| | | * @return int Timestamp型日期 |
| | | */ |
| | | public static Timestamp stringConvertTS(String sdate) { |
| | | String date =sdate; |
| | |
| | | |
| | | |
| | | /** |
| | | * 去除date的毫秒数 |
| | | * 去除date的毫秒数 |
| | | * |
| | | * @param date |
| | | * 字符串的日期 |
| | | * @return int Timestamp型日期 |
| | | * 字符串的日期 |
| | | * @return int Timestamp型日期 |
| | | */ |
| | | public static Date getCurrDateTime(Date date) { |
| | | return stringConvertTS(formatDate(date, ISO_DATETIME_FORMAT)); |
| | | } |
| | | |
| | | /** |
| | | * 比较两日期大小 |
| | | * 比较两日期大小 |
| | | * |
| | | * @param DATE1 |
| | | * @param DATE2 |
| | | * @param what |
| | | * 比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形) |
| | | * @return date1 在date2前=1;date1在date2后=-1;否则=0; |
| | | * 比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形) |
| | | * @return date1 在date2前=1;date1在date2后=-1;否则=0; |
| | | * @throws ParseException |
| | | */ |
| | | public static int compareDate(String date1, String date2, int what) throws ParseException { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 比较两日期大小 |
| | | * 比较两日期大小 |
| | | * |
| | | * @param DATE1 |
| | | * @param DATE2 |
| | | * @param what |
| | | * 比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形) |
| | | * @return date1 在date2前=1;date1在date2后=-1;否则=0; |
| | | * 比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形) |
| | | * @return date1 在date2前=1;date1在date2后=-1;否则=0; |
| | | */ |
| | | public static int compareDate(Date date1, Date date2, int what) { |
| | | Calendar objCalendar1 = Calendar.getInstance(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 和当前日期比较大小 |
| | | * 和当前日期比较大小 |
| | | * |
| | | * @param currentDate |
| | | * @return currentDate 在当前日期前=1;date1在当前日期后=-1;否则=0; |
| | | * @return currentDate 在当前日期前=1;date1在当前日期后=-1;否则=0; |
| | | */ |
| | | public static int compareCurrentDate(Date currentDate) { |
| | | return compareDate(currentDate, nowAsDate(), Calendar.DATE); |
| | | } |
| | | |
| | | /** |
| | | * 和当前日期比较大小 |
| | | * 和当前日期比较大小 |
| | | * |
| | | * @param currentDate |
| | | * @return currentDate 在当前日期前=1;date1在当前日期后=-1;否则=0; |
| | | * @return currentDate 在当前日期前=1;date1在当前日期后=-1;否则=0; |
| | | * @throws ParseException |
| | | */ |
| | | public static int compareCurrentDate(String currentDate) throws ParseException { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据日期,输出日期对应的月份 |
| | | * 根据日期,输出日期对应的月份 |
| | | * |
| | | * @param date |
| | | * @return month |
| | | * @return month |
| | | */ |
| | | public static int getMonth(Date date) { |
| | | if (null == date) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 封装每月的最后一天 |
| | | * 封装每月的最后一天 |
| | | * |
| | | * @param date |
| | | * @author 伍升存 |
| | | * @history 2012-03-13 伍升存 |
| | | * @author 伍升存 |
| | | * @history 2012-03-13 伍升存 |
| | | * @return |
| | | */ |
| | | public static Date lastDayOfMonth(Date date) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 当前时间的前几个小时 |
| | | * 当前时间的前几个小时 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 当前时间的后几个小时 |
| | | * 当前时间的后几个小时 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | // 计算时间 |
| | | // 计算时间 |
| | | public static String showTime(Date ctime, String sformat) { |
| | | String format = sformat; |
| | | String r = ""; |
| | |
| | | long nowtime = nowtimelong; |
| | | long ctimelong = ctime.getTime(); |
| | | long result = nowtime - ctimelong; |
| | | if (result - (long) 60 * 1000 < (long) 0)// 一分钟内 |
| | | if (result - (long) 60 * 1000 < (long) 0)// 一分钟内 |
| | | { |
| | | BigDecimal seconds = cal(new BigDecimal(result), (long) 1000, 0); |
| | | r = seconds + "秒钟前"; |
| | | } else if (result - (long) 60 * 1000 >= (long) 0 && result - (long) 60 * 60 * 1000 < (long) 0)// 一小时内 |
| | | r = seconds + "秒钟前"; |
| | | } else if (result - (long) 60 * 1000 >= (long) 0 && result - (long) 60 * 60 * 1000 < (long) 0)// 一小时内 |
| | | { |
| | | BigDecimal seconds = cal(new BigDecimal(result), (long) (60 * 1000), 0); |
| | | r = seconds + "分钟前"; |
| | | } else if (result - (long) 60 * 60 * 1000 >= (long) 0 && result - (long) 24 * 60 * 60 * 1000 < (long) 0)// 一天内 |
| | | r = seconds + "分钟前"; |
| | | } else if (result - (long) 60 * 60 * 1000 >= (long) 0 && result - (long) 24 * 60 * 60 * 1000 < (long) 0)// 一天内 |
| | | { |
| | | BigDecimal seconds = cal(new BigDecimal(result), (long) (60 * 60 * 1000), 0); |
| | | r = seconds + "Сʱǰ"; |
| | | } else if (result - (long) 24 * 60 * 60 * 1000 >= (long) 0 && result - (long) 30 * 24 * 60 * 60 * 1000 < (long) 0) {// 一个月内 |
| | | r = seconds + "小时前"; |
| | | } else if (result - (long) 24 * 60 * 60 * 1000 >= (long) 0 && result - (long) 30 * 24 * 60 * 60 * 1000 < (long) 0) {// 一个月内 |
| | | BigDecimal seconds = cal(new BigDecimal(result), (long) (24 * 60 * 60 * 1000), 0); |
| | | r = seconds + "天前"; |
| | | } else if (result - (long) 30 * 24 * 60 * 60 * 1000 >= (long) 0 && result - (long) 12 * 30 * 24 * 60 * 60 * 1000 < (long) 0) {// 一年内 |
| | | r = seconds + "天前"; |
| | | } else if (result - (long) 30 * 24 * 60 * 60 * 1000 >= (long) 0 && result - (long) 12 * 30 * 24 * 60 * 60 * 1000 < (long) 0) {// 一年内 |
| | | BigDecimal seconds = cal(new BigDecimal(result), new BigDecimal(30).multiply(new BigDecimal(24)).multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).multiply(new BigDecimal(1000)).longValue(), 0); |
| | | r = seconds + "个月前"; |
| | | } else{// 日期格式 |
| | | r = seconds + "个月前"; |
| | | } else{// 日期格式 |
| | | SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA); |
| | | r = sdf.format(ctime); |
| | | } |
| | |
| | | public static String transForm(Date beginTime, Date endTime) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | String trans = ""; |
| | | SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日-HH:mm",Locale.CHINA); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日-HH:mm",Locale.CHINA); |
| | | String str_begin = sdf.format(beginTime); |
| | | String str_end = sdf.format(endTime); |
| | | cal.setTime(beginTime); |
| | |
| | | String str_end_hour = str_end.substring(str_end.indexOf('-') + 1); |
| | | |
| | | if (str_begin_month.equals(str_end_month)) { |
| | | trans = str_begin_month + " (" + str_begin_week + ") " + str_begin_hour + " 至 " + str_end_hour; |
| | | trans = str_begin_month + " (" + str_begin_week + ") " + str_begin_hour + " 至 " + str_end_hour; |
| | | } else { |
| | | cal.setTime(endTime); |
| | | int end_week = cal.get(Calendar.DAY_OF_WEEK); |
| | | String str_end_week = getWeek(end_week); |
| | | trans = str_begin_month + " (" + str_begin_week + ") " + str_begin_hour + " 至 " + str_end_month + " (" + str_end_week + ") " + str_end_hour; |
| | | trans = str_begin_month + " (" + str_begin_week + ") " + str_begin_hour + " 至 " + str_end_month + " (" + str_end_week + ") " + str_end_hour; |
| | | } |
| | | return trans; |
| | | } |
| | |
| | | public static String getWeek(int week) { |
| | | String str_week = ""; |
| | | if (week == 2) { |
| | | str_week = "周一"; |
| | | str_week = "周一"; |
| | | } |
| | | if (week == 3) { |
| | | str_week = "周二"; |
| | | str_week = "周二"; |
| | | } |
| | | if (week == 4) { |
| | | str_week = "周三"; |
| | | str_week = "周三"; |
| | | } |
| | | if (week == 5) { |
| | | str_week = "周四"; |
| | | str_week = "周四"; |
| | | } |
| | | if (week == 6) { |
| | | str_week = "周五"; |
| | | str_week = "周五"; |
| | | } |
| | | if (week == 7) { |
| | | str_week = "周六"; |
| | | str_week = "周六"; |
| | | } |
| | | if (week == 1) { |
| | | str_week = "周日"; |
| | | str_week = "周日"; |
| | | } |
| | | return str_week; |
| | | |
| | |
| | | package com.qxueyou.scc.base.util; |
| | | |
| | | /** |
| | | * 记录项目管理部分核心的数据库字典信息;基础操作Form |
| | | * 记录项目管理部分核心的数据库字典信息;基础操作Form |
| | | * |
| | | * @author 邓志永 |
| | | * @author 邓志永 |
| | | * @since JDK1.6 |
| | | * @history 2014-11-28 邓志永 新建 |
| | | * @history 2014-11-28 邓志永 新建 |
| | | */ |
| | | import java.sql.Timestamp; |
| | | import java.text.ParseException; |
| | |
| | | |
| | | |
| | | /** |
| | | * 根据格式获得日期字符串 |
| | | * 根据格式获得日期字符串 |
| | | * |
| | | * @param sFormat |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据给定格式获取特定时间的格式化显示 |
| | | * 根据给定格式获取特定时间的格式化显示 |
| | | * |
| | | * @param ts |
| | | * @param sFormat |
| | |
| | | } |
| | | |
| | | /** |
| | | * 格式化日期 |
| | | * 格式化日期 |
| | | * |
| | | * @param ts |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将String类型的日期转换为时间 |
| | | * 将String类型的日期转换为时间 |
| | | * |
| | | * @param dt |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 建议获得短日期的处理方式 例如: getShortDate(2004-10-10 10:10:10.123) = 2004-10-10 |
| | | * 建议获得短日期的处理方式 例如: getShortDate(2004-10-10 10:10:10.123) = 2004-10-10 |
| | | * |
| | | * @param dt |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 取得当前日期时间 |
| | | * 取得当前日期时间 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 取得当前日期时间 毫秒为0 |
| | | * 取得当前日期时间 毫秒为0 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获得最常见的日期格式内容 : 年-月-日 小时-分钟-秒 |
| | | * 获得最常见的日期格式内容 : 年-月-日 小时-分钟-秒 |
| | | * |
| | | * @param ts |
| | | * @return |
| | |
| | | return getDateFormat(ts, "yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | |
| | | /* 格式化日期 */ |
| | | /* 格式化日期 */ |
| | | public String getSTime(Timestamp ts) { |
| | | return getDateFormat(ts, "HH:mm:ss"); |
| | | } |
| | | |
| | | /** |
| | | * 获取当天的日期 |
| | | * 获取当天的日期 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | |
| | | } |
| | | |
| | | // 根据时间获得随机数 |
| | | // 根据时间获得随机数 |
| | | public String getRnd() { |
| | | Calendar tCal = Calendar.getInstance(); |
| | | Timestamp ts = new Timestamp(tCal.getTime().getTime()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 计算日期之间的差值 2004-3-25 增加 |
| | | * 计算日期之间的差值 2004-3-25 增加 |
| | | * |
| | | * @param dt1 |
| | | * @param dt2 |
| | |
| | | } |
| | | |
| | | /** |
| | | * 计算分钟 |
| | | * 计算分钟 |
| | | * |
| | | * @param dt1 |
| | | * @param dt2 |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取明天的日期 |
| | | * 获取明天的日期 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获得当前日期的下一天 |
| | | * 获得当前日期的下一天 |
| | | * |
| | | * @param date |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * LST num为正:当前日期后num天是返回值 num为负:当前日期前num天是返回值 返回的日期的格式:yyyy-MM-dd |
| | | * LST num为正:当前日期后num天是返回值 num为负:当前日期前num天是返回值 返回的日期的格式:yyyy-MM-dd |
| | | */ |
| | | public static String getTheDay(int num) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将日期由String转换为Date类型 |
| | | * 将日期由String转换为Date类型 |
| | | * |
| | | * @param date |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将日期由String转换为Date类型 |
| | | * 将日期由String转换为Date类型 |
| | | * |
| | | * @param date |
| | | * @param format |
| | |
| | | |
| | | |
| | | /** |
| | | * 将日期由yyyy年MM月String转换为Date类型 |
| | | * 将日期由yyyy年MM月String转换为Date类型 |
| | | * |
| | | * @param date |
| | | * @return |
| | |
| | | */ |
| | | public static Date convertStringToDateCh(String sdate) throws ParseException { |
| | | String date = sdate; |
| | | SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy年MM月", Locale.CHINA); |
| | | SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy年MM月", Locale.CHINA); |
| | | |
| | | if (StringUtils.isBlank(date)) { |
| | | java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 取得指定年月的第一天 |
| | | * 取得指定年月的第一天 |
| | | * @param year |
| | | * @param month |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 取得指定年月的最后一天 |
| | | * 取得指定年月的最后一天 |
| | | * @param year |
| | | * @param month |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 取得指定年月的第一天 |
| | | * 取得指定年月的第一天 |
| | | * @param year |
| | | * @param month |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 取得指定年月的最后一天 |
| | | * 取得指定年月的最后一天 |
| | | * @param year |
| | | * @param month |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到一段时间内有多少周 |
| | | * 得到一段时间内有多少周 |
| | | * @param startTime |
| | | * @param endTime |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到日期的年 |
| | | * 得到日期的年 |
| | | * @param date |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 当前时间处于一段时间的第几周 |
| | | * 当前时间处于一段时间的第几周 |
| | | * @param startTime |
| | | * @param endTime |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 指定时间处于一段时间的第几周 |
| | | * 指定时间处于一段时间的第几周 |
| | | * @param startTime |
| | | * @param endTime |
| | | * @return |
| | |
| | | * |
| | | * |
| | | * @param <T> |
| | | * 应用泛型,代表任意一个符合javabean风格的类 |
| | | * boolean型的属性xxx的get器方式为getXxx(),而不是isXxx() |
| | | * 应用泛型,代表任意一个符合javabean风格的类 |
| | | * boolean型的属性xxx的get器方式为getXxx(),而不是isXxx() |
| | | */ |
| | | public class ExcelExportUtils<T> { |
| | | |
| | | private static Logger log = LogManager.getLogger("ExcelExport"); |
| | | |
| | | /** |
| | | * 设置标题样式,字体 |
| | | * 设置标题样式,字体 |
| | | * @param objStyle |
| | | * @param workbook |
| | | */ |
| | |
| | | objStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); |
| | | objStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); |
| | | |
| | | // 生成一个字体 |
| | | // 生成一个字体 |
| | | HSSFFont font = workbook.createFont(); |
| | | font.setFontHeightInPoints((short) 12); |
| | | font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); |
| | | // 把字体应用到标题样式 |
| | | // 把字体应用到标题样式 |
| | | objStyle.setFont(font); |
| | | } |
| | | |
| | | /** |
| | | * 设置导出内容样式 |
| | | * 设置导出内容样式 |
| | | * @param objStyle |
| | | * @param workbook |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 是否指定列宽 |
| | | * 是否指定列宽 |
| | | * @param sheet |
| | | * @param lstColumnWidth |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 初始化导出标题 |
| | | * 初始化导出标题 |
| | | * @param row |
| | | * @param headers |
| | | * @param titleStyle |
| | |
| | | } |
| | | |
| | | /** |
| | | * 按照T,导出所有列内容 |
| | | * 按照T,导出所有列内容 |
| | | * @param objExcelExportParam |
| | | */ |
| | | public void exportExcel(ExcelExportParam<T> objExcelExportParam) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 指定列导出 |
| | | * 指定列导出 |
| | | * @param objExcelExportParam |
| | | */ |
| | | public void exportExcelByColomn(ExcelExportParam<T> objExcelExportParam) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 导出excel实现 |
| | | * 导出excel实现 |
| | | * @param objExcelExportParam |
| | | * @param exportByCol |
| | | */ |
| | | public void exportExcel(ExcelExportParam<T> objExcelExportParam,boolean exportByCol){ |
| | | //获取参数: |
| | | //获取参数: |
| | | String title = objExcelExportParam.getTitle(); |
| | | Collection<T> colData = objExcelExportParam.getColData(); |
| | | OutputStream out = objExcelExportParam.getOut(); |
| | |
| | | lstColumn = objExcelExportParam.getLstColumn(); |
| | | } |
| | | |
| | | // 声明一个工作薄 |
| | | // 声明一个工作薄 |
| | | HSSFWorkbook workbook = new HSSFWorkbook(); |
| | | HSSFSheet sheet = null; |
| | | // 生成一个表格 |
| | | // 生成一个表格 |
| | | if(StringUtils.isNotBlank(title)){ |
| | | sheet = workbook.createSheet(title); |
| | | }else{ |
| | | sheet = workbook.createSheet("Sheet1"); |
| | | } |
| | | // 设置表格默认列宽度为18个字节 |
| | | // 设置表格默认列宽度为18个字节 |
| | | sheet.setDefaultColumnWidth(18); |
| | | // 设置表格默认行高度 |
| | | // 设置表格默认行高度 |
| | | sheet.setDefaultRowHeight((short)300); |
| | | //是否指定列宽 |
| | | //是否指定列宽 |
| | | initColumnWidth(sheet,objExcelExportParam.getLstColumnWidth()); |
| | | // 标题样式 |
| | | // 标题样式 |
| | | HSSFCellStyle titleStyle = workbook.createCellStyle(); |
| | | initTitleCellStyle(titleStyle,workbook); |
| | | // 内容样式 |
| | | // 内容样式 |
| | | HSSFCellStyle contentStyle = workbook.createCellStyle(); |
| | | initContentCellStyle(contentStyle,workbook); |
| | | // 产生表格标题行 |
| | | // 产生表格标题行 |
| | | HSSFRow row = sheet.createRow(0); |
| | | initTitleRow(row,objExcelExportParam.getHeaders(),titleStyle,lstColumn); |
| | | |
| | | // 遍历集合数据,产生数据行 |
| | | // 遍历集合数据,产生数据行 |
| | | Iterator<T> it = colData.iterator(); |
| | | int index = 0; |
| | | while (it.hasNext()) { |
| | |
| | | row = sheet.createRow(index); |
| | | T t = (T) it.next(); |
| | | |
| | | //默认给序号列 |
| | | //默认给序号列 |
| | | HSSFCell cell = row.createCell(0); |
| | | cell.setCellStyle(contentStyle); |
| | | HSSFRichTextString richString = new HSSFRichTextString(String.valueOf(index)); |
| | |
| | | richString.applyFont(font3); |
| | | cell.setCellValue(richString); |
| | | |
| | | //指定列导出使用 |
| | | //指定列导出使用 |
| | | if(exportByCol){ |
| | | for(int j = 0; j < lstColumn.size() ; j++ ){ |
| | | doExportExcel(row,contentStyle,pattern,numberFormat,workbook,lstColumn.get(j),t,j+1); |
| | | } |
| | | }else{ |
| | | // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值 |
| | | // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值 |
| | | Field[] fields = t.getClass().getDeclaredFields(); |
| | | for (int i = 0; i < fields.length; i++) { |
| | | if(!"serialVersionUID".equals(fields[i].getName())){ |
| | |
| | | private void doExportExcel(HSSFRow row,HSSFCellStyle contentStyle,String pattern,boolean numberFormat,HSSFWorkbook workbook,String fieldName,T t,int i){ |
| | | HSSFCell cell = row.createCell(i); |
| | | cell.setCellStyle(contentStyle); |
| | | //boolean类型默认使用get,而非is |
| | | //boolean类型默认使用get,而非is |
| | | String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); |
| | | try { |
| | | @SuppressWarnings("rawtypes") |
| | |
| | | @SuppressWarnings("unchecked") |
| | | Method getMethod = tCls.getMethod(getMethodName,new Class[] {}); |
| | | Object value = getMethod.invoke(t, new Object[] {}); |
| | | // 格式化内容 |
| | | // 格式化内容 |
| | | String textValue = ""; |
| | | if (value instanceof Date) { |
| | | Date date = (Date) value; |
| | |
| | | textValue = String.valueOf(value); |
| | | } |
| | | } |
| | | //利用正则表达式判断textValue是否全部由数字组成 |
| | | //利用正则表达式判断textValue是否全部由数字组成 |
| | | if (null != textValue) { |
| | | Pattern p = Pattern.compile("^//d+(//.//d+)?$"); |
| | | Matcher matcher = p.matcher(textValue); |
| | | if (matcher.matches() && numberFormat) { |
| | | // 是数字当作double处理 |
| | | // 是数字当作double处理 |
| | | cell.setCellValue(Double.parseDouble(textValue)); |
| | | } else { |
| | | HSSFRichTextString richString = new HSSFRichTextString(textValue); |
| | |
| | | |
| | | public static void main(String[] args) { |
| | | System.out.println(new Date().getTime()); |
| | | /*// 测试学生 |
| | | /*// 测试学生 |
| | | ExcelExportUtils<UserRegistrationExport> ex = new ExcelExportUtils<UserRegistrationExport>(); |
| | | String[] headers = { "序号","班级", "姓名", "性别" ,"报名码" ,"手机号" ,"其他联系方式","状态"}; |
| | | String[] headers = { "序号","班级", "姓名", "性别" ,"报名码" ,"手机号" ,"其他联系方式","状态"}; |
| | | List<UserRegistrationExport> dataset = new ArrayList<UserRegistrationExport>(); |
| | | UserRegistrationExport u = new UserRegistrationExport(); |
| | | u.setClassName("高级JAVA工程师一班"); |
| | | u.setClassName("高级JAVA工程师一班"); |
| | | u.setMobilePhone("13312886688"); |
| | | u.setSalesCode("123.34"); |
| | | u.setSex(false); |
| | | u.setStatus(UserRegistration.STATUS_ACTIVE); |
| | | u.setUserName("刘美幸子"); |
| | | u.setUserName("刘美幸子"); |
| | | dataset.add(u); |
| | | ExcelExportParam<UserRegistrationExport> obj = new ExcelExportParam<UserRegistrationExport>(); |
| | | obj.setColData(dataset); |
| | |
| | | obj.setOut(out); |
| | | ex.exportExcel(obj); |
| | | out.close(); |
| | | System.out.println("excel导出成功!"); |
| | | System.out.println("excel导出成功!"); |
| | | } catch (FileNotFoundException e) { |
| | | e.printStackTrace(); |
| | | } catch (IOException e) { |
| | |
| | | obj.setOut(out); |
| | | ex.exportExcelByColomn(obj); |
| | | out.close(); |
| | | System.out.println("excel指定列导出成功!"); |
| | | System.out.println("excel指定列导出成功!"); |
| | | } catch (FileNotFoundException e) { |
| | | e.printStackTrace(); |
| | | } catch (IOException e) { |
| | |
| | | @Override |
| | | public Object exec(List args) throws TemplateModelException { |
| | | if (args == null || args.isEmpty()) { |
| | | throw new TemplateModelException("错误:MD5加密参数字符串不存在"); |
| | | throw new TemplateModelException("错误:MD5加密参数字符串不存在"); |
| | | } |
| | | StringBuffer sb = new StringBuffer(1024); |
| | | for (Object md5Arg : args) { |
| | |
| | | } |
| | | |
| | | private void init() { |
| | | X509TrustManager xtm = new X509TrustManager() { // 创建TrustManager |
| | | X509TrustManager xtm = new X509TrustManager() { // 创建TrustManager |
| | | public void checkClientTrusted(X509Certificate[] chain, |
| | | String authType) throws CertificateException { |
| | | } |
| | |
| | | } |
| | | }; |
| | | try { |
| | | // TLS1.0与SSL3.0基本上没有太大的差别,可粗略理解为TLS是SSL的继承者,但它们使用的是相同的SSLContext |
| | | // TLS1.0与SSL3.0基本上没有太大的差别,可粗略理解为TLS是SSL的继承者,但它们使用的是相同的SSLContext |
| | | SSLContext ctx = SSLContext.getInstance("TLS"); |
| | | // 使用TrustManager来初始化该上下文,TrustManager只是被SSL的Socket所使用 |
| | | // 使用TrustManager来初始化该上下文,TrustManager只是被SSL的Socket所使用 |
| | | ctx.init(null, new TrustManager[] { xtm }, null); |
| | | |
| | | /* |
| | |
| | | } |
| | | |
| | | /** |
| | | * 向HTTPS地址发送POST请求 |
| | | * 向HTTPS地址发送POST请求 |
| | | * |
| | | * @param reqURL |
| | | * 请求地址 |
| | | * 请求地址 |
| | | * @param params |
| | | * 请求参数 |
| | | * @return 响应内容 |
| | | * 请求参数 |
| | | * @return 响应内容 |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public String sendStringPostRequest(String reqURL, Map<String, String> params1) { |
| | |
| | | params = Collections.EMPTY_MAP; |
| | | } |
| | | |
| | | HttpEntity entity = sendPostRequest(reqURL, params); // 获取响应实体 |
| | | HttpEntity entity = sendPostRequest(reqURL, params); // 获取响应实体 |
| | | |
| | | if( null != entity ){ |
| | | String content = EntityUtils.toString(entity, UTF_8); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 向HTTPS地址发送POST请求 |
| | | * 向HTTPS地址发送POST请求 |
| | | * |
| | | * @param reqURL |
| | | * 请求地址 |
| | | * 请求地址 |
| | | * @param params |
| | | * 请求参数 |
| | | * @return 响应内容 |
| | | * 请求参数 |
| | | * @return 响应内容 |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public String sendStringPostRequest(String reqURL, String data) { |
| | |
| | | |
| | | StringEntity reqEntity = new StringEntity(data, UTF_8); |
| | | |
| | | HttpEntity entity = sendPostRequest(reqURL, Collections.EMPTY_MAP, reqEntity); // 获取响应实体 |
| | | HttpEntity entity = sendPostRequest(reqURL, Collections.EMPTY_MAP, reqEntity); // 获取响应实体 |
| | | |
| | | if( null != entity ){ |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 向HTTPS地址发送POST请求 |
| | | * 向HTTPS地址发送POST请求 |
| | | * |
| | | * @param reqURL |
| | | * 请求地址 |
| | | * 请求地址 |
| | | * @param params |
| | | * 请求参数 |
| | | * @return 响应内容 |
| | | * 请求参数 |
| | | * @return 响应内容 |
| | | */ |
| | | public String sendStringPostRequest(String reqURL, Map<String, String> headerParas1, String data) { |
| | | Map<String, String> headerParas = headerParas1; |
| | |
| | | |
| | | StringEntity reqEntity = new StringEntity(data, UTF_8); |
| | | |
| | | HttpEntity entity = sendPostRequest(reqURL, headerParas, reqEntity); // 获取响应实体 |
| | | HttpEntity entity = sendPostRequest(reqURL, headerParas, reqEntity); // 获取响应实体 |
| | | |
| | | if( null != entity ){ |
| | | String content = EntityUtils.toString(entity, UTF_8); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 向HTTPS地址发送POST请求 |
| | | * 向HTTPS地址发送POST请求 |
| | | * |
| | | * @param reqURL |
| | | * 请求地址 |
| | | * 请求地址 |
| | | * @param params |
| | | * 请求参数 |
| | | * @return 响应内容 |
| | | * 请求参数 |
| | | * @return 响应内容 |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public HttpEntity sendPostRequest(String reqURL, Map<String, String> params1) { |
| | |
| | | Map<String, String> headerParas = headerParas1; |
| | | try { |
| | | |
| | | HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost |
| | | HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost |
| | | httpPost.setEntity(reqEntity); |
| | | |
| | | headerParas = checkUserAgent(headerParas); |
| | |
| | | log.debug("request--header:" + header.getName() + ":" + header.getValue()); |
| | | } |
| | | |
| | | HttpResponse response = httpClient.execute(httpPost); // 执行POST请求 |
| | | HttpResponse response = httpClient.execute(httpPost); // 执行POST请求 |
| | | headers = response.getAllHeaders(); |
| | | for (Header header : headers) { |
| | | log.debug("response--header:" + header.getName() + ":" + header.getValue()); |
| | | } |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | |
| | | this.debug(httpPost.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType()); |
| | | |
| | | if (302 == response.getStatusLine().getStatusCode() && response.containsHeader("location")) { |
| | | String location = response.getLastHeader("location").getValue(); |
| | | log.debug("重定向:" + location); |
| | | log.debug("重定向:" + location); |
| | | EntityUtils.consume(entity); |
| | | return sendPostRequest(location, headerParas, reqEntity); |
| | | } |
| | |
| | | Map<String, String> headerParas = headerParas1; |
| | | try { |
| | | |
| | | HttpDelete httpDelete = new HttpDelete(reqURL); // 创建HttpPost |
| | | HttpDelete httpDelete = new HttpDelete(reqURL); // 创建HttpPost |
| | | |
| | | headerParas = checkUserAgent(headerParas); |
| | | for (String key : headerParas.keySet()) { |
| | |
| | | log.debug("request--header:" + header.getName() + ":" + header.getValue()); |
| | | } |
| | | |
| | | HttpResponse response = httpClient.execute(httpDelete); // 执行POST请求 |
| | | HttpResponse response = httpClient.execute(httpDelete); // 执行POST请求 |
| | | headers = response.getAllHeaders(); |
| | | for (Header header : headers) { |
| | | log.debug("response--header:" + header.getName() + ":" + header.getValue()); |
| | | } |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | |
| | | this.debug(httpDelete.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType()); |
| | | |
| | |
| | | * @param header |
| | | */ |
| | | private void debug(URI uri, int code, long length, Header header){ |
| | | log.debug("请求地址: " + uri); |
| | | log.debug("响应状态: " + code); |
| | | log.debug("响应长度: " + length); |
| | | log.debug("响应类型: " + header); |
| | | log.debug("请求地址: " + uri); |
| | | log.debug("响应状态: " + code); |
| | | log.debug("响应长度: " + length); |
| | | log.debug("响应类型: " + header); |
| | | } |
| | | |
| | | public String sendStringPutRequest(String reqURL, Map<String, String> headerParas1, String body) { |
| | | Map<String, String> headerParas = headerParas1; |
| | | try { |
| | | |
| | | HttpPut httpPut = new HttpPut(reqURL); // 创建HttpPost |
| | | HttpPut httpPut = new HttpPut(reqURL); // 创建HttpPost |
| | | |
| | | headerParas = checkUserAgent(headerParas); |
| | | for (String key : headerParas.keySet()) { |
| | |
| | | StringEntity reqEntity = new StringEntity(body, UTF_8); |
| | | httpPut.setEntity(reqEntity); |
| | | |
| | | HttpResponse response = httpClient.execute(httpPut); // 执行POST请求 |
| | | HttpResponse response = httpClient.execute(httpPut); // 执行POST请求 |
| | | headers = response.getAllHeaders(); |
| | | for (Header header : headers) { |
| | | log.debug("response--header:" + header.getName() + ":" + header.getValue()); |
| | | } |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | |
| | | this.debug(httpPut.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType()); |
| | | |
| | |
| | | Map<String, String> headerParas = headerParas1; |
| | | try { |
| | | |
| | | HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost |
| | | HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost |
| | | |
| | | BasicHttpEntity requestBody = new BasicHttpEntity(); |
| | | requestBody.setContent(new ByteArrayInputStream(param.getBytes(UTF_8))); |
| | |
| | | |
| | | log.debug("request--param:" + param); |
| | | |
| | | HttpResponse response = httpClient.execute(httpPost); // 执行POST请求 |
| | | HttpResponse response = httpClient.execute(httpPost); // 执行POST请求 |
| | | headers = response.getAllHeaders(); |
| | | for (Header header : headers) { |
| | | log.debug("response--header:" + header.getName() + ":" + header.getValue()); |
| | | } |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | |
| | | this.debug(httpPost.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType()); |
| | | |
| | | if (302 == response.getStatusLine().getStatusCode() && response.containsHeader("location")) { |
| | | String location = response.getLastHeader("location").getValue(); |
| | | log.debug("重定向:" + location); |
| | | log.debug("重定向:" + location); |
| | | EntityUtils.consume(entity); |
| | | return sendPostRequest(location, headerParas, param); |
| | | } |
| | |
| | | Map<String, String> params = params1; |
| | | Map<String, String> headerParas = headerParas1; |
| | | try { |
| | | // HttpGet httpGet = new HttpGet(reqURL); // 创建HttpPost |
| | | // HttpGet httpGet = new HttpGet(reqURL); // 创建HttpPost |
| | | |
| | | headerParas = checkUserAgent(headerParas); |
| | | |
| | |
| | | log.debug("request--header:" + header.getName() + ":" + header.getValue()); |
| | | } |
| | | |
| | | // HttpResponse response = httpClient.execute(httpGet); // 执行POST请求 |
| | | // HttpResponse response = httpClient.execute(httpGet); // 执行POST请求 |
| | | HttpResponse response = httpClient.execute(request); |
| | | headers = response.getAllHeaders(); |
| | | for (Header header : headers) { |
| | | log.debug("response--header:" + header.getName() + ":" + header.getValue()); |
| | | } |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | HttpEntity entity = response.getEntity(); // 获取响应实体 |
| | | |
| | | this.debug(request.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType()); |
| | | |
| | | if (302 == response.getStatusLine().getStatusCode() && response.containsHeader("location")) { |
| | | String location = response.getLastHeader("location").getValue(); |
| | | log.debug("重定向"); |
| | | log.debug("重定向"); |
| | | return sendGetRequestAsResponse(location, headerParas, params); |
| | | } |
| | | |
| | |
| | | Ellipse2D.Double shapeEllipse = new Ellipse2D.Double(0, 0, Math.min(bi1.getWidth(),bi1.getHeight()), |
| | | Math.min(bi1.getWidth(),bi1.getHeight())); |
| | | |
| | | // 设置透明背景 |
| | | // 设置透明背景 |
| | | BufferedImage bi2 = new BufferedImage(bi1.getWidth(), |
| | | bi1.getHeight(), BufferedImage.TRANSLUCENT); |
| | | Graphics2D g2 = bi2.createGraphics(); |
| | | g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
| | | g2.setClip(shapeEllipse); |
| | | |
| | | // 画图片 |
| | | // 画图片 |
| | | g2.drawImage(bi1, 0, 0, null); |
| | | g2.dispose(); |
| | | |
| | | ImageIO.write(bi2, "PNG", file); |
| | | |
| | | } catch (IOException e) { |
| | | log.error("图片处理失败", e); |
| | | log.error("图片处理失败", e); |
| | | } |
| | | } |
| | | //矩形头像 |
| | | //矩形头像 |
| | | public static void doRectangle(File file){ |
| | | try { |
| | | BufferedImage bi1 = ImageIO.read(file); |
| | | Rectangle2D.Double shapeRectangle = new Rectangle2D.Double(0, 0, Math.min(bi1.getWidth(),bi1.getHeight()), |
| | | Math.min(bi1.getWidth(),bi1.getHeight())); |
| | | |
| | | // 设置透明背景 |
| | | // 设置透明背景 |
| | | BufferedImage bi2 = new BufferedImage(bi1.getWidth(), |
| | | bi1.getHeight(), BufferedImage.TRANSLUCENT); |
| | | Graphics2D g2 = bi2.createGraphics(); |
| | | g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
| | | g2.setClip(shapeRectangle); |
| | | |
| | | // 画图片 |
| | | // 画图片 |
| | | g2.drawImage(bi1, 0, 0, null); |
| | | g2.dispose(); |
| | | |
| | | ImageIO.write(bi2, "PNG", file); |
| | | |
| | | } catch (IOException e) { |
| | | log.error("图片处理失败", e); |
| | | log.error("图片处理失败", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 为图片生成缩略图 |
| | | * 为图片生成缩略图 |
| | | * @param file |
| | | */ |
| | | public static void decreaseSizeImage(File file) { |
| | |
| | | int height = bi1.getHeight(); |
| | | |
| | | |
| | | // 设置透明背景 |
| | | // 设置透明背景 |
| | | BufferedImage bi2 = new BufferedImage(getPriviewImageWidth(width,height), |
| | | getPriviewImageHeight(width,height), bi1.getType()); |
| | | Graphics2D g2 = bi2.createGraphics(); |
| | | |
| | | // 画图片 |
| | | // 画图片 |
| | | Image image = bi1.getScaledInstance(getPriviewImageWidth(width,height), getPriviewImageHeight(width,height), Image.SCALE_DEFAULT); |
| | | g2.drawImage(image, 0, 0, null); |
| | | g2.dispose(); |
| | |
| | | ImageIO.write(bi2, "PNG", createPreviewFile(file)); |
| | | |
| | | } catch (IOException e) { |
| | | log.error("图片处理失败", e); |
| | | log.error("图片处理失败", e); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | public static String encodeImgageToBase64(String imgStr) { // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 |
| | | public static String encodeImgageToBase64(String imgStr) { // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 |
| | | |
| | | |
| | | ByteArrayOutputStream outputStream = null; |
| | |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | // 对字节数组Base64编码 |
| | | // 对字节数组Base64编码 |
| | | BASE64Encoder encoder = new BASE64Encoder(); |
| | | return encoder.encode(outputStream.toByteArray());// 返回Base64编码过的字节数组字符串 |
| | | return encoder.encode(outputStream.toByteArray());// 返回Base64编码过的字节数组字符串 |
| | | } |
| | | |
| | | public static void main(String[] args){ |
| | |
| | | public static final String PPT = "ppt"; |
| | | public static final String PPTX = "pptx"; |
| | | |
| | | // 8 代表word保存成html |
| | | // 8 代表word保存成html |
| | | public static final int WORD2HTML = 8; |
| | | // 17代表word保存成pdf |
| | | // 17代表word保存成pdf |
| | | public static final int WD2PDF = 17; |
| | | public static final int PPT2PDF = 32; |
| | | public static final int XLS2PDF = 0; |
| | | |
| | | public static void main(String[] args) { |
| | | String pptfile = "D:/upload/新员工入职向导及信息201605.xlsx"; |
| | | String pptfile = "D:/upload/新员工入职向导及信息201605.xlsx"; |
| | | //String pdffile = "D:/upload/b.pdf"; |
| | | String htmlfile="D:/upload/excel.pdf"; |
| | | //ppt2pdf(pptfile,pdffile); |
| | |
| | | } |
| | | |
| | | /** |
| | | * @param resourceType 资源类型 |
| | | * @param path 资源路径 |
| | | * @param resourceType 资源类型 |
| | | * @param path 资源路径 |
| | | * @return |
| | | * TODO 文件转换 |
| | | * TODO 文件转换 |
| | | */ |
| | | public static Integer formatConvert(String resourceType, String resourcePath) { |
| | | Integer pages = 0; |
| | | String resource = resourcePath.substring(0, resourcePath.lastIndexOf(".")); |
| | | if(resourceType.equalsIgnoreCase(DOC)||resourceType.equalsIgnoreCase(DOCX)){ |
| | | //word转成pdf和图?? |
| | | //word转成pdf和图?? |
| | | word2pdf(resourcePath, resource+".pdf"); |
| | | }else if(resourceType.equalsIgnoreCase(XLS)||resourceType.equalsIgnoreCase(XLSX)){ |
| | | //excel文件转成图片 |
| | | //excel文件转成图片 |
| | | excel2pdf(resourcePath, resource+".pdf"); |
| | | }else if(resourceType.equalsIgnoreCase(PPT)||resourceType.equalsIgnoreCase(PPTX)){ |
| | | ppt2pdf(resourcePath, resource+".pdf"); |
| | | }else if(resourceType.equalsIgnoreCase(MP4)){ |
| | | //视频文件不转?? |
| | | //视频文件不转?? |
| | | pages = 0; |
| | | } |
| | | return pages; |
| | |
| | | |
| | | public static void word2pdf(String docfile, String pdffile) |
| | | { |
| | | // 启动word应用程序(Microsoft Office Word 2003) |
| | | // 启动word应用程序(Microsoft Office Word 2003) |
| | | ActiveXComponent app = null; |
| | | try{ |
| | | ComThread.InitSTA(); |
| | | app = new ActiveXComponent("Word.Application"); |
| | | app.setProperty("Visible", false); |
| | | System.out.println("*****正在转换...*****"); |
| | | // 设置word应用程序不可?? |
| | | System.out.println("*****正在转换...*****"); |
| | | // 设置word应用程序不可?? |
| | | // app.setProperty("Visible", new Variant(false)); |
| | | // documents表示word程序的所有文档窗口,(word是多文档应用程序??? |
| | | // documents表示word程序的所有文档窗口,(word是多文档应用程序??? |
| | | Dispatch docs = app.getProperty("Documents").toDispatch(); |
| | | // 打开要转换的word文件 |
| | | // 打开要转换的word文件 |
| | | /* Dispatch doc = Dispatch.invoke( |
| | | docs, |
| | | "Open", |
| | |
| | | docfile, |
| | | false, |
| | | true).toDispatch(); |
| | | // 调用Document对象的saveAs方法,将文档保存为pdf格式 |
| | | // 调用Document对象的saveAs方法,将文档保存为pdf格式 |
| | | /*Dispatch.invoke(doc, "ExportAsFixedFormat", Dispatch.Method, new Object[] { |
| | | pdffile, new Variant(wdFormatPDF) }, new int[1]);*/ |
| | | |
| | | Dispatch.call(doc, "ExportAsFixedFormat", pdffile, WD2PDF); |
| | | // 关闭word文件 |
| | | // 关闭word文件 |
| | | Dispatch.call(doc, "Close", false); |
| | | } |
| | | catch (Exception e) |
| | |
| | | } |
| | | finally |
| | | { |
| | | //关闭word应用程序 |
| | | //关闭word应用程序 |
| | | app.invoke("Quit", 0); |
| | | ComThread.Release(); |
| | | } |
| | | System.out.println("*****转换完毕********"); |
| | | System.out.println("*****转换完毕********"); |
| | | } |
| | | |
| | | |
| | |
| | | ComThread.InitSTA(true); |
| | | app = new ActiveXComponent("Excel.Application"); |
| | | app.setProperty("Visible", false); |
| | | app.setProperty("AutomationSecurity", new Variant(3));//禁用?? |
| | | app.setProperty("AutomationSecurity", new Variant(3));//禁用?? |
| | | Dispatch excels = app.getProperty("Workbooks").toDispatch(); |
| | | /*Dispatch excel = Dispatch.invoke(excels, "Open", Dispatch.Method, new Object[]{ |
| | | excelfile, |
| | |
| | | },new int[9]).toDispatch();*/ |
| | | Dispatch excel = Dispatch.call(excels, "Open", |
| | | excelfile,false,true).toDispatch(); |
| | | //转换格式ExportAsFixedFormat |
| | | //转换格式ExportAsFixedFormat |
| | | /*Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, new Object[]{ |
| | | new Variant(0),//pdf格式=0 |
| | | new Variant(0),//pdf格式=0 |
| | | pdffile, |
| | | new Variant(0)//0=标准(生成的pdf图片不会变模??) 1=??小文??(生成的pdf图片模糊的一塌糊??) |
| | | new Variant(0)//0=标准(生成的pdf图片不会变模??) 1=??小文??(生成的pdf图片模糊的一塌糊??) |
| | | }, new int[1]);*/ |
| | | Dispatch.call(excel, "ExportAsFixedFormat",XLS2PDF, |
| | | pdffile); |
| | |
| | | private static Logger log = LogManager.getLogger("MD5Utils"); |
| | | |
| | | /** |
| | | * MD5数字签名 |
| | | * MD5数字签名 |
| | | * @param src |
| | | * @return |
| | | * @throws Exception |
| | |
| | | } |
| | | |
| | | /** |
| | | * 字节数组转化为大写16进制字符串 |
| | | * 字节数组转化为大写16进制字符串 |
| | | * @param b |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /*** |
| | | * MD5加码 生成32位md5码 |
| | | * MD5加码 生成32位md5码 |
| | | */ |
| | | public static String string2MD5(String inStr){ |
| | | MessageDigest md5 = null; |
| | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * 前三个属性根据实际存储位置设置 |
| | | * 前三个属性根据实际存储位置设置 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | | public class MyJsCssVersionUtils { |
| | | |
| | | /** web工程的发布路径 */ |
| | | /** web工程的发布路径 */ |
| | | private static String webContent = "qxueyou"; |
| | | |
| | | /** web工程中web文件夹的绝对路径 D:\project\workspace_web\versioncontroller0\web\js\qxueyou.js */ |
| | | /** web工程中web文件夹的绝对路径 D:\project\workspaceStkkk\qxueyou_web\web\js\qxueyou.js */ |
| | | /** web工程中web文件夹的绝对路径 D:\project\workspace_web\versioncontroller0\web\js\qxueyou.js */ |
| | | /** web工程中web文件夹的绝对路径 D:\project\workspaceStkkk\qxueyou_web\web\js\qxueyou.js */ |
| | | private static String webFileAbsolutePath = "C:" + File.separator + "workspace" + File.separator + "qxueyou_web"; |
| | | |
| | | /** 扫描js、css、html文件的文件夹绝对路径,固定设置为web目录 */ |
| | | /** 扫描js、css、html文件的文件夹绝对路径,固定设置为web目录 */ |
| | | private static String fileScanDirec = "C:" + File.separator + "workspace" + File.separator + "qxueyou_web"; |
| | | |
| | | /** 匹配html中引入js文件 */ |
| | | /** 匹配html中引入js文件 */ |
| | | private static Pattern scriptImportPattrrn = Pattern.compile("<script(.*)src(.*)</script>"); |
| | | |
| | | /** 匹配html中引入css文件 */ |
| | | /** 匹配html中引入css文件 */ |
| | | private static Pattern cssImportPattrrn = Pattern.compile("<link(.*)href(.*)rel(.*)>"); |
| | | |
| | | private static char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; |
| | | |
| | | |
| | | /** |
| | | * 得到处理过的文件路径为key,文件md5值为value的map |
| | | * @param filePath 文件路径 |
| | | * @param fileExtension 文件类型 |
| | | * 得到处理过的文件路径为key,文件md5值为value的map |
| | | * @param filePath 文件路径 |
| | | * @param fileExtension 文件类型 |
| | | * @param map map |
| | | */ |
| | | private static void getFileMD5Map(String filePath,String fileExtension,Map<String,String> map,String version){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到路径下的所需文件和文件的md5值 |
| | | * 得到路径下的所需文件和文件的md5值 |
| | | * @param filePath |
| | | * @param fileExtension |
| | | * @param map |
| | |
| | | File file = new File(filePath); |
| | | if(file.isFile()){ |
| | | String fiePath = file.getAbsolutePath(); |
| | | //符合指定类型 |
| | | //符合指定类型 |
| | | if(fiePath.endsWith(fileExtension)){ |
| | | generateMap(file,fileExtension,map,version); |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到一个文件的map |
| | | * 得到一个文件的map |
| | | * @param file |
| | | * @param map |
| | | */ |
| | | private static void generateMap(File file, String fileExtension, Map<String,String> map,String version){ |
| | | //TODO 缩短md5值 |
| | | //TODO 缩短md5值 |
| | | String strKey = file.getAbsolutePath(); |
| | | strKey = strKey.replace(webFileAbsolutePath, File.separator + webContent); |
| | | strKey = strKey.replace("\\", "/"); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 对文件全文生成MD5摘要 |
| | | * 对文件全文生成MD5摘要 |
| | | * |
| | | * @param file |
| | | * 要加密的文件 |
| | | * @return MD5摘要码 |
| | | * 要加密的文件 |
| | | * @return MD5摘要码 |
| | | */ |
| | | public static String getMD5(File file) { |
| | | FileInputStream fis = null; |
| | |
| | | fis = new FileInputStream(file); |
| | | byte[] buffer = new byte[2048]; |
| | | int length = -1; |
| | | //暂时不用 |
| | | //暂时不用 |
| | | //long s = System.currentTimeMillis(); |
| | | while ((length = fis.read(buffer)) != -1) { |
| | | md.update(buffer, 0, length); |
| | | } |
| | | byte[] b = md.digest(); |
| | | return byteToHexString(b); |
| | | // 16位加密 |
| | | // 16位加密 |
| | | // return buf.toString().substring(8, 24); |
| | | } catch (Exception ex) { |
| | | ex.printStackTrace(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 把byte[]数组转换成十六进制字符串表示形式 |
| | | * @param tmp 要转换的byte[] |
| | | * @return 十六进制字符串表示形式 |
| | | * 把byte[]数组转换成十六进制字符串表示形式 |
| | | * @param tmp 要转换的byte[] |
| | | * @return 十六进制字符串表示形式 |
| | | */ |
| | | private static String byteToHexString(byte[] tmp) { |
| | | |
| | | String s; |
| | | // 用字节表示就是 16 个字节 |
| | | char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符, |
| | | // 所以表示成 16 进制需要 32 个字符 |
| | | int k = 0; // 表示转换结果中对应的字符位置 |
| | | for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节 |
| | | // 转换成 16 进制字符的转换 |
| | | byte byte0 = tmp[i]; // 取第 i 个字节 |
| | | str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换, |
| | | // >>> 为逻辑右移,将符号位一起右移 |
| | | str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换 |
| | | // 用字节表示就是 16 个字节 |
| | | char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符, |
| | | // 所以表示成 16 进制需要 32 个字符 |
| | | int k = 0; // 表示转换结果中对应的字符位置 |
| | | for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节 |
| | | // 转换成 16 进制字符的转换 |
| | | byte byte0 = tmp[i]; // 取第 i 个字节 |
| | | str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换, |
| | | // >>> 为逻辑右移,将符号位一起右移 |
| | | str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换 |
| | | } |
| | | s = new String(str); // 换后的结果转换为字符串 |
| | | s = new String(str); // 换后的结果转换为字符串 |
| | | return s; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到路径下的所需文件和文件的md5值 |
| | | * 得到路径下的所需文件和文件的md5值 |
| | | * @param filePath |
| | | * @param fileExtension |
| | | * @param map |
| | |
| | | File file = new File(filePath); |
| | | if(file.isFile()){ |
| | | String fiePath = file.getAbsolutePath(); |
| | | //符合指定类型 |
| | | //符合指定类型 |
| | | if(fiePath.endsWith(fileExtension)){ |
| | | addVersion(file,map); |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到一个文件的map |
| | | * 得到一个文件的map |
| | | * @param file |
| | | * @param map |
| | | */ |
| | | private static void addVersion(File file,Map<String,String> map){ |
| | | //TODO 缩短md5值 |
| | | //TODO 缩短md5值 |
| | | InputStream is = null; |
| | | OutputStream os = null; |
| | | List<String> contentList = new ArrayList<String>(); |
| | | |
| | | // 读文件 |
| | | // 读文件 |
| | | try { |
| | | //指定utf-8格式 |
| | | //指定utf-8格式 |
| | | BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8")); |
| | | String line = null; |
| | | |
| | | while ((line = br.readLine()) != null) { |
| | | //TODO version 传null值 |
| | | //TODO version 传null值 |
| | | String modLine = getModLine(line, null,map); |
| | | if (modLine != null) { |
| | | //System.out.println(modLine); |
| | |
| | | line = line + "\r\n"; |
| | | contentList.add(line); |
| | | } |
| | | // 关闭流 |
| | | // 关闭流 |
| | | br.close(); |
| | | } catch (Exception e) { |
| | | System.out.println("读文件失败:" + file.getAbsolutePath()); |
| | | System.out.println("读文件失败:" + file.getAbsolutePath()); |
| | | e.printStackTrace(); |
| | | } finally { |
| | | if (null != is) { |
| | |
| | | } |
| | | |
| | | } |
| | | // 写文件 |
| | | // 写文件 |
| | | try { |
| | | //指定utf8格式 |
| | | //指定utf8格式 |
| | | BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"utf-8")); |
| | | |
| | | for (Iterator<String> it = contentList.iterator(); it.hasNext();) { |
| | | String line = it.next(); |
| | | bw.write(line); |
| | | } |
| | | // 更新到文件 |
| | | // 更新到文件 |
| | | bw.flush(); |
| | | // 关闭流 |
| | | // 关闭流 |
| | | bw.close(); |
| | | } catch (Exception e) { |
| | | System.out.println("写文件失败:" + file.getAbsolutePath()); |
| | | System.out.println("写文件失败:" + file.getAbsolutePath()); |
| | | e.printStackTrace(); |
| | | } finally { |
| | | if (null != os) { |
| | |
| | | |
| | | /** |
| | | * |
| | | * 查找文件需要的版本号的js 与css 行 |
| | | * @param line 行字符 |
| | | * @param version 默认版本 |
| | | * 查找文件需要的版本号的js 与css 行 |
| | | * @param line 行字符 |
| | | * @param version 默认版本 |
| | | * @param map md5 map |
| | | * @return |
| | | */ |
| | | private static String getModLine(String line, String version, Map<String, String> map) { |
| | | |
| | | //匹配html引入js文件 eg:<script type="text/javascript" src="/qxueyou/web/js/qxueyou.js"></script> |
| | | //匹配html引入js文件 eg:<script type="text/javascript" src="/qxueyou/web/js/qxueyou.js"></script> |
| | | if (scriptImportPattrrn.matcher(line).find()) { |
| | | //以引号分隔,以/开始 |
| | | //以引号分隔,以/开始 |
| | | String md5Version = null; |
| | | String strLine[] = line.split("\""); |
| | | for(String str:strLine){ |
| | |
| | | break; |
| | | } |
| | | if(str.startsWith("/")){ |
| | | //如果已有版本号,按?分隔,取第一个 |
| | | //如果已有版本号,按?分隔,取第一个 |
| | | if(str.lastIndexOf("?version") != -1){ |
| | | str = str.substring(0, str.lastIndexOf("?version")); |
| | | } |
| | |
| | | return modLine; |
| | | } |
| | | |
| | | //匹配html引入css文件 eg:<link href="/qxueyou/web/css/bootstrap.min.css" rel="stylesheet"> |
| | | //匹配html引入css文件 eg:<link href="/qxueyou/web/css/bootstrap.min.css" rel="stylesheet"> |
| | | } else if (cssImportPattrrn.matcher(line).find()) { |
| | | |
| | | //以引号分隔,以/开始 |
| | | //以引号分隔,以/开始 |
| | | String md5Version = null; |
| | | String strLine[] = line.split("\""); |
| | | for(String str:strLine){ |
| | |
| | | break; |
| | | } |
| | | if(str.startsWith("/")){ |
| | | //如果已有版本号,按?分隔,取第一个 |
| | | //如果已有版本号,按?分隔,取第一个 |
| | | if(str.lastIndexOf("?version") != -1){ |
| | | str = str.substring(0, str.lastIndexOf("?version")); |
| | | } |
| | |
| | | String version = df.format(date); |
| | | |
| | | Map<String,String> objMap = new HashMap<String,String>(); |
| | | //添加js文件 |
| | | //添加js文件 |
| | | getFileMD5Map(fileScanDirec,".js",objMap,version); |
| | | //添加CSS文件 |
| | | //添加CSS文件 |
| | | getFileMD5Map(fileScanDirec,".css",objMap,version); |
| | | |
| | | //循环html文件,修改其中的css和js引入路径 |
| | | //循环html文件,修改其中的css和js引入路径 |
| | | getHtml(fileScanDirec,".ftl",objMap); |
| | | |
| | | System.out.println("successful"); |
| | |
| | | package com.qxueyou.scc.base.util; |
| | | /** |
| | | * 数字随机 |
| | | * 数字随机 |
| | | * @author iqtogether |
| | | * |
| | | */ |
| | | public class NumRandomUtils { |
| | | /** |
| | | * 随机6位数字 |
| | | * 随机6位数字 |
| | | * @return |
| | | */ |
| | | public static String randomSixNum(){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * bootstrap自动组装的分页对象解析为hibernate提供接口的分页对象 |
| | | * @param objPaginationData 前台自动组装的分页对象 |
| | | * bootstrap自动组装的分页对象解析为hibernate提供接口的分页对象 |
| | | * @param objPaginationData 前台自动组装的分页对象 |
| | | * @return |
| | | */ |
| | | public static Pager getPager(PaginationData objPaginationData){ |
| | |
| | | public class ParamsUtils { |
| | | |
| | | /** |
| | | * 获取查询条件的公用方法 |
| | | * 获取查询条件的公用方法 |
| | | * |
| | | * @param request HttpServletRequest |
| | | * @param strSupportQueryArray 定义自己功能模块支持查询的条件数组集合 |
| | | * @param lstQueryCondition 查询条件 |
| | | * @param strSupportQueryArray 定义自己功能模块支持查询的条件数组集合 |
| | | * @param lstQueryCondition 查询条件 |
| | | */ |
| | | public static void getAllQueryCondition(HttpServletRequest request, String[] strSupportQueryArray, |
| | | List<Param> lstParams) { |
| | |
| | | String strValue = ""; |
| | | List<String> lstSupportQuery = Arrays.asList(strSupportQueryArray); |
| | | /** |
| | | * 条件分为以下几种情况: 1、关键字查询 2、单选按钮的数据字典值 3、复选数组,比如类型 |
| | | * 4、时间范围,比如开始时间和结束时间 5、数字范围, 6、其它类型 |
| | | * 条件分为以下几种情况: 1、关键字查询 2、单选按钮的数据字典值 3、复选数组,比如类型 |
| | | * 4、时间范围,比如开始时间和结束时间 5、数字范围, 6、其它类型 |
| | | */ |
| | | for (Map.Entry<String, String[]> entry : entryseSet) { |
| | | /** 获取参数中的键值对 */ |
| | | /** 获取参数中的键值对 */ |
| | | strKey = entry.getKey().toString(); |
| | | strValue = entry.getValue()[0]; |
| | | /** 不支持的条件将会被过滤 */ |
| | | /** 不支持的条件将会被过滤 */ |
| | | if (lstSupportQuery.contains(strKey) && StringUtils.isNotBlank(strValue)) { |
| | | // 去空格 |
| | | // 去空格 |
| | | strValue = strValue.trim(); |
| | | if (strValue.matches("^[0-9]*[0-9][0-9]*$")) {// 单选 数字 |
| | | if (strValue.matches("^[0-9]*[0-9][0-9]*$")) {// 单选 数字 |
| | | lstParams.add(new Param(strKey, " = ", strValue)); |
| | | } else if (strValue.contains(",")) {// 复选 数字 |
| | | } else if (strValue.contains(",")) {// 复选 数字 |
| | | if (strValue.replace(",", "").matches("^-?[0-9]*$")){ |
| | | lstParams.add(new Param(strKey, " in ", strValue )); |
| | | } |
| | | } else if (strValue.contains("~")) {// 时间范围 |
| | | } else if (strValue.contains("~")) {// 时间范围 |
| | | |
| | | }else if (strValue.contains("-")) {// 数字范围 |
| | | }else if (strValue.contains("-")) {// 数字范围 |
| | | |
| | | } else {// 其它 |
| | | } else {// 其它 |
| | | lstParams.add(new Param(strKey, " LIKE ", "%"+strValue+"%")); |
| | | } |
| | | } |
| | |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * 手机号码工具类 |
| | | * @author 德虎 |
| | | * 手机号码工具类 |
| | | * @author 德虎 |
| | | * |
| | | */ |
| | | public final class PhoneNOUtils { |
| | |
| | | private final static Pattern pattern = Pattern.compile("1[3,4,5,7,8]\\d{9}"); |
| | | |
| | | /** |
| | | * 验证是否为有效手机号 |
| | | * 验证是否为有效手机号 |
| | | * @param phoneNo |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 替换手机号关键号码为* |
| | | * 替换手机号关键号码为* |
| | | * @param phoneNo |
| | | * @return |
| | | */ |
| | |
| | | import org.apache.logging.log4j.Logger; |
| | | |
| | | /** |
| | | * Bean 工具类 |
| | | * @author 夏德虎 |
| | | * Bean 工具类 |
| | | * @author 夏德虎 |
| | | * |
| | | */ |
| | | public class QBeanUtils { |
| | |
| | | private static final Logger log = LogManager.getLogger("QBeanUtils"); |
| | | |
| | | /** |
| | | * 将 Bean 转换成 Map,支持 将 id 转换为 id1 |
| | | * @param src bean对象 |
| | | * @param propertyMap 字段映射 |
| | | * 将 Bean 转换成 Map,支持 将 id 转换为 id1 |
| | | * @param src bean对象 |
| | | * @param propertyMap 字段映射 |
| | | * @return |
| | | */ |
| | | public static final <T> Map<String,Object> bean2Map(T src,Map<String,String> propertyMap) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将List<T> 转换成 List<Map>,支持 将 id 转换为 id1 |
| | | * @param src List<T>对象 |
| | | * @param propertyMap 字段映射 |
| | | * 将List<T> 转换成 List<Map>,支持 将 id 转换为 id1 |
| | | * @param src List<T>对象 |
| | | * @param propertyMap 字段映射 |
| | | * @return |
| | | */ |
| | | public static final <T> List<Map<String,Object>> listBean2ListMap(List<T> src,Map<String,String> propertyMap) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将List<T> 转换成 List<Map>,支持 将 id 转换为 id1 |
| | | * @param src List<T>对象 |
| | | * @param propertyMap 字段映射 |
| | | * 将List<T> 转换成 List<Map>,支持 将 id 转换为 id1 |
| | | * @param src List<T>对象 |
| | | * @param propertyMap 字段映射 |
| | | * @return |
| | | * @throws NoSuchMethodException |
| | | * @throws InvocationTargetException |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将bean列表中的一个属性值作为KEY,另一个属性值作为value |
| | | * 将bean列表中的一个属性值作为KEY,另一个属性值作为value |
| | | * @param src |
| | | * @param propertyKey |
| | | * @param propertyVal |
| | |
| | | |
| | | |
| | | /** |
| | | * 将Object 挑选指定属性转换成 Map<String,Object> |
| | | * @param src 源目标 |
| | | * @param propertyMap 字段映射 |
| | | * 将Object 挑选指定属性转换成 Map<String,Object> |
| | | * @param src 源目标 |
| | | * @param propertyMap 字段映射 |
| | | * @return |
| | | */ |
| | | public static final Map<String,Object> copyPropertiesToMap(Object src,Map<String,String> propertyMap) { |
| | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * 文件工具类 |
| | | * 文件工具类 |
| | | * @author xiadehu |
| | | * |
| | | */ |
| | | public final class QFileUtils { |
| | | |
| | | /** |
| | | * 根据后缀名得到文件类型 |
| | | * 根据后缀名得到文件类型 |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | |
| | | import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; |
| | | |
| | | /** |
| | | * 二维码生成工具类 |
| | | * 二维码生成工具类 |
| | | * |
| | | * @author 德虎 |
| | | * @author 德虎 |
| | | * |
| | | */ |
| | | public final class QrCodeUtils { |
| | |
| | | private static Logger log = LogManager.getLogger(QrCodeUtils.class); |
| | | |
| | | /** |
| | | * 生成二维码图片并输出到流 |
| | | * @param msg 需要生成的二维码信息 |
| | | * @param os 二维码图片输出流,输出后会自动关闭 |
| | | * @param logoFlag 是否添加logo |
| | | * 生成二维码图片并输出到流 |
| | | * @param msg 需要生成的二维码信息 |
| | | * @param os 二维码图片输出流,输出后会自动关闭 |
| | | * @param logoFlag 是否添加logo |
| | | * |
| | | */ |
| | | public static void createQRCodeImgAndSend(String msg, OutputStream os, boolean logoFlag) { |
| | | try { |
| | | //如果是网址,则转换为短网址 |
| | | //如果是网址,则转换为短网址 |
| | | /*if(ShortUrlUtils.IsUrl(msg)){ |
| | | IShortUrlService shortUrlService = SpringUtil.getBean(IShortUrlService.class); |
| | | ShortUrl oldShortUrl = shortUrlService.queryShortUrl(msg); |
| | | if(oldShortUrl != null){//判断是否已经存在数据 |
| | | if(oldShortUrl != null){//判断是否已经存在数据 |
| | | msg = oldShortUrl.getShortUrl(); |
| | | }else{ |
| | | //获取域 |
| | | //获取域 |
| | | String domain = SpringUtil.getBean(IConfigService.class).getConfigByEnv("domain-name"); |
| | | //获取短链接编码 |
| | | //获取短链接编码 |
| | | String strShortUrlCode = ShortUrlUtils.shortUrl(msg); |
| | | //拼接成短链接 |
| | | //拼接成短链接 |
| | | String shortUrl = domain+(domain.indexOf("/qxueyou", 10)>=0?"/s/":"/qxueyou/s/")+strShortUrlCode; |
| | | ShortUrl objShortUrl = new ShortUrl(); |
| | | //保存短链接的值 |
| | | //保存短链接的值 |
| | | objShortUrl.setShortUrl(shortUrl); |
| | | objShortUrl.setLongUrl(msg); |
| | | objShortUrl.setShortUrlCode(strShortUrlCode); |
| | |
| | | msg, |
| | | BarcodeFormat.QR_CODE, 300, 300, hints); |
| | | MatrixToImageConfig config = new MatrixToImageConfig(0xFF000000, -1); |
| | | //添加机构图标 |
| | | //添加机构图标 |
| | | if(StringUtils.isNoneBlank(ClientUtils.getOrgLogoPath()) && ShortUrlUtils.IsUrl(msg) && logoFlag){ |
| | | int width = bitMatrix.getWidth(); |
| | | int height = bitMatrix.getHeight(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 添加机构logo |
| | | * 添加机构logo |
| | | * |
| | | * @param buf 生成的二维码 |
| | | * @param buf 生成的二维码 |
| | | * @return |
| | | * @throws IOException |
| | | */ |
| | |
| | | // String domain = SpringUtil.getBean(IConfigService.class).getConfigByEnv("oss-domain"); |
| | | String domain =null; |
| | | httpClient = HttpClients.createDefault(); |
| | | //获取机构logo |
| | | //获取机构logo |
| | | httpget = new HttpGet(domain+ClientUtils.getOrgLogoPath()); |
| | | HttpResponse response = httpClient.execute(httpget); |
| | | HttpEntity entity = response.getEntity(); |
| | | /** |
| | | * 读取Logo图片 |
| | | * 读取Logo图片 |
| | | */ |
| | | BufferedImage logo = ImageIO.read(entity.getContent()); |
| | | /** |
| | | * 读取二维码图片,并构建绘图对象 |
| | | * 读取二维码图片,并构建绘图对象 |
| | | */ |
| | | Graphics2D g = buf.createGraphics(); |
| | | int widthLogo = 65, heightLogo = 65; |
| | | |
| | | // 计算图片放置位置 |
| | | // 计算图片放置位置 |
| | | int x = (buf.getWidth() - widthLogo) / 2; |
| | | int y = (buf.getHeight() - heightLogo) / 2; |
| | | |
| | | //开始绘制图片 |
| | | //开始绘制图片 |
| | | g.setColor(Color.WHITE); |
| | | g.drawImage(logo, x, y, widthLogo, heightLogo, null); |
| | | g.setStroke(new BasicStroke(1)); |
| | |
| | | ImageIO.write(buf, "PNG", os); |
| | | }catch (Exception e) { |
| | | ImageIO.write(buf, "PNG", os); |
| | | log.error("二维码添加logo失败"+e); |
| | | log.error("二维码添加logo失败"+e); |
| | | }finally { |
| | | httpClient.close(); |
| | | } |
| | |
| | | import com.querydsl.core.types.dsl.Expressions; |
| | | |
| | | /** |
| | | * jpa查询 参数为空包装builder |
| | | * jpa查询 参数为空包装builder |
| | | * @author zhiyong |
| | | * |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 不为空 and 对象 |
| | | * 不为空 and 对象 |
| | | * @param expressionFunction |
| | | * @param value |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 不为空 and String类型 |
| | | * 不为空 and String类型 |
| | | * @param expressionFunction |
| | | * @param value |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 不为空 and 集合类型 |
| | | * 不为空 and 集合类型 |
| | | * @param expressionFunction |
| | | * @param collection |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 不为空 or 所有对象 |
| | | * 不为空 or 所有对象 |
| | | * @param expressionFunction |
| | | * @param value |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 不为空 or String类型 |
| | | * 不为空 or String类型 |
| | | * @param expressionFunction |
| | | * @param value |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 不为空 or 集合类型 |
| | | * 不为空 or 集合类型 |
| | | * @param expressionFunction |
| | | * @param collection |
| | | * @return |
| | |
| | | //import com.qxueyou.scc.base.service.IConfigService; |
| | | |
| | | /** |
| | | * RSA加解密--调用远程加解密服务 |
| | | * @author 德虎 |
| | | * RSA加解密--调用远程加解密服务 |
| | | * @author 德虎 |
| | | * |
| | | */ |
| | | public class RSAUtils { |
| | |
| | | private static RSAClient client; |
| | | |
| | | /** |
| | | * 构建远程RSA加解密客户端 |
| | | * 构建远程RSA加解密客户端 |
| | | */ |
| | | private static void buildClient() { |
| | | try { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 调用远程加密服务对字符串加密 |
| | | * 调用远程加密服务对字符串加密 |
| | | * @param string |
| | | * @return |
| | | */ |
| | |
| | | try { |
| | | return client.encrypt(string); |
| | | } catch (Exception e) { |
| | | log.error("加解密服务初始化错误:"+e.getMessage(), e); |
| | | log.error("加解密服务初始化错误:"+e.getMessage(), e); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 调用远程解密服务对密文字符串解决 |
| | | * 调用远程解密服务对密文字符串解决 |
| | | * @param string |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * Hessian本地接口 |
| | | * Hessian本地接口 |
| | | * @author user |
| | | * |
| | | */ |
| | |
| | | private static Logger log = LogManager.getLogger(ReisUtils.class); |
| | | |
| | | /** |
| | | * 序列化对象 |
| | | * 序列化对象 |
| | | */ |
| | | public static byte[] serialize(Object obj){ |
| | | ObjectOutputStream objectOs = null; |
| | |
| | | objectOs.writeObject(obj); |
| | | bytes = byteArrOs.toByteArray(); |
| | | } catch (Exception e) { |
| | | log.error("序列化对象失败!"); |
| | | log.error("序列化对象失败!"); |
| | | }finally { |
| | | IOUtils.closeQuietly(objectOs); |
| | | IOUtils.closeQuietly(byteArrOs); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 反序列化对象 |
| | | * 反序列化对象 |
| | | */ |
| | | public static Object unserialize(byte[] bytes){ |
| | | Object returnObject = null; |
| | |
| | | returnObject = objectIns.readObject(); |
| | | } |
| | | }catch (Exception e) { |
| | | log.error("反序列化对象失败!",e); |
| | | log.error("反序列化对象失败!",e); |
| | | }finally { |
| | | IOUtils.closeQuietly(objectIns); |
| | | IOUtils.closeQuietly(byteArrIns); |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取客户端ip地址 |
| | | * 获取客户端ip地址 |
| | | * |
| | | * @param request |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取服务器本地IP |
| | | * 获取服务器本地IP |
| | | * @return |
| | | */ |
| | | public static String getLocalIP() { |
| | |
| | | Enumeration<InetAddress> ips = ni.getInetAddresses(); |
| | | while (ips.hasMoreElements()) { |
| | | ip = (InetAddress) ips.nextElement(); |
| | | // 127.开头的都是lookback地址 |
| | | // 127.开头的都是lookback地址 |
| | | if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) { |
| | | return ip.getHostAddress(); |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取COOKIE : KEY |
| | | * 获取COOKIE : KEY |
| | | * @param httpRequest |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 解析客户端 |
| | | * 解析客户端 |
| | | * @param userAgent userAgent |
| | | * @return |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * 判断是PC端还是移动端 |
| | | * 判断是PC端还是移动端 |
| | | * |
| | | * @return |
| | | */ |
| | | public static boolean isMobileDevice(String requestHeader){ |
| | | /** |
| | | * android : 所有android设备 |
| | | * android : 所有android设备 |
| | | * iphone : iphone |
| | | * windows phone:Nokia等windows系统的手机 |
| | | * ipad :ipad |
| | | * windows phone:Nokia等windows系统的手机 |
| | | * ipad :ipad |
| | | */ |
| | | String lowerRequestHeader = requestHeader; |
| | | String[] deviceArray = new String[]{"android","iphone","windows phone","ipad"}; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 判断是PC端还是移动端 |
| | | * 判断是PC端还是移动端 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | return agent[1]; |
| | | } |
| | | } |
| | | return "δ֪"; |
| | | return "未知"; |
| | | } |
| | | |
| | | /** |
| | | * 判断是否在微信浏览器打开 |
| | | * 判断是否在微信浏览器打开 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取头信息 |
| | | * 获取头信息 |
| | | * |
| | | * @param userAgent |
| | | * @return |
| | |
| | | uaParser = new Parser(); |
| | | return uaParser.parse(userAgent); |
| | | } catch (IOException e) { |
| | | log.error("解析头信息失败", e); |
| | | log.error("解析头信息失败", e); |
| | | } |
| | | return null; |
| | | } |
| | |
| | | import org.apache.logging.log4j.Logger; |
| | | |
| | | /** |
| | | * 序列化工具类 |
| | | * @author 德虎 |
| | | * 序列化工具类 |
| | | * @author 德虎 |
| | | * |
| | | */ |
| | | public class SerializeUtils { |
| | |
| | | private static Logger log = LogManager.getLogger("SerializeUtils"); |
| | | |
| | | /** |
| | | * 将对象转换为字节数组 |
| | | * @param obj 可序列化的对象 |
| | | * @return 字节数组 |
| | | * 将对象转换为字节数组 |
| | | * @param obj 可序列化的对象 |
| | | * @return 字节数组 |
| | | */ |
| | | public static byte[] toByteArrayFromObject(Object obj){ |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 将字节数组为对象转换 |
| | | * @param data 字节数组 |
| | | * @param cls 要转化的对象类型 |
| | | * @return 要转化的对象 |
| | | * 将字节数组为对象转换 |
| | | * @param data 字节数组 |
| | | * @param cls 要转化的对象类型 |
| | | * @return 要转化的对象 |
| | | */ |
| | | public static <T> T toObjectFromByte(byte[] data,Class<T> cls){ |
| | | |
| | |
| | | /****************************************************************************** |
| | | * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd |
| | | * All Rights Reserved. |
| | | * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体 |
| | | * 不得使用、复制、修改或发布本软件. |
| | | *****************************************************************************/ |
| | | |
| | | package com.qxueyou.scc.base.util; |
| | |
| | | |
| | | /** |
| | | * |
| | | * Spring 工具类,提供获取Sping上下文环境及获取Bean的接口 |
| | | * @history 2010-09-12 夏德虎 新建 |
| | | * Spring 工具类,提供获取Sping上下文环境及获取Bean的接口 |
| | | * @history 2010-09-12 夏德虎 新建 |
| | | * |
| | | */ |
| | | @Component |
| | |
| | | private SpringUtil(){} |
| | | |
| | | /** |
| | | * 获取bean |
| | | * @param <T> 泛型类型 |
| | | * 获取bean |
| | | * @param <T> 泛型类型 |
| | | * @param name bean name |
| | | * @param clz bean 类型 |
| | | * @param context servlet上下文 |
| | | * @return bean实例 |
| | | * @param clz bean 类型 |
| | | * @param context servlet上下文 |
| | | * @return bean实例 |
| | | */ |
| | | public static <T> T getBean(String name,Class<T> clz){ |
| | | return applicationContext.getBean(name,clz); |
| | | } |
| | | |
| | | /** |
| | | * 获取bean |
| | | * @param <T> 泛型类型 |
| | | * @param clz bean 类型 |
| | | * @param context servlet上下文 |
| | | * @return bean实例 |
| | | * 获取bean |
| | | * @param <T> 泛型类型 |
| | | * @param clz bean 类型 |
| | | * @param context servlet上下文 |
| | | * @return bean实例 |
| | | */ |
| | | public static <T> T getBean(Class<T> clz){ |
| | | return applicationContext.getBean(clz); |
| | |
| | | import com.alibaba.fastjson.JSON; |
| | | |
| | | /** |
| | | * String 和 map<String,String>的转换 |
| | | * String 和 map<String,String>的转换 |
| | | * @author ody.yuan |
| | | * |
| | | */ |
| | | public class StringMapUtils { |
| | | |
| | | /** |
| | | * Map<String,String> ת String |
| | | * Map<String,String> 转 String |
| | | * |
| | | * @param map 需要转换的map |
| | | * @param map 需要转换的map |
| | | * @return |
| | | */ |
| | | public static String transMapToString(Map<String,String> map){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 调用transMapToString方法有map转得String,重新转回map |
| | | * 调用transMapToString方法有map转得String,重新转回map |
| | | * |
| | | * @param mapString 调用transMapToString方法有map转得String |
| | | * @param mapString 调用transMapToString方法有map转得String |
| | | * @return |
| | | */ |
| | | public static Map<String,String> transStringToMap(String mapString){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * json ת map |
| | | * json 转 map |
| | | * @param json |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | |
| | | } |
| | | |
| | | /** |
| | | * map ת json |
| | | * map 转 json |
| | | * @param json |
| | | */ |
| | | public static String map2Json(Map<String,Object> map){ |
| | |
| | | import com.qxueyou.scc.base.model.ITrace; |
| | | |
| | | /** |
| | | * 数据修改轨迹记录工具类 |
| | | * 数据修改轨迹记录工具类 |
| | | */ |
| | | public class TraceUtils { |
| | | |
| | | /** 管理员账号、账号id */ |
| | | /** 管理员账号、账号id */ |
| | | public static final String ADMIN_ACCOUNT="admin"; |
| | | |
| | | public static final String ADMIN_ACCOUNT_ID="admin"; |
| | | |
| | | /** |
| | | * 设置激活 新增轨迹信息 |
| | | * 设置激活 新增轨迹信息 |
| | | * @param trace |
| | | */ |
| | | public static void setCreateActiveTrace(ITrace trace){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置新增轨迹信息 |
| | | * 设置新增轨迹信息 |
| | | * @param trace |
| | | */ |
| | | public static void setCreateTrace(ITrace trace){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置新增轨迹信息 |
| | | * 设置新增轨迹信息 |
| | | * @param trace |
| | | */ |
| | | @SuppressWarnings("rawtypes") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除已删除的记录 |
| | | * 删除已删除的记录 |
| | | * @param trace |
| | | */ |
| | | @SuppressWarnings("rawtypes") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置更新轨迹信息 |
| | | * 设置更新轨迹信息 |
| | | * @param trace |
| | | */ |
| | | public static void setUpdateTrace(ITrace trace){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置新增轨迹信息 |
| | | * 设置新增轨迹信息 |
| | | * @param trace |
| | | */ |
| | | @SuppressWarnings("rawtypes") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 通过HashSet踢除重复元素 |
| | | * 通过HashSet踢除重复元素 |
| | | * @param list |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 初始化代理实体 |
| | | * 初始化代理实体 |
| | | * @param entity |
| | | * @return |
| | | */ |
| | |
| | | public static <T> T initializeAndUnproxy(T entity) { |
| | | if (entity == null) { |
| | | throw new |
| | | NullPointerException("初始化实体为空"); |
| | | NullPointerException("初始化实体为空"); |
| | | } |
| | | |
| | | Hibernate.initialize(entity); |
| | |
| | | import java.util.UUID; |
| | | |
| | | /** |
| | | * UUID工具类 |
| | | * @author 德虎 |
| | | * UUID工具类 |
| | | * @author 德虎 |
| | | * |
| | | */ |
| | | public final class UUIDUtils { |
| | |
| | | public static String specifalChars = "0123456789abcdefghijklmnopqrstuvwxyz"; |
| | | |
| | | /** |
| | | * 生成UUID |
| | | * 生成UUID |
| | | * @return |
| | | */ |
| | | public static String generateUUID(){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 生成UUID |
| | | * 生成UUID |
| | | * @return |
| | | */ |
| | | public static String UUID(){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 生成8位随机码 |
| | | * 生成8位随机码 |
| | | * @return |
| | | */ |
| | | public static String generateShortUuid() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 生成最少16位随机码 |
| | | * 生成最少16位随机码 |
| | | * @return |
| | | */ |
| | | public static String generateSpecialUuid(int length) { |
| | |
| | | |
| | | public static final String allChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
| | | |
| | | // 0 - 9 对应ascii值为 48 --> 57 |
| | | // A - Z 对应ascii值为 65 --> 90 |
| | | // a - z 对应ascii值为 97 --> 122 |
| | | // 0 - 9 对应ascii值为 48 --> 57 |
| | | // A - Z 对应ascii值为 65 --> 90 |
| | | // a - z 对应ascii值为 97 --> 122 |
| | | |
| | | public static void main(String[] args) { |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 生成code |
| | | * 生成code |
| | | * @param length |
| | | * @param index |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 生成每个位置上的序号 |
| | | * 生成每个位置上的序号 |
| | | * @param length |
| | | * @param index |
| | | * @return |
| | |
| | | configure.setDefaultEncoding("utf-8"); |
| | | } |
| | | /** |
| | | * 根据Doc模板生成word文件 |
| | | * @param dataMap 需要填入模板的数据 |
| | | * @param downloadType 文件名称 |
| | | * 根据Doc模板生成word文件 |
| | | * @param dataMap 需要填入模板的数据 |
| | | * @param downloadType 文件名称 |
| | | */ |
| | | public Template createDoc(String downloadType){ |
| | | try { |
| | | //设置模板装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载。 |
| | | //加载模板文件,放在testDoc下 |
| | | //设置模板装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载。 |
| | | //加载模板文件,放在testDoc下 |
| | | configure.setClassForTemplateLoading(this.getClass(), ""); |
| | | //设置异常处理器 |
| | | //设置异常处理器 |
| | | configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER); |
| | | |
| | | return configure.getTemplate(downloadType);//定义Template对象,注意模板类型名字与downloadType要一致 |
| | | return configure.getTemplate(downloadType);//定义Template对象,注意模板类型名字与downloadType要一致 |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | |
| | | //import com.qxueyou.scc.base.service.IConfigService; |
| | | |
| | | /** |
| | | * 使用远程服务HanLP引擎,处理文本,包括分词,转拼音,提取摘要,词频统计,关键字提取 |
| | | * 使用远程服务HanLP引擎,处理文本,包括分词,转拼音,提取摘要,词频统计,关键字提取 |
| | | * @author xiadehu |
| | | * |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * 分词,如果传入null,则返回空 |
| | | * @param text 原文 |
| | | * @return 分词后的结果 |
| | | * 分词,如果传入null,则返回空 |
| | | * @param text 原文 |
| | | * @return 分词后的结果 |
| | | */ |
| | | public static String segment(String text){ |
| | | if (client == null) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 转拼音,无分隔符 |
| | | * @param text 原文 |
| | | * @return 转拼音的结果 |
| | | * 转拼音,无分隔符 |
| | | * @param text 原文 |
| | | * @return 转拼音的结果 |
| | | */ |
| | | public static String toPinyin(String text){ |
| | | if (client == null) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 转拼音 |
| | | * @param text 原文 |
| | | * @param seperator 分隔符 |
| | | * @return 转拼音的结果 |
| | | * 转拼音 |
| | | * @param text 原文 |
| | | * @param seperator 分隔符 |
| | | * @return 转拼音的结果 |
| | | */ |
| | | public static String toPinyin(String text,String seperator){ |
| | | if (client == null) { |
| | |
| | | for(Object element:root.elements()){ |
| | | child = (Element) element; |
| | | |
| | | if(child.getName().contains("list")){// lst组合 |
| | | if(child.getName().contains("list")){// lst组合 |
| | | result.put(child.getName(), getXMLList(child)); |
| | | }else{ |
| | | result.put(child.getName(), child.getText()); |
| | |
| | | import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; |
| | | |
| | | /** |
| | | * 文件转换为pdf的工具类 |
| | | * 文件转换为pdf的工具类 |
| | | * |
| | | * @author lyl |
| | | * |
| | | */ |
| | | public class docConverterUtil { |
| | | @SuppressWarnings("unused") |
| | | private String fileString; // (待转换文件的根路径) |
| | | private String fileString; // (待转换文件的根路径) |
| | | @SuppressWarnings("unused") |
| | | private String outputPath = ""; // pdf输出路径 ,如果不设置就输出在默认的位置 |
| | | private String outputPath = ""; // pdf输出路径 ,如果不设置就输出在默认的位置 |
| | | @SuppressWarnings("unused") |
| | | private String fileName; |
| | | private File pdfFile; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 可自定义设置转换文件全路径名 |
| | | * 可自定义设置转换文件全路径名 |
| | | * |
| | | * @param fileString |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 初始化 |
| | | * 初始化 |
| | | * |
| | | * @param fileString |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置输出路径 |
| | | * 设置输出路径 |
| | | */ |
| | | public void setOutputPath(String outputPath) { |
| | | this.outputPath = outputPath; |
| | |
| | | } |
| | | |
| | | /** |
| | | * תΪPDF |
| | | * 转为PDF |
| | | * |
| | | * @param file |
| | | */ |
| | |
| | | if (docFile.exists()) { |
| | | if (!pdfFile.exists()) { |
| | | String OpenOffice_HOME = "C:\\Program Files (x86)\\OpenOffice 4"; |
| | | // 如果从文件中读取的URL地址最后一个字符不是 '\',则添加'\' |
| | | // 如果从文件中读取的URL地址最后一个字符不是 '\',则添加'\' |
| | | if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') { |
| | | OpenOffice_HOME += "\\"; |
| | | } |
| | | // 启动OpenOffice的服务 |
| | | // 启动OpenOffice的服务 |
| | | String command = OpenOffice_HOME |
| | | + "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\""; |
| | | Process pro = Runtime.getRuntime().exec(command); |
| | |
| | | DocumentConverter converter = new OpenOfficeDocumentConverter(connection); |
| | | converter.convert(docFile, pdfFile); |
| | | connection.disconnect(); |
| | | System.out.println("df转换成功,保存路径:" + pdfFile.getPath()); |
| | | System.out.println("df转换成功,保存路径:" + pdfFile.getPath()); |
| | | } catch (java.net.ConnectException e) { |
| | | e.printStackTrace(); |
| | | System.out.println("转换失败,openoffice服务未启动!"); |
| | | System.out.println("转换失败,openoffice服务未启动!"); |
| | | throw e; |
| | | } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) { |
| | | e.printStackTrace(); |
| | | System.out.println("读取转换文件失败"); |
| | | System.out.println("读取转换文件失败"); |
| | | throw e; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw e; |
| | | } |
| | | } else { |
| | | System.out.println("文件已存在,不需要转换"); |
| | | System.out.println("文件已存在,不需要转换"); |
| | | } |
| | | } else { |
| | | System.out.println("需要转换的文档不存在,无法转换"); |
| | | System.out.println("需要转换的文档不存在,无法转换"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 返回pdf文件路径 |
| | | * 返回pdf文件路径 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | import springfox.documentation.swagger2.annotations.EnableSwagger2; |
| | | |
| | | /** |
| | | * SWAGGER2配置,访问地址:http://xxxx:8090/scc/swagger-ui.html |
| | | * SWAGGER2配置,访问地址:http://xxxx:8090/scc/swagger-ui.html |
| | | * |
| | | * @author kevin |
| | | */ |
| | | @Configuration |
| | | @EnableSwagger2 |
| | | //@Profile("dev")//测试环境配置,正式环境不配置 |
| | | //@Profile("dev")//测试环境配置,正式环境不配置 |
| | | public class Swagger2 { |
| | | |
| | | @Autowired |
| | |
| | | |
| | | private ApiInfo apiInfo() { |
| | | return new ApiInfoBuilder() |
| | | .title("智慧蓝项目接口 restful api") |
| | | .description("本API基于Swagger 2.9.2版本构建") |
| | | .title("智慧蓝项目接口 restful api") |
| | | .description("本API基于Swagger 2.9.2版本构建") |
| | | .termsOfServiceUrl(config.getDomain()) |
| | | .contact(new Contact("kevin","","")) |
| | | .version("1.0") |
| | |
| | | |
| | | import java.util.List; |
| | | |
| | | @Api(tags="考勤管理接口") |
| | | @Api(tags="考勤管理接口") |
| | | @RestController |
| | | @RequestMapping("/admin/Attendance") |
| | | public class AttendanceController { |
| | | @Autowired |
| | | private AttendanceService attendanceService; |
| | | |
| | | @ApiOperation(value = "打卡", notes = "") |
| | | @ApiOperation(value = "打卡", notes = "") |
| | | @PostMapping(value = "/attendanceUpAndAdd") |
| | | public String attendanceUpAndAdd(String studentId, String subjectId) { |
| | | return attendanceService.attendanceUpAndAdd(studentId,subjectId); |
| | | } |
| | | |
| | | @ApiOperation(value = "考勤信息", notes = "") |
| | | @ApiOperation(value = "考勤信息", notes = "") |
| | | @GetMapping(value = "/attendanceList") |
| | | public Result attendanceList(@RequestParam(defaultValue = "10") Integer limit, @RequestParam(defaultValue = "1") Integer pageNum, String keyword, String subjectId) { |
| | | |
| | |
| | | "attendanceCount", count)); |
| | | } |
| | | |
| | | @ApiOperation(value = "修改考勤状态", notes = "") |
| | | @ApiOperation(value = "修改考勤状态", notes = "") |
| | | @GetMapping(value = "/updateAttendanceStatus") |
| | | public Result updateAttendanceStatus(String studentId, String attendanceStatus) { |
| | | return attendanceService.updateAttendanceStatus(studentId,attendanceStatus); |
| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | /** |
| | | * 班级管理控制器 |
| | | * 班级管理控制器 |
| | | * |
| | | * @author chenjunliang |
| | | */ |
| | | @Api(tags="班级管理接口") |
| | | @Api(tags="班级管理接口") |
| | | @RestController |
| | | @RequestMapping("/admin/class") |
| | | public class ClassController { |
| | |
| | | @Autowired |
| | | IClassLectureService clsLectureService; |
| | | |
| | | //---------------------------------------------------------------------------------app接口--------------------------------------------------------------------------------------------------------------------/ |
| | | //---------------------------------------------------------------------------------app接口--------------------------------------------------------------------------------------------------------------------/ |
| | | /** |
| | | * 获取正常班级列表 |
| | | * 获取正常班级列表 |
| | | * |
| | | * @param keyword |
| | | * @param limit |
| | | * @param pageNum |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取正常班级列表", notes = "") |
| | | @ApiOperation(value = "获取正常班级列表", notes = "") |
| | | @GetMapping(value = "/app/classList") |
| | | public Result classList(@RequestParam(defaultValue = "") String keyword, Pager pager) { |
| | | return this.classService.classList(keyword, pager, 1); |
| | | } |
| | | |
| | | /** |
| | | * 获取历史班级列表 |
| | | * 获取历史班级列表 |
| | | * |
| | | * @param keyword |
| | | * @param limit |
| | | * @param pageNum |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取历史班级列表", notes = "") |
| | | @ApiOperation(value = "获取历史班级列表", notes = "") |
| | | @GetMapping(value = "/app/historyClassList") |
| | | public Result historyClassList(@RequestParam(defaultValue = "") String keyword, Pager pager) { |
| | | return this.classService.classList(keyword, pager, 2); |
| | | } |
| | | |
| | | /** |
| | | * 学员详情 |
| | | * 学员详情 |
| | | * |
| | | * @param classId |
| | | * @param studentId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "学员详情", notes = "") |
| | | @ApiOperation(value = "学员详情", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "studentId", value = "ѧԱid", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "studentId", value = "学员id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "/app/studentInfo") |
| | | public Result studentInfo(String classId, String studentId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 学员详情 |
| | | * 学员详情 |
| | | * |
| | | * @param classId |
| | | * @param studentId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "学员学习进度", notes = "") |
| | | @ApiOperation(value = "学员学习进度", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "studentId", value = "ѧԱid", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "studentId", value = "学员id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "/app/studentProgress") |
| | | public Result studentProgress(String classId, String studentId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取首页数据排行 |
| | | * 获取首页数据排行 |
| | | * |
| | | * |
| | | * @param subjectId |
| | | */ |
| | | @ApiOperation(value = "班级排行榜", notes = "") |
| | | @ApiOperation(value = "班级排行榜", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "/app/getDataDesc") |
| | | public Result getDataDesc(String classId, String subjectId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 学员课程进度 |
| | | * 学员课程进度 |
| | | * |
| | | * |
| | | * @param subjectId |
| | | */ |
| | | @ApiOperation(value = "学员课程进度", notes = "") |
| | | @ApiOperation(value = "学员课程进度", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "studentId", value = "ѧԱid", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "studentId", value = "学员id", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "/app/studentSubjectProgress") |
| | | public Result studentSubjectProgress(String classId, String subjectId, String studentId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 班级学员课程总体进度 |
| | | * 班级学员课程总体进度 |
| | | * |
| | | * |
| | | * @param classId |
| | | */ |
| | | @ApiOperation(value = "班级学员课程总体进度", notes = "") |
| | | @ApiOperation(value = "班级学员课程总体进度", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "/app/studentAllSubjectProgress") |
| | | public Result studentSubjectProgress(String classId) { |
| | | if(StringUtils.isEmpty(classId)) { |
| | | return new Result(false, "班级id参数不能为空"); |
| | | return new Result(false, "班级id参数不能为空"); |
| | | } |
| | | return new Result(true, "success", CollectionUtils.newObjectMap("subjectList", this.subjectService.studentSubjectProgress(classId, new Pager()))); |
| | | } |
| | | |
| | | /** |
| | | * 班级学员课件总体进度 |
| | | * 班级学员课件总体进度 |
| | | * |
| | | * |
| | | * @param classId |
| | | */ |
| | | @ApiOperation(value = "班级学员课件总体进度", notes = "") |
| | | @ApiOperation(value = "班级学员课件总体进度", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "/app/studentSubjectLectureProgress") |
| | | public Result studentSubjectLectureProgress(String classId, String subjectId) { |
| | | if(StringUtils.isEmpty(classId)) { |
| | | return new Result(false, "班级id参数不能为空"); |
| | | return new Result(false, "班级id参数不能为空"); |
| | | } |
| | | if(StringUtils.isEmpty(subjectId)) { |
| | | return new Result(false, "课程id参数不能为空"); |
| | | return new Result(false, "课程id参数不能为空"); |
| | | } |
| | | |
| | | //获取所有课件 |
| | | //获取所有课件 |
| | | List<Map<String, Object>> lectures = this.subjectService.studentSubjectLectureProgress(subjectId, classId); |
| | | //获取所以章节 |
| | | //获取所以章节 |
| | | List<ClsSubjectChapter> chapterLst = clsLectureService.getChapterLectures(clsLectureService.getListChapter(classId, subjectId, null), lectures); |
| | | |
| | | return new Result(true, "success", CollectionUtils.newObjectMap("count",clsLectureService.stuLectureCountBySubject(subjectId, classId), "listData", QBeanUtils.listBean2ListMap(chapterLst, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 学员注册 |
| | | * 学员注册 |
| | | * |
| | | * @param name 学员名称 |
| | | * @param studentNumber 学号 |
| | | * @param sex 性别 |
| | | * @param mobilePhone 手机号 |
| | | * @param name 学员名称 |
| | | * @param studentNumber 学号 |
| | | * @param sex 性别 |
| | | * @param mobilePhone 手机号 |
| | | */ |
| | | @ApiOperation(value = "app端学员注册接口", notes = "") |
| | | @ApiOperation(value = "app端学员注册接口", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "name", value = "名称", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "studentNumber", value = "学号", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "sex", value = "性别(0女,1男)", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "mobilePhone", value = "手机号", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "orgId", value = "机构", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "name", value = "名称", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "studentNumber", value = "学号", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "sex", value = "性别(0女,1男)", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "mobilePhone", value = "手机号", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "orgId", value = "机构", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @PostMapping(value = "/app/studentRegister") |
| | | public Result studentRegister(String name, String studentNumber, Boolean sex, String mobilePhone, String orgId) { |
| | | return studentService.insertStudent(null, name, studentNumber, sex, mobilePhone, orgId); |
| | | } |
| | | |
| | | //---------------------------------------------------------------------------------app接口--------------------------------------------------------------------------------------------------------------------/ |
| | | //---------------------------------------------------------------------------------app接口--------------------------------------------------------------------------------------------------------------------/ |
| | | |
| | | |
| | | /** |
| | | * 新增班级 |
| | | * 新增班级 |
| | | * |
| | | * @param className 班级名称 |
| | | * @param classNumber 班级编码 |
| | | * @param startTime 开班时间 |
| | | * @param endTime 结束时间 |
| | | * @param subjectId 课程id |
| | | * @param className 班级名称 |
| | | * @param classNumber 班级编码 |
| | | * @param startTime 开班时间 |
| | | * @param endTime 结束时间 |
| | | * @param subjectId 课程id |
| | | */ |
| | | @PostMapping(value = "add") |
| | | public Result add(String className, String classNumber, String startTime, String endTime, String subjectId, |
| | |
| | | |
| | | } catch (ParseException e) { |
| | | log.error(e, e); |
| | | return new Result(false, "日期参数错误"); |
| | | return new Result(false, "日期参数错误"); |
| | | } |
| | | } |
| | | /** |
| | | * 新增补考分组 |
| | | * @param className 班级名称 |
| | | * @param classNumber 班级编码 |
| | | * @param startTime 开班时间 |
| | | * @param endTime 结束时间 |
| | | * @param subjectId 课程id |
| | | * 新增补考分组 |
| | | * @param className 班级名称 |
| | | * @param classNumber 班级编码 |
| | | * @param startTime 开班时间 |
| | | * @param endTime 结束时间 |
| | | * @param subjectId 课程id |
| | | */ |
| | | @PostMapping(value = "addRe") |
| | | public Result addRe(String className, String classNumber, String startTime, String endTime, String subjectId, |
| | | String teacherId,String classTypes) { |
| | | try { |
| | | ClsClass reClass = classService.getReClass("1"); |
| | | //如果补考类型分组不存在,新增 |
| | | //如果补考类型分组不存在,新增 |
| | | if (reClass==null){ |
| | | return classService.insertReClass(className, classNumber, DateUtils.convertStringToDate(startTime), |
| | | DateUtils.convertStringToDate(endTime), subjectId, teacherId,classTypes); |
| | | }else { |
| | | //存在返回false |
| | | return new Result(false, "补考分组已存在"); |
| | | //存在返回false |
| | | return new Result(false, "补考分组已存在"); |
| | | } |
| | | } catch (ParseException e) { |
| | | log.error(e, e); |
| | | return new Result(false, "日期参数错误"); |
| | | return new Result(false, "日期参数错误"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 新增班级获取课程列表 |
| | | * 新增班级获取课程列表 |
| | | */ |
| | | @GetMapping(value = "getSubjectLst") |
| | | public Result getSubjectlst() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取班级列表 |
| | | * 获取班级列表 |
| | | * |
| | | * @param keyword |
| | | * @param limit |
| | | * @param pageNum |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取班级列表", notes = "") |
| | | @ApiOperation(value = "获取班级列表", notes = "") |
| | | @SuppressWarnings({ "unchecked", "rawtypes" }) |
| | | @GetMapping(value = "list") |
| | | public Result list(@RequestParam(defaultValue = "") String keyword, |
| | | @RequestParam(defaultValue = "10") Integer limit, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "1")Integer pageType) { |
| | | |
| | | String teacherId = ClientUtils.isAdmin() ? null : teacherService.getTeacherIdByUserId(ClientUtils.getUserId()); |
| | | // 获取数据 |
| | | // 获取数据 |
| | | List<ClsClass> clsLst = classService.getClassLst(keyword, teacherId, limit, pageNum, pageType); |
| | | // 获取班级总数 |
| | | // 获取班级总数 |
| | | int count = classService.getClassLstCount(keyword, teacherId, pageType); |
| | | // 转成前端所需字段和结构 |
| | | // 转成前端所需字段和结构 |
| | | List<Map<String, Object>> lstResult = QBeanUtils.listBean2ListMap(clsLst, |
| | | CollectionUtils.newStringMap("name", "className", "classId", "classId", "classNumber", "classNumber","classTypes","classTypes", |
| | | "studentCount", "studentCount", "createTime", "createTime", "startTime", "startTime", "endTime", |
| | | "endTime", "subjects", "sbjLst")); |
| | | |
| | | // 单独处理课程的字段和结构 |
| | | // 单独处理课程的字段和结构 |
| | | for (Map<String, Object> item : lstResult) { |
| | | |
| | | if(item.get("sbjLst")==null){ |
| | |
| | | |
| | | |
| | | /** |
| | | * 查询班级基本信息 |
| | | * 查询班级基本信息 |
| | | * |
| | | * @param classId 班级id |
| | | * @param classId 班级id |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "查询班级基本信息", notes = "") |
| | | @ApiOperation(value = "查询班级基本信息", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "queryClass") |
| | | public Result findClass(String classId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除班级 |
| | | * 删除班级 |
| | | * |
| | | * @param classId 班级id |
| | | * @param classId 班级id |
| | | * @return |
| | | */ |
| | | @GetMapping("delete") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复制班级 |
| | | * 复制班级 |
| | | * |
| | | * @param classId 班级id |
| | | * @param className 班级名称 |
| | | * @param classNumber 班级编码 |
| | | * @param startTime 开班时间 |
| | | * @param endTime 结束时间 |
| | | * @param classId 班级id |
| | | * @param className 班级名称 |
| | | * @param classNumber 班级编码 |
| | | * @param startTime 开班时间 |
| | | * @param endTime 结束时间 |
| | | * @param subjectId |
| | | * @param needJoinAudit 是否加班审批 |
| | | * @param needQuitAudit 是否退班审批 |
| | | * @param showAnalysisAfterExer 完成练习后是否显示答案 |
| | | * @param canMultiExer 是否允许重复学习 |
| | | * @param needForum 是否开通论坛 |
| | | * @param needJoinAudit 是否加班审批 |
| | | * @param needQuitAudit 是否退班审批 |
| | | * @param showAnalysisAfterExer 完成练习后是否显示答案 |
| | | * @param canMultiExer 是否允许重复学习 |
| | | * @param needForum 是否开通论坛 |
| | | * @return |
| | | */ |
| | | @PostMapping(value = "copy") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新班级 |
| | | * 更新班级 |
| | | * |
| | | * @param classId 班级id |
| | | * @param className 班级名称 |
| | | * @param classNumber 班级编码 |
| | | * @param startTime 开班时间 |
| | | * @param endTime 结束时间 |
| | | * @param classId 班级id |
| | | * @param className 班级名称 |
| | | * @param classNumber 班级编码 |
| | | * @param startTime 开班时间 |
| | | * @param endTime 结束时间 |
| | | * @param subjectId |
| | | * @param needJoinAudit 是否加班审批 |
| | | * @param needQuitAudit 是否退班审批 |
| | | * @param showAnalysisAfterExer 完成练习后是否显示答案 |
| | | * @param canMultiExer 是否允许重复学习 |
| | | * @param needForum 是否开通论坛 |
| | | * @param needJoinAudit 是否加班审批 |
| | | * @param needQuitAudit 是否退班审批 |
| | | * @param showAnalysisAfterExer 完成练习后是否显示答案 |
| | | * @param canMultiExer 是否允许重复学习 |
| | | * @param needForum 是否开通论坛 |
| | | * @return |
| | | */ |
| | | @PostMapping(value = "update") |
| | |
| | | showAnalysisAfterExer, canMultiExer, needForum, teacherId); |
| | | } catch (ParseException e) { |
| | | log.error(e, e); |
| | | return new Result(false, "日期参数错误"); |
| | | return new Result(false, "日期参数错误"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 班级管理 学员管理 获取学员列表 |
| | | * 班级管理 学员管理 获取学员列表 |
| | | * |
| | | * @param classId 班级id |
| | | * @param limit 每页显示几条 |
| | | * @param pageNum 页码 |
| | | * @param keyword 搜索关键字 |
| | | * @return 学习状态说明(0, 未开始 。 1, 学习中 。 2, 已结束, 3, 待激活 。 4, 已冻结) |
| | | * @param classId 班级id |
| | | * @param limit 每页显示几条 |
| | | * @param pageNum 页码 |
| | | * @param keyword 搜索关键字 |
| | | * @return 学习状态说明(0, 未开始 。 1, 学习中 。 2, 已结束, 3, 待激活 。 4, 已冻结) |
| | | */ |
| | | @ApiOperation(value = "获取学员列表", notes = "学习状态说明(0, 未开始 。 1, 学习中 。 2, 已结束, 3, 待激活 。 4, 已冻结)") |
| | | @ApiOperation(value = "获取学员列表", notes = "学习状态说明(0, 未开始 。 1, 学习中 。 2, 已结束, 3, 待激活 。 4, 已冻结)") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "lstStudent4Class") |
| | | public Result lstStudent4Class(String classId, @RequestParam(defaultValue = "10") Integer limit, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 导入学员 |
| | | * 导入学员 |
| | | * |
| | | * @param classId 班级id |
| | | * @param classId 班级id |
| | | */ |
| | | @GetMapping(value = "importStudent") |
| | | public Result importStudent(String classId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增学员 |
| | | * 新增学员 |
| | | * |
| | | * @param name 学员名称 |
| | | * @param studentNumber 学号 |
| | | * @param classId 班级id |
| | | * @param sex 性别 |
| | | * @param mobilePhone 手机号 |
| | | * @param name 学员名称 |
| | | * @param studentNumber 学号 |
| | | * @param classId 班级id |
| | | * @param sex 性别 |
| | | * @param mobilePhone 手机号 |
| | | */ |
| | | @PostMapping(value = "addStudent") |
| | | public Result addStudent(String classId, String name, String studentNumber, Boolean sex, String mobilePhone,String comName) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新学员 |
| | | * 更新学员 |
| | | * |
| | | * @param name 学员名称 |
| | | * @param studentNumber 学号 |
| | | * @param classId 班级id |
| | | * @param sex 性别 |
| | | * @param mobilePhone 手机号 |
| | | * @param name 学员名称 |
| | | * @param studentNumber 学号 |
| | | * @param classId 班级id |
| | | * @param sex 性别 |
| | | * @param mobilePhone 手机号 |
| | | */ |
| | | @PostMapping(value = "updateStudent") |
| | | public Result updateStudent(String studentId, String name,String password, String studentNumber, Boolean sex, String mobilePhone) { |
| | |
| | | |
| | | |
| | | /** |
| | | * 激活学员 |
| | | * 激活学员 |
| | | * |
| | | * @param studentIds ѧԱIds |
| | | * @param studentIds 学员Ids |
| | | */ |
| | | @GetMapping(value = "activateStudent") |
| | | public Result activate(String studentIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 冻结学员 |
| | | * 冻结学员 |
| | | * |
| | | * @param studentIds ѧԱIds |
| | | * @param studentIds 学员Ids |
| | | */ |
| | | @GetMapping(value = "blockStudent") |
| | | public Result block(String studentIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除学员 |
| | | * 删除学员 |
| | | * |
| | | * @param studentIds ѧԱIds |
| | | * @param studentIds 学员Ids |
| | | */ |
| | | @GetMapping(value = "deleteStudent") |
| | | public Result deleteStudent(String classId, String studentIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 添加班级课程 |
| | | * 添加班级课程 |
| | | * @throws InvocationTargetException |
| | | * @throws IllegalAccessException |
| | | * |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新班级课程 |
| | | * 更新班级课程 |
| | | */ |
| | | @PostMapping(value = "updateClsSubject") |
| | | public Result updateClsSubject(String classId,String subjectId, String origSubjectId,String teacherId,Integer schoolYear ,Integer term) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除班级课程 |
| | | * 删除班级课程 |
| | | */ |
| | | @GetMapping(value = "deleteClsSubject") |
| | | public Result deleteClsSubject(String classId,String subjectIds){ |
| | | //删除课程及课程班级关联关系 |
| | | //删除课程及课程班级关联关系 |
| | | return subjectService.deleteClsSubject(classId,subjectIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 所有班级列表 |
| | | * @param subjectId 根据subjectId过滤 |
| | | * 所有班级列表 |
| | | * @param subjectId 根据subjectId过滤 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/selectlist", method = RequestMethod.GET) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取学员详细信息 |
| | | * 获取学员详细信息 |
| | | * |
| | | * @param studentId ѧԱid |
| | | * @return percent (状态说明:0,未开始。1,学习中。2,已结束。) status (0,未提交。1,已提交) |
| | | * @param studentId 学员id |
| | | * @return percent (状态说明:0,未开始。1,学习中。2,已结束。) status (0,未提交。1,已提交) |
| | | */ |
| | | @GetMapping(value = "getStudentDetail") |
| | | public Result getStudentDetail(String studentId) { |
| | | // 学员信息 |
| | | Map<String, Object> studentDetail = CollectionUtils.newObjectMap("studentName", "李刚", "classNumber", "123456", |
| | | // 学员信息 |
| | | Map<String, Object> studentDetail = CollectionUtils.newObjectMap("studentName", "李刚", "classNumber", "123456", |
| | | "sex", 1, "registerTime", new Date(), "email", "12345676@qq.com", "mobilePhone", "13611111123", |
| | | "stuSubjects", 3, "commitExerInfo", 3, "examCount", 3, "releaseTopic", 3, "commentCount", 2); |
| | | // 学习档案 |
| | | Map<String, Object> subjectOne = CollectionUtils.newObjectMap("subjectName", "物流科学与工程", "percent", 2, |
| | | // 学习档案 |
| | | Map<String, Object> subjectOne = CollectionUtils.newObjectMap("subjectName", "物流科学与工程", "percent", 2, |
| | | "studyDuration", 18, "endStudyTime", new Date(), "score", 96.2); |
| | | Map<String, Object> subjectTwo = CollectionUtils.newObjectMap("subjectName", "物流工程基础", "percent", 1, |
| | | Map<String, Object> subjectTwo = CollectionUtils.newObjectMap("subjectName", "物流工程基础", "percent", 1, |
| | | "studyDuration", 18, "endStudyTime", new Date(), "score", ""); |
| | | Map<String, Object> subjectThree = CollectionUtils.newObjectMap("subjectName", "物流工程基础2", "percent", 0, |
| | | Map<String, Object> subjectThree = CollectionUtils.newObjectMap("subjectName", "物流工程基础2", "percent", 0, |
| | | "studyDuration", "", "endStudyTime", "", "score", ""); |
| | | // 作业记录 |
| | | Map<String, Object> exerOne = CollectionUtils.newObjectMap("exerciseName", "物流科学与工程", "subjectName", "物流科学与工程", |
| | | // 作业记录 |
| | | Map<String, Object> exerOne = CollectionUtils.newObjectMap("exerciseName", "物流科学与工程", "subjectName", "物流科学与工程", |
| | | "status", 1, "commitTime", new Date(), "score", 96.2); |
| | | Map<String, Object> exerTwo = CollectionUtils.newObjectMap("exerciseName", "物流工程基础", "subjectName", "物流工程基础", |
| | | Map<String, Object> exerTwo = CollectionUtils.newObjectMap("exerciseName", "物流工程基础", "subjectName", "物流工程基础", |
| | | "status", 0, "commitTime", "", "score", ""); |
| | | Map<String, Object> exerThree = CollectionUtils.newObjectMap("exerciseName", "物流工程基础2", "subjectName", |
| | | "物流工程基础2", "status", 0, "commitTime", "", "score", ""); |
| | | // 考试记录 |
| | | Map<String, Object> examOne = CollectionUtils.newObjectMap("examName", "物流科学与工程", "subjectName", "物流科学与工程", |
| | | Map<String, Object> exerThree = CollectionUtils.newObjectMap("exerciseName", "物流工程基础2", "subjectName", |
| | | "物流工程基础2", "status", 0, "commitTime", "", "score", ""); |
| | | // 考试记录 |
| | | Map<String, Object> examOne = CollectionUtils.newObjectMap("examName", "物流科学与工程", "subjectName", "物流科学与工程", |
| | | "status", 1, "commintTime", new Date(), "score", 90.6); |
| | | Map<String, Object> examTwo = CollectionUtils.newObjectMap("examName", "物流科学与工程", "subjectName", "物流科学与工程", |
| | | Map<String, Object> examTwo = CollectionUtils.newObjectMap("examName", "物流科学与工程", "subjectName", "物流科学与工程", |
| | | "status", 0, "commintTime", new Date(), "score", ""); |
| | | return new Result(true, "success", |
| | | CollectionUtils.newObjectMap("studentDetail", studentDetail, "subjectLst", |
| | |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | @Api(tags = "教室管理") |
| | | @Api(tags = "教室管理") |
| | | @RestController |
| | | @RequestMapping(value = "admin/classroom") |
| | | public class ClassRoomController { |
| | | //日志 |
| | | //日志 |
| | | private final Logger log = LogManager.getLogger(ClassRoomController.class); |
| | | |
| | | // 分页查询中,默认记录条数和页数 |
| | | // 分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE = 10; |
| | | private static final int DEFAULT_PAGE_NUM = 1; |
| | | |
| | |
| | | private CommonDAO commonDAO; |
| | | |
| | | /** |
| | | * 课表列表 |
| | | * 课表列表 |
| | | */ |
| | | @ApiOperation(value = "获取教室列表") |
| | | @ApiOperation(value = "获取教室列表") |
| | | @RequestMapping(value = "list", method = RequestMethod.GET) |
| | | public @ResponseBody Result list(String keyword,Short status,Integer pageSize,Integer pageNum) { |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | | pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; |
| | | |
| | | //总考试数量 |
| | | //总考试数量 |
| | | int totalCount = classRoomService.listCount(keyword, status); |
| | | Pager pager = new Pager(pageSize,pageNum); |
| | | pager.setTotalCount(totalCount); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存 |
| | | * 保存 |
| | | * @param classRoom |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "保存教室") |
| | | @ApiOperation(value = "保存教室") |
| | | @RequestMapping(value = "/save", method = RequestMethod.POST) |
| | | public @ResponseBody Result save(@RequestBody ClassRoom classRoom) { |
| | | |
| | | if(checkIsDumplicate(classRoom.getRoomId(),classRoom.getName(),classRoom.getAddress())){ |
| | | return new Result(false, "添加失败!重复的教室信息"); |
| | | return new Result(false, "添加失败!重复的教室信息"); |
| | | } |
| | | |
| | | if (StringUtils.isEmpty(classRoom.getRoomId())) { |
| | |
| | | |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * |
| | | * @param examIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "删除教室", httpMethod = "GET") |
| | | @ApiImplicitParam(name = "roomIds", value = "教室ID字符串", required = true, dataType = "String", paramType = "body") |
| | | @ApiOperation(value = "删除教室", httpMethod = "GET") |
| | | @ApiImplicitParam(name = "roomIds", value = "教室ID字符串", required = true, dataType = "String", paramType = "body") |
| | | @RequestMapping(value = "delete", method = RequestMethod.GET) |
| | | public @ResponseBody Result delete(String roomIds) { |
| | | Result result = new Result(true); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 发布教室 |
| | | * 发布教室 |
| | | * |
| | | * @param scheduleIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "发布教室", httpMethod = "GET") |
| | | @ApiOperation(value = "发布教室", httpMethod = "GET") |
| | | @RequestMapping(value = "/publish", method = RequestMethod.GET) |
| | | public @ResponseBody Result publish(String roomIds) { |
| | | if (StringUtils.isEmpty(roomIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | return this.classRoomService.doRelease(roomIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 撤回发布的教室 |
| | | * 撤回发布的教室 |
| | | * |
| | | * @param scheduleIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "撤回教室", httpMethod = "GET") |
| | | @ApiOperation(value = "撤回教室", httpMethod = "GET") |
| | | @RequestMapping(value = "/cancel", method = RequestMethod.GET) |
| | | public @ResponseBody Result cancel(String roomIds) { |
| | | if (StringUtils.isEmpty(roomIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | return this.classRoomService.doCancel(roomIds.split(",")); |
| | |
| | | |
| | | |
| | | /** |
| | | * 详情页面数据 |
| | | * 详情页面数据 |
| | | * |
| | | * @param examId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "详情页面数据") |
| | | @ApiOperation(value = "详情页面数据") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="教室ID", required=true), |
| | | @ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="教室ID", required=true), |
| | | }) |
| | | @RequestMapping(value = "/detail", method = RequestMethod.GET) |
| | | public @ResponseBody Result detail(String roomId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | *查询所有教室的ID和名称 |
| | | *查询所有教室的ID和名称 |
| | | * |
| | | * @param scheduleIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "可选择教室ID和名称") |
| | | @ApiOperation(value = "可选择教室ID和名称") |
| | | @RequestMapping(value = "/allRoomIdAndNames", method = RequestMethod.GET) |
| | | public @ResponseBody Result listClassRoomIdAndNames() { |
| | | List<Map<String,Object>> listResult = this.classRoomService.queryAllRoomIdAndNames(); |
| | |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | @Api(tags = "课件管理-教师端") |
| | | @Api(tags = "课件管理-教师端") |
| | | @RestController |
| | | @RequestMapping(value = "teach/clsLecture") |
| | | public class ClsLectureController { |
| | |
| | | @Autowired |
| | | IResService resService; |
| | | |
| | | /**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/ |
| | | /**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/ |
| | | @SuppressWarnings("unchecked") |
| | | @ApiOperation(value = "获取课程下课件", notes = "") |
| | | @ApiOperation(value = "获取课程下课件", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String") |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String") |
| | | }) |
| | | @GetMapping(value = "/app/coursewareList") |
| | | public Result coursewareList(String classId,String subjectId, String type) { |
| | | |
| | | if(StringUtils.isEmpty(subjectId)) { |
| | | return new Result(false, "课程id不能为空"); |
| | | return new Result(false, "课程id不能为空"); |
| | | } |
| | | |
| | | //公开课和管理员课程 |
| | | //公开课和管理员课程 |
| | | if(StringUtils.isEmpty(classId)) { |
| | | Object obj = this.classLectureService.coursewareChapterList(classId, subjectId, type).getData(); |
| | | if(obj == null) { |
| | |
| | | return new Result(true, "success", ((Map<String, Object>)obj).get("listData")); |
| | | } |
| | | |
| | | //查询课件 |
| | | //查询课件 |
| | | List<Map<String, Object>> lectures = classLectureService.listLectureBySubject(subjectId, type, classId); |
| | | |
| | | //查询章节 |
| | | //查询章节 |
| | | List<ClsSubjectChapter> chapterLst = classLectureService.getChapterLectures(classLectureService.getListChapter(classId, subjectId, null), lectures); |
| | | |
| | | return new Result(true, "success", QBeanUtils.listBean2ListMap(chapterLst, |
| | | CollectionUtils.newStringMap("name", "name", "chapterId", "chapterId", "lectures", "lectures"))); |
| | | } |
| | | |
| | | /**-------------------------------------------------------------------后端接口------------------------------------------------------------------------------------------**/ |
| | | /**-------------------------------------------------------------------后端接口------------------------------------------------------------------------------------------**/ |
| | | |
| | | /** |
| | | * 加载课件tree |
| | | * 加载课件tree |
| | | * |
| | | * @param parentId |
| | | * 父节点id |
| | | * 父节点id |
| | | */ |
| | | @ApiOperation(value = "获取课程下章节", notes = "") |
| | | @ApiOperation(value = "获取课程下章节", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "parentId", value = "父节点id", required = false, paramType="query", dataType = "String") |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "parentId", value = "父节点id", required = false, paramType="query", dataType = "String") |
| | | }) |
| | | @GetMapping(value = "categoryTree") |
| | | public Result categoryTree(String classId,String subjectId, String parentId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取课件列表 |
| | | * 获取课件列表 |
| | | * |
| | | * @param chapterId |
| | | * 章节id |
| | | * 章节id |
| | | * @param type |
| | | * 课件类型 |
| | | * 课件类型 |
| | | * @param keyword |
| | | * 搜索关键字 |
| | | * 搜索关键字 |
| | | * @param limit |
| | | * 每页显示几条 |
| | | * 每页显示几条 |
| | | * @param pageNum |
| | | * 页码 |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | * 页码 |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | */ |
| | | @ApiOperation(value = "获取课程下章节", notes = "") |
| | | @ApiOperation(value = "获取课程下章节", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "chapterId", value = "章节id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String") |
| | | @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "chapterId", value = "章节id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String") |
| | | }) |
| | | @GetMapping(value = "coursewareList") |
| | | public Result lectureList(String chapterId, String type, String keyword, Integer limit, Integer pageNum, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查看课件 |
| | | * 查看课件 |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * 课件id |
| | | * @param attribute |
| | | * 扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传 |
| | | * 扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传 |
| | | */ |
| | | @ApiOperation(value = "查看课件", notes = "") |
| | | @ApiOperation(value = "查看课件", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "课件id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "attribute", value = "扩展属性 video:\"mp4:HD\",\"m3u8:SD\" 可不用传 audio:可不用传 doc:可不用传", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "id", value = "课件id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "attribute", value = "扩展属性 video:\"mp4:HD\",\"m3u8:SD\" 可不用传 audio:可不用传 doc:可不用传", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "showCourseware") |
| | | public Result showLecture(String id, String attribute) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除课件 |
| | | * 删除课件 |
| | | * |
| | | * @param id |
| | | * 课件ids |
| | | * 课件ids |
| | | */ |
| | | @GetMapping(value = "deleteCourseware") |
| | | public Result deleteLecture(String id) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件管理 新增下级,同级 |
| | | * 课件管理 新增下级,同级 |
| | | * |
| | | * @param type |
| | | * (add:新增,edit :编辑) |
| | | * (add:新增,edit :编辑) |
| | | * @param chapterId |
| | | * 章节id |
| | | * 章节id |
| | | * @param classId |
| | | * 班级id |
| | | * 班级id |
| | | * @param name |
| | | * 名称 |
| | | * 名称 |
| | | * @param childFlag |
| | | * 是否操作下级 |
| | | * 是否操作下级 |
| | | * |
| | | */ |
| | | @PostMapping(value = "addOrUpdateChapter") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件管理 目录删除 |
| | | * 课件管理 目录删除 |
| | | * |
| | | * @param chapterId |
| | | * Ŀ¼id |
| | | * 目录id |
| | | */ |
| | | @GetMapping(value = "deleteChapter") |
| | | public Result deleteChapter(String chapterId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 添加/更新(视频,讲义,音频) |
| | | * 添加/更新(视频,讲义,音频) |
| | | * |
| | | * @param name |
| | | * 名称 |
| | | * 名称 |
| | | * @param coverUrl |
| | | * 封面Url |
| | | * 封面Url |
| | | * @param remark: |
| | | * <p> |
| | | * 视频啊啊啊 |
| | | * 视频啊啊啊 |
| | | * </p> |
| | | * 介绍 |
| | | * 介绍 |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * 课件id |
| | | * @param sectionId |
| | | * 小节Id |
| | | * 小节Id |
| | | * @param type |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | */ |
| | | @PostMapping(value = "addOrUpdate") |
| | | public Result addOrUpdate(String id, String remark, String name, String coverUrl, String type, String fileId, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 编辑 获取内容 |
| | | * 编辑 获取内容 |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * 课件id |
| | | */ |
| | | @GetMapping(value = "getCoursewareDetail") |
| | | public Result getLectureDetail(String id) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件获取资源列表 |
| | | * 课件获取资源列表 |
| | | * |
| | | * @param dirId |
| | | * Ŀ¼Id |
| | | * 目录Id |
| | | * @param limit |
| | | * 每页显示几条 |
| | | * 每页显示几条 |
| | | * @param pageNum |
| | | * 页码 |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | * 页码 |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | */ |
| | | @ApiOperation(value = "课件获取资源列表", notes = "") |
| | | @ApiOperation(value = "课件获取资源列表", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "dirId", value = "Ŀ¼Id", required = false, paramType="query", dataType = "String") |
| | | @ApiImplicitParam(name = "dirId", value = "目录Id", required = false, paramType="query", dataType = "String") |
| | | }) |
| | | @GetMapping(value = "getResLst") |
| | | public Result getResLst(String dirId, Integer limit, Integer pageNum, String keyword) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件从资源选择后保存 |
| | | * 课件从资源选择后保存 |
| | | * |
| | | * @param resId |
| | | * 资源文件id |
| | | * 资源文件id |
| | | * @param sectionId |
| | | * 小节id |
| | | * 小节id |
| | | * |
| | | */ |
| | | @GetMapping(value = "saveCourseware4Res") |
| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | /** |
| | | * 班级管理控制器 |
| | | * 班级管理控制器 |
| | | * |
| | | * @author kevin |
| | | */ |
| | | @Api(tags="课表接口") |
| | | @Api(tags="课表接口") |
| | | @Controller |
| | | @RequestMapping("/admin/schedule") |
| | | public class CourseScheduleController { |
| | | |
| | | // 分页查询中,默认记录条数和页数 |
| | | // 分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE = 10; |
| | | private static final int DEFAULT_PAGE_NUM = 1; |
| | | |
| | |
| | | IClassRoomService classRoomService; |
| | | |
| | | /** |
| | | * 课表列表 |
| | | * 课表列表 |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | @ApiOperation(value = "获取课表列表") |
| | | @ApiOperation(value = "获取课表列表") |
| | | @RequestMapping(value = "list", method = RequestMethod.GET) |
| | | public @ResponseBody Result list(String keyword,Short status,Integer pageSize,Integer pageNum) { |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | | pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; |
| | | |
| | | //总考试数量 |
| | | //总考试数量 |
| | | int totalCount = scheduleService.listCount(keyword, status); |
| | | Pager pager = new Pager(pageSize,pageNum); |
| | | pager.setTotalCount(totalCount); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课表列表 |
| | | * 课表列表 |
| | | * @throws ParseException |
| | | */ |
| | | @ApiOperation(value = "教师获取当天课表信息") |
| | | @ApiOperation(value = "教师获取当天课表信息") |
| | | @RequestMapping(value = "teacher/list", method = RequestMethod.GET) |
| | | public @ResponseBody Result teacherList(String date,Integer pageSize,Integer pageNum) throws Exception { |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | | pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; |
| | | |
| | | //总考试数量 |
| | | //总考试数量 |
| | | int totalCount = scheduleService.listTeacherOfScheduleCount(date, pageSize, pageNum); |
| | | Pager pager = new Pager(pageSize,pageNum); |
| | | pager.setTotalCount(totalCount); |
| | |
| | | |
| | | |
| | | /** |
| | | * 课表列表 |
| | | * 课表列表 |
| | | * @throws ParseException |
| | | */ |
| | | @ApiOperation(value = "学生获取当天课表信息") |
| | | @ApiOperation(value = "学生获取当天课表信息") |
| | | @RequestMapping(value = "student/list", method = RequestMethod.GET) |
| | | public @ResponseBody Result studentList(String date,Integer pageSize,Integer pageNum) throws Exception { |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | | pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; |
| | | |
| | | //总考试数量 |
| | | //总考试数量 |
| | | int totalCount = scheduleService.listStudentScheduleCount(date, pageSize, pageNum); |
| | | Pager pager = new Pager(pageSize,pageNum); |
| | | pager.setTotalCount(totalCount); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存 |
| | | * 保存 |
| | | * |
| | | * @param examInfo |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @ApiOperation(value = "保存课表") |
| | | @ApiOperation(value = "保存课表") |
| | | @RequestMapping(value = "/save", method = RequestMethod.POST) |
| | | public @ResponseBody Result save(@RequestBody CourseSchedule courseSchedule) throws Exception { |
| | | if (StringUtils.isEmpty(courseSchedule.getScheduleId())) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * |
| | | * @param examIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "删除课表", httpMethod = "GET") |
| | | @ApiImplicitParam(name = "scheduleIds", value = "课表ID字符串", required = true, dataType = "String", paramType = "body") |
| | | @ApiOperation(value = "删除课表", httpMethod = "GET") |
| | | @ApiImplicitParam(name = "scheduleIds", value = "课表ID字符串", required = true, dataType = "String", paramType = "body") |
| | | @RequestMapping(value = "delete", method = RequestMethod.GET) |
| | | public @ResponseBody Result delete(String scheduleIds) { |
| | | Result result = new Result(true); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 发布课表 |
| | | * 发布课表 |
| | | * |
| | | * @param scheduleIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "发布课表") |
| | | @ApiOperation(value = "发布课表") |
| | | @RequestMapping(value = "/publish", method = RequestMethod.GET) |
| | | public @ResponseBody Result publish(String scheduleIds) { |
| | | if (StringUtils.isEmpty(scheduleIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | return this.scheduleService.doRelease(scheduleIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 撤回课表 |
| | | * 撤回课表 |
| | | * |
| | | * @param scheduleIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "撤回课表") |
| | | @ApiOperation(value = "撤回课表") |
| | | @RequestMapping(value = "/cancel", method = RequestMethod.GET) |
| | | public @ResponseBody Result cancel(String scheduleIds) { |
| | | if (StringUtils.isEmpty(scheduleIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | return this.scheduleService.doCancel(scheduleIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 课表详情 |
| | | * 课表详情 |
| | | * |
| | | * @param scheduleIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "课表详情") |
| | | @ApiOperation(value = "课表详情") |
| | | @RequestMapping(value = "/detail", method = RequestMethod.GET) |
| | | public @ResponseBody Result detail(String scheduleId) { |
| | | if (StringUtils.isEmpty(scheduleId)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | CourseSchedule sche = this.scheduleService.detail(scheduleId); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 标记有课的日期 |
| | | * 标记有课的日期 |
| | | * |
| | | * @param scheduleIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "教师课表是否有课标识查询") |
| | | @ApiOperation(value = "教师课表是否有课标识查询") |
| | | @RequestMapping(value = "teacher/flag", method = RequestMethod.GET) |
| | | public @ResponseBody Result listTeacherDateFlag(Integer year,Integer month) { |
| | | if (year==null || month==null) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | List<Integer> listResult = this.scheduleService.queryDateFlag(year, month); |
| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | /** |
| | | * 课件控制器 |
| | | * 课件控制器 |
| | | * |
| | | * @author chenjunliang |
| | | * |
| | | */ |
| | | @Api(tags = "课件管理-管理员端") |
| | | @Api(tags = "课件管理-管理员端") |
| | | @RestController |
| | | @RequestMapping(value = "teach/courseware") |
| | | public class CoursewareController { |
| | |
| | | IProgressService progressService; |
| | | |
| | | /** |
| | | * 加载课件tree |
| | | * 加载课件tree |
| | | * |
| | | * @param parentId |
| | | * 父节点id |
| | | * 父节点id |
| | | */ |
| | | @GetMapping(value = "categoryTree") |
| | | public Result categoryTree(String subjectId, String parentId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取课件列表 |
| | | * 获取课件列表 |
| | | * |
| | | * @param chapterId |
| | | * 章节id |
| | | * 章节id |
| | | * @param type |
| | | * 课件类型 |
| | | * 课件类型 |
| | | * @param keyword |
| | | * 搜索关键字 |
| | | * 搜索关键字 |
| | | * @param limit |
| | | * 每页显示几条 |
| | | * 每页显示几条 |
| | | * @param pageNum |
| | | * 页码 |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | * 页码 |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | */ |
| | | @GetMapping(value = "coursewareList") |
| | | public Result coursewareList(String chapterId, String type, String keyword, Integer limit, Integer pageNum) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查看课件 |
| | | * 查看课件 |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * 课件id |
| | | * @param attribute |
| | | * 扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传 |
| | | * 扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传 |
| | | */ |
| | | @ApiOperation(value = "查看课件", notes = "") |
| | | @ApiOperation(value = "查看课件", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "课件id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "attribute", value = "扩展属性 video:\"mp4:HD\",\"m3u8:SD\" 可不用传 audio:可不用传 doc:可不用传", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "id", value = "课件id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "attribute", value = "扩展属性 video:\"mp4:HD\",\"m3u8:SD\" 可不用传 audio:可不用传 doc:可不用传", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @GetMapping(value = "showCourseware") |
| | | public Result showCourseware(String id, String attribute) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除课件 |
| | | * 删除课件 |
| | | * |
| | | * @param id |
| | | * 课件ids |
| | | * 课件ids |
| | | */ |
| | | @GetMapping(value = "deleteCourseware") |
| | | public Result deleteCourseware(String id) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件的复制 |
| | | * 课件的复制 |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * 课件id |
| | | * @param type |
| | | * 课件类型 |
| | | * 课件类型 |
| | | * @param chapterId |
| | | * 章Id |
| | | * 章Id |
| | | * @param sectionId |
| | | * 节id |
| | | * 节id |
| | | * @param smallSectionId |
| | | * 小节id |
| | | * 小节id |
| | | * @param name |
| | | * 课件名称 |
| | | * 课件名称 |
| | | */ |
| | | @GetMapping(value = "copy") |
| | | public Result copy(String id, String type, String subjectId, String chapterId, String name) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件的移动 |
| | | * 课件的移动 |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * 课件id |
| | | * @param type |
| | | * 课件类型 |
| | | * 课件类型 |
| | | * @param chapterId |
| | | * 章Id |
| | | * 章Id |
| | | * @param sectionId |
| | | * 节id |
| | | * 节id |
| | | * @param smallSectionId |
| | | * 小节id |
| | | * 小节id |
| | | */ |
| | | @GetMapping(value = "move") |
| | | public Result moveCourseware(String id, String type, String subjectId, String chapterId, String name) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件管理 新增下级,同级 |
| | | * 课件管理 新增下级,同级 |
| | | * |
| | | * @param type |
| | | * (add:新增,edit :编辑) |
| | | * (add:新增,edit :编辑) |
| | | * @param chapterId |
| | | * 章节id |
| | | * 章节id |
| | | * @param subjectId |
| | | * 课程id |
| | | * 课程id |
| | | * @param name |
| | | * 名称 |
| | | * 名称 |
| | | * @param childFlag |
| | | * 是否操作下级 |
| | | * 是否操作下级 |
| | | * |
| | | */ |
| | | @PostMapping(value = "addOrUpdateChapter") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件管理 目录删除 |
| | | * 课件管理 目录删除 |
| | | * |
| | | * @param chapterId |
| | | * Ŀ¼id |
| | | * 目录id |
| | | */ |
| | | @GetMapping(value = "deleteChapter") |
| | | public Result deleteChapter(String chapterId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 添加/更新(视频,讲义,音频) |
| | | * 添加/更新(视频,讲义,音频) |
| | | * |
| | | * @param name |
| | | * 名称 |
| | | * 名称 |
| | | * @param coverUrl |
| | | * 封面Url |
| | | * 封面Url |
| | | * @param remark: |
| | | * <p> |
| | | * 视频啊啊啊 |
| | | * 视频啊啊啊 |
| | | * </p> |
| | | * 介绍 |
| | | * 介绍 |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * 课件id |
| | | * @param sectionId |
| | | * 小节Id |
| | | * 小节Id |
| | | * @param type |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | */ |
| | | @PostMapping(value = "addOrUpdate") |
| | | public Result addOrUpdate(String id, String remark, String name, String coverUrl, String type, String fileId, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 编辑 获取内容 |
| | | * 编辑 获取内容 |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * 课件id |
| | | */ |
| | | @GetMapping(value = "getCoursewareDetail") |
| | | public Result getCoursewareDetail(String id) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件获取资源列表 |
| | | * 课件获取资源列表 |
| | | * |
| | | * @param dirId |
| | | * Ŀ¼Id |
| | | * 目录Id |
| | | * @param limit |
| | | * 每页显示几条 |
| | | * 每页显示几条 |
| | | * @param pageNum |
| | | * 页码 |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | * 页码 |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | */ |
| | | @GetMapping(value = "getResLst") |
| | | public Result getResLst(String dirId, Integer limit, Integer pageNum, String keyword) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课件从资源选择后保存 |
| | | * 课件从资源选择后保存 |
| | | * |
| | | * @param resId |
| | | * 资源文件id |
| | | * 资源文件id |
| | | * @param sectionId |
| | | * 小节id |
| | | * 小节id |
| | | * |
| | | */ |
| | | @GetMapping(value = "saveCourseware4Res") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取练习成绩列表 |
| | | * 获取练习成绩列表 |
| | | * |
| | | * @param subjectId |
| | | * 课程id |
| | | * 课程id |
| | | * @param exerciseId |
| | | * 练习id |
| | | * 练习id |
| | | * @param pageSize |
| | | * 每页显示几条 |
| | | * 每页显示几条 |
| | | * @param pageNum |
| | | * 页码 |
| | | * 页码 |
| | | * |
| | | */ |
| | | @GetMapping(value = "lstExerciseScore") |
| | | public Result lstExerciseScore(String subjectId, String exerciseId, Integer pageSize, Integer pageNum) { |
| | | Map<String, Object> lstExerciseGradeOne = CollectionUtils.newObjectMap("studentNumber", 201342, "studentName", |
| | | "李刚1", "className", "catti", "mockTime", new Date(), "status", 1, "score", 60, // status 0 表示未提交,1是已提交 |
| | | "passingFlag", 1);// passingFlag 1,true,0 false |
| | | "李刚1", "className", "catti", "mockTime", new Date(), "status", 1, "score", 60, // status 0 表示未提交,1是已提交 |
| | | "passingFlag", 1);// passingFlag 1,true,0 false |
| | | Map<String, Object> lstExerciseGradeTwo = CollectionUtils.newObjectMap("studentNumber", 201342, "studentName", |
| | | "李刚2", "className", "catti", "mockTime", new Date(), "status", 0, "score", 70, "passingFlag", 0); |
| | | "李刚2", "className", "catti", "mockTime", new Date(), "status", 0, "score", 70, "passingFlag", 0); |
| | | Map<String, Object> lstExerciseGradeThree = CollectionUtils.newObjectMap("studentNumber", 201342, "studentName", |
| | | "李刚3", "className", "catti", "mockTime", new Date(), "status", 1, "score", 80, "passingFlag", 1); |
| | | "李刚3", "className", "catti", "mockTime", new Date(), "status", 1, "score", 80, "passingFlag", 1); |
| | | return new Result(true, "success", |
| | | CollectionUtils.newObjectMap("scoreLst", |
| | | CollectionUtils.newList(lstExerciseGradeOne, lstExerciseGradeTwo, lstExerciseGradeThree), |
| | |
| | | } |
| | | |
| | | /** |
| | | * 练习成绩的导出 |
| | | * 练习成绩的导出 |
| | | * |
| | | * @param subjectId |
| | | * 课程id |
| | | * @param exerciseId练习id |
| | | * 课程id |
| | | * @param exerciseId练习id |
| | | */ |
| | | @GetMapping(value = "exportScore") |
| | | public Result exportScore(String subjectId, String exerciseId) { |
| | |
| | | |
| | | |
| | | /** |
| | | * 评估控制器 |
| | | * 评估控制器 |
| | | * |
| | | * @author zhiyong |
| | | */ |
| | | @Api(tags = "问卷接口") |
| | | @Api(tags = "问卷接口") |
| | | @Controller |
| | | @CrossOrigin(origins="*",maxAge=3600) |
| | | @RequestMapping(value = "/evaluate") |
| | |
| | | @Autowired |
| | | IOssService ossService; |
| | | |
| | | // ------------------------------后台 start------------------------------------------------------------ |
| | | // ------------------------------后台 start------------------------------------------------------------ |
| | | |
| | | /** |
| | | * 获取列表数据 |
| | | * 获取列表数据 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取列表数据-教师端", notes = "", httpMethod = "GET") |
| | | @ApiOperation(value = "获取列表数据-教师端", notes = "", httpMethod = "GET") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "pageNum", value = "页码", required = false, paramType="query", dataType = "Integer"), |
| | | @ApiImplicitParam(name = "pageSize", value = "每页数目", required = false, paramType="query", dataType = "Integer"), |
| | | @ApiImplicitParam(name = "keyword", value = "查询字段", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "sort", value = "排序字段", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "pageNum", value = "页码", required = false, paramType="query", dataType = "Integer"), |
| | | @ApiImplicitParam(name = "pageSize", value = "每页数目", required = false, paramType="query", dataType = "Integer"), |
| | | @ApiImplicitParam(name = "keyword", value = "查询字段", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "sort", value = "排序字段", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @RequestMapping(value = "list", method = RequestMethod.GET) |
| | | public @ResponseBody |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取范围选择 |
| | | * 获取范围选择 |
| | | * <p> |
| | | * type: lesson:课程 class:班级 person:人员 |
| | | * type: lesson:课程 class:班级 person:人员 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取范围选择", notes = "根据填写范围获取下拉列表的值") |
| | | @ApiOperation(value = "获取范围选择", notes = "根据填写范围获取下拉列表的值") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "type", value = "填写范围【lesson:课程 class:班级 person:人员】", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "type", value = "填写范围【lesson:课程 class:班级 person:人员】", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @RequestMapping(value = "rangeList", method = RequestMethod.GET) |
| | | public @ResponseBody |
| | |
| | | } |
| | | |
| | | /** |
| | | * 后台管理 |
| | | * 新增或修改教学评估 |
| | | * 后台管理 |
| | | * 新增或修改教学评估 |
| | | * |
| | | * @param obj |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "新增或修改问卷", notes = "") |
| | | @ApiOperation(value = "新增或修改问卷", notes = "") |
| | | @RequestMapping(value = "addOrUpdate", method = RequestMethod.POST) |
| | | public @ResponseBody |
| | | ResultJson addOrUpdateEvaluate(@RequestBody SchEvaluate eva) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取回显数据 |
| | | * 获取回显数据 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "读取问卷的信息", notes = "") |
| | | @ApiOperation(value = "读取问卷的信息", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @RequestMapping(value = "baseInfo", method = RequestMethod.GET) |
| | | public @ResponseBody |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "删除问卷", notes = "") |
| | | @ApiOperation(value = "删除问卷", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @RequestMapping(value = "delete", method = RequestMethod.POST) |
| | | public @ResponseBody |
| | |
| | | } |
| | | |
| | | /** |
| | | * 后台管理 |
| | | * 激活教学评估 |
| | | * 后台管理 |
| | | * 激活教学评估 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "激活教学评估", notes = "") |
| | | @ApiOperation(value = "激活教学评估", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @RequestMapping(value = "active", method = RequestMethod.POST) |
| | | @ResponseBody |
| | |
| | | } |
| | | |
| | | /** |
| | | * 后台管理 |
| | | * 撤回 |
| | | * 后台管理 |
| | | * 撤回 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "撤回教学评估", notes = "") |
| | | @ApiOperation(value = "撤回教学评估", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @RequestMapping(value = "withdraw", method = RequestMethod.POST) |
| | | @ResponseBody |
| | |
| | | } |
| | | |
| | | /** |
| | | * 后台管理 |
| | | * 复制 |
| | | * 后台管理 |
| | | * 复制 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "复制教学评估", notes = "") |
| | | @ApiOperation(value = "复制教学评估", notes = "") |
| | | @RequestMapping(value = "copy", method = RequestMethod.POST) |
| | | @ResponseBody |
| | | public ResultJson doCopy(@RequestBody SchEvaluate eva) { |
| | |
| | | |
| | | |
| | | /** |
| | | * 查看结果 问卷整体情况 |
| | | * 查看结果 问卷整体情况 |
| | | * |
| | | * @param groupId |
| | | * @param schEvaluateId |
| | | * @param classId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "问卷整体答题情况", notes = "") |
| | | @ApiOperation(value = "问卷整体答题情况", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "groupId", value = "练习组id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "groupId", value = "练习组id", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @RequestMapping(value = "queryEvaluateDetail", method = RequestMethod.GET) |
| | | @ResponseBody |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查看统计 |
| | | * 查看统计 |
| | | * |
| | | * @param groupId |
| | | * @param schEvaluateId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "查看问卷统计情况", notes = "") |
| | | @ApiOperation(value = "查看问卷统计情况", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "groupId", value = "练习组id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "groupId", value = "练习组id", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @RequestMapping(value = "evaluateStatisDetail", method = RequestMethod.GET) |
| | | @ResponseBody |
| | |
| | | } |
| | | |
| | | |
| | | // ------------------------------后台 end------------------------------------------------------------ |
| | | // ------------------------------后台 end------------------------------------------------------------ |
| | | |
| | | // ------------------------------前端 start----------------------------------------------------------- |
| | | // ------------------------------前端 start----------------------------------------------------------- |
| | | |
| | | /** |
| | | * 微信提交问卷 |
| | | * 微信提交问卷 |
| | | * |
| | | * @param answers |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "提交问卷答案", notes = "") |
| | | @ApiOperation(value = "提交问卷答案", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "answers", value = "{\"evaluateId\":\"297ebe0e653d1bf601654064de690004\",\"exerciseGroupId\":\"297ebe0e653d1bf601654064de2b0002\",\"items\":[{\"exerciseId\":\"297ebe0e653d1bf60165407d5e9f0033\",\"answer\":\"B,C\"},{\"exerciseId\":\"297ebe0e653d1bf60165407eb3b6003e\",\"answer\":\"B\"},{\"exerciseId\":\"297ebe0e653d1bf6016541a801c5009e\",\"answer\":\"A,B\"},{\"exerciseId\":\"297ebe0e653d1bf6016540755a4a0005\",\"answer\":\"B\"},{\"exerciseId\":\"297ebe0e653d1bf6016540787e42001d\",\"answer\":\"B\"},{\"exerciseId\":\"297ebe0e653d1bf60165407b48a80028\",\"answer\":\"B\"}]}", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | |
| | | |
| | | try { |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | // 装换json到对象 |
| | | // 装换json到对象 |
| | | TeachEvaScoreResult scoreResult = mapper.readValue(answers, TeachEvaScoreResult.class); |
| | | // 提交答卷入库 |
| | | // 提交答卷入库 |
| | | result = evaluateService.doSubmitTeachEvalScoreData(scoreResult, userId); |
| | | |
| | | evaluateService.updateEvaluateCount(scoreResult.getEvaluateId()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询学生评估list |
| | | * 查询学生评估list |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "问卷列表-学员端", notes = "") |
| | | @ApiOperation(value = "问卷列表-学员端", notes = "") |
| | | @RequestMapping(value = "stuEvaluateList", method = RequestMethod.GET) |
| | | public @ResponseBody |
| | | ResultJson queryStuEvaluateList(Pager pager) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 问卷查询题目 |
| | | * 问卷查询题目 |
| | | * |
| | | * @param evaluateId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "问卷题目列表", notes = "") |
| | | @ApiOperation(value = "问卷题目列表", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"), |
| | | }) |
| | | @RequestMapping(value = "viewStuEvaluate", method = RequestMethod.GET) |
| | | public @ResponseBody |
| | |
| | | return evaluateService.doGetEvalExerItemResponseDataNew(evaluateId); |
| | | } |
| | | |
| | | // ------------------------------前端 end------------------------------------------------------------ |
| | | // ------------------------------前端 end------------------------------------------------------------ |
| | | } |
| | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Api(tags = "考场管理") |
| | | @Api(tags = "考场管理") |
| | | @RestController |
| | | @RequestMapping(value = "admin/examroom") |
| | | public class ExamRoomController { |
| | | //日志 |
| | | //日志 |
| | | private final Logger log = LogManager.getLogger(ExamRoomController.class); |
| | | |
| | | // 分页查询中,默认记录条数和页数 |
| | | // 分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE = 10; |
| | | private static final int DEFAULT_PAGE_NUM = 1; |
| | | |
| | |
| | | private CommonDAO commonDAO; |
| | | |
| | | /** |
| | | * 考场列表 |
| | | * 考场列表 |
| | | */ |
| | | @ApiOperation(value = "获取考场列表") |
| | | @ApiOperation(value = "获取考场列表") |
| | | @RequestMapping(value = "list", method = RequestMethod.GET) |
| | | public @ResponseBody Result list(String roomId,String keyword,Short status,Integer pageSize,Integer pageNum) { |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | | pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; |
| | | |
| | | //总考试数量 |
| | | //总考试数量 |
| | | int totalCount = examRoomService.listCount(roomId,keyword, status); |
| | | Pager pager = new Pager(pageSize,pageNum); |
| | | pager.setTotalCount(totalCount); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存 |
| | | * 保存 |
| | | * |
| | | * @param examRoom |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "保存考场") |
| | | @ApiOperation(value = "保存考场") |
| | | @RequestMapping(value = "/save", method = RequestMethod.POST) |
| | | public @ResponseBody Result save(@RequestBody ExamRoom examRoom) { |
| | | |
| | | |
| | | if (StringUtils.isEmpty(examRoom.getExamroomId())) { |
| | | if(checkIsDumplicate(examRoom.getExamroomId(),examRoom.getExamroomName())){ |
| | | return new Result(false, "添加失败!重复的考场信息"); |
| | | return new Result(false, "添加失败!重复的考场信息"); |
| | | } |
| | | return new Result(true,"",CollectionUtils.newObjectMap("examroomId", examRoomService.add(examRoom))); |
| | | } else { |
| | |
| | | |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * |
| | | * @param examroomIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "删除考场", httpMethod = "GET") |
| | | @ApiImplicitParam(name = "examroomIds", value = "考场ID字符串", required = true, dataType = "String", paramType = "body") |
| | | @ApiOperation(value = "删除考场", httpMethod = "GET") |
| | | @ApiImplicitParam(name = "examroomIds", value = "考场ID字符串", required = true, dataType = "String", paramType = "body") |
| | | @RequestMapping(value = "delete", method = RequestMethod.GET) |
| | | public @ResponseBody Result delete(String examroomIds) { |
| | | Result result = new Result(true); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 发布考场 |
| | | * 发布考场 |
| | | * |
| | | * @param roomIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "发布考场", httpMethod = "GET") |
| | | @ApiOperation(value = "发布考场", httpMethod = "GET") |
| | | @RequestMapping(value = "/publish", method = RequestMethod.GET) |
| | | public @ResponseBody Result publish(String roomIds) { |
| | | if (StringUtils.isEmpty(roomIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | return this.examRoomService.doRelease(roomIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 撤回发布的考场 |
| | | * 撤回发布的考场 |
| | | * |
| | | * @param roomIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "撤回考场", httpMethod = "GET") |
| | | @ApiOperation(value = "撤回考场", httpMethod = "GET") |
| | | @RequestMapping(value = "/cancel", method = RequestMethod.GET) |
| | | public @ResponseBody Result cancel(String roomIds) { |
| | | if (StringUtils.isEmpty(roomIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | |
| | | return this.examRoomService.doCancel(roomIds.split(",")); |
| | |
| | | |
| | | |
| | | /** |
| | | * 详情页面数据 |
| | | * 详情页面数据 |
| | | * |
| | | * @param examroomId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "详情页面数据") |
| | | @ApiOperation(value = "详情页面数据") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="考场ID", required=true), |
| | | @ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="考场ID", required=true), |
| | | }) |
| | | @RequestMapping(value = "/detail", method = RequestMethod.GET) |
| | | public @ResponseBody Result detail(String examroomId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询所有考场的ID和名称 |
| | | * 查询所有考场的ID和名称 |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "可选择考场ID和名称") |
| | | @ApiOperation(value = "可选择考场ID和名称") |
| | | @RequestMapping(value = "/allExamRoomIdAndNames", method = RequestMethod.GET) |
| | | public @ResponseBody Result listClassRoomIdAndNames() { |
| | | List<Map<String,Object>> listResult = this.examRoomService.queryAllRoomIdAndNames(); |
| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | /** |
| | | * 文件上传控制器 |
| | | * 文件上传控制器 |
| | | * |
| | | * @author xiadehu |
| | | */ |
| | | @Api(tags="文件上传通用接口") |
| | | @Api(tags="文件上传通用接口") |
| | | @Controller |
| | | @RequestMapping(value = "/base/file") |
| | | public class FileController { |
| | |
| | | IFileService fileService; |
| | | |
| | | /** |
| | | * 通用上传接口 |
| | | * 通用上传接口 |
| | | * |
| | | * @TODO : 目前缺少对 各模块文件个数、文件格式、文件大小的上传控制,统一增加在configFileModule表里面即可实现 1 图片; 2 文档 3 视频 4 音频 |
| | | * @TODO : 目前缺少对 各模块文件个数、文件格式、文件大小的上传控制,统一增加在configFileModule表里面即可实现 1 图片; 2 文档 3 视频 4 音频 |
| | | * @param response |
| | | * @return |
| | | */ |
| | | @ApiOperation(value="通用上传接口", notes="目前缺少对 各模块文件个数、文件格式、文件大小的上传控制,统一增加在configFileModule表里面即可实现 1 图片; 2 文档 3 视频 4 音频") |
| | | @ApiOperation(value="通用上传接口", notes="目前缺少对 各模块文件个数、文件格式、文件大小的上传控制,统一增加在configFileModule表里面即可实现 1 图片; 2 文档 3 视频 4 音频") |
| | | @RequestMapping(value = "/upload", headers = "content-type=multipart/*", method = RequestMethod.POST) |
| | | public @ResponseBody List<FileMeta> doUpload(MultipartHttpServletRequest request, HttpServletResponse response) { |
| | | |
| | | // 2.循环取得文件 |
| | | // 2.循环取得文件 |
| | | Iterator<String> itr = request.getFileNames(); |
| | | MultipartFile mpf = null; |
| | | List<FileMeta> files = new ArrayList<FileMeta>(2); |
| | | FileMeta fileMeta = null; |
| | | |
| | | while (itr.hasNext()) { |
| | | // 2.从request中取的下一个 MultipartFile |
| | | // 2.从request中取的下一个 MultipartFile |
| | | mpf = request.getFile(itr.next()); |
| | | |
| | | // 2.2 创建一个FileMeta |
| | | // 2.2 创建一个FileMeta |
| | | fileMeta = new FileMeta(); |
| | | try { |
| | | Result uploadResult = fileService.doUpload(mpf.getInputStream(), mpf.getOriginalFilename()); |
| | |
| | | } catch (Exception e) { |
| | | String desp = e.getMessage(); |
| | | desp = desp.length() > 120 ? desp.substring(0, 120) : desp; |
| | | log.error("上传模块解析出错:" + e); |
| | | log.error("上传模块解析出错:" + e); |
| | | } |
| | | |
| | | fileMeta.setFileName(mpf.getOriginalFilename()); |
| | |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | |
| | | /** |
| | | * 后台首页控制器 |
| | | * 后台首页控制器 |
| | | * |
| | | * @author xiadehu |
| | | * |
| | |
| | | String userType) { |
| | | try { |
| | | if (StringUtils.isEmpty(chatroomId) || StringUtils.isEmpty(senderId) || StringUtils.isEmpty(content)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | return service.doSendMessage(chatroomId, senderId, imgPath, alias, content, type, userType); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return new Result(false, "系统异常"); |
| | | return new Result(false, "系统异常"); |
| | | } |
| | | } |
| | | |
| | |
| | | return service.getHistoryMes(chatroomId, pageNum); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return new Result(false, "系统异常"); |
| | | return new Result(false, "系统异常"); |
| | | } |
| | | } |
| | | |
| | |
| | | return service.latestMsg(chatroomId); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return new Result(false, "系统异常"); |
| | | return new Result(false, "系统异常"); |
| | | } |
| | | } |
| | | } |
| | |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | @Api(tags="消息管理接口") |
| | | @Api(tags="消息管理接口") |
| | | @Controller |
| | | @CrossOrigin(origins="*",maxAge=3600) |
| | | @RequestMapping(value = "/msg/msg/") |
| | | public class MsgInfoController { |
| | | |
| | | // 分页查询中,默认记录条数和页数 |
| | | // 分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE = 10; |
| | | private static final int DEFAULT_PAGE_NUM = 1; |
| | | |
| | |
| | | IMsgInfoService msgInfoService; |
| | | |
| | | /** |
| | | * 消息列表 |
| | | * 消息列表 |
| | | */ |
| | | @ApiOperation(value = "获取消息列表") |
| | | @ApiOperation(value = "获取消息列表") |
| | | @RequestMapping(value = "list", method = RequestMethod.GET) |
| | | public @ResponseBody Result list(Short type,Integer pageSize,Integer pageNum) { |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | | pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; |
| | | |
| | | //消息数量 |
| | | //消息数量 |
| | | int totalCount = msgInfoService.listCount(type); |
| | | Pager pager = new Pager(pageSize,pageNum); |
| | | pager.setTotalCount(totalCount); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除消息 |
| | | * 删除消息 |
| | | * @param msgIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "删除消息") |
| | | @ApiOperation(value = "删除消息") |
| | | @RequestMapping(value = "delete", method = RequestMethod.GET) |
| | | public @ResponseBody Result deleteUserMsg(String msgIds){ |
| | | if(StringUtils.isEmpty(msgIds)){ |
| | | return new Result(false,"参数错误!"); |
| | | return new Result(false,"参数错误!"); |
| | | } |
| | | |
| | | return this.msgInfoService.deleteUserMsg(msgIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 清空个人消息 |
| | | * 清空个人消息 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "清空消息") |
| | | @ApiOperation(value = "清空消息") |
| | | @RequestMapping(value = "clear", method = RequestMethod.GET) |
| | | public @ResponseBody Result deleteAllUserMsg(Short type){ |
| | | return this.msgInfoService.deleteAllUserMsg(type); |
| | | } |
| | | |
| | | /** |
| | | * 修改已读标志位 |
| | | * 修改已读标志位 |
| | | * @param msgId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "更新为已读") |
| | | @ApiOperation(value = "更新为已读") |
| | | @RequestMapping(value = "read", method = RequestMethod.GET) |
| | | public @ResponseBody Result updateReadFlag(String msgIds){ |
| | | return this.msgInfoService.updateReadStatus(msgIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 全部已读 |
| | | * 全部已读 |
| | | * @param msgId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "全部更新为已读") |
| | | @ApiOperation(value = "全部更新为已读") |
| | | @RequestMapping(value = "readall", method = RequestMethod.GET) |
| | | public @ResponseBody Result updateAllUserReadFlag(Short type){ |
| | | return this.msgInfoService.updateUserAllReadStatus(type); |
| | |
| | | |
| | | |
| | | /** |
| | | * 最近的提醒消息 |
| | | * 最近的提醒消息 |
| | | * @param msgId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "最近的一条提醒信息") |
| | | @ApiOperation(value = "最近的一条提醒信息") |
| | | @RequestMapping(value = "last", method = RequestMethod.GET) |
| | | public @ResponseBody Result getLatest(){ |
| | | return new Result(true,"",this.msgInfoService.readLastRemindMsg()); |
| | |
| | | |
| | | |
| | | /** |
| | | * 最近的提醒消息 |
| | | * 最近的提醒消息 |
| | | * @param msgId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "按类型获取未读消息的数量") |
| | | @ApiOperation(value = "按类型获取未读消息的数量") |
| | | @RequestMapping(value = "count", method = RequestMethod.GET) |
| | | public @ResponseBody Result queryUnReadMsgCountByType(){ |
| | | return new Result(true,"",this.msgInfoService.queryUnReadMsgCountByType()); |
| | | } |
| | | |
| | | /** |
| | | * 查询未读消息总数 |
| | | * 查询未读消息总数 |
| | | * @param msgId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "查询用户未读消息总数") |
| | | @ApiOperation(value = "查询用户未读消息总数") |
| | | @RequestMapping(value = "totalcount", method = RequestMethod.GET) |
| | | public @ResponseBody Result queryUnReadTotalCount(){ |
| | | return new Result(true,"",CollectionUtils.newObjectMap("totalCount",this.msgInfoService.queryUnReadTotalCount())); |
| | |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | @Api(tags = "公告接口-教师端") |
| | | @Api(tags = "公告接口-教师端") |
| | | @RestController |
| | | @RequestMapping(value = "/admin/notice") |
| | | public class NoticeController { |
| | |
| | | ClassDAO classDao; |
| | | |
| | | /** |
| | | * 显示 公告列表 |
| | | * 显示 公告列表 |
| | | * |
| | | * @param keyword |
| | | * @param pageNum |
| | | * @param pageSize |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "公告列表", notes = "获取班级列表及班级所在公告列表") |
| | | @ApiOperation(value = "公告列表", notes = "获取班级列表及班级所在公告列表") |
| | | @GetMapping(value = "list") |
| | | public Result list(String keyword, Integer pageNum, Integer pageSize) { |
| | | if (!ClientUtils.isAdmin()) { |
| | | // 获取班级列表及班级所在公告列表 |
| | | // 获取班级列表及班级所在公告列表 |
| | | List<String> noticeIds = new ArrayList<String>(10); |
| | | List<ClsClass> clsLst = classService.getClassLstByTeacherId(); |
| | | for (ClsClass cls : clsLst) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 显示 公告管理列表 |
| | | * 显示 公告管理列表 |
| | | * @param keyword |
| | | * @param pageNum |
| | | * @param pageSize |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "公告管理列表", notes = "") |
| | | @ApiOperation(value = "公告管理列表", notes = "") |
| | | @GetMapping(value = "managerLst") |
| | | public Result managerLst(String keyword, Pager pager, @RequestParam(defaultValue = "desc") String sort) { |
| | | String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword; |
| | |
| | | |
| | | private String getTypeName(String key) { |
| | | Map<String, String> typeMap = new HashMap<>(); |
| | | typeMap.put("homework", "作业公告"); |
| | | typeMap.put("exam", "考试公告"); |
| | | typeMap.put("other", "其他公告"); |
| | | typeMap.put("class", "上课公告"); |
| | | typeMap.put("homework", "作业公告"); |
| | | typeMap.put("exam", "考试公告"); |
| | | typeMap.put("other", "其他公告"); |
| | | typeMap.put("class", "上课公告"); |
| | | |
| | | return typeMap.get(key); |
| | | } |
| | | |
| | | /** |
| | | * 发布公告/多个id已逗号隔开 |
| | | * 发布公告/多个id已逗号隔开 |
| | | * |
| | | * @param noticeIds 公告ids |
| | | * @param noticeIds 公告ids |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "发布公告", notes = "多个id已逗号隔开") |
| | | @ApiOperation(value = "发布公告", notes = "多个id已逗号隔开") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String") |
| | | @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String") |
| | | }) |
| | | @PostMapping(value = "release") |
| | | public Result release(String noticeIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 取消发布/多个id已逗号隔开 |
| | | * 取消发布/多个id已逗号隔开 |
| | | * |
| | | * @param noticeIds 公告ids |
| | | * @param noticeIds 公告ids |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "取消发布", notes = "多个id已逗号隔开") |
| | | @ApiOperation(value = "取消发布", notes = "多个id已逗号隔开") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @PostMapping(value = "cancel") |
| | | public Result cancel(String noticeIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 公告/多个id已逗号隔开 |
| | | * 删除 公告/多个id已逗号隔开 |
| | | * |
| | | * @param noticeIds 公告ids |
| | | * @param noticeIds 公告ids |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "删除公告", notes = "多个id已逗号隔开") |
| | | @ApiOperation(value = "删除公告", notes = "多个id已逗号隔开") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"), |
| | | }) |
| | | @PostMapping(value = "delete") |
| | | public Result delete(String noticeIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增/更新 |
| | | * 新增/更新 |
| | | * |
| | | * @param noticeId |
| | | * @param name |
| | |
| | | * @param pathUrl |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "新增/更新公告", notes = "noticeId存在则更新,否则新增") |
| | | @ApiOperation(value = "新增/更新公告", notes = "noticeId存在则更新,否则新增") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "name", value = "公告标题", required = true, paramType = "query", dataType = "String"), |
| | | @ApiImplicitParam(name = "content", value = "公告内容", required = true, paramType = "query", dataType = "String"), |
| | | @ApiImplicitParam(name = "type", value = "公告类型名称", required = true, paramType = "query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classIds", value = "关联的班级id,逗号组装", required = true, paramType = "query", dataType = "String") }) |
| | | @ApiImplicitParam(name = "name", value = "公告标题", required = true, paramType = "query", dataType = "String"), |
| | | @ApiImplicitParam(name = "content", value = "公告内容", required = true, paramType = "query", dataType = "String"), |
| | | @ApiImplicitParam(name = "type", value = "公告类型名称", required = true, paramType = "query", dataType = "String"), |
| | | @ApiImplicitParam(name = "classIds", value = "关联的班级id,逗号组装", required = true, paramType = "query", dataType = "String") }) |
| | | @PostMapping(value = "addOrUpdate") |
| | | public Result addOrUpdate(String noticeId, String name, String content, String type, String classIds, |
| | | String pathUrl) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取公告详情 |
| | | * 获取公告详情 |
| | | * |
| | | * @param noticeId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取公告详情", notes = "") |
| | | @ApiOperation(value = "获取公告详情", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "noticeId", value = "公告id", required = true, paramType = "query", dataType = "String") |
| | | @ApiImplicitParam(name = "noticeId", value = "公告id", required = true, paramType = "query", dataType = "String") |
| | | }) |
| | | @GetMapping(value = "detail") |
| | | public Result detail(String noticeId) { |
| | |
| | | )); |
| | | } |
| | | |
| | | @ApiOperation(value = "获取班级列表", notes = "") |
| | | @ApiOperation(value = "获取班级列表", notes = "") |
| | | @GetMapping(value = "findClassLst") |
| | | public Result findClassLst() { |
| | | if (ClientUtils.isAdmin()) { |
| | | List<Map<String, Object>> clsLst = classService.getAllClassLst().getDataT("classLst"); |
| | | return new Result(true, "操作成功", QBeanUtils.listBean2ListMap(clsLst, CollectionUtils.newStringMap( |
| | | return new Result(true, "操作成功", QBeanUtils.listBean2ListMap(clsLst, CollectionUtils.newStringMap( |
| | | "classId", "classId", |
| | | "className", "className" |
| | | ))); |
| | | } else { |
| | | List<ClsClass> clsLst = classService.getClassLstByTeacherId(); |
| | | return new Result(true, "操作成功", QBeanUtils.listBean2ListMap(clsLst, CollectionUtils.newStringMap( |
| | | return new Result(true, "操作成功", QBeanUtils.listBean2ListMap(clsLst, CollectionUtils.newStringMap( |
| | | "classId", "classId", |
| | | "name", "className" |
| | | ))); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "更新公告查看次数", notes = "") |
| | | @ApiOperation(value = "更新公告查看次数", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "noticeId", value = "公告id", required = false, paramType = "query", dataType = "String") |
| | | @ApiImplicitParam(name = "noticeId", value = "公告id", required = false, paramType = "query", dataType = "String") |
| | | }) |
| | | @GetMapping(value = "view") |
| | | public Result view(String noticeId) { |
| | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 资源管理控制器 |
| | | * 资源管理控制器 |
| | | * |
| | | * @author chenjunliang |
| | | */ |
| | | @Api(tags = "资源管理接口") |
| | | @Api(tags = "资源管理接口") |
| | | @RestController |
| | | @RequestMapping(value = "/teach/res") |
| | | public class ResController { |
| | |
| | | IResService resService; |
| | | |
| | | /** |
| | | * 资源库层级管理Tree |
| | | * 资源库层级管理Tree |
| | | */ |
| | | @GetMapping(value = "categoryLevel") |
| | | public Result categoryLevel(String parentId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 资源库根节点 |
| | | * 资源库根节点 |
| | | * |
| | | * @param type 资源库类型 |
| | | * user,个人资源库 |
| | | * class,班级资源库 |
| | | * @param ownerId 资源库所属主体id,个人资源库传userId,班级资源库传classId |
| | | * @param type 资源库类型 |
| | | * user,个人资源库 |
| | | * class,班级资源库 |
| | | * @param ownerId 资源库所属主体id,个人资源库传userId,班级资源库传classId |
| | | */ |
| | | @GetMapping(value = "rootDir") |
| | | public Result getRoot(String type, String ownerId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 资源管理获取 资源列表 |
| | | * 资源管理获取 资源列表 |
| | | * |
| | | * @param dirId Ŀ¼id |
| | | * @param keyword 搜索关键字 |
| | | * @param limit 每页显示几条 |
| | | * @param pageNum 页码 |
| | | * @param type 类型(0,视频。1,音频。2,文档。3,练习。) |
| | | * @return 资源列表数据 |
| | | * @param dirId 目录id |
| | | * @param keyword 搜索关键字 |
| | | * @param limit 每页显示几条 |
| | | * @param pageNum 页码 |
| | | * @param type 类型(0,视频。1,音频。2,文档。3,练习。) |
| | | * @return 资源列表数据 |
| | | */ |
| | | @GetMapping(value = "lstRes") |
| | | public Result lstRes(String dirId, String keyword, Integer limit, Integer pageNum, String type) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 资源管理删除 资源 |
| | | * 资源管理删除 资源 |
| | | * |
| | | * @param id 资源id,英文逗号区分,可传多个 |
| | | * @param id 资源id,英文逗号区分,可传多个 |
| | | */ |
| | | @GetMapping(value = "deleteFile") |
| | | public Result deleteRes(String fileId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 资源管理 复制资源 |
| | | * 资源管理 复制资源 |
| | | * |
| | | * @param resId 资源id |
| | | * @param dirId Ŀ¼id |
| | | * @param type 类型 |
| | | * @param resId 资源id |
| | | * @param dirId 目录id |
| | | * @param type 类型 |
| | | */ |
| | | @GetMapping(value = "copyRes") |
| | | public Result copyRes(String resId, String dirId, String type) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 资源管理 资源的移动 |
| | | * 资源管理 资源的移动 |
| | | * |
| | | * @param resId 要移动的资源 |
| | | * @param type 目录类型 |
| | | * @param dirId Ŀ¼id |
| | | * @param resId 要移动的资源 |
| | | * @param type 目录类型 |
| | | * @param dirId 目录id |
| | | */ |
| | | @GetMapping(value = "moveRes") |
| | | public Result moveRes(String resId, String type, String dirId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 资源管理新增or编辑目录 |
| | | * 资源管理新增or编辑目录 |
| | | * |
| | | * @param dirId Ŀ¼id |
| | | * @param name 目录名 |
| | | * @param type (add新增 and edit修改) |
| | | * @param childFlag 是否操作下级 |
| | | * @param dirId 目录id |
| | | * @param name 目录名 |
| | | * @param type (add新增 and edit修改) |
| | | * @param childFlag 是否操作下级 |
| | | */ |
| | | @GetMapping(value = "addOrUpdateDir") |
| | | public Result addOrUpdateDir(String type, String name, String dirId, boolean childFlag) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 资源管理 删除目录 |
| | | * 资源管理 删除目录 |
| | | * |
| | | * @param dirId Ŀ¼id |
| | | * @param dirId 目录id |
| | | */ |
| | | @GetMapping(value = "deleteDir") |
| | | public Result deleteDir(String dirId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 添加/更新(视频,讲义,音频) |
| | | * 添加/更新(视频,讲义,音频) |
| | | * |
| | | * @param dirId 资源夹id |
| | | * @param name 名称 |
| | | * @param coverUrl 封面Url |
| | | * @param dirId 资源夹id |
| | | * @param name 名称 |
| | | * @param coverUrl 封面Url |
| | | * @param remark: <p> |
| | | * 视频啊啊啊 |
| | | * 视频啊啊啊 |
| | | * </p> |
| | | * 介绍 |
| | | * @param fileId 资源id |
| | | * @param id 资源id |
| | | * 介绍 |
| | | * @param fileId 资源id |
| | | * @param id 资源id |
| | | * @param type |
| | | * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。) |
| | | * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。) |
| | | */ |
| | | @PostMapping(value = "addOrUpdateRes") |
| | | public Result addOrUpdateRes(String dirId, String id, String remark, String name, String coverUrl, String type, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 批量添加资源 |
| | | * 批量添加资源 |
| | | * |
| | | * @param dirId 节点id |
| | | * @param fileId 文件id |
| | | * @param fileName 文件名称 |
| | | * @param fileType 资源类型 |
| | | * @param dirId 节点id |
| | | * @param fileId 文件id |
| | | * @param fileName 文件名称 |
| | | * @param fileType 资源类型 |
| | | */ |
| | | @PostMapping(value = "addOfBatch") |
| | | public Result addOfBatch(String dirId, String type, @RequestParam(value = "datas") String datas) { |
| | | // 转换json到对象 |
| | | // 转换json到对象 |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | try { |
| | | ResDatas resDatas = mapper.readValue(datas, ResDatas.class); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 编辑 获取内容 |
| | | * 编辑 获取内容 |
| | | * |
| | | * @param id 资源id |
| | | * @param id 资源id |
| | | */ |
| | | @GetMapping(value = "getResDetail") |
| | | public Result getResDetail(String id) { |
| | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 学籍管理控制器 |
| | | * 学籍管理控制器 |
| | | * |
| | | * @author hurenrong |
| | | */ |
| | | @Api(tags="学籍管理接口") |
| | | @Api(tags="学籍管理接口") |
| | | @RestController |
| | | @RequestMapping("/admin/schoolRoller") |
| | | public class SchoolRollController { |
| | |
| | | private ISchoolRollService iSchoolRollService; |
| | | |
| | | /** |
| | | * 获取正常学员列表 |
| | | * 获取正常学员列表 |
| | | * |
| | | * @param keyword |
| | | * @param limit |
| | | * @param pageNum |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取正学籍列表", notes = "") |
| | | @ApiOperation(value = "获取正学籍列表", notes = "") |
| | | @GetMapping(value = "/schoolList") |
| | | public Result schoolList(@RequestParam(defaultValue = "10") Integer limit, @RequestParam(defaultValue = "1") Integer pageNum,String keyword,String status) { |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 给学员分配班级 |
| | | * 给学员分配班级 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "给学员分配班级", notes = "") |
| | | @ApiOperation(value = "给学员分配班级", notes = "") |
| | | @GetMapping(value = "/updateSchoolClass") |
| | | public Result updateSchoolClass(String [] studentIds,String classId) { |
| | | return iSchoolRollService.updateSchool(studentIds, classId); |
| | | } |
| | | |
| | | /** |
| | | * 审核学员并生成学号 |
| | | * 审核学员并生成学号 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "审核学员并生成学号", notes = "") |
| | | @ApiOperation(value = "审核学员并生成学号", notes = "") |
| | | @GetMapping(value = "/auditStudent") |
| | | public Result auditStudent(String studentIds) { |
| | | return iSchoolRollService.loopStudentIds(studentIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 导出学员信息 |
| | | * 导出学员信息 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "导出学员信息", notes = "") |
| | | @ApiOperation(value = "导出学员信息", notes = "") |
| | | @GetMapping(value = "/deriveStudentMessage") |
| | | public void deriveStudentMessage(String StudentId,String ClassId) { |
| | | iSchoolRollService.deriveStudentMessage(); |
| | | } |
| | | |
| | | /** |
| | | * 查询班级 |
| | | * 查询班级 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "查询班级", notes = "") |
| | | @ApiOperation(value = "查询班级", notes = "") |
| | | @GetMapping(value = "/findClass") |
| | | public Result findClass() { |
| | | List<ClsClass> aClass = iSchoolRollService.findClass(); |
| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | /** |
| | | * 课程管理控制器 |
| | | * 课程管理控制器 |
| | | * |
| | | * @author chenjunliang |
| | | * |
| | | */ |
| | | @Api(tags = "课程管理-教师端") |
| | | @Api(tags = "课程管理-教师端") |
| | | @RestController |
| | | @RequestMapping(value = "/teach/subject") |
| | | public class SubjectController { |
| | |
| | | @Autowired |
| | | private ITeacherService teacherService; |
| | | |
| | | /**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/ |
| | | /**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/ |
| | | |
| | | /** |
| | | * 课程管理列表 |
| | | * 课程管理列表 |
| | | * |
| | | * @param keyword |
| | | * 索搜关键字 |
| | | * 索搜关键字 |
| | | * @param limit |
| | | * 显示几条 |
| | | * 显示几条 |
| | | * @param pageNum |
| | | * 当前页码 |
| | | * 当前页码 |
| | | * @param status |
| | | * ״̬ |
| | | * 状态 |
| | | */ |
| | | @ApiOperation(value = "获取列表数据-教师端", notes = "") |
| | | @ApiOperation(value = "获取列表数据-教师端", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "status", value = "״̬", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "type", value = "类型(1:班级课程,3:公开课程)", required = false, paramType="query", dataType = "Integer") |
| | | @ApiImplicitParam(name = "status", value = "状态", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "type", value = "类型(1:班级课程,3:公开课程)", required = false, paramType="query", dataType = "Integer") |
| | | }) |
| | | @GetMapping(value = "/app/teacherSubjectList") |
| | | public Result list(Pager pager, @RequestParam(defaultValue="")String keyword, String status, Integer type) { |
| | | if(type == null) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | return subjectService.teacherSubjectList(pager, keyword, status, type); |
| | | } |
| | | |
| | | /**-------------------------------------------------------------------后端接口------------------------------------------------------------------------------------------**/ |
| | | /**-------------------------------------------------------------------后端接口------------------------------------------------------------------------------------------**/ |
| | | |
| | | /** |
| | | * 课程管理列表 |
| | | * 课程管理列表 |
| | | * |
| | | * @param keyword |
| | | * 索搜关键字 |
| | | * 索搜关键字 |
| | | * @param limit |
| | | * 显示几条 |
| | | * 显示几条 |
| | | * @param pageNum |
| | | * 当前页码 |
| | | * 当前页码 |
| | | * @param status |
| | | * ״̬ |
| | | * 状态 |
| | | */ |
| | | @GetMapping(value = "/list") |
| | | public Result list(String keyword,String status,Integer type, Integer limit, Integer pageNum) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课程管理列表 |
| | | * 课程管理列表 |
| | | * |
| | | * @param keyword |
| | | * 索搜关键字 |
| | | * 索搜关键字 |
| | | * @param limit |
| | | * 显示几条 |
| | | * 显示几条 |
| | | * @param pageNum |
| | | * 当前页码 |
| | | * 当前页码 |
| | | * @param status |
| | | * ״̬ |
| | | * 状态 |
| | | */ |
| | | @GetMapping(value = "/listAllSimple") |
| | | public Result listAllSimple() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课程发布 |
| | | * 课程发布 |
| | | * a |
| | | * @param 课程ids |
| | | * @param 课程ids |
| | | */ |
| | | @GetMapping(value = "/release") |
| | | public Result release(String subjectIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课程下架 |
| | | * 课程下架 |
| | | * |
| | | * @param subjectIds |
| | | * 课程ids |
| | | * 课程ids |
| | | */ |
| | | @GetMapping(value = "/soldOut") |
| | | public Result soldOut(String subjectIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 课程删除 |
| | | * 课程删除 |
| | | * |
| | | * @param subjectIds |
| | | * 课程ids |
| | | * 课程ids |
| | | */ |
| | | @GetMapping(value = "/delete") |
| | | public Result delete(String subjectIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复制课程 |
| | | * 复制课程 |
| | | * |
| | | * @param subjectId |
| | | * 课程id |
| | | * 课程id |
| | | * @param subjectName |
| | | * 课程名称 |
| | | * 课程名称 |
| | | * @param imgPath |
| | | * ͼƬurl |
| | | * 图片url |
| | | * @param content |
| | | * 课程介绍 |
| | | * 课程介绍 |
| | | */ |
| | | @PostMapping(value = "/copy") |
| | | public Result copy(String subjectId, String subjectName, String imgPath, String content,int type) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增课程 |
| | | * 新增课程 |
| | | * |
| | | * @param subjectName |
| | | * 课程名称 |
| | | * 课程名称 |
| | | * @param imgPath |
| | | * ͼƬurl |
| | | * 图片url |
| | | * @param content |
| | | * 课程介绍 |
| | | * 课程介绍 |
| | | * @return |
| | | */ |
| | | @PostMapping(value = "/add") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增练习 |
| | | * 新增练习 |
| | | * |
| | | * @param name |
| | | * 题目名称 |
| | | * 题目名称 |
| | | * @param type |
| | | * 题库类型 |
| | | * 题库类型 |
| | | * @param difficulty |
| | | * 难度系数 |
| | | * 难度系数 |
| | | * @param repeatFlag |
| | | * 是否重复 |
| | | * 是否重复 |
| | | * @return |
| | | */ |
| | | @PostMapping(value = "addExercise") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新课程 |
| | | * 更新课程 |
| | | * |
| | | * @param subjectId |
| | | * 课程id |
| | | * 课程id |
| | | * @param subjectName |
| | | * 课程名称 |
| | | * 课程名称 |
| | | * @param imgPath |
| | | * ͼƬurl |
| | | * 图片url |
| | | * @param content |
| | | * 课程介绍 |
| | | * 课程介绍 |
| | | */ |
| | | @PostMapping(value = "/update") |
| | | public Result update(String subjectId, String subjectName, String imgPath, String content,int type) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新课程获取课程内容 |
| | | * 更新课程获取课程内容 |
| | | * |
| | | * @param subjectId |
| | | * 课程id |
| | | * 课程id |
| | | */ |
| | | @ApiOperation(value = "获取课程详情-教师端", notes = "") |
| | | @ApiOperation(value = "获取课程详情-教师端", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String") |
| | | @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String") |
| | | }) |
| | | @GetMapping(value = "getSubjectDetail") |
| | | public Result getSubjectDetail(String subjectId) { |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取可用课程下拉列表接口 |
| | | * 获取可用课程下拉列表接口 |
| | | * |
| | | * @param examId |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/selectlist", method = RequestMethod.GET) |
| | | public @ResponseBody List<Map<String,Object>> subjectList(Integer subjectType) { |
| | | //判断是否是教师 |
| | | //判断是否是教师 |
| | | String teacherId = ClientUtils.isAdmin() ? null : teacherService.getTeacherIdByUserId(ClientUtils.getUserId()); |
| | | |
| | | if(subjectType==null){ |
| | |
| | | import com.qxueyou.scc.user.model.UserTeacher; |
| | | |
| | | /** |
| | | * 教师管理控制器 |
| | | * 教师管理控制器 |
| | | * |
| | | * @author chenjunliang |
| | | * |
| | |
| | | private ITeacherService teacherService; |
| | | |
| | | /** |
| | | * 教师管理显示列表 |
| | | * 教师管理显示列表 |
| | | * |
| | | * @param pageSize |
| | | * 每页显示几条 |
| | | * 每页显示几条 |
| | | * @param pageNum |
| | | * 页码 |
| | | * 页码 |
| | | * @param keyword |
| | | * 索搜关键字 |
| | | * 索搜关键字 |
| | | */ |
| | | @GetMapping(value = "lstTeacher") |
| | | public Result lstTeacher(String keyword, Integer pageSize, Integer pageNum) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 教师管理新增/更新 |
| | | * 教师管理新增/更新 |
| | | * |
| | | * @param teacherId |
| | | * |
| | | * @param teacherName |
| | | * 老师名称 |
| | | * 老师名称 |
| | | * @param account |
| | | * 账号 |
| | | * 账号 |
| | | * @param password |
| | | * 密码 |
| | | * 密码 |
| | | * @param mobilePhone |
| | | * 手机 |
| | | * 手机 |
| | | */ |
| | | @PostMapping(value = "addOrUpdate") |
| | | public Result addOrUpdate(String teacherId, String teacherName, String account, String password, String mobilePhone, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 教师管理 删除教师 |
| | | * 教师管理 删除教师 |
| | | * |
| | | * @param teacherIds |
| | | * 老师ids |
| | | * 老师ids |
| | | */ |
| | | @PostMapping(value = "delete") |
| | | public Result deleteTeacher(String teacherIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 教师管理导出 |
| | | * 教师管理导出 |
| | | */ |
| | | @GetMapping(value = "exportTeacher") |
| | | public Result export(HttpServletResponse response) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 教室管理导入 |
| | | * 教室管理导入 |
| | | */ |
| | | @GetMapping(value = "importTeacher") |
| | | public Result importTeacher() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增班级获取教师列表 |
| | | * 新增班级获取教师列表 |
| | | */ |
| | | @GetMapping(value = "getLstTeacher4Cls") |
| | | public Result getLstTeacher4Cls() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增班级获取教师列表 |
| | | * 新增班级获取教师列表 |
| | | */ |
| | | @GetMapping(value = "getTeacherbyUserId") |
| | | public Result getTeacherbyUserId(String userId) { |
| | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 角色管理前端控制器 |
| | | * 角色管理前端控制器 |
| | | * |
| | | * @author chenjunliang |
| | | * |
| | |
| | | ITeacherService teacherService; |
| | | |
| | | /** |
| | | * 获取角色列表 |
| | | * 获取角色列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取人员列表 |
| | | * 获取人员列表 |
| | | */ |
| | | @GetMapping(value = "getUserLst") |
| | | public Result getUserLstByRoleId(String roleId, Integer pageSize, Integer pageNum, String keyword) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除人员 |
| | | * 删除人员 |
| | | * |
| | | * @param userid |
| | | * 用户id可以多个 ,分隔 |
| | | * 用户id可以多个 ,分隔 |
| | | */ |
| | | @PostMapping(value = "delete") |
| | | public Result delete(String userId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增人员 |
| | | * 新增人员 |
| | | */ |
| | | @PostMapping(value = "add") |
| | | public Result insertUser(String roleId, String name, String account, String password, String mobilePhone) { |
| | |
| | | User user = userService.getUserByAccount(account, ClientUtils.getOrgId()); |
| | | |
| | | if (null != user) { |
| | | return new Result(false,"重复的用户,不允许添加!"); |
| | | return new Result(false,"重复的用户,不允许添加!"); |
| | | } |
| | | |
| | | //如果角色是老师,添加老师信息 |
| | | //如果角色是老师,添加老师信息 |
| | | if(roleId.equals(UserRole.ROLE_TEACHER_ID)){ |
| | | result= teacherService.add(name, password, mobilePhone, account); |
| | | }else{ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增教师 |
| | | * 新增教师 |
| | | */ |
| | | @PostMapping(value = "addTeachers") |
| | | public Result addTeachers(String teacherIds, String roleId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新 |
| | | * 更新 |
| | | */ |
| | | @PostMapping(value = "update") |
| | | public Result updateUser(String userId, String name, String account, String password, String mobilePhone) { |
| | |
| | | |
| | | UserTeacher teacher = ClientUtils.isAdmin() ? null : teacherService.getTeacherByUserId(ClientUtils.getUserId()); |
| | | |
| | | //如果用户是老师,更新老师信息 |
| | | //如果用户是老师,更新老师信息 |
| | | if(teacher!=null){ |
| | | result = teacherService.update(teacher.getTeacherId(), name, account, password, mobilePhone, account); |
| | | }else{ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 角色管理 显示角色信息 |
| | | * 角色管理 显示角色信息 |
| | | */ |
| | | @GetMapping(value = "queryRoleDetail") |
| | | public Result queryRoleDetail(String roleId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 显示教师列表 |
| | | * 显示教师列表 |
| | | */ |
| | | @GetMapping(value = "findTeacherLst") |
| | | public Result findTeacherLst(String keyword, Integer pageSize, Integer pageNum, String roleId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 修改角色信息 |
| | | * 修改角色信息 |
| | | */ |
| | | @PostMapping(value = "updateRole") |
| | | public Result updateRole(String roleId, String menuIds, String name) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除角色 |
| | | * 删除角色 |
| | | */ |
| | | @PostMapping(value = "deleteRole") |
| | | public Result deleteRole(String roleId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取所有菜单列表 |
| | | * 获取所有菜单列表 |
| | | */ |
| | | @GetMapping(value = "findAllMenuLst") |
| | | public Result findMenuLst() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增角色 |
| | | * 新增角色 |
| | | */ |
| | | @PostMapping(value = "addRole") |
| | | public Result addRole(String name,Integer roleType) { |
| | |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | @Api(tags="直播管理接口") |
| | | @Api(tags="直播管理接口") |
| | | @RestController |
| | | @CrossOrigin(origins="*",maxAge=3600) |
| | | @RequestMapping(value = "/admin/videoLive") |
| | | public class VideoLiveController { |
| | | |
| | | // 分页查询中,默认记录条数和页数 |
| | | // 分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE = 10; |
| | | private static final int DEFAULT_PAGE_NUM = 1; |
| | | |
| | |
| | | MediaLiveDAO dao; |
| | | |
| | | /** |
| | | * 获取直播列表 |
| | | * 获取直播列表 |
| | | * |
| | | * @param keyword |
| | | * 搜索关键字 |
| | | * 搜索关键字 |
| | | * @param pageNum |
| | | * 页码 |
| | | * 页码 |
| | | * @param pageSize |
| | | * 页数 |
| | | * 页数 |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取创建人的直播列表") |
| | | @ApiOperation(value = "获取创建人的直播列表") |
| | | @GetMapping(value = "list") |
| | | public Result list(String keyword, Integer pageNum, Integer pageSize) { |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增直播/更新直播 |
| | | * 新增直播/更新直播 |
| | | * |
| | | * @param videoLiveId |
| | | * 直播id(更新的时候才需要传) |
| | | * 直播id(更新的时候才需要传) |
| | | * @param name |
| | | * 直播名称 |
| | | * 直播名称 |
| | | * @param content |
| | | * 直播介绍 |
| | | * 直播介绍 |
| | | * @param imgPath |
| | | * 图片地址 |
| | | * 图片地址 |
| | | * @param startTime |
| | | * 开始时间 |
| | | * 开始时间 |
| | | * @param endTime |
| | | * 结束时间 |
| | | * 结束时间 |
| | | * @param isPlayBack |
| | | * 是否回放 |
| | | * 是否回放 |
| | | * @param classIds |
| | | * 班级id |
| | | * 班级id |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "创建编辑直播") |
| | | @ApiOperation(value = "创建编辑直播") |
| | | @PostMapping(value = "addOrUpdate") |
| | | public Result addOrUpdate(String videoLiveId, String name, String content,String teacherId,String teacherName,String subjectId, |
| | | String subjectName,String definition,String imgPath, long startTime,long endTime, boolean isPlayBack, String classIds) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询直播详情 |
| | | * 查询直播详情 |
| | | * |
| | | * @param videoLiveId |
| | | * 直播id |
| | | * 直播id |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取直播详情") |
| | | @ApiOperation(value = "获取直播详情") |
| | | @GetMapping(value = "queryDetail") |
| | | public Result detail(String videoLiveId) { |
| | | List<String> lstClassIds = null; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 发布/多个以逗号隔开 |
| | | * 发布/多个以逗号隔开 |
| | | * |
| | | * @param videoLiveIds |
| | | * 直播ids |
| | | * 直播ids |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "发布直播") |
| | | @ApiOperation(value = "发布直播") |
| | | @PostMapping(value = "release") |
| | | public Result release(String videoLiveIds) { |
| | | for(String liveId:videoLiveIds.split(",")) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 取消发布/多个以逗号隔开 |
| | | * 取消发布/多个以逗号隔开 |
| | | * |
| | | * @param videoLiveIds |
| | | * 直播ids |
| | | * 直播ids |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "取消发布直播") |
| | | @ApiOperation(value = "取消发布直播") |
| | | @PostMapping(value = "cancel") |
| | | public Result cance(String videoLiveIds) { |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除/多个以逗号隔开 |
| | | * 删除/多个以逗号隔开 |
| | | * |
| | | * @param videoLiveId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "删除创建的直播") |
| | | @ApiOperation(value = "删除创建的直播") |
| | | @PostMapping(value = "delete") |
| | | public Result delete(String videoLiveIds) { |
| | | return liveService.delete(videoLiveIds.split(",")); |
| | |
| | | |
| | | |
| | | /** |
| | | * 直播开始 |
| | | * 直播开始 |
| | | * |
| | | * @param videoLiveIds |
| | | * 直播id |
| | | * 直播id |
| | | */ |
| | | @ApiOperation(value = "直播开始") |
| | | @ApiOperation(value = "直播开始") |
| | | @PostMapping(value = "start") |
| | | public Result start(String videoLiveIds) { |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 直播暂停 |
| | | * 直播暂停 |
| | | * |
| | | * @param videoLiveIds |
| | | * 直播id |
| | | * 直播id |
| | | */ |
| | | @ApiOperation(value = "直播暂停") |
| | | @ApiOperation(value = "直播暂停") |
| | | @PostMapping(value = "pause") |
| | | public Result pause(String videoLiveIds) { |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 直播结束 |
| | | * 直播结束 |
| | | * |
| | | * @param videoLiveId |
| | | * 直播id |
| | | * 直播id |
| | | */ |
| | | @ApiOperation(value = "直播结束") |
| | | @ApiOperation(value = "直播结束") |
| | | @PostMapping(value = "stop") |
| | | public Result stop(String videoLiveIds) { |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 直播点赞 |
| | | * 直播点赞 |
| | | * |
| | | * @param videoLiveId |
| | | * 直播id |
| | | * 直播id |
| | | */ |
| | | @ApiOperation(value = "直播点赞") |
| | | @ApiOperation(value = "直播点赞") |
| | | @PostMapping(value = "praise") |
| | | public Result praise(String videoLiveId) { |
| | | return liveService.doPraise(videoLiveId); |
| | | } |
| | | |
| | | @ApiOperation(value = "学生端根据班级,课程过滤直播列表") |
| | | @ApiOperation(value = "学生端根据班级,课程过滤直播列表") |
| | | @GetMapping(value = "student/list") |
| | | public Result list(String keyword,String classIds,String subjectId,Short status,Integer pageNum, Integer pageSize) { |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | |
| | | )))); |
| | | } |
| | | |
| | | @ApiOperation(value = "直播回放列表") |
| | | @ApiOperation(value = "直播回放列表") |
| | | @GetMapping(value = "replay/list") |
| | | public Result listReplay(String videoLiveId) { |
| | | |
| | |
| | | )))); |
| | | } |
| | | |
| | | @ApiOperation(value = "测试直播回放") |
| | | @ApiOperation(value = "测试直播回放") |
| | | @GetMapping(value = "replay/test") |
| | | public Result testReplay(String liveId) { |
| | | mediaVideoLivePlayBackService.testPlayBack(liveId); |
| | |
| | | import com.qxueyou.scc.school.model.SchHandoutReCourse; |
| | | |
| | | /** |
| | | * 科目类别管理controller |
| | | * 科目类别管理controller |
| | | * |
| | | * @author 德虎 |
| | | * @history 2014-11-25 新建 夏德虎 |
| | | * @author 德虎 |
| | | * @history 2014-11-25 新建 夏德虎 |
| | | * |
| | | */ |
| | | @Controller |
| | |
| | | ISysBusinessCacheService sysBusinessCacheService ;*/ |
| | | |
| | | /** |
| | | * APP2.0: 课程超市 选课 获取所有分类 <br> |
| | | * APP2.0: 课程超市 选课 获取所有分类 <br> |
| | | * URL /org/courcecategory/courseCatNew<br> |
| | | * |
| | | * @method GET |
| | | * @return 返回值JSON串:<br> |
| | | * @return 返回值JSON串:<br> |
| | | * |
| | | * <pre> |
| | | * [{"index":1,"code":"1CKJR","categoryName":"财会金融","categoryId":"18","imgPath":"/web/res/img/app/coursemarket_ico_accounting.png"}, |
| | | * [{"index":1,"code":"1CKJR","categoryName":"财会金融","categoryId":"18","imgPath":"/web/res/img/app/coursemarket_ico_accounting.png"}, |
| | | * ...... |
| | | * {"index":8,"code":"9QB","categoryName":"全部","categoryId":"26","imgPath":"/web/res/img/app/coursemarket_ico_classify.png"}] |
| | | * {"index":8,"code":"9QB","categoryName":"全部","categoryId":"26","imgPath":"/web/res/img/app/coursemarket_ico_classify.png"}] |
| | | * </pre> |
| | | * |
| | | * 字段值说明: |
| | | * 字段值说明: |
| | | * |
| | | * <pre> |
| | | * index:索引 |
| | | * code:编码 |
| | | * categoryName:名字 |
| | | * index:索引 |
| | | * code:编码 |
| | | * categoryName:名字 |
| | | * categoryId:id |
| | | * imgPath:logo URL |
| | | * </pre> |
| | |
| | | page.setPageNum(1); |
| | | page.setPageSize(Integer.MAX_VALUE); |
| | | |
| | | // 1. 查询该机构下所有的科目 |
| | | // 1. 查询该机构下所有的科目 |
| | | String hql = "select c from OrgCourseCategory c where c.deleteFlag is false and c.categoryLevel = ? order by c.code asc "; |
| | | |
| | | List<OrgCourseCategory> lstLastCategory = commonDAO.findList(hql, page, CollectionUtils.newList(OrgCourseCategory.CATEGORY_LEVEL_FIRST), OrgCourseCategory.class); |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 课程超市 所有查询条件 <br> |
| | | * APP2.0: 课程超市 所有查询条件 <br> |
| | | * URL /org/courcecategory/courseCatContitionNew<br> |
| | | * |
| | | * 返回值JSON串:<br> |
| | | * 返回值JSON串:<br> |
| | | * |
| | | * <pre> |
| | | * { |
| | | * "course":[ |
| | | * {"code":"0QB","children":[],"index":1,"categoryName":"全部","categoryId":"26","parentId":null}, |
| | | * {"code":"1CKJR","children":[],"index":2,"categoryName":"财会金融","categoryId":"18","parentId":null}, |
| | | * {"code":"2YYKS","children":[],"index":3,"categoryName":"语言考试","categoryId":"19","parentId":null}, |
| | | * {"code":"3YYL","children":[],"index":4,"categoryName":"医药类","categoryId":"20","parentId":null}, |
| | | * {"code":"4JGL","children":[],"index":5,"categoryName":"建工类","categoryId":"21","parentId":null}, |
| | | * {"code":"5ZYKZ","children":null,"index":6,"categoryName":"职业考证","categoryId":"22","parentId":null}, |
| | | * {"code":"0QB","children":[],"index":1,"categoryName":"全部","categoryId":"26","parentId":null}, |
| | | * {"code":"1CKJR","children":[],"index":2,"categoryName":"财会金融","categoryId":"18","parentId":null}, |
| | | * {"code":"2YYKS","children":[],"index":3,"categoryName":"语言考试","categoryId":"19","parentId":null}, |
| | | * {"code":"3YYL","children":[],"index":4,"categoryName":"医药类","categoryId":"20","parentId":null}, |
| | | * {"code":"4JGL","children":[],"index":5,"categoryName":"建工类","categoryId":"21","parentId":null}, |
| | | * {"code":"5ZYKZ","children":null,"index":6,"categoryName":"职业考证","categoryId":"22","parentId":null}, |
| | | * {"code":"6XLJY","children":[ |
| | | * {"code":null,"index":1,"categoryName":"经济学","categoryId":"5","parentId":"23"}, |
| | | * {"code":null,"index":2,"categoryName":"法学","categoryId":"6","parentId":"23"} |
| | | * ],"index":7,"categoryName":"学历教育","categoryId":"23","parentId":null}, |
| | | * {"code":"7ITJN","children":[],"index":8,"categoryName":"IT技能","categoryId":"24","parentId":null}, |
| | | * {"code":"8QT","children":[],"index":9,"categoryName":"其他","categoryId":"25","parentId":null} |
| | | * {"code":null,"index":1,"categoryName":"经济学","categoryId":"5","parentId":"23"}, |
| | | * {"code":null,"index":2,"categoryName":"法学","categoryId":"6","parentId":"23"} |
| | | * ],"index":7,"categoryName":"学历教育","categoryId":"23","parentId":null}, |
| | | * {"code":"7ITJN","children":[],"index":8,"categoryName":"IT技能","categoryId":"24","parentId":null}, |
| | | * {"code":"8QT","children":[],"index":9,"categoryName":"其他","categoryId":"25","parentId":null} |
| | | * ], |
| | | * "city":[{"name":"深圳","index":1,"code":"sz"},{"name":"广州","index":2,"code":"gz"}], |
| | | * "sort":[{"name":"价格由低到高","index":1,"code":"PRICE_ASC"},{"name":"价格由高到低","index":2,"code":"PRICE_DESC"}] |
| | | * "city":[{"name":"深圳","index":1,"code":"sz"},{"name":"广州","index":2,"code":"gz"}], |
| | | * "sort":[{"name":"价格由低到高","index":1,"code":"PRICE_ASC"},{"name":"价格由高到低","index":2,"code":"PRICE_DESC"}] |
| | | * } |
| | | * |
| | | * <pre> |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 该机构下所有课程的分类和科目 URL: /org/courcecategory/courseCategoryNew |
| | | * APP2.0: 该机构下所有课程的分类和科目 URL: /org/courcecategory/courseCategoryNew |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | @RequestMapping(value = "courseCategoryNew", method = RequestMethod.GET) |
| | | public @ResponseBody List<OrgCourseCategory> getCourseCategoryData() { |
| | | |
| | | // 1. 查询该机构下所有的科目 |
| | | // 1. 查询该机构下所有的科目 |
| | | String hql = "select courseId,name,price,imgPath,courseCategoryId " + " from OrgCourse c where c.deleteFlag is false"; |
| | | |
| | | // 2. 查询该机构下所有的科目对应的类别 |
| | | // 2. 查询该机构下所有的科目对应的类别 |
| | | String hql_type = "select distinct c.category.categoryId,c.category.categoryName from OrgCourse c where " + " c.deleteFlag is false order by c.createTime "; |
| | | |
| | | List<Object> args = new ArrayList<Object>(1); |
| | | // 如果是游客班 查所有机构 1:表示游客班 |
| | | // 如果是游客班 查所有机构 1:表示游客班 |
| | | // if (!orgClassService.isCurrentVistorClass()) { |
| | | // hql = hql.concat(" and c.org.organizationId=?"); |
| | | // hql_type = "select distinct c.category.categoryId,c.category.categoryName from OrgCourse c where " + " c.org.organizationId=? and c.deleteFlag is false order by c.createTime "; |
| | | // args = CollectionUtils.newList(ClientUtils.getOrgId()); |
| | | // } |
| | | |
| | | // 1. 查询该机构下所有的科目 |
| | | // 1. 查询该机构下所有的科目 |
| | | List<OrgCollegeCourse> lstCourse = categoryService.queryOrgCourseListNew(hql, args); |
| | | |
| | | // 2. 查询该机构下所有的科目对应的类别 |
| | | // 2. 查询该机构下所有的科目对应的类别 |
| | | List<OrgCourseCategory> lstCategory = categoryService.queryOrgCourseCategoryList(hql_type, args); |
| | | |
| | | // 组装结构 |
| | | // 组装结构 |
| | | List<OrgCollegeCourse> newLstCourse = null; |
| | | for (OrgCourseCategory category : lstCategory) { |
| | | newLstCourse = new ArrayList<OrgCollegeCourse>(); |
| | |
| | | } |
| | | category.setCourseList(newLstCourse); |
| | | } |
| | | // 不限制值 |
| | | // 不限制值 |
| | | String not_limit = Constants.NOT_LIMIT_VALUE; |
| | | // 重新组装类型 添加不限 |
| | | // 重新组装类型 添加不限 |
| | | List<OrgCourseCategory> lstLastCategory = new ArrayList<OrgCourseCategory>(); |
| | | // 添加第一个不限 |
| | | // 添加第一个不限 |
| | | OrgCourseCategory category = new OrgCourseCategory(); |
| | | category.setCategoryId(not_limit); |
| | | category.setCategoryName("不限"); |
| | | category.setCategoryName("不限"); |
| | | |
| | | List<OrgCollegeCourse> lstLastCourse = new ArrayList<OrgCollegeCourse>(); |
| | | OrgCollegeCourse course = new OrgCollegeCourse(); |
| | | course.setCourseId(not_limit); |
| | | course.setName("不限"); |
| | | course.setName("不限"); |
| | | |
| | | lstLastCategory.add(category); |
| | | lstLastCategory.addAll(lstCategory); |
| | |
| | | for (OrgCourseCategory cate : lstLastCategory) { |
| | | lstLastCourse = new ArrayList<OrgCollegeCourse>(); |
| | | lstLastCourse.add(course); |
| | | if (not_limit.equals(cate.getCategoryId())) {// 不限 |
| | | if (not_limit.equals(cate.getCategoryId())) {// 不限 |
| | | lstLastCourse.addAll(lstCourse); |
| | | } else { |
| | | lstLastCourse.addAll(cate.getCourseList()); |
| | |
| | | return lstLastCategory; |
| | | } |
| | | |
| | | /******************************************************************* 上面为App接口,下面为后台接口 **************************/ |
| | | /******************************************************************* 上面为App接口,下面为后台接口 **************************/ |
| | | |
| | | /** |
| | | * 科目类别列表 |
| | | * 科目类别列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据科目ID查询科目 |
| | | * 根据科目ID查询科目 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增 |
| | | * 新增 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新 |
| | | * 更新 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增类别层级 |
| | | * 新增类别层级 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | return result; |
| | | } |
| | | |
| | | return new Result(false,"参数错误"); |
| | | return new Result(false,"参数错误"); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 类别层级数据 |
| | | * 类别层级数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | if(null == orgCollegeCourse){ |
| | | continue; |
| | | } |
| | | //去除掉不content内容 |
| | | //去除掉不content内容 |
| | | orgCollegeCourse.setContent(""); |
| | | |
| | | if(null == map.get(orgCollegeCourse.getCourseCategoryId())){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 视频类别层级数据 |
| | | * 视频类别层级数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 讲义类别层级数据 |
| | | * 讲义类别层级数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 练习类别层级数据 |
| | | * 练习类别层级数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 讲义类别层级数据 |
| | | * 讲义类别层级数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询视频讲义练习在各个科目下的数量 |
| | | * @param type 1:视频 2:讲义 3:练习 |
| | | * 查询视频讲义练习在各个科目下的数量 |
| | | * @param type 1:视频 2:讲义 3:练习 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | |
| | | } |
| | | |
| | | /** |
| | | * ztree层级数据 |
| | | * ztree层级数据 |
| | | * |
| | | * @return |
| | | *//* |
| | |
| | | } |
| | | |
| | | *//** |
| | | * ztree层级数据 |
| | | * ztree层级数据 |
| | | * |
| | | * @return |
| | | *//* |
| | |
| | | }*/ |
| | | |
| | | /** |
| | | * 查询 |
| | | * 查询 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询专业信息 |
| | | * 查询专业信息 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取机构名字 |
| | | * 获取机构名字 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除科目 |
| | | * 删除科目 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除专业 |
| | | * 删除专业 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 3初始化科目 |
| | | * 3初始化科目 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | |
| | | i++; |
| | | } |
| | | return new Result(true,"总共有"+lstCourse.size()+",初始化了"+i+"条"); |
| | | return new Result(true,"总共有"+lstCourse.size()+",初始化了"+i+"条"); |
| | | } |
| | | |
| | | /** |
| | | * 2先初始化课件数据,再初始化上面的科目 |
| | | * 2先初始化课件数据,再初始化上面的科目 |
| | | * |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/initCourseWare", method = RequestMethod.POST) |
| | | public @ResponseBody Result initCourseWare() { |
| | | |
| | | //视频 |
| | | //视频 |
| | | int i = 0; |
| | | String hql = " from MediaVideoReCourse where deleteFlag is false"; |
| | | List<MediaVideoReCourse> videos = commonDAO.find(hql, MediaVideoReCourse.class); |
| | |
| | | commonService.save(course); |
| | | i++; |
| | | } |
| | | //讲义 |
| | | //讲义 |
| | | int y = 0; |
| | | hql = " from SchHandoutReCourse where deleteFlag is false"; |
| | | List<SchHandoutReCourse> handouts = commonDAO.find(hql, SchHandoutReCourse.class); |
| | |
| | | commonService.save(course); |
| | | y++; |
| | | } |
| | | //练习 |
| | | //练习 |
| | | int z = 0; |
| | | hql = " from ExerciseReCourse where deleteFlag is false"; |
| | | List<ExerciseReCourse> exers = commonDAO.find(hql, ExerciseReCourse.class); |
| | |
| | | commonService.save(course); |
| | | z++; |
| | | } |
| | | return new Result(true,"视频总共"+videos.size()+"个,成功了"+i+"个"+"讲义总共"+handouts.size()+"个,成功了"+y+"个"+"练习总共"+exers.size()+"个,成功了"+z+"个"); |
| | | return new Result(true,"视频总共"+videos.size()+"个,成功了"+i+"个"+"讲义总共"+handouts.size()+"个,成功了"+y+"个"+"练习总共"+exers.size()+"个,成功了"+z+"个"); |
| | | } |
| | | |
| | | /** |
| | | * 1初始化班级 机构ID |
| | | * 1初始化班级 机构ID |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | commonService.save(orgClass); |
| | | i++; |
| | | } |
| | | return new Result(true,"班级总共"+ocs.size()+",成功了"+i+"个"); |
| | | return new Result(true,"班级总共"+ocs.size()+",成功了"+i+"个"); |
| | | } |
| | | |
| | | /** |
| | | * 初始化levelCode |
| | | * 初始化levelCode |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | @SuppressWarnings("unused") |
| | | private String generateLevelCode(String name) { |
| | | |
| | | // 转拼音 |
| | | //使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号 |
| | | // 转拼音 |
| | | //使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号 |
| | | String[] arrUnidecode = WordProcessUtils.toPinyin(name.replace(" ",""), " ").replaceAll("'", "").split(" "); |
| | | |
| | | String orgCode = ""; |
| | |
| | | import com.qxueyou.scc.org.model.OrgCourse; |
| | | |
| | | /** |
| | | * 科目管理controller |
| | | * 科目管理controller |
| | | * |
| | | * @author 德虎 |
| | | * @history 2014-11-25 新建 夏德虎 |
| | | * @author 德虎 |
| | | * @history 2014-11-25 新建 夏德虎 |
| | | * |
| | | */ |
| | | @Controller |
| | |
| | | private ICourseService service; |
| | | |
| | | /** |
| | | * APP2.0: 查询科目内容 |
| | | * APP2.0: 查询科目内容 |
| | | * URL: /org/cource/queryCourseNew/{courseId} |
| | | * |
| | | * @param courseId 科目ID |
| | | * @param courseId 科目ID |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "queryCourseNew/{courseId}", method = RequestMethod.GET) |
| | |
| | | |
| | | OrgCollegeCourse course = commonDAO.read(OrgCollegeCourse.class, courseId); |
| | | |
| | | // // 如果是游客班 1:表示游客班 |
| | | // // 如果是游客班 1:表示游客班 |
| | | // if(orgClassService.isCurrentVistorClass()){ |
| | | // //Organization org = course.getOrg(); |
| | | // Organization org = commonDAO.read(Organization.class, course.getTopOrgId()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 推荐课程 |
| | | * APP2.0: 推荐课程 |
| | | * URL: /org/cource/recommendCourseNew |
| | | * |
| | | * @return |
| | |
| | | public @ResponseBody |
| | | List<OrgCollegeCourse> recommendCourse() { |
| | | |
| | | // 1. 查询该机构下推荐课程 只取前三个 |
| | | // 1. 查询该机构下推荐课程 只取前三个 |
| | | String hql = "select courseId,name,price,imgPath,courseCategoryId " |
| | | + " from OrgCourse c where c.deleteFlag is false and c.recommend is true"; |
| | | |
| | | List<Object> args = new ArrayList<Object>(1); |
| | | // 如果是游客班 查所有机构 1:表示游客班 |
| | | // 如果是游客班 查所有机构 1:表示游客班 |
| | | // if(!orgClassService.isCurrentVistorClass()){ |
| | | // hql += " and c.org.organizationId=?"; |
| | | // args = CollectionUtils.newList(ClientUtils.getOrgId()); |
| | |
| | | return lstCourse; |
| | | } |
| | | |
| | | // 只取前三项数据 |
| | | // 只取前三项数据 |
| | | List<OrgCollegeCourse> lstResultCourse = new ArrayList<OrgCollegeCourse>(); |
| | | int count = lstCourse.size() >= 3 ? 3 : lstCourse.size(); |
| | | for (int i = 0; i < count; i++) { |
| | |
| | | return lstResultCourse; |
| | | } |
| | | |
| | | /******************************************************************* 上面为App接口,下面为后台接口 **************************/ |
| | | /******************************************************************* 上面为App接口,下面为后台接口 **************************/ |
| | | |
| | | /** |
| | | * 科目列表 |
| | | * 科目列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取列表数据 |
| | | * 获取列表数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据科目ID查询科目 |
| | | * 根据科目ID查询科目 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 专业编辑 - 选择科目类别后加载专业列表 |
| | | * 专业编辑 - 选择科目类别后加载专业列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增 |
| | | * 新增 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 编辑 |
| | | * 编辑 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | public @ResponseBody |
| | | Result delete(String courseIds) { |
| | | |
| | | // 保存到服务器 |
| | | // 保存到服务器 |
| | | return orgCourseService.deleteCourses(courseIds.split(",")); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 推荐 |
| | | * 推荐 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | public @ResponseBody |
| | | Result recommend(String courseIds) { |
| | | |
| | | // 保存到服务器 |
| | | // 保存到服务器 |
| | | return orgCourseService.doRecommend(courseIds.split(",")); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 取消推荐 |
| | | * 取消推荐 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | public @ResponseBody |
| | | Result unrecommend(String courseIds) { |
| | | |
| | | // 保存到服务器 |
| | | // 保存到服务器 |
| | | return orgCourseService.doUnRecommend(courseIds.split(",")); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 更新 |
| | | * 更新 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 科目介绍预览 |
| | | * 科目介绍预览 |
| | | * @param orgClass |
| | | * @param mobilePhone |
| | | * @return |
| | |
| | | |
| | | |
| | | /** |
| | | * 查询所有机构项目 |
| | | * 查询所有机构项目 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value="/allCourseName",method=RequestMethod.GET) |
| | |
| | | |
| | | public interface ICourceCategoryService { |
| | | /** |
| | | * 查询科目list 根据条件 |
| | | * 查询科目list 根据条件 |
| | | * @param hql |
| | | * @param args |
| | | * @return |
| | |
| | | List<OrgCollegeCourse> queryOrgCourseList(String hql, List<Object> args); |
| | | |
| | | /** |
| | | * 查询科目list 根据条件 |
| | | * 查询科目list 根据条件 |
| | | * @param hql |
| | | * @param args |
| | | * @return |
| | |
| | | List<OrgCollegeCourse> queryOrgCourseListNew(String hql, List<Object> args); |
| | | |
| | | /** |
| | | * 查询科目类型list 根据条件 |
| | | * 查询科目类型list 根据条件 |
| | | * @param hql |
| | | * @param args |
| | | * @return |
| | |
| | | List<OrgCourseCategory> queryOrgCourseCategoryList(String hql, List<Object> args); |
| | | |
| | | /** |
| | | * 组装 全部课程 所有查询条件 |
| | | * 组装 全部课程 所有查询条件 |
| | | * @return |
| | | * @version 2.0 |
| | | */ |
| | |
| | | Result doDeleteCourse(String id); |
| | | |
| | | /** |
| | | * 新增科目 |
| | | * 新增科目 |
| | | * @param id |
| | | * @param name |
| | | * @param code |
| | |
| | | import com.qxueyou.scc.base.model.Result; |
| | | |
| | | /** |
| | | * 项目服务接口 |
| | | * @author 岩龙 |
| | | * 项目服务接口 |
| | | * @author 岩龙 |
| | | * @createtime 2017-10-31 |
| | | */ |
| | | public interface ICourseService { |
| | | |
| | | /** |
| | | * 查询科目类别 |
| | | * @param categoryId 当前目录id |
| | | * 查询科目类别 |
| | | * @param categoryId 当前目录id |
| | | * @return |
| | | */ |
| | | public List<Map<String, Object>> queryCategoryList() ; |
| | | |
| | | /** |
| | | * 添加科目类别 |
| | | * @param parentId 父节点id |
| | | * @param catalogName 目录名 |
| | | * 添加科目类别 |
| | | * @param parentId 父节点id |
| | | * @param catalogName 目录名 |
| | | * @return |
| | | */ |
| | | public Result insertCourseCategory(String parentId,String catalogName); |
| | | |
| | | /** |
| | | * 修改科目类别 |
| | | * @param categoryId 类别id |
| | | * @param categoryName 类别名 |
| | | * 修改科目类别 |
| | | * @param categoryId 类别id |
| | | * @param categoryName 类别名 |
| | | * @return |
| | | */ |
| | | public Result updateCourseCategory(String categoryId,String categoryName); |
| | | |
| | | /** |
| | | * 删除科目类别 |
| | | * @param categoryId 当前目录id |
| | | * 删除科目类别 |
| | | * @param categoryId 当前目录id |
| | | * @return |
| | | */ |
| | | public Result deleteCategory(String categoryId) ; |
| | |
| | | |
| | | |
| | | /** |
| | | * 查询项目 |
| | | * @param categoryId 类别id |
| | | * 查询项目 |
| | | * @param categoryId 类别id |
| | | * @return |
| | | */ |
| | | public List<Map<String, Object>> queryCourse(String categoryId) ; |
| | | |
| | | /** |
| | | * 添加项目 |
| | | * @param categoryId 科目类别id |
| | | * @param courseName 项目名 |
| | | * 添加项目 |
| | | * @param categoryId 科目类别id |
| | | * @param courseName 项目名 |
| | | * @return |
| | | */ |
| | | public Result insertCourse(String categoryId,String courseName); |
| | | |
| | | /** |
| | | * 修改项目 |
| | | * @param courseId 项目id |
| | | * @param courseName 项目名 |
| | | * 修改项目 |
| | | * @param courseId 项目id |
| | | * @param courseName 项目名 |
| | | * @return |
| | | */ |
| | | public Result updateCourse(String courseId,String courseName); |
| | | |
| | | /** |
| | | * 删除项目 |
| | | * @param courseId 项目id |
| | | * 删除项目 |
| | | * @param courseId 项目id |
| | | * @return |
| | | */ |
| | | public Result deleteCourse(String courseId); |
| | | |
| | | |
| | | /** |
| | | * 查询课程 |
| | | * @param courseId 项目id |
| | | * 查询课程 |
| | | * @param courseId 项目id |
| | | * @return |
| | | */ |
| | | public List<Map<String, Object>> querySubject(String courseId); |
| | | |
| | | |
| | | /** |
| | | * 添加课程 |
| | | * @param courseId 项目id |
| | | * @param subjectName 课程名 |
| | | * 添加课程 |
| | | * @param courseId 项目id |
| | | * @param subjectName 课程名 |
| | | * @return |
| | | */ |
| | | public Result insertSubject(String courseId,String subjectName); |
| | | |
| | | /** |
| | | * 修改课程 |
| | | * @param subjectId 课程id |
| | | * @param subjectName 课程名 |
| | | * 修改课程 |
| | | * @param subjectId 课程id |
| | | * @param subjectName 课程名 |
| | | * @return |
| | | */ |
| | | public Result updateSubject(String subjectId,String subjectName); |
| | | |
| | | /** |
| | | * 删除课程 |
| | | * @param subjectId 课程id |
| | | * 删除课程 |
| | | * @param subjectId 课程id |
| | | * @return |
| | | */ |
| | | public Result deleteSubject(String subjectId); |
| | | |
| | | |
| | | /** |
| | | * 查询章 |
| | | * @param subjectId 课程Id |
| | | * 查询章 |
| | | * @param subjectId 课程Id |
| | | * @return |
| | | */ |
| | | public List<Map<String, Object>> queryChapter(String subjectId); |
| | | |
| | | /** |
| | | * 查询节 |
| | | * 查询节 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | public List<Map<String, Object>> querychildChapter(String id); |
| | | |
| | | /** |
| | | * 添加章节 |
| | | * @param subjectId 课程Id |
| | | * @param chapterName 父章节Id |
| | | * @param chapterName 章节名称 |
| | | * @param courseId 项目Id |
| | | * 添加章节 |
| | | * @param subjectId 课程Id |
| | | * @param chapterName 父章节Id |
| | | * @param chapterName 章节名称 |
| | | * @param courseId 项目Id |
| | | * @return |
| | | */ |
| | | public Result insertChapter(String subjectId,String chapterId,String chapterName,String courseId); |
| | |
| | | |
| | | |
| | | /** |
| | | * 修改章节 |
| | | * @param chapterId 章节id |
| | | * @param chapterName 章节名称 |
| | | * 修改章节 |
| | | * @param chapterId 章节id |
| | | * @param chapterName 章节名称 |
| | | * @return |
| | | */ |
| | | public Result updateChapter(String chapterId,String chapterName); |
| | | |
| | | /** |
| | | * 删除章节 |
| | | * 删除章节 |
| | | * @param chapterId |
| | | * @return |
| | | */ |
| | | public Result deleteChapter(String chapterId); |
| | | |
| | | /** |
| | | * 查询所有机构项目名 |
| | | * 查询所有机构项目名 |
| | | * @return |
| | | */ |
| | | public List<Map<String, Object>> queryCourseName(); |
| | | |
| | | |
| | | /** |
| | | * 删除树节点 |
| | | * 删除树节点 |
| | | * @param id |
| | | * @param type |
| | | * @return |
| | |
| | | public Result deleteNode(String id, String type); |
| | | |
| | | /** |
| | | * pc端显示项目名称 |
| | | * pc端显示项目名称 |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> findclassNameByCourse(String mode); |
| | |
| | | public interface IOrgCourseService { |
| | | |
| | | /** |
| | | * 后台 科目列表 |
| | | * 后台 科目列表 |
| | | * @param sql |
| | | * @param args |
| | | * @return |
| | |
| | | public List<OrgCollegeCourse> queryCourseList(String OrgId); |
| | | |
| | | /** |
| | | * 新增科目 |
| | | * 新增科目 |
| | | * @param course |
| | | * @return |
| | | */ |
| | | Result insertCourse(OrgCollegeCourse course); |
| | | |
| | | /** |
| | | * 更新科目 |
| | | * 更新科目 |
| | | * @param course |
| | | * @return |
| | | */ |
| | | Result updateCourse(OrgCollegeCourse course); |
| | | |
| | | /** |
| | | * 删除科目 |
| | | * 删除科目 |
| | | * @param courseIds |
| | | * @return |
| | | */ |
| | | Result deleteCourses(String[] courseIds); |
| | | |
| | | /** |
| | | * 推荐科目 |
| | | * 推荐科目 |
| | | * @param courseIds |
| | | * @return |
| | | */ |
| | | Result doRecommend(String[] courseIds); |
| | | |
| | | /** |
| | | * 取消推荐科目 |
| | | * 取消推荐科目 |
| | | * @param courseIds |
| | | * @return |
| | | */ |
| | | Result doUnRecommend(String[] courseIds); |
| | | |
| | | /** |
| | | * 专业编辑 - 选择科目类别后加载专业列表 |
| | | * 专业编辑 - 选择科目类别后加载专业列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | private OrgDAO orgDAO; |
| | | |
| | | /** |
| | | * IHandoutService服务 |
| | | * IHandoutService服务 |
| | | */ |
| | | @Autowired |
| | | IHandoutService handoutService; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 依赖注入 |
| | | * 依赖注入 |
| | | * |
| | | * @param commonDAO |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 组装 全部课程 所有查询条件 |
| | | * 组装 全部课程 所有查询条件 |
| | | * |
| | | * @return |
| | | * @version 2.0 |
| | |
| | | |
| | | Map<String,Object> result = new HashMap<String,Object>(3); |
| | | |
| | | // 1.课程分类 |
| | | // 1.课程分类 |
| | | String firstHql = "select c from OrgCourseCategory c where c.deleteFlag is false and c.categoryLevel = ? order by c.code asc "; |
| | | List<OrgCourseCategory> lstFirstCategory = this.find(firstHql, |
| | | CollectionUtils.newList(OrgCourseCategory.CATEGORY_LEVEL_FIRST) , OrgCourseCategory.class); |
| | |
| | | CollectionUtils.newList(OrgCourseCategory.CATEGORY_LEVEL_SECOND,Organization.ORG_TYPE_DEGREE_EDUCATION) , OrgCourseCategory.class); |
| | | |
| | | |
| | | // 1.1 第二层 |
| | | // 1.1 第二层 |
| | | Map<String,List<OrgCourseCategory>> secondMap = new HashMap<String,List<OrgCourseCategory>>(lstFirstCategory.size()); |
| | | for(OrgCourseCategory second : lstSecondCategory ){ |
| | | if(StringUtils.isNotBlank(second.getParentCategoryId()) && null == secondMap.get(second.getParentCategoryId())){ |
| | |
| | | } |
| | | } |
| | | |
| | | // 组装的数据格式 |
| | | // 组装的数据格式 |
| | | Map<String,Object> sMap; |
| | | List<Map<String,Object>> lstS ; |
| | | |
| | |
| | | int fIndex = 0; |
| | | int sIndex = 0; |
| | | |
| | | // 循环 |
| | | // 循环 |
| | | for(OrgCourseCategory first : lstFirstCategory){ |
| | | |
| | | fIndex = fIndex + 1 ; |
| | |
| | | fMap.put("code", first.getCode()); |
| | | fMap.put("parentId", null); |
| | | |
| | | // 第二层 |
| | | // 第二层 |
| | | if(null != secondMap.get(first.getCategoryId()) ){ |
| | | for(OrgCourseCategory second : secondMap.get(first.getCategoryId())){ |
| | | |
| | |
| | | |
| | | result.put("course", lstF); |
| | | |
| | | // 2.排序 |
| | | // 2.排序 |
| | | List<Map<String,Object>> lstSort = new ArrayList<Map<String,Object>>(5); |
| | | Map<String,Object> sort; |
| | | |
| | |
| | | } |
| | | result.put("sort", lstSort); |
| | | |
| | | // 3.地区 |
| | | // 3.地区 |
| | | List<Map<String,Object>> lstCity = new ArrayList<Map<String,Object>>(6); |
| | | Map<String,Object> city; |
| | | |
| | |
| | | public Result insertLevelCategory(String id,String name,String code,String type){ |
| | | Organization org = read(Organization.class, ClientUtils.getOrgId()); |
| | | Result result = new Result(true); |
| | | //保存 |
| | | //保存 |
| | | if("save".equals(type)){ |
| | | OrgCategoryLevel ocl = read(OrgCategoryLevel.class, id); |
| | | ocl.setCategoryName(name); |
| | |
| | | result.setData(ocl); |
| | | return result; |
| | | } |
| | | //增加同级 |
| | | //增加同级 |
| | | if("add".equals(type)){ |
| | | OrgCategoryLevel ocl0 = read(OrgCategoryLevel.class, id); |
| | | OrgCategoryLevel ocl = new OrgCategoryLevel(); |
| | |
| | | return result; |
| | | } |
| | | |
| | | //增加下级 |
| | | //增加下级 |
| | | if("addNext".equals(type)){ |
| | | OrgCategoryLevel parent = read(OrgCategoryLevel.class, id); |
| | | OrgCategoryLevel ocl = new OrgCategoryLevel(); |
| | |
| | | return result; |
| | | } |
| | | |
| | | return new Result(false,"参数错误"); |
| | | return new Result(false,"参数错误"); |
| | | |
| | | |
| | | } |
| | |
| | | OrgCategoryLevel origCateLevel ; |
| | | //BeanUtils.copyProperties(ocl, origCateLevel); |
| | | if(parent==null){ |
| | | // 首层:直接生成 |
| | | // 首层:直接生成 |
| | | levelCode = UUIDUtils.generateUUID(); |
| | | origLevelCode = levelCode; |
| | | }else{ |
| | | // 下层:根据parent生成 |
| | | // 下层:根据parent生成 |
| | | levelCode = parent.getLevelCode()+"00"; |
| | | } |
| | | do { |
| | |
| | | |
| | | origCateLevel = new OrgCategoryLevel(); |
| | | BeanUtils.copyProperties(ocl , origCateLevel); |
| | | if(parent==null){ // 首层:直接生成 |
| | | if(parent==null){ // 首层:直接生成 |
| | | origCateLevel.setLevel(BigDecimal.ONE.shortValue()); |
| | | origCateLevel.setLevelCode(levelCode+"_00"); |
| | | }else{ // 下层:根据parent生成 |
| | | }else{ // 下层:根据parent生成 |
| | | origCateLevel.setLevel(new BigDecimal(parent.getLevel()).add(BigDecimal.ONE).shortValue()); |
| | | origCateLevel.setLevelCode(levelCode); |
| | | } |
| | |
| | | |
| | | loop++; |
| | | if(parent==null){ |
| | | // 首层:直接生成 |
| | | // 首层:直接生成 |
| | | levelCode = origLevelCode.concat(String.valueOf(loop)); |
| | | }else{ |
| | | // 下层:根据parent生成 |
| | | // 下层:根据parent生成 |
| | | String h = String.valueOf(loop); |
| | | if(loop<10){ |
| | | h = "0"+loop; |
| | |
| | | @SuppressWarnings("unused") |
| | | private String generateLevelCode(String name) { |
| | | |
| | | // 转拼音 |
| | | //使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号 |
| | | // 转拼音 |
| | | //使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号 |
| | | String[] arrUnidecode = WordProcessUtils.toPinyin(name," ").replaceAll("'", "").split(" "); |
| | | |
| | | String orgCode = ""; |
| | |
| | | |
| | | } |
| | | if(flag){ |
| | | return new Result(false,"该分类下的科目下存在班级,请先删除班级"); |
| | | return new Result(false,"该分类下的科目下存在班级,请先删除班级"); |
| | | } |
| | | for (OrgCategoryLevel orgCategoryLevel : lstCate) { |
| | | hql = " from OrgCollegeCourse where deleteFlag is false and courseCategoryId = ?"; |
| | |
| | | String hql = " from ClsClass where deleteFlag is false and collegeCourseId = ?"; |
| | | ClsClass cls = findUnique(hql, CollectionUtils.newList(id), ClsClass.class); |
| | | if(cls!=null){ |
| | | return new Result(false,"该科目下存在班级,请先删除班级"); |
| | | return new Result(false,"该科目下存在班级,请先删除班级"); |
| | | } |
| | | //删除所有视频 |
| | | //删除所有视频 |
| | | doDeleteVideo(id); |
| | | //删除所有练习 |
| | | //删除所有练习 |
| | | doDeleteExe(id); |
| | | //删除所有讲义 |
| | | //删除所有讲义 |
| | | doDeleteHandout(id); |
| | | |
| | | hql = " from OrgCollegeCourse where deleteFlag is false and collegeCourseId = ?"; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增科目 |
| | | * 新增科目 |
| | | * @param id |
| | | * @param name |
| | | * @param code |
| | |
| | | @Override |
| | | public Result addCategory(Organization org, String id, String name, String code, String type) { |
| | | Result result = new Result(true); |
| | | //保存 |
| | | //保存 |
| | | if("save".equals(type)){ |
| | | OrgCategoryLevel ocl = this.read(OrgCategoryLevel.class, id); |
| | | ocl.setCategoryName(name); |
| | |
| | | result.setData(ocl); |
| | | return result; |
| | | } |
| | | //增加同级 |
| | | //增加同级 |
| | | if("add".equals(type)){ |
| | | OrgCategoryLevel ocl0 = this.read(OrgCategoryLevel.class, id); |
| | | OrgCategoryLevel ocl = new OrgCategoryLevel(); |
| | |
| | | OrgCategoryLevel parent = this.read(OrgCategoryLevel.class, ocl0.getParentId()); |
| | | TraceUtils.setCreateTrace(ocl); |
| | | |
| | | result.setData(insertOcl(ocl,parent,name));//插入ocl |
| | | result.setData(insertOcl(ocl,parent,name));//插入ocl |
| | | return result; |
| | | } |
| | | |
| | | //增加下级 |
| | | //增加下级 |
| | | if("addNext".equals(type)){ |
| | | OrgCategoryLevel parent = this.read(OrgCategoryLevel.class, id); |
| | | OrgCategoryLevel ocl = new OrgCategoryLevel(); |
| | |
| | | import com.qxueyou.scc.teach.subject.model.SubjectChapter; |
| | | |
| | | /** |
| | | * 项目服务类 |
| | | * 项目服务类 |
| | | * |
| | | * @author 岩龙 |
| | | * @author 岩龙 |
| | | * @createtime 2017-10-31 |
| | | */ |
| | | @Service |
| | |
| | | public Result deleteChapter(String chapterId) { |
| | | this.bulkUpdate("update SchChapter set deleteFlag is true where chapterId=?", new Object[] { chapterId }); |
| | | |
| | | return new Result(true, "操作成功!"); |
| | | return new Result(true, "操作成功!"); |
| | | } |
| | | |
| | | // 显示有过班级的项目名称 |
| | | // 显示有过班级的项目名称 |
| | | @Override |
| | | public List<Map<String, Object>> queryCourseName() { |
| | | String hql = "select collegeCourseId as id , name as name from OrgCollegeCourse where deleteFlag is false order by createTime asc"; |
| | |
| | | return findListWithMapByHql(hql, null); |
| | | } |
| | | |
| | | // PC端首页显示有过班级的项目名称 |
| | | // PC端首页显示有过班级的项目名称 |
| | | @Override |
| | | public List<Map<String, Object>> findclassNameByCourse(String mode) { |
| | | String hql = "select distinct c.collegeCourseId as id , c.name as name from OrgCollegeCourse c ,ClsClass o where o.deleteFlag is false and c.deleteFlag is false and o.collegeCourseId =c.collegeCourseId "; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除科目下的项目 |
| | | * 删除科目下的项目 |
| | | * |
| | | * @param categoryId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除项目下的课程 |
| | | * 删除项目下的课程 |
| | | * |
| | | * @param courseId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除节 |
| | | * 删除节 |
| | | * |
| | | * @param chapterId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除树节点 |
| | | * 删除树节点 |
| | | */ |
| | | public Result deleteNode(String id, String type) { |
| | | if (type.equals("category")) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 依赖注入 |
| | | * 依赖注入 |
| | | * |
| | | * @param lessonDAO |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 后台 科目列表 |
| | | * 后台 科目列表 |
| | | * @param sql |
| | | * @param args |
| | | * @return |
| | |
| | | @Override |
| | | public Result insertCourse(OrgCollegeCourse course) { |
| | | |
| | | if(StringUtils.isNotBlank(course.getCollegeCourseId())){ // 编辑 |
| | | if(StringUtils.isNotBlank(course.getCollegeCourseId())){ // 编辑 |
| | | String hql = " from ClsClass where collegeCourseId = ? and deleteFlag is false"; |
| | | List<ClsClass> classes = find(hql, CollectionUtils.newList(course.getCollegeCourseId()), ClsClass.class); |
| | | for (ClsClass orgClass : classes) { |
| | |
| | | dbCourse.setRecommend(course.isRecommend()); |
| | | dbCourse.setTeacher(course.getTeacher()); |
| | | dbCourse.setCourseId(course.getCourseId()); |
| | | dbCourse.setCode(course.getName());//增加设置code |
| | | dbCourse.setCode(course.getName());//增加设置code |
| | | TraceUtils.setUpdateTrace(dbCourse); |
| | | Result result = save(dbCourse); |
| | | result.setMsg(course.getCollegeCourseId()); |
| | |
| | | return result; |
| | | } |
| | | |
| | | // 设置基本信息 |
| | | // 设置基本信息 |
| | | TraceUtils.setCreateTrace(course); |
| | | |
| | | course.setDeleteFlag(false); |
| | |
| | | @Override |
| | | public Result updateCourse(OrgCollegeCourse course) { |
| | | |
| | | // 设置基本信息 |
| | | // 设置基本信息 |
| | | String hql = " from ClsClass where collegeCourseId = ? and deleteFlag is false"; |
| | | List<ClsClass> classes = find(hql, CollectionUtils.newList(course.getCollegeCourseId()), ClsClass.class); |
| | | for (ClsClass orgClass : classes) { |
| | |
| | | dbCourse.setRecommend(course.isRecommend()); |
| | | dbCourse.setTeacher(course.getTeacher()); |
| | | dbCourse.setCourseId(course.getCourseId()); |
| | | //增加设置code |
| | | //增加设置code |
| | | dbCourse.setCode(course.getName()); |
| | | TraceUtils.setUpdateTrace(dbCourse); |
| | | Result result = save(dbCourse); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 专业编辑 - 选择科目类别后加载专业列表 |
| | | * 专业编辑 - 选择科目类别后加载专业列表 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<OrgCourse> loadCourse( String courseCategoryId,String courseId) { |
| | | |
| | | // 查询当前机构的专业 |
| | | // 查询当前机构的专业 |
| | | String hql_coll = "from OrgCollegeCourse where deleteFlag is false and organizationId = ? and courseId is not null"; |
| | | List<OrgCollegeCourse> orgCollLst = find(hql_coll, CollectionUtils.newList(ClientUtils.getOrgId()), OrgCollegeCourse.class); |
| | | |
| | | // 过滤掉courseID |
| | | // 过滤掉courseID |
| | | String courseIds = ""; |
| | | for (int i = 0; i < orgCollLst.size(); i++) { |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | // 根据选择的科目ID查询专业ID |
| | | // 根据选择的科目ID查询专业ID |
| | | String hql = "from OrgCourse where deleteFlag is false and courseCategoryId = ? "; |
| | | List<OrgCourse> orgCourse = find(hql, CollectionUtils.newList(courseCategoryId), OrgCourse.class); |
| | | |
| | | // 过滤当前机构已经添加的专业列表 |
| | | // 过滤当前机构已经添加的专业列表 |
| | | List<OrgCourse> orgCourseLst = new ArrayList<OrgCourse>(orgCourse.size()); |
| | | for (OrgCourse course : orgCourse) { |
| | | if(!ArrayUtils.contains(courseIds.split(","), course.getCourseId())){ |
| | |
| | | "update OrgCollegeCourse set deleteFlag = true where collegeCourseId = ?", |
| | | courseIds); |
| | | |
| | | //发送消息异步维护科目关联关系 |
| | | //发送消息异步维护科目关联关系 |
| | | for(String courseId:courseIds){ |
| | | // sendUpdateCourseRelationMsg(courseId); |
| | | } |
| | |
| | | import com.qxueyou.scc.school.model.SchEvaluateTemplate; |
| | | |
| | | /** |
| | | * 评分模板控制器,基本和练习一致 |
| | | * 评分模板控制器,基本和练习一致 |
| | | * @author Ody.yuan |
| | | * |
| | | */ |
| | |
| | | private IEvaluateTemplateService evaluateTemplateService; |
| | | |
| | | /** |
| | | * 评估模板主页 |
| | | * 评估模板主页 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 后台 |
| | | * 评估模板列表,获取列表数据 |
| | | * 后台 |
| | | * 评估模板列表,获取列表数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除评估模板 |
| | | * 删除评估模板 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | public Result delete(String groupId,String templateId) { |
| | | int iCount = this.commonDAO.findCount("from SchEvaluate s where s.evalTemplateId = ? and s.deleteFlag is false", CollectionUtils.newList(templateId)); |
| | | if(iCount > 0){ |
| | | return new Result(false, "有问卷正在使用此模板,不能删除!"); |
| | | return new Result(false, "有问卷正在使用此模板,不能删除!"); |
| | | } |
| | | return evaluateTemplateService.deleteEvaluateTemplate(groupId,templateId); |
| | | } |
| | | |
| | | /** |
| | | * 查询模板是否添加了问卷 |
| | | * 查询模板是否添加了问卷 |
| | | * |
| | | * @param templateId |
| | | * @return |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取评分标准 |
| | | * 获取评分标准 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取评分标准 |
| | | * 获取评分标准 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 编辑模板 |
| | | * 编辑模板 |
| | | * |
| | | * @param evaluateTemplateId |
| | | * @return |
| | |
| | | package com.qxueyou.scc.evaluate.dao; |
| | | |
| | | import org.springframework.stereotype.Repository; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import com.qxueyou.scc.base.service.IBaseJpaRepository; |
| | | import com.qxueyou.scc.school.model.SchEvaluate; |
| | | import com.qxueyou.scc.base.service.IBaseJpaRepository; |
| | | import com.qxueyou.scc.school.model.SchEvaluate; |
| | | |
| | | /** |
| | | * 评估 |
| | | * ���� |
| | | * @author zhiyong |
| | | * |
| | | */ |
| | | @Repository |
| | | public interface EvaluateRepository extends IBaseJpaRepository<SchEvaluate>{ |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | public interface IEvaluateService { |
| | | |
| | | /** |
| | | * 查询列表数据 |
| | | * 查询列表数据 |
| | | * @param pageNum |
| | | * @param pageSize |
| | | * @return |
| | |
| | | ResultJson queryList(Integer pageNum, Integer pageSize, String keyword, String sort); |
| | | |
| | | /** |
| | | * 获取范围选择 |
| | | * 获取范围选择 |
| | | * |
| | | * type: lesson:课程 class:班级 person:人员 |
| | | * type: lesson:课程 class:班级 person:人员 |
| | | * |
| | | * @return |
| | | */ |
| | | ResultJson queryRangeList(String type,String searchName); |
| | | |
| | | /** |
| | | * 后台新增评估 |
| | | * 后台新增评估 |
| | | * @param eva |
| | | * @return |
| | | */ |
| | | ResultJson addOrUpdateEvaluate(SchEvaluate eva); |
| | | |
| | | /** |
| | | * 获取基本信息 |
| | | * 获取基本信息 |
| | | * @param eva |
| | | * @return |
| | | */ |
| | | ResultJson queryBaseInfo(String evaluateId); |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * @param evaluateIds |
| | | * @return |
| | | */ |
| | | ResultJson delete(String evaluateIds); |
| | | |
| | | /** |
| | | * 激活 |
| | | * 激活 |
| | | * @param evaluateIds |
| | | * @return |
| | | */ |
| | | ResultJson doActive(String evaluateIds); |
| | | |
| | | /** |
| | | * 撤回 |
| | | * 撤回 |
| | | * @param evaluateIds |
| | | * @return |
| | | */ |
| | | ResultJson doWithdraw(String evaluateIds); |
| | | |
| | | /** |
| | | * 复制 |
| | | * 复制 |
| | | * @param evaluateIds |
| | | * @return |
| | | */ |
| | | ResultJson doCopy(SchEvaluate eva); |
| | | |
| | | /** |
| | | * 查看结果 问卷整体情况 |
| | | * 查看结果 问卷整体情况 |
| | | * @param evaluateId |
| | | * @param groupId |
| | | * @param evalRangeType |
| | |
| | | ResultJson queryEvaluateDetail(String evaluateId,String groupId); |
| | | |
| | | /** |
| | | * 查询问卷统计 |
| | | * 查询问卷统计 |
| | | * @param groupId |
| | | * @param evaluateId |
| | | * @return |
| | |
| | | ResultJson queryEvaluateStatis(String groupId,String evaluateId); |
| | | |
| | | /** |
| | | * 微信端提交答案 |
| | | * 微信端提交答案 |
| | | * @param score |
| | | * @return |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * 查询学生评估list |
| | | * 查询学生评估list |
| | | * @return |
| | | */ |
| | | ResultJson queryStuEvaluateList(Pager pager); |
| | | |
| | | |
| | | /** |
| | | * 获取评估题目(新接口) |
| | | * 获取评估题目(新接口) |
| | | * @param templateId |
| | | * @return |
| | | */ |
| | | ResultJson doGetEvalExerItemResponseDataNew(String evaluateId); |
| | | |
| | | /** |
| | | * 查询学生评估count |
| | | * 查询学生评估count |
| | | * @return |
| | | */ |
| | | public Map<String, Object> queryStuEvaluateCount(); |
| | | |
| | | /** |
| | | * 更新评估表记录 |
| | | * 更新评估表记录 |
| | | * @return |
| | | */ |
| | | public SchEvaluate updateEvaluateCount(String evaluateId); |
| | |
| | | public interface IEvaluateTemplateService { |
| | | |
| | | /** |
| | | * 新增评估模板 |
| | | * 新增评估模板 |
| | | * @param name |
| | | * @return |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * 删除评估模板 |
| | | * 删除评估模板 |
| | | * @param ids |
| | | * @param templateId |
| | | * @return |
| | |
| | | public abstract Result deleteEvaluateTemplate(String ids,String templateId); |
| | | |
| | | /** |
| | | * 增加评分标准 |
| | | * 增加评分标准 |
| | | * @param exerciseId |
| | | * @param type |
| | | * @param lstScore |
| | |
| | | public abstract Result insertExerciseScore(String exerciseId,short type,List<String> lstScore,String scoreAnswer, String exerciseItemScoreId); |
| | | |
| | | /** |
| | | * 批量删除ExerciseGroup,删除逻辑 |
| | | * @param groupId 主键, |
| | | * 批量删除ExerciseGroup,删除逻辑 |
| | | * @param groupId 主键, |
| | | * @return |
| | | */ |
| | | public Result deleteExerciseGroup(String groupId); |
| | |
| | | IMsgInfoService msgInfoService; |
| | | |
| | | /** |
| | | * 查询列表数据 |
| | | * 查询列表数据 |
| | | * @param pageNum |
| | | * @param pageSize |
| | | * @return |
| | |
| | | QExerciseGroup group = QExerciseGroup.exerciseGroup; |
| | | QSubject subject = QSubject.subject; |
| | | |
| | | // 搜索名 |
| | | // 搜索名 |
| | | keyword = StringUtils.isBlank(keyword) ? null : "%"+keyword+"%"; |
| | | |
| | | // 获取查询结果集合 |
| | | // 获取查询结果集合 |
| | | QueryResults<Tuple> results = this.getQueryFactory() |
| | | .select(qEva, group,subject) |
| | | .from(qEva, template, group,subject) |
| | |
| | | .orderBy(qEva.createTime.desc()) |
| | | .fetchResults(); |
| | | |
| | | // 封装参数 |
| | | // 封装参数 |
| | | List<Map<String,Object>> resultLst = |
| | | results.getResults() |
| | | .stream() |
| | |
| | | map.put("createTime", tuple.get(qEva).getCreateTime()); |
| | | map.put("groupId", tuple.get(group).getGroupId()); |
| | | map.put("exerCount", tuple.get(group).getAllCount()); |
| | | map.put("evaluateCount", this.getEvaluateCount(tuple.get(qEva).getEvaluateId()));//已评估人数 |
| | | map.put("evaluateCount", this.getEvaluateCount(tuple.get(qEva).getEvaluateId()));//已评估人数 |
| | | map.put("evaluateAllCount", this |
| | | .queryEvaluateAllCount(tuple.get(qEva).getEvalRangeType(), tuple.get(qEva).getEvalRangeId().split(",")));//应评估人数 |
| | | .queryEvaluateAllCount(tuple.get(qEva).getEvalRangeType(), tuple.get(qEva).getEvalRangeId().split(",")));//应评估人数 |
| | | return map; |
| | | }).collect(Collectors.toList()); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取范围选择 |
| | | * 获取范围选择 |
| | | * |
| | | * type: lesson:课程 class:班级 person:人员 |
| | | * type: lesson:课程 class:班级 person:人员 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | public ResultJson queryRangeList(String type,String searchName) { |
| | | |
| | | List<Tuple> tupleLst = null; |
| | | // 搜索名 |
| | | // 搜索名 |
| | | searchName = StringUtils.isBlank(searchName) ? null : "%"+searchName+"%"; |
| | | |
| | | if(ClientUtils.isAdmin()){// 管理员 |
| | | if(ClientUtils.isAdmin()){// 管理员 |
| | | |
| | | tupleLst = getAdminRangeList(type,searchName); |
| | | }else{// 老师 |
| | | }else{// 老师 |
| | | |
| | | tupleLst = getTeacherRangeList(type,searchName); |
| | | } |
| | | |
| | | // 统一处理返回数据 |
| | | // 统一处理返回数据 |
| | | List<Map<String,Object>> resultLst = tupleLst.stream() |
| | | .map(tuple -> { |
| | | Map<String,Object> map = new HashMap<String,Object>(2); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取管理员范围选择 |
| | | * 获取管理员范围选择 |
| | | * @param type |
| | | * @return |
| | | */ |
| | |
| | | QUser user = QUser.user; |
| | | List<Tuple> tupleLst = null; |
| | | |
| | | if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程 |
| | | if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程 |
| | | |
| | | tupleLst = this.getQueryFactory().select(subject.name.as("name"),subject.subjectId.as("id")).distinct() |
| | | .from(subject) |
| | |
| | | .orderBy(subject.createTime.desc()) |
| | | .fetch(); |
| | | |
| | | }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(type)){//班级 |
| | | }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(type)){//班级 |
| | | |
| | | tupleLst = this.getQueryFactory().select(cls.name.as("name"),cls.classId.as("id")).distinct() |
| | | .from(cls) |
| | |
| | | .build()) |
| | | .orderBy(cls.createTime.desc()) |
| | | .fetch(); |
| | | }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(type)){//人员 |
| | | }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(type)){//人员 |
| | | QStuStudent stu = QStuStudent.stuStudent; |
| | | |
| | | tupleLst = this.getQueryFactory().select(user.name.as("name"),user.userId.as("id")).distinct() |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取老师范围选择 |
| | | * 获取老师范围选择 |
| | | * @param type |
| | | * @return |
| | | */ |
| | |
| | | List<Tuple> tupleLst = null; |
| | | String teacherId = teacherService.getTeacherIdByUserId(ClientUtils.getUserId()); |
| | | |
| | | if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程 |
| | | if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程 |
| | | |
| | | tupleLst = this.getQueryFactory().select(subject.name.as("name"),subject.subjectId.as("id")).distinct() |
| | | .from(subject) |
| | |
| | | .orderBy(subject.createTime.desc()) |
| | | .fetch(); |
| | | |
| | | }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(type)){//班级 |
| | | }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(type)){//班级 |
| | | |
| | | tupleLst = this.getQueryFactory().select(cls.name.as("name"),cls.classId.as("id")).distinct() |
| | | .from(subject, re, cls) |
| | |
| | | .orderBy(subject.createTime.desc()) |
| | | .fetch(); |
| | | |
| | | }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(type)){//人员 |
| | | }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(type)){//人员 |
| | | QStuStudent stu = QStuStudent.stuStudent; |
| | | |
| | | tupleLst = this.getQueryFactory().select(stu.name.as("name"),stu.userId.as("id")).distinct() |
| | |
| | | } |
| | | |
| | | /** |
| | | * 后台新增评估 |
| | | * 后台新增评估 |
| | | * @param eva |
| | | * @return |
| | | */ |
| | |
| | | public ResultJson addOrUpdateEvaluate(SchEvaluate eva) { |
| | | String evaluateId = eva.getEvaluateId(); |
| | | String groupId = null; |
| | | if(StringUtils.isBlank(evaluateId)){// 新增 |
| | | //1、插入组 |
| | | if(StringUtils.isBlank(evaluateId)){// 新增 |
| | | //1、插入组 |
| | | ExerciseGroup obj = this.insertExerciseGroup(eva.getEvaluateName(), |
| | | ExerciseGroup.TYPE_EXERCISE_TEACH_EVALUATE); |
| | | |
| | | //2、插入评估模板 |
| | | //2、插入评估模板 |
| | | SchEvaluateTemplate objTemplate = new SchEvaluateTemplate(); |
| | | TraceUtils.setCreateTrace(objTemplate); |
| | | objTemplate.setEvaluateTemplateName(eva.getEvaluateName()); |
| | |
| | | objTemplate.setOrgName(ClientUtils.getOrgName()); |
| | | this.save(objTemplate); |
| | | |
| | | // 3、插入评估表 |
| | | // 3、插入评估表 |
| | | eva.setEvalTemplateId(objTemplate.getEvaluateTemplateId()); |
| | | eva.setEvalTemplateName(objTemplate.getEvaluateTemplateName()); |
| | | eva.setEvaluateCount(BigInteger.ZERO); |
| | |
| | | |
| | | evaluateId = eva.getEvaluateId(); |
| | | groupId = obj.getGroupId(); |
| | | }else{// 编辑 |
| | | }else{// 编辑 |
| | | SchEvaluate newEva = this.read(SchEvaluate.class, eva.getEvaluateId()); |
| | | |
| | | newEva.setEvaluateName(eva.getEvaluateName()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * :后台 插入评估模板时调用 |
| | | * :后台 插入评估模板时调用 |
| | | * |
| | | * @param name |
| | | * @param type |
| | |
| | | obj.setAllCount(BigInteger.ZERO); |
| | | this.save(obj); |
| | | |
| | | // 保存 |
| | | // 保存 |
| | | return obj; |
| | | } |
| | | |
| | | /** |
| | | * 查询基本信息 |
| | | * 查询基本信息 |
| | | */ |
| | | @Override |
| | | public ResultJson queryBaseInfo(String evaluateId) { |
| | |
| | | QSchEvaluateTemplate template = QSchEvaluateTemplate.schEvaluateTemplate; |
| | | QExerciseGroup group = QExerciseGroup.exerciseGroup; |
| | | |
| | | // 获取查询结果集合 |
| | | // 获取查询结果集合 |
| | | ExerciseGroup g = this.getQueryFactory() |
| | | .select(group) |
| | | .from(qEva, template, group) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | */ |
| | | @Override |
| | | public ResultJson delete(String evaluateIds){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 激活 |
| | | * 激活 |
| | | */ |
| | | @Override |
| | | public ResultJson doActive(String evaluateIds){ |
| | |
| | | return new ResultJson(true, "success"); |
| | | } |
| | | |
| | | //发布消息 |
| | | //发布消息 |
| | | private void doSendhMsg(String evaluateId){ |
| | | SchEvaluate evaluate = this.read(SchEvaluate.class,evaluateId); |
| | | |
| | |
| | | Map<String,String> attrs = CollectionUtils.newStringMap("evaluateId",evaluate.getEvaluateId(),"evaluateName",evaluate.getEvaluateName(), |
| | | "templateId",evaluate.getEvalTemplateId(),"evalRangeName",evaluate.getEvalRangeName(),"creator",evaluate.getCreator()); |
| | | |
| | | msgInfoService.doSendTextMsgToUsersLoop(lstUserIds, MsgInfo.TYPE_EVALUATE, "发布了问卷调查", attrs); |
| | | msgInfoService.doSendTextMsgToUsersLoop(lstUserIds, MsgInfo.TYPE_EVALUATE, "发布了问卷调查", attrs); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | *回退 |
| | | *回退 |
| | | */ |
| | | @Override |
| | | public ResultJson doWithdraw(String evaluateIds){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复制 |
| | | * 复制 |
| | | */ |
| | | @Override |
| | | public ResultJson doCopy(SchEvaluate eva){ |
| | |
| | | SchEvaluate schEva = evaRepository.getOne(eva.getEvaluateId()); |
| | | SchEvaluateTemplate oldTemplate = this.read(SchEvaluateTemplate.class, schEva.getEvalTemplateId()); |
| | | |
| | | // 1、生成习题组 |
| | | // 1、生成习题组 |
| | | String newGroupId = exerciseService.doCopyExerciseByEvaluate(oldTemplate.getGroupId()); |
| | | |
| | | // 2、生成模板 |
| | | // 2、生成模板 |
| | | SchEvaluateTemplate newTemplate = new SchEvaluateTemplate(); |
| | | |
| | | BeanUtils.copyProperties(newTemplate, oldTemplate); |
| | |
| | | TraceUtils.setCreateTrace(newTemplate); |
| | | this.save(newTemplate); |
| | | |
| | | // 3、生成评估表 |
| | | // 3、生成评估表 |
| | | SchEvaluate newEva = new SchEvaluate(); |
| | | BeanUtils.copyProperties(newEva, eva); |
| | | newEva.setEvaluateId(null); |
| | |
| | | return new ResultJson(true, "success", CollectionUtils.newObjectMap("evaluateId", newEva.getEvaluateId(), "groupId", newGroupId)); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("doCopy评估复制:复制练习BeanUtils.copyProperties()方法copy失败", e); |
| | | log.error("doCopy评估复制:复制练习BeanUtils.copyProperties()方法copy失败", e); |
| | | } |
| | | |
| | | return new ResultJson(false); |
| | | } |
| | | |
| | | /** |
| | | * 查看结果 问卷整体情况 |
| | | * 查看结果 问卷整体情况 |
| | | * @param evaluateId |
| | | * @param groupId |
| | | * @param evalRangeType |
| | |
| | | @Override |
| | | public ResultJson queryEvaluateDetail(String evaluateId,String groupId){ |
| | | |
| | | // 1、查询已提交问卷list |
| | | // 1、查询已提交问卷list |
| | | List<Map<String, Object>> answerUserLst = queryAnswerEvaLst(evaluateId); |
| | | |
| | | // 已经答题过的学员id |
| | | // 已经答题过的学员id |
| | | List<String> userAnswerList = new ArrayList<String>(answerUserLst.size()); |
| | | for(Map<String,Object> map:answerUserLst){ |
| | | userAnswerList.add(String.valueOf(map.get("userId"))); |
| | | } |
| | | |
| | | // 2、查询未提交答案list |
| | | // 2、查询未提交答案list |
| | | List<Map<String,Object>> notAnswerUserLst = this.queryNotAnswerEvaLst(evaluateId, userAnswerList); |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询已答题的学员list |
| | | * 查询已答题的学员list |
| | | * @param evaluateId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询未答题的学员list |
| | | * 查询未答题的学员list |
| | | * @param rangeType |
| | | * @param evalRangeIds |
| | | * @param userAnswerList |
| | |
| | | QSubject qSubject = QSubject.subject; |
| | | |
| | | Predicate predicate = null; |
| | | if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(rangeType)){//课程 |
| | | if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(rangeType)){//课程 |
| | | |
| | | predicate = stu.classId.in(getQueryFactory().select(re.classId).from(re,qSubject) |
| | | .where(qSubject.origSubjectId.in(evalRangeIds).and(re.subjectId.eq(qSubject.subjectId)) |
| | | .and(qSubject.deleteFlag.isFalse()).and(re.deleteFlag.eq(false)))); |
| | | }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(rangeType)){//班级 |
| | | }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(rangeType)){//班级 |
| | | |
| | | predicate = stu.classId.in(evalRangeIds); |
| | | }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(rangeType)){//人员 |
| | | }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(rangeType)){//人员 |
| | | |
| | | predicate = stu.userId.in(evalRangeIds); |
| | | } |
| | | |
| | | List<Map<String,Object>> notAnswerUserLst = this.getQueryFactory().select(stu.userId, stu.name).distinct() |
| | | .from(stu) |
| | | .where(stu.userId.notIn(userAnswerList)// 过滤掉已经答题过的学员 |
| | | .where(stu.userId.notIn(userAnswerList)// 过滤掉已经答题过的学员 |
| | | .and(stu.deleteFlag.eq(false)) |
| | | .and(predicate)) |
| | | .orderBy(stu.createTime.desc()) |
| | |
| | | } |
| | | |
| | | |
| | | /** ------前端 ---------------------------start------------------------------------------------------------------ */ |
| | | /** ------前端 ---------------------------start------------------------------------------------------------------ */ |
| | | |
| | | /** |
| | | * 提交答案 |
| | | * 提交答案 |
| | | * @param score |
| | | * @return |
| | | */ |
| | |
| | | List<TeachEvaScoreData> lstScore = scoreResult.getItems(); |
| | | String evaluateId = scoreResult.getEvaluateId(); |
| | | |
| | | // 1.操作ExerciseRecord做题记录 |
| | | // 1.操作ExerciseRecord做题记录 |
| | | ExerciseRecord record = this.doOperExerciseRecord(scoreResult); |
| | | |
| | | if(null == record){ |
| | | return new ResultJson(false,"您已经提交,不能重复提交"); |
| | | return new ResultJson(false,"您已经提交,不能重复提交"); |
| | | } |
| | | String exerciseRecordId = record.getRecordId(); |
| | | |
| | | if(!scoreResult.getItems().isEmpty()){ |
| | | // 2.记录练习答案 ExerciseItemAnswerU |
| | | // 2.记录练习答案 ExerciseItemAnswerU |
| | | this.doOperExerciseItemAnswerUBatch(lstScore, exerciseRecordId); |
| | | } |
| | | |
| | | // 3.插入评估记录关联表 |
| | | // 3.插入评估记录关联表 |
| | | this.doOperSchEvaRecordRe(exerciseRecordId, evaluateId); |
| | | |
| | | // 4.更新评估表的完成人数 |
| | | // 4.更新评估表的完成人数 |
| | | SchEvaluate eval = this.updateEvaluateCount(evaluateId); |
| | | |
| | | if(!scoreResult.getItems().isEmpty()){ |
| | | // 5.插入评估明细表 |
| | | // 5.插入评估明细表 |
| | | this.insertEvaluateDetailBatch(lstScore,evaluateId); |
| | | } |
| | | |
| | | return new ResultJson(true, "操作成功", |
| | | return new ResultJson(true, "操作成功", |
| | | CollectionUtils.newObjectMap("doNumber", eval.getEvaluateCount(), "recordId", exerciseRecordId)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 操作本次做题记录 |
| | | * 操作本次做题记录 |
| | | * @return |
| | | */ |
| | | public ExerciseRecord doOperExerciseRecord(TeachEvaScoreResult scoreResult) { |
| | |
| | | |
| | | String doCount = String.valueOf(scoreResult.getItems().size()); |
| | | |
| | | // 2.查询总题目数 |
| | | // 2.查询总题目数 |
| | | ExerciseGroup group = this.findUnique("select g from ExerciseGroup g,SchEvaluate e,SchEvaluateTemplate t " |
| | | + "where g.groupId=t.groupId and e.evalTemplateId=t.evaluateTemplateId and e.evaluateId=?" |
| | | + " and g.deleteFlag is false and e.deleteFlag is false ", |
| | | CollectionUtils.newList(scoreResult.getEvaluateId()), ExerciseGroup.class); |
| | | BigInteger allCount = group.getAllCount(); |
| | | |
| | | // 3.查询做题记录obj |
| | | // 3.查询做题记录obj |
| | | BigDecimal completionRate = ExerciseUtils.parseStrToBigDecimal(doCount, String.valueOf(allCount)); |
| | | |
| | | ExerciseRecord record = new ExerciseRecord(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 批量增加或修改练习记录答案 |
| | | * 批量增加或修改练习记录答案 |
| | | * @return |
| | | */ |
| | | public Result doOperExerciseItemAnswerUBatch(List<TeachEvaScoreData> lstScore, String exerciseRecordId) { |
| | | String userId = ClientUtils.getUserId(); |
| | | |
| | | List<ExerciseItemAnswerU> lstNewAnswerU = new ArrayList<ExerciseItemAnswerU>(lstScore.size()); |
| | | // 组装答案记录 |
| | | // 组装答案记录 |
| | | ExerciseItemAnswerU answerU = null; |
| | | for(TeachEvaScoreData score:lstScore){ |
| | | if(StringUtils.isBlank(score.getAnswer())){ |
| | |
| | | lstNewAnswerU.add(answerU); |
| | | } |
| | | |
| | | // 批量保存 |
| | | // 批量保存 |
| | | this.saveOrUpdateAll(lstNewAnswerU); |
| | | |
| | | return new Result(true); |
| | | } |
| | | |
| | | /** |
| | | * 批量增加或修改评估明细记录 |
| | | * 批量增加或修改评估明细记录 |
| | | * @return |
| | | */ |
| | | public Result insertEvaluateDetailBatch(List<TeachEvaScoreData> lstScore,String evaluateId) { |
| | |
| | | lstDetail.add(record); |
| | | } |
| | | |
| | | // 批量保存 |
| | | // 批量保存 |
| | | this.saveOrUpdateAll(lstDetail); |
| | | |
| | | return new Result(true); |
| | | } |
| | | |
| | | /** |
| | | * 新增评估与记录关联表 |
| | | * 新增评估与记录关联表 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | SchEvaRecordRe record = new SchEvaRecordRe(); |
| | | record.setEvaluateId(evaluateId); |
| | | record.setExerciseRecordId(recordId); |
| | | //记录答题所在班级 |
| | | //记录答题所在班级 |
| | | if(null != ClientUtils.getUserInfo()){ |
| | | record.setClassId(ClientUtils.getClassId()); |
| | | record.setOrgId(ClientUtils.getOrgId()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新评估表记录 |
| | | * 更新评估表记录 |
| | | * @return |
| | | */ |
| | | public SchEvaluate updateEvaluateCount(String evaluateId) { |
| | |
| | | record.setEvaluateCount(BigInteger.valueOf(this.getEvaluateCount(evaluateId))); |
| | | TraceUtils.setUpdateTrace(record); |
| | | |
| | | // 保存 |
| | | // 保存 |
| | | this.save(record); |
| | | |
| | | return record; |
| | | } |
| | | |
| | | /** |
| | | * 查询问卷统计 |
| | | * 查询问卷统计 |
| | | * @param groupId |
| | | * @param evaluateId |
| | | * @return |
| | |
| | | lstExerciseItemAnswerU.add(objExerciseItemAnswerU); |
| | | } |
| | | |
| | | // 查询答案 |
| | | // 查询答案 |
| | | objExerciseItem.setExerciseItemAnswerU(lstExerciseItemAnswerU); |
| | | } |
| | | } |
| | | objSchEvaluate.setEvaluateCount(BigInteger.valueOf(this.getEvaluateCount(evaluateId))); |
| | | // 查询应评估总人数 |
| | | // 查询应评估总人数 |
| | | objSchEvaluate.setEvaluateAllCount(BigInteger.valueOf(this |
| | | .queryEvaluateAllCount(objSchEvaluate.getEvalRangeType(),objSchEvaluate.getEvalRangeId().split(",")))); |
| | | |
| | | //拼装前端所需要的数据 |
| | | //拼装前端所需要的数据 |
| | | Map<String, Object> resultMap = |
| | | ExerciseUtils.packageExerciseDetail(items, objSchEvaluate); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询应评估人数 |
| | | * 查询应评估人数 |
| | | * @param rangeType |
| | | * @param evalRangeIds |
| | | * @return |
| | |
| | | QSubject qSubject = QSubject.subject; |
| | | |
| | | Predicate predicate = null; |
| | | if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(rangeType)){//课程 |
| | | if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(rangeType)){//课程 |
| | | |
| | | predicate = stu.classId.in(getQueryFactory().select(re.classId).from(re,qSubject) |
| | | .where(qSubject.origSubjectId.in(evalRangeIds).and(re.subjectId.eq(qSubject.subjectId)) |
| | | .and(qSubject.deleteFlag.isFalse()).and(re.deleteFlag.eq(false)))); |
| | | }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(rangeType)){//班级 |
| | | }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(rangeType)){//班级 |
| | | |
| | | predicate = stu.classId.in(evalRangeIds); |
| | | }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(rangeType)){//人员 |
| | | }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(rangeType)){//人员 |
| | | |
| | | return evalRangeIds.length; |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取问卷答卷人数 |
| | | * 获取问卷答卷人数 |
| | | * |
| | | * @param schEvaluateId |
| | | * @param classId |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询学生评估list |
| | | * 查询学生评估list |
| | | * @return |
| | | */ |
| | | @Override |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询学生评估count |
| | | * 查询学生评估count |
| | | * @return |
| | | */ |
| | | @Override |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取评估题目 |
| | | * 获取评估题目 |
| | | * @param templateId |
| | | * @param status |
| | | * @param exerciseRecordId |
| | |
| | | + "where t.evaluateTemplateId=e.evalTemplateId and e.evaluateId=?", |
| | | CollectionUtils.newList(evaluateId),String.class); |
| | | |
| | | // 2.查找评估组下所有对应的练习 |
| | | // 2.查找评估组下所有对应的练习 |
| | | String hql_item = "select item" |
| | | + " from ExerciseItem item, ExerciseGroupItemRe re, ExerciseGroup g" |
| | | + " where item.exerciseId=re.exerciseItemId " |
| | |
| | | |
| | | List<ExerciseItem> lstItems = this.find(hql_item, CollectionUtils.newList(groupId), ExerciseItem.class); |
| | | if(lstItems.isEmpty()){ |
| | | return new ResultJson(false,"当前评估未添加题目"); |
| | | return new ResultJson(false,"当前评估未添加题目"); |
| | | } |
| | | //查询用户所填答案 |
| | | //查询用户所填答案 |
| | | List<ExerciseItemAnswerU> lstUserAnswer = null; |
| | | String exerciseRecordId = this.findUnique("select r.recordId from SchEvaRecordRe re, ExerciseRecord r " |
| | | + "where re.exerciseRecordId=r.recordId and re.evaluateId=? and r.deleteFlag is false and r.userId = ?", |
| | |
| | | String hql_options = "select o from ExerciseItemAnswerU o where o.exerciseRecordId = ? and o.deleteFlag is false"; |
| | | lstUserAnswer = this.find(hql_options, CollectionUtils.newList(exerciseRecordId), ExerciseItemAnswerU.class); |
| | | } |
| | | // 2.1.组装参数 用于查询问卷选项图片 |
| | | // 2.1.组装参数 用于查询问卷选项图片 |
| | | Map<String, Object> argsImgMap = new HashMap<String, Object>(); |
| | | String argImgs = ""; |
| | | Map<String, Object> argsMap = new HashMap<String, Object>(); |
| | |
| | | } |
| | | argsMap.put("exerciseIds", args); |
| | | argsImgMap.put("optionIds", argImgs.split(";")); |
| | | // 2-3-1查询题目是否关联图片 |
| | | // 2-3-1查询题目是否关联图片 |
| | | String hql_itemImgs = "from ExerciseObjectImg where exerciseObjectId in (:exerciseIds) and deleteFlag is false and objectType=1 order by exerciseObjectId,imgOrder "; |
| | | List<ExerciseObjectImg> lstItemImgs = this.findByComplexHql(hql_itemImgs, argsMap, ExerciseObjectImg.class); |
| | | // 2-3-2查询题目选项是否关联图片 |
| | | // 2-3-2查询题目选项是否关联图片 |
| | | String hql_optionImgs = "from ExerciseObjectImg where exerciseObjectId in (:optionIds) and deleteFlag is false and objectType=2"; |
| | | List<ExerciseObjectImg> lstOptionImgs = this.findByComplexHql(hql_optionImgs, argsImgMap, ExerciseObjectImg.class); |
| | | |
| | | // 重新组装练习选项 |
| | | // 重新组装练习选项 |
| | | ExerciseUtils.packageExerciseItem(lstItems, lstUserAnswer, lstOptionImgs); |
| | | |
| | | Map<String, List<ExerciseObjectImg>> imgItemMap = ExerciseUtils.packageExerciseItemImg(lstItemImgs); |
| | | |
| | | for(ExerciseItem item:lstItems){ |
| | | // 4.5题目中是否有图片 |
| | | // 4.5题目中是否有图片 |
| | | if(imgItemMap.get(item.getExerciseId()) != null){ |
| | | item.setImgs(imgItemMap.get(item.getExerciseId())); |
| | | } |
| | |
| | | private IExerciseService exerciseService; |
| | | |
| | | /** |
| | | * 新增评估模板 |
| | | * 新增评估模板 |
| | | */ |
| | | public String insertEvaluateTemplate(SchEvaluateTemplate schEvaluateTemplate){ |
| | | String evaluateTemplateId = schEvaluateTemplate.getEvaluateTemplateId(); |
| | | if(StringUtils.isBlank(evaluateTemplateId)){ |
| | | //插入组 |
| | | //插入组 |
| | | ExerciseGroup obj = exerciseService.insertExerciseGroup(schEvaluateTemplate.getEvaluateTemplateName(),ExerciseGroup.TYPE_EXERCISE_TEACH_EVALUATE); |
| | | if(null != obj){ |
| | | //插入评估模板 |
| | | //插入评估模板 |
| | | SchEvaluateTemplate objTemplate = new SchEvaluateTemplate(); |
| | | TraceUtils.setCreateTrace(objTemplate); |
| | | objTemplate.setEvaluateTemplateName(schEvaluateTemplate.getEvaluateTemplateName()); |
| | |
| | | |
| | | |
| | | /** |
| | | * 删除评估模板 |
| | | * 删除评估模板 |
| | | * @param ids |
| | | * @param templateId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 批量删除ExerciseGroup,删除逻辑:修改评估模板的同时修改习题组和练习题 |
| | | * @param groupId 主键,多个id时以","分隔 |
| | | * 批量删除ExerciseGroup,删除逻辑:修改评估模板的同时修改习题组和练习题 |
| | | * @param groupId 主键,多个id时以","分隔 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Result deleteExerciseGroup(String groupId) { |
| | | |
| | | //逻辑删除,只需要修改exercise_group、exercise_item的删除标识即可 |
| | | //逻辑删除,只需要修改exercise_group、exercise_item的删除标识即可 |
| | | if(StringUtils.isNotBlank(groupId)){ |
| | | //需要删除的练习组 |
| | | //需要删除的练习组 |
| | | Object[] arrGroupId = groupId.split(","); |
| | | |
| | | String exeGroupHql = " from ExerciseGroup where groupId in (:groupId) "; |
| | |
| | | |
| | | List<ExerciseGroup> exeGroupList = this.findByComplexHql(exeGroupHql, groupIdMap, ExerciseGroup.class); |
| | | |
| | | //删除习题组 |
| | | //删除习题组 |
| | | if(exeGroupList != null){ |
| | | for(ExerciseGroup group : exeGroupList){ |
| | | group.setDeleteFlag(true); |
| | | } |
| | | } |
| | | //20150618:配合前台app,所有修改同时修改group表最后修改时间 |
| | | //20150618:配合前台app,所有修改同时修改group表最后修改时间 |
| | | updateGroupUpdateTimeByList(exeGroupList); |
| | | |
| | | String exeItemHql = "select i from ExerciseGroupItemRe g, ExerciseItem i where g.exerciseItemId = i.exerciseId and g.exerciseGroupId in (:groupId)"; |
| | | |
| | | List<ExerciseItem> exeItemList = this.findByComplexHql(exeItemHql, groupIdMap, ExerciseItem.class); |
| | | |
| | | //删除习题 |
| | | //删除习题 |
| | | if(exeItemList != null){ |
| | | for(ExerciseItem item : exeItemList){ |
| | | item.setDeleteFlag(true); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 所有练习修改操作需要同时修改group的updateTime |
| | | * 所有练习修改操作需要同时修改group的updateTime |
| | | * @param lstGroup |
| | | */ |
| | | private void updateGroupUpdateTimeByList(List<ExerciseGroup> lstGroup){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 增加评分标准 |
| | | * 增加评分标准 |
| | | * @param exerciseId |
| | | * @param type |
| | | * @param lstScore |
| | |
| | | * @history 2018-03-11 create kevin |
| | | * |
| | | */ |
| | | @Api(tags="考试批次管理接口") |
| | | @Api(tags="考试批次管理接口") |
| | | @Controller |
| | | @RequestMapping(value = "/exam/exambatch") |
| | | public class ExamBatchController { |
| | | //分页查询中,默认记录条数和页数 |
| | | //分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE=Integer.MAX_VALUE; |
| | | private static final int DEFAULT_PAGE_NUM=1; |
| | | |
| | |
| | | IExamBatchService examBatchService; |
| | | |
| | | /** |
| | | * 考试批次列表 |
| | | * 考试批次列表 |
| | | * */ |
| | | @ApiOperation(value = "考试批次列表") |
| | | @ApiOperation(value = "考试批次列表") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=false), |
| | | @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=false), |
| | | }) |
| | | @RequestMapping(value = "/list", method = RequestMethod.GET) |
| | | public @ResponseBody Result pageList(String examId,Integer pageSize,Integer pageNum){ |
| | | Result result = new Result(Boolean.TRUE); |
| | | Pager pager = new Pager(); |
| | | // 查询记录数 |
| | | // 查询记录数 |
| | | String hqlCount="from ExamBatchInfo where examId=? and deleteFlag is false"; |
| | | int totalCount = commonDAO.findCount(hqlCount, CollectionUtils.newList(examId)); |
| | | |
| | | // page赋值 |
| | | // page赋值 |
| | | pager.setTotalCount(totalCount); |
| | | pager.setPageSize(pageSize!=null&&pageSize>0?pageSize:DEFAULT_PAGE_SIZE); |
| | | pager.setPageNum (pageNum!=null&&pageNum>0?pageNum:DEFAULT_PAGE_NUM); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 详情页面数据 |
| | | * 详情页面数据 |
| | | * @param examBatchId |
| | | * @return |
| | | */ |
| | |
| | | return result; |
| | | } |
| | | /** |
| | | * 获取批次 |
| | | * 获取批次 |
| | | * @param |
| | | * @return |
| | | */ |
| | |
| | | return result; |
| | | } |
| | | /** |
| | | * 获取批次 |
| | | * 获取批次 |
| | | * @param |
| | | * @return |
| | | */ |
| | |
| | | return result; |
| | | } |
| | | /** |
| | | * 获取批次 |
| | | * 获取批次 |
| | | * @param |
| | | * @return |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * 保存 |
| | | * 保存 |
| | | * @param |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * @param examBatchIds |
| | | * @return |
| | | */ |
| | |
| | | * @history 2018-03-11 create kevin |
| | | * |
| | | */ |
| | | @Api(tags = "考试管理接口") |
| | | @Api(tags = "考试管理接口") |
| | | @Controller |
| | | @CrossOrigin(origins="*",maxAge=3600) |
| | | @RequestMapping(value = "/exam/exam") |
| | | public class ExamController { |
| | | private final Logger log = LogManager.getLogger(ExamController.class); |
| | | |
| | | // 分页查询中,默认记录条数和页数 |
| | | // 分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE = 10; |
| | | private static final int DEFAULT_PAGE_NUM = 1; |
| | | |
| | | //生成密码长度 |
| | | //生成密码长度 |
| | | private static final int EXAM_CERT_PWD_LENGTH = 8; |
| | | |
| | | @Autowired |
| | |
| | | IClassService classService; |
| | | |
| | | /** |
| | | * 考试列表 |
| | | * 考试列表 |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | @RequestMapping(value = "list", method = RequestMethod.GET) |
| | | public @ResponseBody Result list(String keyword,String classId,String subjectId,Short status,Integer pageSize,Integer pageNum) { |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | | pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; |
| | | //总考试数量 |
| | | //总考试数量 |
| | | int totalCount = examService.listCount(keyword == null ? "" : keyword.trim(),classId,subjectId,status); |
| | | Pager pager = new Pager(pageSize,pageNum); |
| | | pager.setTotalCount(totalCount); |
| | |
| | | |
| | | |
| | | if(listResult!=null && listResult.size()>0){ |
| | | //查询待批阅,已批阅,未提交数量 |
| | | //查询待批阅,已批阅,未提交数量 |
| | | Map<String,Integer> countMap = examService.queryExamResultStatusCount(QBeanUtils.listPropertyVal(list, "examId")); |
| | | countMap = countMap==null?new HashMap<String,Integer>(1):countMap; |
| | | Integer tempCount = null; |
| | |
| | | private String getExamProgressStatus(List<ExamBatchInfo> lstBatchInfos){ |
| | | |
| | | if(lstBatchInfos == null ||lstBatchInfos.size()==0){ |
| | | return "已结束"; |
| | | return "已结束"; |
| | | } |
| | | |
| | | String progressStatus="待开始"; |
| | | String progressStatus="待开始"; |
| | | Date now = new Date(); |
| | | |
| | | //根据开始时间倒序 |
| | | //根据开始时间倒序 |
| | | lstBatchInfos.sort(new Comparator<ExamBatchInfo>(){ |
| | | @Override |
| | | public int compare(ExamBatchInfo o1, ExamBatchInfo o2) { |
| | |
| | | } |
| | | }); |
| | | |
| | | //如果所有批次都小于当前时间,则已结束,如果有一个批次正在进行中,则进行中 |
| | | //如果所有批次都小于当前时间,则已结束,如果有一个批次正在进行中,则进行中 |
| | | if(lstBatchInfos.get(0).getEndTime().getTime()<now.getTime()){ |
| | | progressStatus="已结束"; |
| | | progressStatus="已结束"; |
| | | }else{ |
| | | for(ExamBatchInfo f : lstBatchInfos){ |
| | | if(f.getStartTime().getTime()<=now.getTime() && f.getEndTime().getTime()>=now.getTime()){ |
| | | progressStatus = "进行中"; |
| | | progressStatus = "进行中"; |
| | | break; |
| | | } |
| | | } |
| | |
| | | |
| | | |
| | | /** |
| | | * 教师查看考试成绩列表 |
| | | * 教师查看考试成绩列表 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "老师查看学生考试结果列表") |
| | | @ApiOperation(value = "老师查看学生考试结果列表") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true), |
| | | @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="批次id", required=true), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id", required=true), |
| | | @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true), |
| | | @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="批次id", required=true), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id", required=true), |
| | | }) |
| | | @RequestMapping(value = "teacher/examresultlist", method = RequestMethod.GET) |
| | | public @ResponseBody Result queryStudentExamResultList(String examId, String examBatchId, String classId,String keyword, Integer pageSize, Integer pageNum) { |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | | pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; |
| | | |
| | | //总考试数量 |
| | | //总考试数量 |
| | | int totalCount = examService.listResultCount(examId, |
| | | StringUtils.isEmpty(examBatchId)?null:new String[]{examBatchId}, classId, keyword == null ? "" : keyword.trim()); |
| | | |
| | |
| | | for(Map<String, Object> map:listResult){ |
| | | map.put("rank", rank); |
| | | map.put("isPass", (map.get("studentScore")==null ? BigDecimal.ZERO :(BigDecimal)map.get("studentScore")) |
| | | .compareTo((BigDecimal)map.get("passingScore")) == -1 ? "否" : "是"); |
| | | .compareTo((BigDecimal)map.get("passingScore")) == -1 ? "否" : "是"); |
| | | rank++; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 详情页面数据 |
| | | * 详情页面数据 |
| | | * |
| | | * @param examId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "详情页面数据") |
| | | @ApiOperation(value = "详情页面数据") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true), |
| | | @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true), |
| | | }) |
| | | @RequestMapping(value = "/detail", method = RequestMethod.GET) |
| | | public @ResponseBody Result detail(String examId) { |
| | | return new Result(true,"",CollectionUtils.newObjectMap("detail",examService.queryExamDetail(examId))); |
| | | } |
| | | |
| | | @ApiOperation(value = "获取补考考试,根据maxLateMin标记") |
| | | @ApiOperation(value = "获取补考考试,根据maxLateMin标记") |
| | | @ApiImplicitParams({ |
| | | // @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true), |
| | | // @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true), |
| | | }) |
| | | @RequestMapping(value = "/getReExam", method = RequestMethod.GET) |
| | | public @ResponseBody Result getReExam() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存 |
| | | * 保存 |
| | | * |
| | | * @param examInfo |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存 |
| | | * 保存 |
| | | * @param |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/saveRemedy", method = RequestMethod.POST) |
| | | public @ResponseBody Result saveRemedy(@RequestBody ExamBatchInfo examBatchInfo) { |
| | | Result result = null; |
| | | //获取考试ID |
| | | //获取考试ID |
| | | String examId = examBatchInfo.getExamId(); |
| | | //获取开始时间 |
| | | //获取开始时间 |
| | | Date startTime = examBatchInfo.getStartTime(); |
| | | //获取结束时间 |
| | | //获取结束时间 |
| | | Date endTime = examBatchInfo.getEndTime(); |
| | | //生成补考考试 |
| | | //生成补考考试 |
| | | examService.addRemedy(examId,startTime,endTime); |
| | | result = new Result(true,"",CollectionUtils.newObjectMap("examId", examId)); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * |
| | | * @param examIds |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "删除考试", notes = "根据传入的考试ID字符串参数进行删除(多个ID以逗号分割, 如:examId1,examId2)", httpMethod = "GET") |
| | | @ApiImplicitParam(name = "examIds", value = "考试ID字符串", required = true, dataType = "String", paramType = "body") |
| | | @ApiOperation(value = "删除考试", notes = "根据传入的考试ID字符串参数进行删除(多个ID以逗号分割, 如:examId1,examId2)", httpMethod = "GET") |
| | | @ApiImplicitParam(name = "examIds", value = "考试ID字符串", required = true, dataType = "String", paramType = "body") |
| | | @RequestMapping(value = "delete", method = RequestMethod.GET) |
| | | public @ResponseBody Result delete(String examIds) { |
| | | Result result = new Result(true); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置考试题目 |
| | | * 设置考试题目 |
| | | * |
| | | * @param examInfo |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 发布考试 |
| | | * 发布考试 |
| | | * |
| | | * @param |
| | | * @return |
| | |
| | | @RequestMapping(value = "/publish", method = RequestMethod.GET) |
| | | public @ResponseBody Result publishExam(String examIds) { |
| | | if (StringUtils.isEmpty(examIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | return this.examService.doPublishExam(examIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 撤回考试 |
| | | * 撤回考试 |
| | | * |
| | | * @param |
| | | * @return |
| | |
| | | @RequestMapping(value = "/revoke", method = RequestMethod.GET) |
| | | public @ResponseBody Result revokeExam(String examIds) { |
| | | if (StringUtils.isEmpty(examIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | return this.examService.doRevokeExam(examIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 学生考试信息列表 |
| | | * 学生考试信息列表 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "学生考试信息列表") |
| | | @ApiOperation(value = "学生考试信息列表") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="keyword", dataType="String", paramType="query", value="关键字考试名称模糊查询"), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"), |
| | | @ApiImplicitParam(name="subjectId", dataType="String", paramType="query", value="课程id", required=false), |
| | | @ApiImplicitParam(name="status", dataType="String", paramType="query", value="状态(默认全部,1未开始,2未交卷,3已交卷,4逾期未交,5已批阅)", required=false), |
| | | @ApiImplicitParam(name="keyword", dataType="String", paramType="query", value="关键字考试名称模糊查询"), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"), |
| | | @ApiImplicitParam(name="subjectId", dataType="String", paramType="query", value="课程id", required=false), |
| | | @ApiImplicitParam(name="status", dataType="String", paramType="query", value="状态(默认全部,1未开始,2未交卷,3已交卷,4逾期未交,5已批阅)", required=false), |
| | | }) |
| | | @RequestMapping(value = "/student/list", method = RequestMethod.GET) |
| | | public @ResponseBody Result queryStudentExamList(String keyword, String classId, String subjectId, Integer status, Integer pageSize, Integer pageNum) { |
| | |
| | | return new Result(true,"",CollectionUtils.newObjectMap("stuExams",listResult,"examCount",totalCount)); |
| | | } |
| | | /** |
| | | * 学生考试信息列表 |
| | | * 学生考试信息列表 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "学生考试信息列表") |
| | | @ApiOperation(value = "学生考试信息列表") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"), |
| | | }) |
| | | @RequestMapping(value = "/student/nowExam", method = RequestMethod.GET) |
| | | public @ResponseBody Result queryStudentExam(String classId) { |
| | | //获取当前考试列表以结束时间排序最新的在最前面 |
| | | //获取当前考试列表以结束时间排序最新的在最前面 |
| | | String [] classIds= null; |
| | | if(!StringUtils.isEmpty(classId)){ |
| | | classIds = new String[]{classId}; |
| | |
| | | return new Result(true,"",CollectionUtils.newObjectMap("stuExams",listResult!=null && listResult.size()>0?listResult.get(0):null)); |
| | | } |
| | | |
| | | @ApiOperation(value = "学生考试信息列表") |
| | | @ApiOperation(value = "学生考试信息列表") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="班级id"), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id") |
| | | @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="班级id"), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id") |
| | | }) |
| | | @RequestMapping(value = "/student/record", method = RequestMethod.GET) |
| | | public @ResponseBody Result queryStudentRecord(String examBatchId, String classId) { |
| | | // 查询是否有进行中的考试 |
| | | // 查询是否有进行中的考试 |
| | | ExerciseRecord record = commonDAO.findUnique( |
| | | "from ExerciseRecord where examBatchId=? and classId=? and userId = ? and deleteFlag is false ", |
| | | CollectionUtils.newList(examBatchId,classId,ClientUtils.getUserId()), |
| | |
| | | } |
| | | |
| | | /** |
| | | * 学生考试信息列表 |
| | | * 学生考试信息列表 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "学生考试信息列表") |
| | | @ApiOperation(value = "学生考试信息列表") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"), |
| | | }) |
| | | @RequestMapping(value = "/student/stuMessage", method = RequestMethod.GET) |
| | | public @ResponseBody Result queryStudent() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据考试批次ID获取考试题目信息 |
| | | * 根据考试批次ID获取考试题目信息 |
| | | * |
| | | * @param examBatchId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "学生开始考试接口") |
| | | @ApiOperation(value = "学生开始考试接口") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="考试批次id", required=true), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id", required=false) |
| | | @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="考试批次id", required=true), |
| | | @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id", required=false) |
| | | }) |
| | | @RequestMapping(value = "/student/startexam", method = RequestMethod.GET) |
| | | public @ResponseBody Result doStartExam(String examBatchId, String classId,String studentUserId) { |
| | | |
| | | if (StringUtils.isEmpty(examBatchId) || StringUtils.isEmpty(classId)) { |
| | | return new Result(false, "参数错误,班级,考试批次不能为空"); |
| | | return new Result(false, "参数错误,班级,考试批次不能为空"); |
| | | } |
| | | |
| | | Result result = this.examService.doStartExam(examBatchId,classId,StringUtils.isNotEmpty(studentUserId)?studentUserId:ClientUtils.getUserId()); |
| | |
| | | |
| | | return result; |
| | | } |
| | | @ApiOperation(value = "学生开始补考接口") |
| | | @ApiOperation(value = "学生开始补考接口") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true), |
| | | @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true), |
| | | }) |
| | | @RequestMapping(value = "/student/startReExam", method = RequestMethod.GET) |
| | | public @ResponseBody Result doStartReExam(String examId) { |
| | |
| | | } |
| | | return result; |
| | | } |
| | | @ApiOperation(value = "学生补考记录") |
| | | @ApiOperation(value = "学生补考记录") |
| | | @ApiImplicitParams({ |
| | | // @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true), |
| | | // @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true), |
| | | }) |
| | | @RequestMapping(value = "/student/getReExamRecordList", method = RequestMethod.GET) |
| | | public @ResponseBody Result getReExamRecordList() { |
| | |
| | | }); |
| | | return reExamRecordList; |
| | | } |
| | | return new Result(false,"没有设置补考"); |
| | | return new Result(false,"没有设置补考"); |
| | | } |
| | | |
| | | @ApiOperation(value = "学生考试详情") |
| | | @ApiImplicitParams({@ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="考试批次id", required=true)}) |
| | | @ApiOperation(value = "学生考试详情") |
| | | @ApiImplicitParams({@ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="考试批次id", required=true)}) |
| | | @RequestMapping(value = "/student/examdetail", method = RequestMethod.GET) |
| | | public @ResponseBody Result viewExamDetail(String examBatchId) { |
| | | ExamBatchInfo batchInfo = this.commonService.read(ExamBatchInfo.class, examBatchId); |
| | | //考试信息 |
| | | //考试信息 |
| | | ExamInfo examInfo =this.examService.queryExamDetail(batchInfo.getExamId()); |
| | | examInfo.setExamStartTime(batchInfo.getStartTime()); |
| | | examInfo.setExamEndTime(batchInfo.getEndTime()); |
| | | |
| | | // 获取考卷信息 |
| | | // 获取考卷信息 |
| | | Map<String, ExamPaperInfo> paperStatistic =null; |
| | | if(examInfo.getExamType()!=ExamInfo.EXAM_TYPE_RANDOM && examInfo.getExamType()!=ExamInfo.EXAM_TYPE_RANDOM_BY_GROUP){ |
| | | paperStatistic = examPaperService.queryExamPaperItemsStatistic( |
| | |
| | | return new Result(true,"",CollectionUtils.newObjectMap("examInfo",examInfo,"paperStatistic",paperStatistic)); |
| | | } |
| | | |
| | | @ApiOperation(value = "提交考试答案") |
| | | @ApiImplicitParams({@ApiImplicitParam(name="answers", dataType="String", paramType="query", value="提交答案", required=true)}) |
| | | @ApiOperation(value = "提交考试答案") |
| | | @ApiImplicitParams({@ApiImplicitParam(name="answers", dataType="String", paramType="query", value="提交答案", required=true)}) |
| | | @RequestMapping(value = "/student/submitExam", method = RequestMethod.POST) |
| | | public @ResponseBody Object doSubmitExamAnswer(@RequestParam(value = "answers") String answers) throws IOException { |
| | | Result result = new Result(true); |
| | | // 用户本次做题提交的数据 |
| | | // 用户本次做题提交的数据 |
| | | String recordId =null; |
| | | // try { |
| | | ExerciseSubmitAnswerData answerData = new ObjectMapper().readValue(answers, ExerciseSubmitAnswerData.class); |
| | | recordId = answerData.getExerciseRecordId(); |
| | | // 提交试卷答案 |
| | | result = new Result(true, "答案提交成功",exerciseVerService.doOperExerciseAnswerData(answerData)); |
| | | // 记录提交的数据日志 |
| | | // 提交试卷答案 |
| | | result = new Result(true, "答案提交成功",exerciseVerService.doOperExerciseAnswerData(answerData)); |
| | | // 记录提交的数据日志 |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(answers, recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerAnswers"); |
| | | // } catch (Exception e) { |
| | | // log.error("考试保存错误", e); |
| | | // result = new Result(false, "提交考试答案请求异常"); |
| | | // log.error("考试保存错误", e); |
| | | // result = new Result(false, "提交考试答案请求异常"); |
| | | // exerciseVerService.doSaveExerciseDataSubmitLog(answers, recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED,"/exercise/Exercise/exerAnswers"); |
| | | // } |
| | | return result; |
| | | } |
| | | |
| | | @ApiOperation(value = "老师阅卷") |
| | | @ApiImplicitParams({@ApiImplicitParam(name="answerData", dataType="object", paramType="query", value="提交答案", required=true)}) |
| | | @ApiOperation(value = "老师阅卷") |
| | | @ApiImplicitParams({@ApiImplicitParam(name="answerData", dataType="object", paramType="query", value="提交答案", required=true)}) |
| | | @RequestMapping(value = "/teacher/checkExam", method = RequestMethod.POST) |
| | | public @ResponseBody Object doCheckExam(@RequestBody ExerciseSubmitAnswerData answerData) { |
| | | Result result = new Result(true); |
| | | String recordId = null; |
| | | try { |
| | | // 提交记录id |
| | | // 提交记录id |
| | | recordId = answerData.getExerciseRecordId(); |
| | | // 提交试卷答案 |
| | | result = new Result(true, "答案提交成功",exerciseVerService.doOperExerciseAnswerData(answerData)); |
| | | // 记录提交的数据日志 |
| | | // 提交试卷答案 |
| | | result = new Result(true, "答案提交成功",exerciseVerService.doOperExerciseAnswerData(answerData)); |
| | | // 记录提交的数据日志 |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData),recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_SUCCESS,"/exam/exam/teacher/checkExam"); |
| | | } catch (Exception e) { |
| | | log.error("考试保存错误", e); |
| | | result = new Result(false, "提交练习答案请求异常"); |
| | | log.error("考试保存错误", e); |
| | | result = new Result(false, "提交练习答案请求异常"); |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData),recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED,"/exam/exam/teacher/checkExam"); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 查询考试凭证信息列表 |
| | | * 查询考试凭证信息列表 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "查询学生考试凭证") |
| | | @ApiOperation(value = "查询学生考试凭证") |
| | | @RequestMapping(value = "/teacher/examacertificatelist", method = RequestMethod.GET) |
| | | public @ResponseBody Result queryStudentExamCertificateList(String examId, String classId, String examBatchId, |
| | | String keyword, Integer pageSize, Integer pageNum) { |
| | |
| | | StringBuffer hql = new StringBuffer(500); |
| | | hql.append("select r.classId from ExamBatchInfo f,ExamBatchClassRe r where f.examBatchId = r.examBatchId and f.deleteFlag is false and r.deleteFlag is false "); |
| | | |
| | | // 如果examBatchId为空,则获取考试对应的所有批次 |
| | | // 如果examBatchId为空,则获取考试对应的所有批次 |
| | | if (StringUtils.isNotEmpty(examBatchId)) { |
| | | hql.append(" and f.examBatchId=:examBatchId"); |
| | | queryParams.put("examBatchId", examBatchId); |
| | |
| | | } |
| | | |
| | | List<String> classLst =this.commonDAO.findByComplexHql(hql.toString(), queryParams, String.class); |
| | | //如果不存在关联的班级信息,则直接返回 |
| | | //如果不存在关联的班级信息,则直接返回 |
| | | if (classLst == null || classLst.size() == 0) { |
| | | return new Result(false,"无班级考生信息",CollectionUtils.newObjectMap("list",null)); |
| | | return new Result(false,"无班级考生信息",CollectionUtils.newObjectMap("list",null)); |
| | | } |
| | | |
| | | // 查询记录数 |
| | | // 查询记录数 |
| | | int totalCount = commonDAO.findCountByComplexHql("from StuStudent t WHERE t.classId in(:classIds) and t.deleteFlag is false", |
| | | CollectionUtils.newObjectMap("classIds",classLst.toArray(new String[]{}))); |
| | | |
| | | // page赋值 |
| | | // page赋值 |
| | | Pager page = new Pager(); |
| | | page.setTotalCount(totalCount); |
| | | page.setPageSize(pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 学生考试信息列表 |
| | | * 学生考试信息列表 |
| | | * |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "生成学生考试凭证") |
| | | @ApiOperation(value = "生成学生考试凭证") |
| | | @RequestMapping(value = "/teacher/genstudentacertificate", method = RequestMethod.GET) |
| | | public @ResponseBody Result queryStudentExamCertificateList(String examId, String examBatchId) { |
| | | Map<String, Object> queryParams = new HashMap<String, Object>(1); |
| | | |
| | | // 如果examBatchId为空,则获取考试对应的所有批次 |
| | | // 如果examBatchId为空,则获取考试对应的所有批次 |
| | | String hql ="select distinct r.classId from ExamBatchInfo f,ExamBatchClassRe r where f.examBatchId = r.examBatchId and f.deleteFlag is false and r.deleteFlag is false"; |
| | | |
| | | if (StringUtils.isNotEmpty(examBatchId)) { |
| | |
| | | |
| | | List<String> classLst =this.commonDAO.findByComplexHql(hql, queryParams, String.class); |
| | | |
| | | //如果不存在关联的班级信息,则直接返回 |
| | | //如果不存在关联的班级信息,则直接返回 |
| | | if (classLst == null || classLst.size() == 0) { |
| | | return new Result(false, "无班级考生信息",CollectionUtils.newObjectMap("list", null)); |
| | | return new Result(false, "无班级考生信息",CollectionUtils.newObjectMap("list", null)); |
| | | } |
| | | |
| | | //查询所有学生用户信息 |
| | | //查询所有学生用户信息 |
| | | List<User> lstUser = this.commonDAO.findByComplexHql( |
| | | "select distinct u from StuStudent t,User u WHERE t.userId=u.userId AND t.classId in(:classIds) and t.deleteFlag is false and u.deleteFlag is false", |
| | | CollectionUtils.newObjectMap("classIds",classLst.toArray(new String[]{})),User.class); |
| | |
| | | } |
| | | |
| | | if(!this.userService.doBatchUpdateUser(lstUser)){ |
| | | return new Result(false,"更新学生考试凭证密码失败!"); |
| | | return new Result(false,"更新学生考试凭证密码失败!"); |
| | | } |
| | | |
| | | return new Result(true); |
| | |
| | | * @history 2018-03-11 create kevin |
| | | * |
| | | */ |
| | | @Api(tags="试卷管理接口") |
| | | @Api(tags="试卷管理接口") |
| | | @Controller |
| | | @RequestMapping(value = "/exam/paper") |
| | | public class ExamPaperController { |
| | | //分页查询中,默认记录条数和页数 |
| | | //分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE=Integer.MAX_VALUE; |
| | | private static final int DEFAULT_PAGE_NUM=1; |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 试卷列表 |
| | | * 试卷列表 |
| | | * */ |
| | | @RequestMapping(value = "/list", method = RequestMethod.GET) |
| | | public @ResponseBody Result pageList(String keyword,Short status, Integer pageSize,Integer pageNum){ |
| | | Result result = new Result(Boolean.TRUE); |
| | | Pager pager = new Pager(); |
| | | List<Object> queryParamLst = null; |
| | | // 查询记录数 |
| | | // 查询记录数 |
| | | String hqlCount="from ExamPaperInfo where createId=? and examPaperName like ? and deleteFlag is false"; |
| | | if(status!=null){ |
| | | hqlCount = hqlCount.concat(" and paperStatus = ?"); |
| | |
| | | } |
| | | int totalCount = commonDAO.findCount(hqlCount,queryParamLst); |
| | | |
| | | // page赋值 |
| | | // page赋值 |
| | | pager.setTotalCount(totalCount); |
| | | pager.setPageSize(pageSize!=null&&pageSize>0?pageSize:DEFAULT_PAGE_SIZE); |
| | | pager.setPageNum (pageNum!=null&&pageNum>0?pageNum:DEFAULT_PAGE_NUM); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 详情页面数据 |
| | | * 详情页面数据 |
| | | * @param examPaperId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存 |
| | | * 保存 |
| | | * |
| | | * @param examInfo |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * @param examPaperIds |
| | | * @return |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * 发布试卷 |
| | | * 发布试卷 |
| | | * |
| | | * @param exerciseIds |
| | | * @return |
| | |
| | | @RequestMapping(value = "/publish", method = RequestMethod.GET) |
| | | public @ResponseBody Result publishExamPaper(String examPaperIds) { |
| | | if (StringUtils.isEmpty(examPaperIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | return this.examPaperService.doPublishExamPaper(examPaperIds.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * 撤回试卷 |
| | | * 撤回试卷 |
| | | * |
| | | * @param exerciseIds |
| | | * @return |
| | |
| | | @RequestMapping(value = "/revoke", method = RequestMethod.GET) |
| | | public @ResponseBody Result revokeExamPaper(String examPaperIds) { |
| | | if (StringUtils.isEmpty(examPaperIds)) { |
| | | return new Result(false, "参数错误"); |
| | | return new Result(false, "参数错误"); |
| | | } |
| | | return this.examPaperService.doRevokeExamPaper(examPaperIds.split(",")); |
| | | } |
| | |
| | | * @author kevin |
| | | * @history 2018-03-11 create kevin |
| | | */ |
| | | @Api(tags = "试卷部分管理接口") |
| | | @Api(tags = "试卷部分管理接口") |
| | | @Controller |
| | | @RequestMapping(value = "/exam/papersection") |
| | | public class ExamPaperSectionController { |
| | | //分页查询中,默认记录条数和页数 |
| | | //分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; |
| | | private static final int DEFAULT_PAGE_NUM = 1; |
| | | |
| | |
| | | IExerciseGroupService exerciseGroupService; |
| | | |
| | | /** |
| | | * 试卷部分列表 |
| | | * 试卷部分列表 |
| | | */ |
| | | @RequestMapping(value = "/list", method = RequestMethod.GET) |
| | | public @ResponseBody |
| | | Result pageList(String examPaperId, Integer pageSize, Integer pageNum) { |
| | | Result result = new Result(Boolean.TRUE); |
| | | Pager pager = new Pager(); |
| | | // 查询记录数 |
| | | // 查询记录数 |
| | | String hqlCount = "from ExamPaperSectionInfo where examPaperId=? and deleteFlag is false"; |
| | | int totalCount = commonDAO.findCount(hqlCount, CollectionUtils.newList(examPaperId)); |
| | | |
| | | // page赋值 |
| | | // page赋值 |
| | | pager.setTotalCount(totalCount); |
| | | pager.setPageSize(pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE); |
| | | pager.setPageNum(pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 详情 |
| | | * 详情 |
| | | * |
| | | * @param examPaperSectionId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存 |
| | | * 保存 |
| | | * |
| | | * @param examPaperSectionInfo |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | * 删除 |
| | | * |
| | | * @param examPaperSectionIds |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 设置题库 |
| | | * 设置题库 |
| | | * |
| | | * @param examPaperSectionInfo |
| | | * @return |
| | |
| | | public @ResponseBody |
| | | Result saveSectionGroup(String sectionId, String selectedGroupIds, String selectedItemTypes) throws Exception { |
| | | if (StringUtils.isEmpty(sectionId) || StringUtils.isEmpty(selectedGroupIds) || StringUtils.isEmpty(selectedItemTypes)) { |
| | | return new Result(false, "请求参数错误!"); |
| | | return new Result(false, "请求参数错误!"); |
| | | } |
| | | |
| | | String[] arrGroupIds = selectedGroupIds.split(","); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 自主选题 |
| | | * 自主选题 |
| | | * |
| | | * @param examPaperSectionInfo |
| | | * @return |
| | |
| | | public @ResponseBody |
| | | Result saveSectionSeletedItems(String sectionId, String sourceGroupId, String selectedItemIds) throws Exception { |
| | | if (StringUtils.isEmpty(sectionId) || StringUtils.isEmpty(sourceGroupId) || StringUtils.isEmpty(selectedItemIds)) { |
| | | return new Result(false, "请求参数错误!"); |
| | | return new Result(false, "请求参数错误!"); |
| | | } |
| | | |
| | | String[] arrItemIds = selectedItemIds.split(","); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 交换题目顺序 |
| | | * 交换题目顺序 |
| | | * |
| | | * @param examPaperSectionInfo |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除题目 |
| | | * 删除题目 |
| | | * |
| | | * @param examPaperSectionInfo |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 考试保存题目 |
| | | * 考试保存题目 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * 查询当前题组中被选中的题目ID |
| | | * 查询当前题组中被选中的题目ID |
| | | */ |
| | | @RequestMapping(value = "/group/itemIds", method = RequestMethod.GET) |
| | | public @ResponseBody |
| | |
| | | import com.qxueyou.scc.exam.model.ExamInfo; |
| | | |
| | | /** |
| | | * 测试集成的JPA使用 |
| | | * 测试集成的JPA使用 |
| | | * @author kevin |
| | | * |
| | | */ |
| | |
| | | import com.qxueyou.scc.exam.model.ExamInfo; |
| | | |
| | | /** |
| | | * 测试集成JPA使用 |
| | | * 测试集成JPA使用 |
| | | * @author kevin |
| | | * |
| | | */ |
| | |
| | | @JsonIgnore |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name="UPDATE_ID", length=32) |
| | | @JsonIgnore |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name="UPDATE_TIME", nullable=false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name="UPDATOR", length=100) |
| | | @JsonIgnore |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name="DELETE_FLAG", nullable=false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | |
| | | import com.qxueyou.scc.base.model.ITrace; |
| | | |
| | | /** |
| | | * The persistent class for the exam_batch_info database table. 试卷批次表 |
| | | * The persistent class for the exam_batch_info database table. 试卷批次表 |
| | | */ |
| | | @Entity |
| | | @Table(name = "exam_batch_info") |
| | |
| | | @JsonIgnore |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name = "UPDATE_ID", length = 32) |
| | | @JsonIgnore |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name = "UPDATE_TIME", nullable = false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name = "UPDATOR", length = 100) |
| | | @JsonIgnore |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name = "DELETE_FLAG", nullable = false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | |
| | | import com.qxueyou.scc.teach.subject.model.Subject; |
| | | |
| | | /** |
| | | * The persistent class for the exam_info database table. 考试表 |
| | | * The persistent class for the exam_info database table. 考试表 |
| | | */ |
| | | |
| | | @Entity |
| | |
| | | private static final long serialVersionUID = -6364452839157071345L; |
| | | |
| | | /* |
| | | * 草稿 :0 已发布:1 |
| | | * 草稿 :0 已发布:1 |
| | | */ |
| | | public static final short STATUS_DRAFT = 0; |
| | | |
| | | public static final short STATUS_PUBLISH = 1; |
| | | |
| | | /** |
| | | * 试卷类型:1:统一卷,2:AB卷,3:ABC卷,4:随机组卷,5:随机组卷2 |
| | | * 试卷类型:1:统一卷,2:AB卷,3:ABC卷,4:随机组卷,5:随机组卷2 |
| | | */ |
| | | public static final short EXAM_TYPE_A =1; |
| | | public static final short EXAM_TYPE_AB =2; |
| | |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name = "UPDATE_ID", length = 32) |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name = "UPDATE_TIME", nullable = false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name = "UPDATOR", length = 100) |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name = "DELETE_FLAG", nullable = false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | | |
| | | // //考试试卷关联 |
| | | // //考试试卷关联 |
| | | // @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) |
| | | // @JoinTable(name = "EXAM_RE_EXAM_PAPER", joinColumns = { |
| | | // @JoinColumn(name = "EXAM_ID") }, |
| | |
| | | import com.qxueyou.scc.exercise.model.ExerciseGroup; |
| | | |
| | | /** |
| | | * The persistent class for the exam_paper_info database table. 试卷表 |
| | | * The persistent class for the exam_paper_info database table. 试卷表 |
| | | */ |
| | | @Entity |
| | | @Table(name = "exam_paper_info") |
| | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /* |
| | | * 草稿 :0 已发布:1 |
| | | * 草稿 :0 已发布:1 |
| | | */ |
| | | public static final short STATUS_DRAFT = 0; |
| | | |
| | |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name = "UPDATE_ID", length = 32) |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name = "UPDATE_TIME", nullable = false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name = "UPDATOR", length = 100) |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name = "DELETE_FLAG", nullable = false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | |
| | | @JsonIgnore |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name="UPDATE_ID", length=32) |
| | | @JsonIgnore |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name="UPDATE_TIME", nullable=false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name="UPDATOR", length=100) |
| | | @JsonIgnore |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name="DELETE_FLAG", nullable=false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | |
| | | import com.qxueyou.scc.base.model.ITrace; |
| | | |
| | | /** |
| | | * The persistent class for the exam_re_exam_paper database table. 考试试卷关联表 |
| | | * The persistent class for the exam_re_exam_paper database table. 考试试卷关联表 |
| | | */ |
| | | @Entity |
| | | @Table(name = "exam_re_exam_paper") |
| | |
| | | @JsonIgnore |
| | | private Date createTime; |
| | | |
| | | /** 修改人ID */ |
| | | /** 修改人ID */ |
| | | @Column(name = "UPDATE_ID", length = 32) |
| | | @JsonIgnore |
| | | private String updateId; |
| | | |
| | | /** 修改时间 */ |
| | | /** 修改时间 */ |
| | | @Column(name = "UPDATE_TIME", nullable = false) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** 修改人 */ |
| | | /** 修改人 */ |
| | | @Column(name = "UPDATOR", length = 100) |
| | | @JsonIgnore |
| | | private String updator; |
| | | |
| | | /** 删除标志 */ |
| | | /** 删除标志 */ |
| | | @Column(name = "DELETE_FLAG", nullable = false) |
| | | @JsonIgnore |
| | | private boolean deleteFlag; |
| | |
| | | import com.qxueyou.scc.exam.model.ExamBatchInfo; |
| | | |
| | | /** |
| | | * 考试批次服务类 |
| | | * 考试批次服务类 |
| | | * |
| | | * @author kevin |
| | | * @createTime 2018-03-11 |
| | |
| | | public interface IExamBatchService { |
| | | |
| | | /** |
| | | * 查询考试批次数量 |
| | | * @param param 查询参数 |
| | | * 查询考试批次数量 |
| | | * @param param 查询参数 |
| | | * @return |
| | | */ |
| | | int queryExamBatchCount(Map<String,Object> param); |
| | | |
| | | |
| | | /** |
| | | * 查询考试批次列表 |
| | | * @param param 查询参数 |
| | | * @param page 分页对象 |
| | | * 查询考试批次列表 |
| | | * @param param 查询参数 |
| | | * @param page 分页对象 |
| | | * @return |
| | | */ |
| | | List<ExamBatchInfo> queryExamBatchList(Map<String,Object> param,Pager page); |
| | |
| | | |
| | | |
| | | /** |
| | | * 新增考试批次 |
| | | * 新增考试批次 |
| | | * |
| | | * @param examBatchInfo |
| | | * |
| | |
| | | String addExamBatch(ExamBatchInfo examBatchInfo); |
| | | |
| | | /** |
| | | * 删除考试批次 |
| | | * 删除考试批次 |
| | | * |
| | | * @param elxamBatchIds |
| | | * 考试批次id |
| | | * 考试批次id |
| | | * @return |
| | | */ |
| | | Result deleteExamBatch(String[] elxamBatchIds); |
| | | |
| | | /** |
| | | * 更新考试批次信息 |
| | | * 更新考试批次信息 |
| | | * |
| | | * @param noticeId |
| | | * 考试批次id |
| | | * 考试批次id |
| | | * @return |
| | | */ |
| | | Result updateExamBatch(ExamBatchInfo examBatchInfo); |
| | | |
| | | /** |
| | | * 考试批次id 查询考试批次 |
| | | * 考试批次id 查询考试批次 |
| | | * @param examBatchId |
| | | * @return |
| | | */ |
| | |
| | | import com.qxueyou.scc.exercise.model.ExerciseGroup; |
| | | |
| | | /** |
| | | * 试卷部分服务类 |
| | | * 试卷部分服务类 |
| | | * |
| | | * @author kevin |
| | | * @createTime 2018-03-11 |
| | |
| | | public interface IExamPaperSectionService { |
| | | |
| | | /** |
| | | * 查询试卷部分数量 |
| | | * @param param 查询参数 |
| | | * 查询试卷部分数量 |
| | | * @param param 查询参数 |
| | | * @return |
| | | */ |
| | | int queryExamPaperSectionCount(Map<String,Object> param); |
| | | |
| | | |
| | | /** |
| | | * 查询试卷部分列表 |
| | | * @param param 查询参数 |
| | | * @param page 分页对象 |
| | | * 查询试卷部分列表 |
| | | * @param param 查询参数 |
| | | * @param page 分页对象 |
| | | * @return |
| | | */ |
| | | List<ExamPaperSectionInfo> queryExamPaperSectionList(Map<String,Object> param,Pager page); |
| | | |
| | | |
| | | /** |
| | | * 新增试卷部分 |
| | | * 新增试卷部分 |
| | | * |
| | | * @param examPaperSectionInfo |
| | | * |
| | |
| | | String addExamPaperSection(ExamPaperSectionInfo examPaperSectionInfo); |
| | | |
| | | /** |
| | | * 删除试卷部分 |
| | | * 删除试卷部分 |
| | | * |
| | | * @param elxamBatchIds |
| | | * 试卷部分id |
| | | * @return 1表示删除成功,0表示删除失败 |
| | | * 试卷部分id |
| | | * @return 1表示删除成功,0表示删除失败 |
| | | */ |
| | | Result deleteExamPaperSection(String[] elxamBatchIds); |
| | | |
| | | /** |
| | | * 更新试卷部分信息 |
| | | * 更新试卷部分信息 |
| | | * |
| | | * @param noticeId |
| | | * 试卷部分id |
| | | * @return 1表示更新成功,0表示更新失败 |
| | | * 试卷部分id |
| | | * @return 1表示更新成功,0表示更新失败 |
| | | */ |
| | | Result updateExamPaperSection(ExamPaperSectionInfo examPaperSectionInfo); |
| | | |
| | | /** |
| | | * 试卷部分id 查询试卷部分 |
| | | * 试卷部分id 查询试卷部分 |
| | | * @param examPaperSectionId |
| | | * @return |
| | | */ |
| | | ExamPaperSectionInfo queryExamPaperSectionDetail(String examPaperSectionId); |
| | | |
| | | /** |
| | | * 保存试卷所选题库 |
| | | * 保存试卷所选题库 |
| | | * @param param |
| | | * @return |
| | | * @throws Exception |
| | |
| | | |
| | | |
| | | /** |
| | | * 保存试卷选题 |
| | | * 保存试卷选题 |
| | | * @param param |
| | | * @return |
| | | * @throws Exception |
| | |
| | | |
| | | |
| | | /** |
| | | * 删除部分的题目 |
| | | * 删除部分的题目 |
| | | * @param sectionId |
| | | * @param groupId |
| | | * @param exerciseItemIds |
| | |
| | | Result deleteSectionItem(String sectionId, String groupId, String[] exerciseItemIds); |
| | | |
| | | /** |
| | | * 部分保存题目分数信息 |
| | | * 部分保存题目分数信息 |
| | | * @param exerciseGroup |
| | | * @return |
| | | */ |
| | |
| | | import com.qxueyou.scc.exam.model.ExamPaperInfo; |
| | | |
| | | /** |
| | | * 试卷服务类 |
| | | * 试卷服务类 |
| | | * |
| | | * @author kevin |
| | | * @createTime 2018-03-11 |
| | | */ |
| | | public interface IExamPaperService { |
| | | /** |
| | | * 新增试卷 |
| | | * 新增试卷 |
| | | * |
| | | * @param examPaperInfo |
| | | * |
| | |
| | | Result addExamPaper(ExamPaperInfo examPaperInfo); |
| | | |
| | | /** |
| | | * 删除试卷 |
| | | * 删除试卷 |
| | | * |
| | | * @param elxamBatchIds 试卷id |
| | | * @param elxamBatchIds 试卷id |
| | | * |
| | | * @return 1表示删除成功,0表示删除失败 |
| | | * @return 1表示删除成功,0表示删除失败 |
| | | */ |
| | | Result deleteExamPaper(String[] elxamBatchIds); |
| | | |
| | | /** |
| | | * 更新试卷信息 |
| | | * 更新试卷信息 |
| | | * |
| | | * @param noticeId 试卷id |
| | | * @param noticeId 试卷id |
| | | * |
| | | * @return 1表示更新成功,0表示更新失败 |
| | | * @return 1表示更新成功,0表示更新失败 |
| | | */ |
| | | Result updateExamPaper(ExamPaperInfo examPaperInfo); |
| | | |
| | | /** |
| | | * 发布试卷 |
| | | * 发布试卷 |
| | | * |
| | | * @param examPaperIds 试卷的Ids |
| | | * @param examPaperIds 试卷的Ids |
| | | * |
| | | * @return 1表示发布成功,0表示发布失败 |
| | | * @return 1表示发布成功,0表示发布失败 |
| | | */ |
| | | Result doPublishExamPaper(String[] examPaperIds); |
| | | |
| | | /** |
| | | * 撤回发布的试卷 |
| | | * 撤回发布的试卷 |
| | | * |
| | | * @param examPaperIds 试卷的Ids |
| | | * @param examPaperIds 试卷的Ids |
| | | * |
| | | * @return 1表示撤回成功,0表示撤回失败失败 |
| | | * @return 1表示撤回成功,0表示撤回失败失败 |
| | | */ |
| | | Result doRevokeExamPaper(String[] examPaperIds); |
| | | |
| | | /** |
| | | * 试卷id 查询试卷 |
| | | * 试卷id 查询试卷 |
| | | * @param examPaperId |
| | | * @return |
| | | */ |
| | | ExamPaperInfo queryExamPaperDetail(String examPaperId); |
| | | |
| | | /** |
| | | * 查询考试题目统计信息 |
| | | * 查询考试题目统计信息 |
| | | * @param examPaperIds |
| | | * @return |
| | | */ |
| | | Map<String, ExamPaperInfo> queryExamPaperItemsStatistic(String[] examPaperIds); |
| | | |
| | | /** |
| | | * 根据考试信息和考卷编码获取试卷信息 |
| | | * 根据考试信息和考卷编码获取试卷信息 |
| | | * @param examId |
| | | * @param paperCode |
| | | * @return |
| | |
| | | ExamPaperInfo queryExamPaperByCode(String examId, String paperCode); |
| | | |
| | | /** |
| | | * 根据groupId获取试卷信息 |
| | | * 根据groupId获取试卷信息 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | import com.qxueyou.scc.exam.model.ExamResultV; |
| | | |
| | | /** |
| | | * 考试服务类 |
| | | * 考试服务类 |
| | | * |
| | | * @author kevin |
| | | * @createTime 2018-03-11 |
| | | */ |
| | | public interface IExamService { |
| | | /** |
| | | * 新增考试 |
| | | * 新增考试 |
| | | * |
| | | * @param examInfo |
| | | * |
| | | * @return 新增考试ID |
| | | * @return 新增考试ID |
| | | */ |
| | | String addExam(ExamInfo examInfo); |
| | | void addRemedy(String examId, Date startTime, Date endTime); |
| | | |
| | | /** |
| | | * 删除考试 |
| | | * 删除考试 |
| | | * |
| | | * @param elxamIds |
| | | * 考试id |
| | | * 考试id |
| | | * @return |
| | | */ |
| | | Result deleteExam(String[] examIds); |
| | | |
| | | /** |
| | | * 更新考试信息 |
| | | * 更新考试信息 |
| | | * |
| | | * @param noticeId |
| | | * 考试id |
| | | * 考试id |
| | | * @return |
| | | */ |
| | | Result updateExam(ExamInfo examInfo); |
| | | |
| | | /** |
| | | * 考试id 查询考试 |
| | | * 考试id 查询考试 |
| | | * |
| | | * @param examId |
| | | * @return |
| | |
| | | ExamInfo queryReExam(); |
| | | |
| | | /** |
| | | * 设置考试试卷 |
| | | * 设置考试试卷 |
| | | * |
| | | * @param param |
| | | * @return |
| | |
| | | Result updateExamPaperInfo(ExamInfo param); |
| | | |
| | | /** |
| | | * 开始考试 |
| | | * 开始考试 |
| | | * |
| | | * @param examBatchId |
| | | * @param classId |
| | |
| | | Result doStartReExam(String examId,String studentUserId); |
| | | |
| | | /** |
| | | * 发布考试 |
| | | * 发布考试 |
| | | * |
| | | * @param examIds |
| | | * 考试的Ids |
| | | * @return 1表示发布成功,0表示发布失败 |
| | | * 考试的Ids |
| | | * @return 1表示发布成功,0表示发布失败 |
| | | */ |
| | | Result doPublishExam(String[] examIds); |
| | | |
| | | /** |
| | | * 撤回发布的考试 |
| | | * 撤回发布的考试 |
| | | * |
| | | * @param examIds |
| | | * 考试的Ids |
| | | * @return 1表示撤回成功,0表示撤回失败失败 |
| | | * 考试的Ids |
| | | * @return 1表示撤回成功,0表示撤回失败失败 |
| | | */ |
| | | Result doRevokeExam(String[] examIds); |
| | | |
| | | /** |
| | | * 首页获取学生考试的总条数 |
| | | * 首页获取学生考试的总条数 |
| | | * |
| | | * @param classId |
| | | * @param userId |
| | |
| | | int getExamCount(String classId, String userId); |
| | | |
| | | /** |
| | | * 首页获取学生逾期未交的考试个数 |
| | | * 首页获取学生逾期未交的考试个数 |
| | | * |
| | | * @param classId |
| | | * @param userId |
| | |
| | | int getUnCommitExamCount(String classId, String userId); |
| | | |
| | | /** |
| | | * 首页获取学生待完成的考试个数 |
| | | * 首页获取学生待完成的考试个数 |
| | | * |
| | | * @param classId |
| | | * @param userId |
| | |
| | | int getToBeCommitExamCount(String classId, String userId); |
| | | |
| | | /** |
| | | * 首页获取学生已经提交的考试个数 |
| | | * 首页获取学生已经提交的考试个数 |
| | | * |
| | | * @param classId |
| | | * @param userId |
| | |
| | | int getCommitExamCount(String classId, String userId); |
| | | |
| | | /** |
| | | * 后台查询考试列表 |
| | | * 后台查询考试列表 |
| | | * @param keyword |
| | | * @param pageSize |
| | | * @param pageNum |
| | |
| | | List<ExamInfo> list(String keyword,String classId,String subjectId,Short status,Integer pageSize,Integer pageNum); |
| | | |
| | | /** |
| | | * 后台查询考试数量 |
| | | * 后台查询考试数量 |
| | | * @param keyword |
| | | * @param creatorId |
| | | * @return |
| | |
| | | int listCount(String keyword,String classId,String subjectId,Short status); |
| | | |
| | | /** |
| | | * 获取考试成绩列表 |
| | | * 获取考试成绩列表 |
| | | * @param examId |
| | | * @param examBatchIds |
| | | * @param classId |
| | |
| | | Integer pageNum); |
| | | |
| | | /** |
| | | * 获取考试成绩列表数量 |
| | | * 获取考试成绩列表数量 |
| | | * @param examId |
| | | * @param examBatchIds |
| | | * @param classId |
| | |
| | | int listResultCount(String examId,String[] examBatchIds, String classId, String keyword); |
| | | |
| | | /** |
| | | * 查询学生考试列表数量 |
| | | * @param keyword 考试名称过滤 |
| | | * @param classIds 班级过滤 |
| | | * 查询学生考试列表数量 |
| | | * @param keyword 考试名称过滤 |
| | | * @param classIds 班级过滤 |
| | | * @param subjectId |
| | | * @param status |
| | | * @return |
| | |
| | | int listStudentExamCount(String keyword, String[] classIds,String subjectId,Integer status); |
| | | |
| | | /** |
| | | * 查询学生考试列表 |
| | | * 查询学生考试列表 |
| | | * @param keyword |
| | | * @param classIds |
| | | * @param subjectId |
| | |
| | | List<ExamResultV> studentExam( String [] classIds); |
| | | |
| | | /** |
| | | * 查询考试结果状态数量 |
| | | * 查询考试结果状态数量 |
| | | * @param lstExamIds |
| | | * @return |
| | | */ |
| | |
| | | import com.qxueyou.scc.exam.service.IExamBatchService; |
| | | |
| | | /** |
| | | * 试卷批次管理服务层 |
| | | * 试卷批次管理服务层 |
| | | * |
| | | * @author kevin |
| | | * @createTime 2017-11-1 |
| | |
| | | @Override |
| | | public List<Map<String,Object>> queryListForIdName() { |
| | | // String hql="select v from ExamResultV v where v.startTime >? "; |
| | | //根据考试获取所有批次信息 |
| | | //根据考试获取所有批次信息 |
| | | String hql="select r from ExamBatchInfo i , ExamBatchClassRe r where i.examId in (SELECT e.examId from ExamInfo e where e.deleteFlag is false )" + |
| | | " and i.deleteFlag is false and i.startTime>? and r.examBatchId=i.examBatchId "; |
| | | //获取列表,开始时间大于当前时间,也就是还未开始 |
| | | //获取列表,开始时间大于当前时间,也就是还未开始 |
| | | List<ExamBatchClassRe> examResults = this.find(hql, CollectionUtils.newList(new Date()), ExamBatchClassRe.class); |
| | | List<Map<String,Object>> list=new ArrayList<>(); |
| | | for (ExamBatchClassRe examResult : examResults) { |
| | | //封装成前端要用的数据 |
| | | //封装成前端要用的数据 |
| | | Map<String,Object> map=new HashMap<>(); |
| | | //获取考试名称加批次信息 |
| | | //获取考试名称加批次信息 |
| | | String ql="SELECT e.examName from ExamInfo e where e.deleteFlag is false and e.examId=?"; |
| | | //获取考试名称 |
| | | //获取考试名称 |
| | | String s = this.findUnique(ql, CollectionUtils.newList(examResult.getExamId()), String.class); |
| | | String q="SELECT e from ExamBatchInfo e where e.deleteFlag is false and e.examBatchId=?"; |
| | | //批次信息 |
| | | //批次信息 |
| | | ExamBatchInfo examBatchInfo = this.findUnique(q, CollectionUtils.newList(examResult.getExamBatchId()), ExamBatchInfo.class); |
| | | SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | //测试考试(考场一_2020-06-16 9:00 ~ 06-16 12:00) |
| | | //测试考试(考场一_2020-06-16 9:00 ~ 06-16 12:00) |
| | | s+="("+examBatchInfo.getExamRoomName()+"_"+format.format(examBatchInfo.getStartTime())+" ~ "+new SimpleDateFormat("MM-dd HH:mm:ss").format(examBatchInfo.getEndTime())+")"; |
| | | map.put("batchName",s); |
| | | map.put("batchId",examResult.getExamBatchId()); |
| | |
| | | } |
| | | @Override |
| | | public List<String> queryComNameByBatchId(String classId) { |
| | | //根据所在组id |
| | | //根据所在组id |
| | | String hql="select f.subjectId from StuStudent f where f.subjectId is not null and f.classId =? and f.deleteFlag is false group by f.subjectId"; |
| | | //获取公司名称列表 |
| | | //获取公司名称列表 |
| | | return this.find(hql, CollectionUtils.newList(classId), String.class); |
| | | } |
| | | @Override |
| | | public List<String> queryStudentNoByComNameAndBatch(String subjectId,String classId) { |
| | | //根据所在组id |
| | | //根据所在组id |
| | | // String hql="select f.studentNo from StuStudent f where f.subjectId=? and f.classId =? and f.deleteFlag is false "; |
| | | String hql="select f.studentNo from StuStudent f where f.classId =? and f.deleteFlag is false "; |
| | | //获取列表 |
| | | //获取列表 |
| | | // return this.find(hql, CollectionUtils.newList(subjectId,classId), String.class); |
| | | return this.find(hql, CollectionUtils.newList(classId), String.class); |
| | | } |
| | | |
| | | @Override |
| | | public String addExamBatch(ExamBatchInfo examBatchInfo) { |
| | | //查询最大批次号 |
| | | //查询最大批次号 |
| | | Short maxBatchNo = this.findUnique("select max(f.examBatchNo) from ExamBatchInfo f where f.examId =? and f.deleteFlag is false", CollectionUtils.newList(examBatchInfo.getExamId()), Short.class); |
| | | maxBatchNo = maxBatchNo==null?0:maxBatchNo; |
| | | examBatchInfo.setExamBatchNo(++maxBatchNo); |
| | |
| | | examBatchInfo.setStartTime(param.getStartTime()); |
| | | examBatchInfo.setEndTime(param.getEndTime()); |
| | | List<ExamBatchClassRe> lstExamBatchClassRe = param.getReClasses(); |
| | | //删除原来的关联关系 |
| | | //删除原来的关联关系 |
| | | String hql="update ExamBatchClassRe set deleteFlag = true where examBatchId=? "; |
| | | this.bulkUpdate(hql, new Object[]{ param.getExamBatchId()}); |
| | | |
| | |
| | | import com.qxueyou.scc.exercise.service.IExerciseService; |
| | | |
| | | /** |
| | | * 试卷部分管理服务层 |
| | | * 试卷部分管理服务层 |
| | | * |
| | | * @author kevin |
| | | * @createTime 2017-11-1 |
| | |
| | | @Override |
| | | public String addExamPaperSection(ExamPaperSectionInfo examPaperSectionInfo) { |
| | | TraceUtils.setCreateTrace(examPaperSectionInfo); |
| | | // 查询当前最大的sectionOrder |
| | | // 查询当前最大的sectionOrder |
| | | String hql = "select max(sectionOrder) from ExamPaperSectionInfo where examPaperId=? and deleteFlag is false"; |
| | | Integer maxOrder = this.findUnique(hql, CollectionUtils.newList(examPaperSectionInfo.getExamPaperId()), |
| | | Integer.class); |
| | | int beginOrder = maxOrder == null ? 0 : maxOrder.intValue(); |
| | | examPaperSectionInfo.setSectionOrder(++beginOrder); |
| | | |
| | | // 获取当前section对应的开始index |
| | | // 获取当前section对应的开始index |
| | | int count = this.findCount("from ExerciseGroupItemRe r where r.deleteFlag is false and r.exerciseGroupId=?", |
| | | CollectionUtils.newList(examPaperSectionInfo.getGroupId())); |
| | | |
| | |
| | | ExamPaperSectionInfo examPaperSectionInfo = read(ExamPaperSectionInfo.class, sectionId); |
| | | ExerciseGroup exerciseGroup = read(ExerciseGroup.class, examPaperSectionInfo.getGroupId()); |
| | | |
| | | // 获取试卷部分原开始位置和结束位置 |
| | | // 获取试卷部分原开始位置和结束位置 |
| | | int origStartIndex = examPaperSectionInfo.getItemStartOrder(); |
| | | int origEndIndex = examPaperSectionInfo.getItemEndOrder(); |
| | | |
| | |
| | | this.deleteAllSectionItem(examPaperSectionInfo.getSectionId()); |
| | | } |
| | | |
| | | // 将题库的题目复制到试卷题库 |
| | | // 将题库的题目复制到试卷题库 |
| | | int itemIndex = origStartIndex; |
| | | ExerciseGroup targetExerciseGroup = new ExerciseGroup(); |
| | | targetExerciseGroup.setGroupId(examPaperSectionInfo.getGroupId()); |
| | |
| | | ExamPaperSectionInfo examPaperSectionInfo = read(ExamPaperSectionInfo.class, sectionId); |
| | | ExerciseGroup exerciseGroup = read(ExerciseGroup.class, examPaperSectionInfo.getGroupId()); |
| | | |
| | | // 获取试卷部分原开始位置和结束位置 |
| | | // 获取试卷部分原开始位置和结束位置 |
| | | int origStartIndex = examPaperSectionInfo.getItemStartOrder(); |
| | | int origEndIndex = examPaperSectionInfo.getItemEndOrder(); |
| | | |
| | | //如果试卷其他部分中已经存在该题目,则返回错误,重复的题目 |
| | | //如果试卷其他部分中已经存在该题目,则返回错误,重复的题目 |
| | | int count = this.findCountByComplexHql("from ExerciseGroupItemRe r where r.deleteFlag is false and r.exerciseGroupId=:paperGroupId and (r.itemOrder<:startIdx or r.itemOrder>:endIdx) and r.exerciseItemId in (:exerciseItemIds)", |
| | | CollectionUtils.newObjectMap("startIdx", origStartIndex, "endIdx", origEndIndex, "paperGroupId", examPaperSectionInfo.getGroupId(), "exerciseItemIds", selectedItemIds)); |
| | | |
| | | if (count > 0) { |
| | | return new Result(false, "请检查选择的题目,同一份试卷中不允许存在相同的题目!"); |
| | | return new Result(false, "请检查选择的题目,同一份试卷中不允许存在相同的题目!"); |
| | | } |
| | | |
| | | // 将题库的题目复制到试卷题库 |
| | | // 将题库的题目复制到试卷题库 |
| | | int copyStartIndex = origEndIndex > 0 ? origEndIndex : origStartIndex; |
| | | ExerciseGroup targetExerciseGroup = new ExerciseGroup(); |
| | | targetExerciseGroup.setGroupId(examPaperSectionInfo.getGroupId()); |
| | |
| | | copyStartIndex); |
| | | long allCount = exerciseGroup.getAllCount() == null ? 0 : exerciseGroup.getAllCount().longValue() + (copyEndIndex - copyStartIndex); |
| | | exerciseGroup.setAllCount(BigInteger.valueOf(allCount)); |
| | | //如果有保存题目则处理索引,否则不处理 |
| | | //如果有保存题目则处理索引,否则不处理 |
| | | if (copyEndIndex - copyStartIndex > 0) { |
| | | examPaperSectionInfo.setItemEndOrder((short) (copyEndIndex)); |
| | | } |
| | |
| | | ExamPaperSectionInfo examPaperSectionInfo = this.read(ExamPaperSectionInfo.class, examPaperSectionId); |
| | | ExerciseGroup exerciseGroup = exerciseGroupService.queryExerciseGroupDetail(examPaperSectionInfo.getGroupId()); |
| | | List<ExerciseItem> items = null; |
| | | // 查询出section 对应的题目信息 |
| | | // 查询出section 对应的题目信息 |
| | | if (examPaperSectionInfo.getItemEndOrder() > 0) { |
| | | int itemCount = examPaperSectionInfo.getItemEndOrder() - examPaperSectionInfo.getItemStartOrder(); |
| | | items = new ArrayList<ExerciseItem>(itemCount); |
| | |
| | | @SuppressWarnings("unchecked") |
| | | private Result updateSectionRangeIndex(String currentSectionid, int adjustNum) { |
| | | ExamPaperSectionInfo currentSectionInfo = this.read(ExamPaperSectionInfo.class, currentSectionid); |
| | | // 如果部分对应的end为-1,则不需要更新endorder |
| | | // 如果部分对应的end为-1,则不需要更新endorder |
| | | String hql = "from ExamPaperSectionInfo where examPaperId=? and sectionOrder>? and deleteFlag is false"; |
| | | List<ExamPaperSectionInfo> lstExamPaperSectionInfo = this.find(hql, |
| | | CollectionUtils.newList(currentSectionInfo.getExamPaperId(), currentSectionInfo.getSectionOrder()), |
| | |
| | | this.saveOrUpdateAll(lstExamPaperSectionInfo); |
| | | } |
| | | } |
| | | //清理试卷缓存 |
| | | //清理试卷缓存 |
| | | this.redisTemplate.delete(currentSectionInfo.getGroupId()); |
| | | return new Result(true); |
| | | } |
| | |
| | | } |
| | | this.deleteSectionItem(examPaperSectionInfo.getSectionId(), examPaperSectionInfo.getGroupId(), |
| | | exerciseItemIds); |
| | | // section坐标置空 |
| | | // section坐标置空 |
| | | examPaperSectionInfo.setItemEndOrder((short) -1); |
| | | this.save(examPaperSectionInfo); |
| | | |
| | |
| | | @Override |
| | | public Result deleteSectionItem(String sectionId, String groupId, String[] exerciseItemIds) { |
| | | if (exerciseItemIds != null && exerciseItemIds.length > 0) { |
| | | // 查询题库与题目的关系 |
| | | // 查询题库与题目的关系 |
| | | List<String> lstRelationIds = new ArrayList<String>(exerciseItemIds.length); |
| | | ExamPaperSectionInfo currentSectionInfo = this.read(ExamPaperSectionInfo.class, sectionId); |
| | | |
| | |
| | | lstRelationIds.add(itemReMap.get(strExerciseItemId).getRelationId()); |
| | | } |
| | | |
| | | // 如果题目删除完了,则设置end为-1 |
| | | // 如果题目删除完了,则设置end为-1 |
| | | if (currentSectionInfo.getItemEndOrder() - exerciseItemIds.length == currentSectionInfo |
| | | .getItemStartOrder()) { |
| | | currentSectionInfo.setItemEndOrder((short) -1); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除试卷习题 |
| | | * 删除试卷习题 |
| | | * |
| | | * |
| | | * @param reIds |
| | |
| | | |
| | | ExerciseGroup group = this.read(ExerciseGroup.class, groupId); |
| | | |
| | | // 更新组试卷习题数量 |
| | | // 更新组试卷习题数量 |
| | | group.setAllCount(group.getAllCount().subtract(new BigInteger(String.valueOf(reIds.length)))); |
| | | TraceUtils.setUpdateTrace(group); |
| | | this.save(group); |
| | | |
| | | // 2.删除试卷题目组关联表数据 |
| | | // 2.删除试卷题目组关联表数据 |
| | | this.bulkUpdateInLoop("delete from ExerciseGroupItemRe where relationId=?", reIds); |
| | | |
| | | // 更新item的顺序号 |
| | | // 更新item的顺序号 |
| | | String hql = "from ExerciseGroupItemRe re where re.exerciseGroupId=? and re.deleteFlag is false order by re.itemOrder asc "; |
| | | List<ExerciseGroupItemRe> lstRe = this.find(hql, CollectionUtils.newList(groupId), ExerciseGroupItemRe.class); |
| | | if (lstRe != null && lstRe.size() > 0) { |
| | |
| | | |
| | | @Override |
| | | public Result saveSectionItem(ExerciseGroup exerciseGroup) { |
| | | //保存题目信息 |
| | | //保存题目信息 |
| | | return exerciseService.saveExerciseItemBatch(exerciseGroup.getGroupId(), exerciseGroup.getItems()); |
| | | } |
| | | |
| | |
| | | import com.qxueyou.scc.exercise.service.IExerciseGroupService; |
| | | |
| | | /** |
| | | * 试卷管理服务层 |
| | | * 试卷管理服务层 |
| | | * |
| | | * @author kevin |
| | | * @createTime 2017-11-1 |
| | |
| | | String examPaperId = null, groupId = null; |
| | | ExerciseGroup exerciseGroup = null; |
| | | |
| | | //创建试卷关联题库 |
| | | //创建试卷关联题库 |
| | | exerciseGroup = new ExerciseGroup(); |
| | | exerciseGroup.setName(examPaperInfo.getExamPaperName()+"-试卷题库"); |
| | | exerciseGroup.setName(examPaperInfo.getExamPaperName()+"-试卷题库"); |
| | | exerciseGroup.setType(ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM); |
| | | groupId = exerciseGroupService.addExerciseGroup(exerciseGroup); |
| | | |
| | | //保存试卷 |
| | | //保存试卷 |
| | | examPaperId = UUIDUtils.generateUUID().replace("-", ""); |
| | | examPaperInfo.setExamPaperId(examPaperId); |
| | | examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_DRAFT); |
| | |
| | | |
| | | for (ExamPaperInfo examPaperInfo : lstExamPaperInfo) { |
| | | if(ExamPaperInfo.STATUS_DRAFT!=examPaperInfo.getPaperStatus()){ |
| | | return new Result(false, "只有草稿状态的试卷,才能发布。"); |
| | | return new Result(false, "只有草稿状态的试卷,才能发布。"); |
| | | } |
| | | |
| | | if(examPaperInfo.getTotalScore()<=0){ |
| | | return new Result(false, "试卷总分大于零,才能发布。"); |
| | | return new Result(false, "试卷总分大于零,才能发布。"); |
| | | } |
| | | |
| | | examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_PUBLISH); |
| | |
| | | save(examPaperInfo); |
| | | } |
| | | }else{ |
| | | return new Result(false, "没有选择要发布的试卷。"); |
| | | return new Result(false, "没有选择要发布的试卷。"); |
| | | } |
| | | return new Result(true); |
| | | } |
| | |
| | | List<ExamPaperInfo> lstExamPaperInfo = this.findByComplexHql(hql,pramMap, ExamPaperInfo.class); |
| | | for (ExamPaperInfo examPaperInfo : lstExamPaperInfo) { |
| | | if(ExamPaperInfo.STATUS_PUBLISH!=examPaperInfo.getPaperStatus()){ |
| | | return new Result(false, "只有发布状态的试卷,才能撤回。"); |
| | | return new Result(false, "只有发布状态的试卷,才能撤回。"); |
| | | } |
| | | examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_DRAFT); |
| | | TraceUtils.setUpdateTrace(examPaperInfo); |
| | | save(examPaperInfo); |
| | | } |
| | | }else{ |
| | | return new Result(false, "没有选择要撤回的试卷。"); |
| | | return new Result(false, "没有选择要撤回的试卷。"); |
| | | } |
| | | |
| | | return new Result(true); |
| | |
| | | import com.qxueyou.scc.msg.service.IMsgInfoService; |
| | | |
| | | /** |
| | | * 考试管理服务层 |
| | | * 考试管理服务层 |
| | | * |
| | | * @author kevin |
| | | * @createTime 2017-11-1 |
| | |
| | | params.put("subjectId", subjectId); |
| | | } |
| | | |
| | | //根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅 |
| | | //根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅 |
| | | if(status != null) { |
| | | switch(status){ |
| | | case 1:hql.append(" and v.status is null") ;break; |
| | |
| | | params.put("subjectId", subjectId); |
| | | } |
| | | |
| | | //根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅 |
| | | //根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅 |
| | | if(status != null) { |
| | | switch(status){ |
| | | case 1:hql.append(" and v.status is null") ;break; |
| | |
| | | |
| | | @Override |
| | | public void addRemedy(String examId,Date startTime,Date endTime) { |
| | | //根据考试ID获取考试信息 |
| | | //根据考试ID获取考试信息 |
| | | ExamInfo examInfo = queryExamDetail(examId); |
| | | //根据考试ID获取对应的批次信息 |
| | | //根据考试ID获取对应的批次信息 |
| | | String hql = "from ExamBatchInfo where examId=? and deleteFlag is false"; |
| | | List<ExamBatchInfo> list = this.find(hql, CollectionUtils.newList(examId), ExamBatchInfo.class); |
| | | List<ExamBatchInfo> remedylist = new ArrayList<>(list.size()); |
| | | //根据考试ID获取对应的题目设置 |
| | | //根据考试ID获取对应的题目设置 |
| | | List<ExerciseItemSet> exerciseItemSets = queryExerciseItemSet(examId); |
| | | List<ExerciseItemSet> exerciseItemSetses = new ArrayList<>(exerciseItemSets.size()); |
| | | //... |
| | | List<ExamReExamPaper> reExamPapers = examInfo.getReExamPapers(); |
| | | List<ExamReExamPaper> reExamPaperses = new ArrayList<>(reExamPapers.size()); |
| | | //复制信息 |
| | | //复制信息 |
| | | ExamInfo examInfo1=new ExamInfo(); |
| | | //重新指向一个对象并复制属性 |
| | | //重新指向一个对象并复制属性 |
| | | BeanUtils.copyProperties(examInfo,examInfo1); |
| | | //设置考试名称 |
| | | examInfo1.setExamName(examInfo1.getExamName()+"(补考"+new Date().getTime()+")"); |
| | | //设置新指向批次集合 |
| | | //设置考试名称 |
| | | examInfo1.setExamName(examInfo1.getExamName()+"(补考"+new Date().getTime()+")"); |
| | | //设置新指向批次集合 |
| | | examInfo1.setExamBatchInfos(remedylist); |
| | | examInfo1.setExerciseItemSets(exerciseItemSetses); |
| | | //设置新指向试卷集合 |
| | | //设置新指向试卷集合 |
| | | reExamPapers.forEach(reExamPaper -> reExamPaperses.add(reExamPaper)); |
| | | examInfo1.setReExamPapers(reExamPaperses); |
| | | String examremedyId = addExam(examInfo1); |
| | | //设置新指向题目设置集合并复制添加 |
| | | //设置新指向题目设置集合并复制添加 |
| | | exerciseItemSets.forEach(exerciseItemSet -> { |
| | | ExerciseItemSet exerciseItemSet1 = new ExerciseItemSet(); |
| | | BeanUtils.copyProperties(exerciseItemSet,exerciseItemSet1); |
| | |
| | | this.insert(exerciseItemSet1); |
| | | exerciseItemSetses.add(exerciseItemSet1); |
| | | }); |
| | | //根据考试ID获取题库关联信息 |
| | | //根据考试ID获取题库关联信息 |
| | | String ql = "from ExerciseExamReGroup where examId=? and deleteFlag is false"; |
| | | List<ExerciseExamReGroup> exerciseExamReGroups = this.find(ql, CollectionUtils.newList(examId), ExerciseExamReGroup.class); |
| | | exerciseExamReGroups.forEach(exerciseExamReGroup -> { |
| | | ExerciseExamReGroup exerciseExamReGroup1 = new ExerciseExamReGroup(); |
| | | BeanUtils.copyProperties(exerciseExamReGroup,exerciseExamReGroup1); |
| | | //设置考试ID保存信息 |
| | | //设置考试ID保存信息 |
| | | exerciseExamReGroup1.setExamId(examremedyId); |
| | | TraceUtils.setCreateTrace(exerciseExamReGroup1); |
| | | this.insert(exerciseExamReGroup1); |
| | | }); |
| | | //循环复制批次 |
| | | //循环复制批次 |
| | | for (ExamBatchInfo examBatchInfo : list) { |
| | | String remedyExamBatchId = UUIDUtils.generateSpecialUuid(32); |
| | | List<ExamBatchClassRe> reClasses = examBatchInfo.getReClasses(); |
| | | List<ExamBatchClassRe> examBatchClassRes = new ArrayList<>(); |
| | | reClasses.forEach(reClass -> { |
| | | //新建bean |
| | | //新建bean |
| | | ExamBatchClassRe examBatchClassRe = new ExamBatchClassRe(); |
| | | //复制属性 |
| | | //复制属性 |
| | | BeanUtils.copyProperties(reClass,examBatchClassRe); |
| | | //修改考试ID以及批次ID |
| | | //修改考试ID以及批次ID |
| | | examBatchClassRe.setExamId(examremedyId); |
| | | examBatchClassRe.setExamBatchId(remedyExamBatchId); |
| | | examBatchClassRe.setExamClassReId(UUIDUtils.generateSpecialUuid(32)); |
| | |
| | | }); |
| | | ExamBatchInfo examBatchInfo1 = new ExamBatchInfo(); |
| | | BeanUtils.copyProperties(examBatchInfo,examBatchInfo1); |
| | | //设置批次考试ID为补考的ID |
| | | //设置批次考试ID为补考的ID |
| | | examBatchInfo1.setExamId(examremedyId); |
| | | //设置开始结束时间 |
| | | //设置开始结束时间 |
| | | examBatchInfo1.setStartTime(startTime); |
| | | examBatchInfo1.setEndTime(endTime); |
| | | examBatchInfo1.setExamBatchId(remedyExamBatchId); |
| | | examBatchInfo1.setReClasses(examBatchClassRes); |
| | | //添加批次 |
| | | //添加批次 |
| | | examBatchService.addExamBatch(examBatchInfo1); |
| | | remedylist.add(examBatchInfo1); |
| | | } |
| | |
| | | Result result = new Result(true); |
| | | if (examIds != null && examIds.length > 0) { |
| | | String hql = "update ExamInfo set deleteFlag = true where examId=?"; |
| | | //判断ID里是否包含补考考试 |
| | | //判断ID里是否包含补考考试 |
| | | ExamInfo examInfo = queryReExam(); |
| | | if (examInfo!=null) { |
| | | for (String examId : examIds) { |
| | | if (examId.equals(examInfo.getExamId())){ |
| | | result.setSuccess(false); |
| | | result.setMsg("含有补考考试,不可删除"); |
| | | result.setMsg("含有补考考试,不可删除"); |
| | | return result; |
| | | } |
| | | } |
| | |
| | | ExamInfo examInfo = read(ExamInfo.class, param.getExamId()); |
| | | |
| | | if (examInfo == null) { |
| | | return new Result(false, "考试不存在"); |
| | | return new Result(false, "考试不存在"); |
| | | } |
| | | |
| | | TraceUtils.setUpdateTrace(examInfo); |
| | |
| | | examInfo.setTotalScore(param.getTotalScore()); |
| | | examInfo.setPassingScore(param.getPassingScore()); |
| | | |
| | | //如果是随机组卷 |
| | | //如果是随机组卷 |
| | | if(ExamInfo.EXAM_TYPE_RANDOM==examInfo.getExamType()||ExamInfo.EXAM_TYPE_RANDOM_BY_GROUP==examInfo.getExamType()){ |
| | | // 删除之前的Exercise关联的group |
| | | // 删除之前的Exercise关联的group |
| | | this.bulkUpdate("update ExerciseExamReGroup set deleteFlag = 1 where examId = ?",new Object[] { param.getExamId()}); |
| | | |
| | | List<ExerciseItemSet> lstExerciseItemSet = param.getExerciseItemSets(); |
| | | |
| | | // 保存题目类型 |
| | | // 保存题目类型 |
| | | if (lstExerciseItemSet != null && lstExerciseItemSet.size() > 0) { |
| | | // 删除历史数据 |
| | | // 删除历史数据 |
| | | this.bulkUpdate("update ExerciseItemSet set deleteFlag = 1 where deleteFlag is false and exerciseInfoId = ?", |
| | | new Object[] { param.getExamId()}); |
| | | for (ExerciseItemSet itemSet : lstExerciseItemSet) { |
| | |
| | | } |
| | | } |
| | | |
| | | //保存考试,源题目组信息 |
| | | //保存考试,源题目组信息 |
| | | String [] sourceGroupIds = param.getSourceGroupIds().split(","); |
| | | |
| | | // 保存关联练习组 |
| | | // 保存关联练习组 |
| | | if (sourceGroupIds != null && sourceGroupIds.length > 0) { |
| | | ExerciseExamReGroup reGroup = null; |
| | | for (String groupId : sourceGroupIds) { |
| | |
| | | } |
| | | |
| | | }else{ |
| | | // 删除原来的关联关系 |
| | | // 删除原来的关联关系 |
| | | String hql = "update ExamReExamPaper set deleteFlag = true where examId=? "; |
| | | this.bulkUpdate(hql, new Object[] { param.getExamId() }); |
| | | List<ExamReExamPaper> lstExamReExamPaper = param.getReExamPapers(); |
| | |
| | | |
| | | for (ExamInfo examInfo : lstExamInfo) { |
| | | if (ExamInfo.STATUS_DRAFT != examInfo.getExamStatus()) { |
| | | return new Result(false, "只有草稿状态的考试,才能发布。"); |
| | | return new Result(false, "只有草稿状态的考试,才能发布。"); |
| | | } |
| | | examInfo.setExamStatus(ExamInfo.STATUS_PUBLISH); |
| | | TraceUtils.setUpdateTrace(examInfo); |
| | |
| | | this.doExamPublishMsg(examInfo.getExamId()); |
| | | } |
| | | } else { |
| | | return new Result(false, "没有选择要发布的考试。"); |
| | | return new Result(false, "没有选择要发布的考试。"); |
| | | } |
| | | return new Result(true); |
| | | } |
| | |
| | | Map<String,String> attrs = CollectionUtils.newStringMap("examId",examId,"examName",examInfo.getExamName(), |
| | | "subjectId",examInfo.getSubjectId(),"subjectName",examInfo.getSubject().getName(), |
| | | "examBatchId",(String)temp.get("examBatchId"),"classId",(String)temp.get("classId"),"recordId",(String)temp.get("recordId")); |
| | | msgInfoService.doSendTextMsgToUsers(new String[]{(String)temp.get("userId")},MsgInfo.TYPE_EXAM, "发布了考试", attrs); |
| | | msgInfoService.doSendTextMsgToUsers(new String[]{(String)temp.get("userId")},MsgInfo.TYPE_EXAM, "发布了考试", attrs); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Scheduled(cron = " 0 0/5 * * * ?") |
| | | protected void doTimer() { |
| | | // System.out.println("执行考试提醒定时器"); |
| | | // System.out.println("执行考试提醒定时器"); |
| | | Calendar cal =Calendar.getInstance(); |
| | | cal.add(Calendar.HOUR, 1); |
| | | Date beginDate = cal.getTime(); |
| | |
| | | String hql = "select b.examBatchId from ExamBatchInfo b ,ExamInfo f where b.examId = f.examId " |
| | | + " and b.startTime>=? and b.startTime<? and f.examStatus=? and f.deleteFlag is false and b.deleteFlag is false order by b.startTime desc"; |
| | | |
| | | //查询1小时内将开始的直播 |
| | | //查询1小时内将开始的直播 |
| | | List<String> lstBatchIds = this.find(hql,CollectionUtils.newList(beginDate,endDate,ExamInfo.STATUS_PUBLISH), String.class); |
| | | |
| | | if(lstBatchIds!=null && lstBatchIds.size()>0){ |
| | | for(String batchId:lstBatchIds){ |
| | | this.doExamRemindMsg(batchId,MsgInfo.TYPE_REMIND, "考试马上开始了,请做好考试准备"); |
| | | this.doExamRemindMsg(batchId,MsgInfo.TYPE_REMIND, "考试马上开始了,请做好考试准备"); |
| | | } |
| | | } |
| | | } |
| | |
| | | List<ExamInfo> lstExamInfo = this.findByComplexHql(hql, pramMap, ExamInfo.class); |
| | | for (ExamInfo examInfo : lstExamInfo) { |
| | | if (ExamInfo.STATUS_PUBLISH != examInfo.getExamStatus()) { |
| | | return new Result(false, "只有发布状态的考试,才能撤回"); |
| | | return new Result(false, "只有发布状态的考试,才能撤回"); |
| | | } |
| | | examInfo.setExamStatus(ExamInfo.STATUS_DRAFT); |
| | | TraceUtils.setUpdateTrace(examInfo); |
| | | save(examInfo); |
| | | } |
| | | } else { |
| | | return new Result(false, "没有选择要撤回的考试"); |
| | | return new Result(false, "没有选择要撤回的考试"); |
| | | } |
| | | return new Result(true); |
| | | } |
| | |
| | | } |
| | | @Override |
| | | public ExamInfo queryReExam() { |
| | | // 查询是否有进行中的考试 |
| | | // 查询是否有进行中的考试 |
| | | ExamInfo examInfo = this.findUnique( |
| | | "from ExamInfo where maxLateMin=? and deleteFlag is false ", |
| | | CollectionUtils.newList((short)1), |
| | |
| | | } |
| | | |
| | | /** |
| | | * 开始考试 |
| | | * 开始考试 |
| | | * |
| | | * @param |
| | | * @return |
| | |
| | | //TODO |
| | | "remainingSeconds",record.getRemainingSeconds(),"itemSet", lstItemSets,"subjectName", examInfo.getSubject().getName()); |
| | | |
| | | // 如果已提交就查询用户答案信息 |
| | | //TODO 暂时不可以查看考试答案,已提交就不可以进入 |
| | | // 如果已提交就查询用户答案信息 |
| | | //TODO 暂时不可以查看考试答案,已提交就不可以进入 |
| | | if (Integer.valueOf(record.getStatus())> 0) { |
| | | resultData.put("studentScore", record.getScore()); |
| | | resultData.put("objStudentScore", record.getObjScore()==null?BigDecimal.ZERO:record.getObjScore()); |
| | | return new Result(false,"考试已提交"); |
| | | return new Result(false,"考试已提交"); |
| | | } |
| | | //获取考试 |
| | | //获取考试 |
| | | String ql="select i from ExamInfo i , ExamBatchClassRe r where i.deleteFlag is false and r.examBatchId=? and r.examId=i.examId"; |
| | | ExamInfo exam = this.findUnique(ql, CollectionUtils.newList(examBatchId), ExamInfo.class); |
| | | //添加考试总时长 |
| | | //添加考试总时长 |
| | | resultData.put("durationMin",exam.getDurationMin()); |
| | | resultData.put("groupId", record.getExerciseGroupId()); |
| | | resultData.put("totalScore", examInfo.getTotalScore()); |
| | |
| | | return new Result(true,"",resultData); |
| | | } |
| | | /** |
| | | * 开始补考考试 |
| | | * 开始补考考试 |
| | | * |
| | | * @param examId |
| | | * @return |
| | |
| | | Map<String,Object> resultData = CollectionUtils.newObjectMap("exerciseRecordId", record.getRecordId(),"submitTime",record.getSubmitTime(), |
| | | //TODO |
| | | "remainingSeconds",record.getRemainingSeconds(),"itemSet", lstItemSets,"subjectName", examInfo.getSubject().getName()); |
| | | //添加考试总时长 |
| | | //添加考试总时长 |
| | | resultData.put("durationMin",examInfo.getDurationMin()); |
| | | resultData.put("groupId", record.getExerciseGroupId()); |
| | | resultData.put("totalScore", examInfo.getTotalScore()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 判断是否是随机考试 |
| | | * 判断是否是随机考试 |
| | | * @param examType |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取考试试卷信息 |
| | | * 获取考试试卷信息 |
| | | * @param examId |
| | | * @param groupId |
| | | * @param examType |
| | |
| | | } |
| | | |
| | | /** |
| | | * 手动添加题目位置信息 |
| | | * 手动添加题目位置信息 |
| | | * @param groupId |
| | | * @param examType |
| | | * @param totalSocre |
| | |
| | | int itemCount = lstItemSets.get(i).getItemCount(); |
| | | if (itemCount>0) { |
| | | examPaperSectionInfo.setGroupId(groupId); |
| | | //设置开始结束 |
| | | //设置开始结束 |
| | | examPaperSectionInfo.setItemStartOrder((short)count); |
| | | //获取题目设置的count,下次循环用 |
| | | //获取题目设置的count,下次循环用 |
| | | count+=itemCount; |
| | | examPaperSectionInfo.setItemEndOrder((short)count); |
| | | //名称 |
| | | //名称 |
| | | examPaperSectionInfo.setSectionName(String.valueOf(lstItemSets.get(i).getItemType())); |
| | | examPaperSectionInfos.add(examPaperSectionInfo); |
| | | } |
| | |
| | | examPaperInfo = examPaperService.queryExamPaperDetail(examPaperInfo.getExamPaperId()); |
| | | List<ExamPaperSectionInfo> examPaperSectionInfos = new ArrayList<>(); |
| | | int count=0; |
| | | //获取试卷里的各种题数量设置 |
| | | //获取试卷里的各种题数量设置 |
| | | Map<String, ExamPaperInfo> statisticsMap = examPaperService.queryExamPaperItemsStatistic(new String[]{examPaperInfo.getExamPaperId()}); |
| | | //把设置封装成itemSets |
| | | //把设置封装成itemSets |
| | | lstItemSets=new ArrayList<ExerciseItemSet>(); |
| | | //单选 |
| | | //单选 |
| | | ExerciseItemSet exerciseItemSet1 = new ExerciseItemSet(); |
| | | exerciseItemSet1.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getSingleSelectCount()); |
| | | exerciseItemSet1.setItemType((short) 1); |
| | | lstItemSets.add(exerciseItemSet1); |
| | | //多选 |
| | | //多选 |
| | | ExerciseItemSet exerciseItemSet2 = new ExerciseItemSet(); |
| | | exerciseItemSet2.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getMultiSelectCount()); |
| | | exerciseItemSet2.setItemType((short) 2); |
| | | lstItemSets.add(exerciseItemSet2); |
| | | //判断 |
| | | //判断 |
| | | ExerciseItemSet exerciseItemSet3 = new ExerciseItemSet(); |
| | | exerciseItemSet3.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getJudgeCount()); |
| | | exerciseItemSet3.setItemType((short) 3); |
| | |
| | | exerciseItemSet4.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getFillBlanksCount()); |
| | | exerciseItemSet4.setItemType((short) 4); |
| | | lstItemSets.add(exerciseItemSet4); |
| | | //将itemSets设置成页面要用到的ExamPaperSectionInfo设置 |
| | | //将itemSets设置成页面要用到的ExamPaperSectionInfo设置 |
| | | for (int i=0;i<lstItemSets.size();i++) { |
| | | ExamPaperSectionInfo examPaperSectionInfo=new ExamPaperSectionInfo(); |
| | | int itemCount = lstItemSets.get(i).getItemCount(); |
| | | if (itemCount>0) { |
| | | examPaperSectionInfo.setGroupId(groupId); |
| | | //设置开始结束 |
| | | //设置开始结束 |
| | | examPaperSectionInfo.setItemStartOrder((short)count); |
| | | //获取题目设置的count,下次循环用 |
| | | //获取题目设置的count,下次循环用 |
| | | count+=itemCount; |
| | | examPaperSectionInfo.setItemEndOrder((short)count); |
| | | //名称 |
| | | //名称 |
| | | examPaperSectionInfo.setSectionName(String.valueOf(lstItemSets.get(i).getItemType())); |
| | | examPaperSectionInfos.add(examPaperSectionInfo); |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取用户答题信息 |
| | | * 获取用户答题信息 |
| | | * @param recordId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取用户的考试记录,如果不存在则创建并返回 |
| | | * 获取用户的考试记录,如果不存在则创建并返回 |
| | | * @param examBatchInfo |
| | | * @param itemSets |
| | | * @param classId |
| | |
| | | short examType = examBatchInfo.getExamInfo().getExamType(); |
| | | int remainingSeconds = examBatchInfo.getExamInfo().getDurationMin()*60; |
| | | |
| | | // 查询是否有进行中的考试 |
| | | // 查询是否有进行中的考试 |
| | | ExerciseRecord record = this.findUnique( |
| | | "from ExerciseRecord where examBatchId=? and classId=? and userId = ? and deleteFlag is false ", |
| | | CollectionUtils.newList(examBatchId,classId,StringUtils.isNotEmpty(studentUserId) ? studentUserId : ClientUtils.getUserId()), |
| | |
| | | String cacheKey = "EXAM_DO_COUNT_".concat(examBatchId); |
| | | int doCount = this.getCachedRecordCount(cacheKey,examBatchId); |
| | | |
| | | //随机创建题目组 |
| | | //随机创建题目组 |
| | | if(checkIsRandomExam(examType)){ |
| | | String newGroupName = examId+"-"+examBatchNo+"-随机试卷题库-"+(++doCount); |
| | | //查题库 |
| | | String newGroupName = examId+"-"+examBatchNo+"-随机试卷题库-"+(++doCount); |
| | | //查题库 |
| | | List<ExerciseGroup> lstSourceGroup = queryExamGroups(examId, ExerciseExamReGroup.GROUP_TYPE_SOURCE); |
| | | String[] sourceGroupIds = QBeanUtils.listPropertyVal(lstSourceGroup, "groupId").toArray(new String[lstSourceGroup.size()]); |
| | | groupId = this.exerciseGroupService.doCreateRandomExerciseGroup(newGroupName,ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,sourceGroupIds,itemSets); |
| | |
| | | return record; |
| | | } |
| | | /** |
| | | * 创建补考考试记录 |
| | | * 创建补考考试记录 |
| | | * @param examBatchInfo |
| | | * @param itemSets |
| | | * @param studentUserId |
| | |
| | | short examType = examInfo.getExamType(); |
| | | int remainingSeconds = examInfo.getDurationMin()*60; |
| | | |
| | | //创建考试记录 |
| | | //创建考试记录 |
| | | String groupId = null; |
| | | String cacheKey = "EXAM_DO_COUNT_".concat(examId); |
| | | int doCount = this.getCachedRecordCount(cacheKey,examId); |
| | | |
| | | //随机创建题目组 |
| | | //随机创建题目组 |
| | | if(checkIsRandomExam(examType)){ |
| | | String newGroupName = examId+"-"+UUIDUtils.generateSpecialUuid(4)+"-随机试卷题库-"+(++doCount); |
| | | //查题库 |
| | | String newGroupName = examId+"-"+UUIDUtils.generateSpecialUuid(4)+"-随机试卷题库-"+(++doCount); |
| | | //查题库 |
| | | List<ExerciseGroup> lstSourceGroup = queryExamGroups(examId, ExerciseExamReGroup.GROUP_TYPE_SOURCE); |
| | | String[] sourceGroupIds = QBeanUtils.listPropertyVal(lstSourceGroup, "groupId").toArray(new String[lstSourceGroup.size()]); |
| | | groupId = this.exerciseGroupService.doCreateRandomExerciseGroup(newGroupName,ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,sourceGroupIds,itemSets); |
| | |
| | | return record; |
| | | } |
| | | |
| | | // 获取正在做试卷的学生数 |
| | | // 获取正在做试卷的学生数 |
| | | private int getCachedRecordCount(String cacheKey,String examBatchId){ |
| | | String cacheCount = stringRedisTemplate.opsForValue().get(cacheKey); |
| | | int doCount = StringUtils.isEmpty(cacheCount) ? 0 : Integer.valueOf(cacheCount); |
| | |
| | | record.setUserId(ClientUtils.getUserId()); |
| | | record.setOrgId(ClientUtils.getOrgId()); |
| | | |
| | | //获取考试题目统计信息,并保存 |
| | | //获取考试题目统计信息,并保存 |
| | | Map<String,Object> result = this.queryItemStatics(itemSets, groupId); |
| | | record.setTotalScore(new BigDecimal(examInfo.getTotalScore())); |
| | | record.setPassingScore(new BigDecimal(examInfo.getPassingScore())); |
| | |
| | | return record; |
| | | } |
| | | |
| | | //设置补考考试记录 |
| | | //设置补考考试记录 |
| | | private ExerciseRecord insertReExerRecord(ExamInfo examInfo,List<ExerciseItemSet> itemSets,String groupId,int remainingSeconds) { |
| | | // ExamInfo examInfo = examBatchInfo.getExamInfo(); |
| | | |
| | | ExerciseRecord record = new ExerciseRecord(); |
| | | record.setDeleteFlag(false); |
| | | record.setExerciseGroupId(groupId); |
| | | //因为没有批次,所有时间所有人都可以考,所以这里将批次ID设置成考试ID |
| | | //因为没有批次,所有时间所有人都可以考,所以这里将批次ID设置成考试ID |
| | | record.setExamBatchId(examInfo.getExamId()); |
| | | record.setDoCount(BigInteger.ZERO); |
| | | record.setCorrectCount(BigInteger.ZERO); |
| | | record.setTitleMaxNumber("0"); |
| | | record.setStatus("0"); |
| | | //不设置classID |
| | | //不设置classID |
| | | // record.setClassId(classId); |
| | | record.setRemainingSeconds(remainingSeconds); |
| | | record.setScore(BigDecimal.ZERO); |
| | | record.setUserId(ClientUtils.getUserId()); |
| | | record.setOrgId(ClientUtils.getOrgId()); |
| | | |
| | | //获取考试题目统计信息,并保存 |
| | | //获取考试题目统计信息,并保存 |
| | | Map<String,Object> result = this.queryItemStatics(itemSets, groupId); |
| | | record.setTotalScore(new BigDecimal(examInfo.getTotalScore())); |
| | | record.setPassingScore(new BigDecimal(examInfo.getPassingScore())); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取补考记录集合 |
| | | * 获取补考记录集合 |
| | | * @param examId |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Result getReExamRecordList(String examId, String userId) { |
| | | // 查询是否有进行中的考试 |
| | | // 查询是否有进行中的考试 |
| | | List<ExerciseRecord> exerciseRecords = this.find( |
| | | "from ExerciseRecord where examBatchId=? and userId = ? and deleteFlag is false ", |
| | | CollectionUtils.newList(examId, StringUtils.isNotEmpty(userId) ? userId : ClientUtils.getUserId()), |
| | |
| | | float subTotalScore = 0,objTotalScore=0; |
| | | int subItemCount=0,objItemCount=0; |
| | | |
| | | //如果是随机组卷 |
| | | //如果是随机组卷 |
| | | if(itemSets!=null && itemSets.size()>0){ |
| | | for(ExerciseItemSet s:itemSets){ |
| | | if(s.getItemType()==ExerciseItem.TYPE_ESSAY_QUESTION){ |
| | |
| | | |
| | | @Override |
| | | public int getExamCount(String classId, String userId) { |
| | | // 查询记录数 |
| | | // 查询记录数 |
| | | String hqlCount = "from ExamInfo i, ExamBatchInfo b,ExamBatchClassRe r WHERE " |
| | | + " i.examId=b.examId and b.examBatchId = r.examBatchId AND r.classId =:classId AND i.examStatus=:examStatus AND b.deleteFlag is false AND r.deleteFlag is false "; |
| | | int examCount = findCountByComplexHql(hqlCount, |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询考试关联的题目组 |
| | | * 查询考试关联的题目组 |
| | | * @param examId |
| | | * @param |
| | | * @return 题目组Map<id,> |
| | | * @return 题目组Map<id,> |
| | | */ |
| | | private List<ExerciseGroup> queryExamGroups(String examId,Short reType){ |
| | | return this.find( "select p from ExerciseExamReGroup g,ExerciseGroup p where g.groupId = p.groupId and g.examId=? and g.type=? and g.deleteFlag is false", |
| | |
| | | |
| | | |
| | | /** |
| | | * 查询考试关联的题目配置信息 |
| | | * 查询考试关联的题目配置信息 |
| | | * @param examId |
| | | * @param |
| | | * @return |
| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | /** |
| | | *作业完成情况 |
| | | *作业完成情况 |
| | | * |
| | | * @author kevin |
| | | * @history 2018-03-11 create kevin |
| | | * |
| | | */ |
| | | @Api(tags="作业完成情况管理接口") |
| | | @Api(tags="作业完成情况管理接口") |
| | | @Controller |
| | | @RequestMapping(value = "/exercise/complete") |
| | | public class ExerciseCompleteController { |
| | | //分页查询中,默认记录条数和页数 |
| | | //分页查询中,默认记录条数和页数 |
| | | private static final int DEFAULT_PAGE_SIZE=10; |
| | | private static final int DEFAULT_PAGE_NUM=1; |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 作业完成情况列表 |
| | | * 作业完成情况列表 |
| | | * */ |
| | | @ApiOperation(value = "作业完成情况列表", notes = "") |
| | | @ApiOperation(value = "作业完成情况列表", notes = "") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "keyword", value = "学生名称", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "status", value = "状态(0未提交,1待批阅,2已批阅,3需重写)", required = false, paramType="query", dataType = "Short"), |
| | | @ApiImplicitParam(name = "keyword", value = "学生名称", required = false, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = true, paramType="query", dataType = "String"), |
| | | @ApiImplicitParam(name = "status", value = "状态(0未提交,1待批阅,2已批阅,3需重写)", required = false, paramType="query", dataType = "Short"), |
| | | }) |
| | | @RequestMapping(value = "/list", method = RequestMethod.GET) |
| | | public @ResponseBody Result list(String keyword,String exerciseInfoId,Short status,Integer pageSize,Integer pageNum){ |
| | | pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE; |
| | | pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM; |
| | | |
| | | //读取作业信息 |
| | | //读取作业信息 |
| | | ExerciseInfo exerciseInfo = commonService.read(ExerciseInfo.class, exerciseInfoId); |
| | | |
| | | //总考试数量 |
| | | //总考试数量 |
| | | int totalCount = exerciseCompleteService.listCount(keyword == null ? "" : keyword.trim(),exerciseInfoId,status); |
| | | Pager pager = new Pager(pageSize,pageNum); |
| | | pager.setTotalCount(totalCount); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据不同的作业类型,返回作业完成情况及审批详情 |
| | | * 根据不同的作业类型,返回作业完成情况及审批详情 |
| | | * @param exerciseCompleteId |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "详情页面数据", notes = "") |
| | | @ApiImplicitParams({@ApiImplicitParam(name = "exerciseCompleteId", value = "作业完成情况id", required = true, paramType="query", dataType = "String")}) |
| | | @ApiOperation(value = "详情页面数据", notes = "") |
| | | @ApiImplicitParams({@ApiImplicitParam(name = "exerciseCompleteId", value = "作业完成情况id", required = true, paramType="query", dataType = "String")}) |
| | | @RequestMapping(value = "/detail", method = RequestMethod.GET) |
| | | public @ResponseBody Result detail(String exerciseCompleteId) { |
| | | return new Result(true,"",CollectionUtils.newObjectMap("detail",exerciseCompleteService.queryExerciseCompleteDetail(exerciseCompleteId))); |
| | | } |
| | | |
| | | /** |
| | | * 批阅 |
| | | * 批阅 |
| | | * @param exerciseCompleteInfo |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 批阅 |
| | | * 批阅 |
| | | * @param examInfo |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "批阅", notes = "") |
| | | @ApiOperation(value = "批阅", notes = "") |
| | | @RequestMapping(value = "/check", method = RequestMethod.POST) |
| | | public @ResponseBody Result checkExerciseComplateInfo(@RequestBody ExerciseCompleteInfo exerciseCompleteInfo) { |
| | | return exerciseCompleteService.updateExerciseComplete(exerciseCompleteInfo); |
| | | } |
| | | |
| | | /** |
| | | * 批阅下一个 |
| | | * 批阅下一个 |
| | | * @param examInfo |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "批阅下一个", notes = "") |
| | | @ApiImplicitParams({@ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = true, paramType="query", dataType = "String")}) |
| | | @ApiOperation(value = "批阅下一个", notes = "") |
| | | @ApiImplicitParams({@ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = true, paramType="query", dataType = "String")}) |
| | | @RequestMapping(value = "/checknext", method = RequestMethod.GET) |
| | | public @ResponseBody Result checkExerciseComplateInfo(String exerciseInfoId) { |
| | | String hql = "from ExerciseCompleteInfo where exerciseInfoId=? and completeStatus=? and deleteFlag is false order by studentNo asc"; |
| | |
| | | if(lastCompleteInfo!=null){ |
| | | return new Result(true,"",CollectionUtils.newObjectMap("detail",exerciseCompleteService.queryExerciseCompleteDetail(lastCompleteInfo.getExerciseCompleteId()))); |
| | | }else{ |
| | | return new Result(false,"已经没有待批阅的作业!"); |
| | | return new Result(false,"已经没有待批阅的作业!"); |
| | | } |
| | | } |
| | | |
| | |
| | | import com.qxueyou.scc.user.model.ExportUserScore; |
| | | |
| | | /** |
| | | * 练习题目控制 |
| | | * 练习题目控制 |
| | | * @author zhiyong |
| | | * |
| | | */ |
| | | @Controller |
| | | @RequestMapping(value = "/exercise/Exercise") |
| | | public class ExerciseController { |
| | | /** 日志 */ |
| | | /** 日志 */ |
| | | private static final Logger log = LogManager.getLogger("ExerciseController"); |
| | | |
| | | /** commonDAO */ |
| | | @Autowired |
| | | private CommonDAO commonDAO; |
| | | |
| | | /** 练习 service */ |
| | | /** 练习 service */ |
| | | @Autowired |
| | | private IExerciseService exerciseService; |
| | | |
| | | /** 练习导入 service */ |
| | | /** 练习导入 service */ |
| | | @Autowired |
| | | private IExercisePyService exercisePyService; |
| | | |
| | | /** 练习V2.0版本接口service */ |
| | | /** 练习V2.0版本接口service */ |
| | | @Autowired |
| | | private IExerciseVerService exerciseVerService; |
| | | |
| | | /** 练习V2.0版本接口service */ |
| | | /** 练习V2.0版本接口service */ |
| | | // @Autowired |
| | | // IConfigService cfg; |
| | | |
| | |
| | | @Autowired |
| | | IOssService ossService; |
| | | |
| | | /** 消息发送 service */ |
| | | /** 消息发送 service */ |
| | | // @Autowired |
| | | // IMsgVenderService easemobService; |
| | | |
| | | /** 组id */ |
| | | /** 组id */ |
| | | private static final String GROUP_ID = "groupId"; |
| | | |
| | | /** 做题记录id */ |
| | | /** 做题记录id */ |
| | | private static final String EXERCISE_RECORD_ID = "exerciseRecordId"; |
| | | |
| | | /** ---------------------------APP V2.0接口 start----------------------*/ |
| | | /** ---------------------------APP V2.0接口 start----------------------*/ |
| | | /** |
| | | * APP2.0: 获取家庭作业list |
| | | * APP2.0: 获取家庭作业list |
| | | * URL: /exercise/Exercise/homeWorkListNew |
| | | * |
| | | * |
| | | *请求参数={ |
| | | subjectId:课程id,//可选,用于高校版 |
| | | page:当前页,//必传,大于0 |
| | | limit:每页限制条数,//必传,大于0 |
| | | *请求参数={ |
| | | subjectId:课程id,//可选,用于高校版 |
| | | page:当前页,//必传,大于0 |
| | | limit:每页限制条数,//必传,大于0 |
| | | } |
| | | 返回参数=[ |
| | | 返回参数=[ |
| | | { |
| | | GROUP_ID:"组id", |
| | | "classId":班级id, |
| | | "courseId":科目id, |
| | | "orgId":机构id, |
| | | "subjectId":课程id, |
| | | "name":"组名", |
| | | "type":组类型 , |
| | | "updateTime":更新时间, |
| | | "answerUpdateTime":本套题答题更新时间, |
| | | "allCount":题目总数, |
| | | "exerciseTime":"考试时间", |
| | | EXERCISE_RECORD_ID:"记录id", |
| | | "doCount": 做题个数, |
| | | "correctCount": 正确个数, |
| | | "submitNumber":已提交人数(家庭作业), |
| | | "currTitleNumber":当前做题序号, |
| | | "status":做题状态(0:未提交 1:已提交), |
| | | "completionRate": 完成率, |
| | | "accuracy": 正确率, |
| | | "score": 分数, |
| | | "extendAllCount":错题本、收藏本总数 |
| | | GROUP_ID:"组id", |
| | | "classId":班级id, |
| | | "courseId":科目id, |
| | | "orgId":机构id, |
| | | "subjectId":课程id, |
| | | "name":"组名", |
| | | "type":组类型 , |
| | | "updateTime":更新时间, |
| | | "answerUpdateTime":本套题答题更新时间, |
| | | "allCount":题目总数, |
| | | "exerciseTime":"考试时间", |
| | | EXERCISE_RECORD_ID:"记录id", |
| | | "doCount": 做题个数, |
| | | "correctCount": 正确个数, |
| | | "submitNumber":已提交人数(家庭作业), |
| | | "currTitleNumber":当前做题序号, |
| | | "status":做题状态(0:未提交 1:已提交), |
| | | "completionRate": 完成率, |
| | | "accuracy": 正确率, |
| | | "score": 分数, |
| | | "extendAllCount":错题本、收藏本总数 |
| | | }, |
| | | ...循环多个 |
| | | ...循环多个 |
| | | ] |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="subjectId", required = false) String subjectId, |
| | | @RequestParam(value="page") int page, |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected) {// 0:全部 1:未开始 2:做题中 3:已提交 |
| | | @RequestParam(value="selected", required = false) Integer selected) {// 0:全部 1:未开始 2:做题中 3:已提交 |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_HOMEWORK, |
| | | null, page, limit, selected, null); |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 获取章节练习list |
| | | * APP2.0: 获取章节练习list |
| | | * URL: /exercise/Exercise/chapterListNew |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected, String chapterId) { |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_CHAPTER_ITEM, |
| | | subjectId, page, limit, selected, chapterId); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取模拟考试list |
| | | * APP2.0: 获取模拟考试list |
| | | * URL: /exercise/Exercise/examsListNew |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected) { |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_MOCK_EXAM, |
| | | null, page, limit, selected, null); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习list |
| | | * APP2.0: 获取专题练习list |
| | | * URL: /exercise/Exercise/topicListNew |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected) { |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_EXERCISE_TOPIC, |
| | | null, page, limit, selected, null); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习list |
| | | * APP2.0: 获取专题练习list |
| | | * URL: /exercise/Exercise/freeListNew |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected) { |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_EXERCISE_FREE, |
| | | null, page, limit, selected, null); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取练习列表数据 |
| | | * 获取练习列表数据 |
| | | * @param exerType |
| | | * @param subjectId |
| | | * @param page |
| | | * @param limit |
| | | * @param selected // 0:全部 1:未开始 2:做题中 3:已提交 |
| | | * @param selected // 0:全部 1:未开始 2:做题中 3:已提交 |
| | | * @return |
| | | */ |
| | | private List<ExerGroupResponseData> getExericseListData(short exerType, |
| | |
| | | int pageSize = limit; |
| | | Integer iSelected = selected; |
| | | |
| | | // 1.分页信息 |
| | | // 1.分页信息 |
| | | if(pageNum < 1){ |
| | | pageNum = 1; |
| | | } |
| | | if(pageSize < 1){ |
| | | pageSize = 1; |
| | | } |
| | | if(iSelected == null){//为空设置为 全部 |
| | | if(iSelected == null){//为空设置为 全部 |
| | | iSelected = 0; |
| | | } |
| | | Pager pager = new Pager(); |
| | | pager.setPageNum(pageNum); |
| | | pager.setPageSize(limit); |
| | | |
| | | // 2.得到列表数据 |
| | | // 2.得到列表数据 |
| | | List<ExerGroupResponseData> lstResult = exerciseVerService.queryExericseListData(exerType,subjectId,pager,iSelected, chapterId); |
| | | |
| | | if(null == lstResult){// 结果转换成 [] |
| | | if(null == lstResult){// 结果转换成 [] |
| | | lstResult = new ArrayList<ExerGroupResponseData>(); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 查询做题记录 |
| | | * APP2.0: 查询做题记录 |
| | | * URL: /exercise/Exercise/exerRecord |
| | | * 请求参数={ |
| | | exerType:练习类型,//必传 |
| | | subjectId:课程id,//可选,用于高校版 |
| | | page:当前页,//必传,大于0 |
| | | limit:每页限制条数,//必传,大于0 |
| | | * 请求参数={ |
| | | exerType:练习类型,//必传 |
| | | subjectId:课程id,//可选,用于高校版 |
| | | page:当前页,//必传,大于0 |
| | | limit:每页限制条数,//必传,大于0 |
| | | } |
| | | |
| | | 返回参数=[ |
| | | 返回参数=[ |
| | | { |
| | | GROUP_ID:"组id", |
| | | "classId":班级id, |
| | | "courseId":科目id, |
| | | "orgId":机构id, |
| | | "subjectId":课程id, |
| | | "name":"组名", |
| | | "type":组类型 , |
| | | "updateTime":更新时间, |
| | | "answerUpdateTime":本套题答题更新时间, |
| | | "allCount":题目总数, |
| | | "exerciseTime":"考试时间", |
| | | EXERCISE_RECORD_ID:"记录id", |
| | | "doCount": 做题个数, |
| | | "correctCount": 正确个数, |
| | | "submitNumber":已提交人数(家庭作业), |
| | | "currTitleNumber":当前做题序号, |
| | | "status":做题状态(0:未提交 1:已提交), |
| | | "completionRate": 完成率, |
| | | "accuracy": 正确率, |
| | | "score": 分数, |
| | | "extendAllCount":错题本、收藏本总数 |
| | | GROUP_ID:"组id", |
| | | "classId":班级id, |
| | | "courseId":科目id, |
| | | "orgId":机构id, |
| | | "subjectId":课程id, |
| | | "name":"组名", |
| | | "type":组类型 , |
| | | "updateTime":更新时间, |
| | | "answerUpdateTime":本套题答题更新时间, |
| | | "allCount":题目总数, |
| | | "exerciseTime":"考试时间", |
| | | EXERCISE_RECORD_ID:"记录id", |
| | | "doCount": 做题个数, |
| | | "correctCount": 正确个数, |
| | | "submitNumber":已提交人数(家庭作业), |
| | | "currTitleNumber":当前做题序号, |
| | | "status":做题状态(0:未提交 1:已提交), |
| | | "completionRate": 完成率, |
| | | "accuracy": 正确率, |
| | | "score": 分数, |
| | | "extendAllCount":错题本、收藏本总数 |
| | | }, |
| | | ...循环多个 |
| | | ...循环多个 |
| | | ] |
| | | * @param page |
| | | * @param start |
| | |
| | | int pageNum = page; |
| | | int pageSize = limit; |
| | | |
| | | // 1.分页信息 |
| | | // 1.分页信息 |
| | | if(pageNum < 1){ |
| | | pageNum = 1; |
| | | } |
| | |
| | | |
| | | |
| | | StringBuffer hql = new StringBuffer(512); |
| | | // 2.查询结果 |
| | | // 2.查询结果 |
| | | hql.append("select g," |
| | | + " r.recordId,r.updateTime,r.doCount,r.titleMaxNumber,r.status," |
| | | + " r.correctCount,r.completionRate,r.score,r.accuracy,e.repeatFlag,e.classAccuracy, " |
| | |
| | | |
| | | List<ExerGroupResponseData> lstResult = new ArrayList<ExerGroupResponseData>(lstRecord.size()); |
| | | |
| | | // 3.重组字段 |
| | | // 3.重组字段 |
| | | for(Object[] obj:lstRecord){ |
| | | |
| | | // 组装练习做题记录列表数据 |
| | | // 组装练习做题记录列表数据 |
| | | lstResult.add(packagingExerciseRecordListData(exerType, obj)); |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 组装练习做题记录列表数据 |
| | | * 组装练习做题记录列表数据 |
| | | * @param exerType |
| | | * @param obj |
| | | * @param group |
| | |
| | | ExerciseGroup group = (ExerciseGroup)obj[0]; |
| | | ExerGroupResponseData result = new ExerGroupResponseData(); |
| | | |
| | | // 赋值字段值 |
| | | // 赋值字段值 |
| | | BeanUtils.copyProperties(group, result); |
| | | |
| | | result.setExerciseRecordId(String.valueOf(obj[1])); |
| | |
| | | result.setCurrTitleNumber(String.valueOf(obj[4])); |
| | | result.setStatus(String.valueOf(obj[5])); |
| | | |
| | | // 组装练习做题记录部分参数 |
| | | // 组装练习做题记录部分参数 |
| | | packagingExerciseRecordListParam(obj, result); |
| | | |
| | | result.setExtendAllCount(group.getAllCount()); |
| | | |
| | | if(obj[10] == null){ |
| | | if(exerType == ExerciseGroup.TYPE_HOMEWORK){// 家庭作业 |
| | | if(exerType == ExerciseGroup.TYPE_HOMEWORK){// 家庭作业 |
| | | result.setRepeatFlag(false); |
| | | }else{ |
| | | result.setRepeatFlag(true); |
| | | } |
| | | }else{ |
| | | result.setRepeatFlag(!(boolean)obj[10]);// true 可以重做 false不能重做 |
| | | result.setRepeatFlag(!(boolean)obj[10]);// true 可以重做 false不能重做 |
| | | } |
| | | |
| | | // 班级正确率 |
| | | // 班级正确率 |
| | | result.setClassAccuracy(obj[11] == null ? "--" :obj[11]+"%"); |
| | | |
| | | if(exerType == ExerciseGroup.TYPE_EXERCISE_FREE |
| | | || exerType == ExerciseGroup.TYPE_MOCK_EXAM ){// 自由练习 模拟考试 |
| | | || exerType == ExerciseGroup.TYPE_MOCK_EXAM ){// 自由练习 模拟考试 |
| | | result.setExerciseTime(String.valueOf(obj[12])); |
| | | result.setExerciseStrategy(String.valueOf(obj[13])); |
| | | result.setExerciseSource(String.valueOf(obj[14])); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 组装练习做题记录部分参数 拆分方法 |
| | | * 组装练习做题记录部分参数 拆分方法 |
| | | * @param obj |
| | | * @param result |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取家庭作业练习题目数据 |
| | | * APP2.0: 获取家庭作业练习题目数据 |
| | | * URL: /exercise/Exercise/homeworkExercise |
| | | * |
| | | * 请求参数={ |
| | | groupId:组id,//必传 |
| | | exerciseRecordId:当前页,//必传,没有传"" |
| | | getExercise:是否更新题目,//必传, |
| | | boolean值,没有传false |
| | | getAnswer:是否更新答案,//必传, |
| | | boolean值,没有传false |
| | | * 请求参数={ |
| | | groupId:组id,//必传 |
| | | exerciseRecordId:当前页,//必传,没有传"" |
| | | getExercise:是否更新题目,//必传, |
| | | boolean值,没有传false |
| | | getAnswer:是否更新答案,//必传, |
| | | boolean值,没有传false |
| | | } |
| | | |
| | | 返回参数={ |
| | | "items":[// 题目集合 |
| | | 返回参数={ |
| | | "items":[// 题目集合 |
| | | { |
| | | "exerciseId":练习id, |
| | | "exerciseId":练习id, |
| | | "chapterId":null, |
| | | "lessonId":null, |
| | | "title":标题, |
| | | "type":题目类型, |
| | | "answer":正确答案, |
| | | "title":标题, |
| | | "type":题目类型, |
| | | "answer":正确答案, |
| | | "options":[ |
| | | { |
| | | "optionId":选项id, |
| | | "optionId":选项id, |
| | | "checked":true, |
| | | "content":内容, |
| | | "optionOrder":题目序号, |
| | | "exerciseItemId":"练习id", |
| | | "content":内容, |
| | | "optionOrder":题目序号, |
| | | "exerciseItemId":"练习id", |
| | | "imgs":[ |
| | | { |
| | | "imgId":"ͼƬid", |
| | | "imgId":"图片id", |
| | | "exerciseObjectId":null, |
| | | "imgPath":图片路径, |
| | | "imgOrder":排序, |
| | | "objectType":图片类型 1:题目 2:选项 |
| | | "imgPath":图片路径, |
| | | "imgOrder":排序, |
| | | "objectType":图片类型 1:题目 2:选项 |
| | | }, |
| | | ... 循环多个 |
| | | ... 循环多个 |
| | | ] |
| | | }, |
| | | ... 循环多个 |
| | | ... 循环多个 |
| | | ], |
| | | "scores":null, |
| | | "itemNo":null, |
| | | "analisisResult":{ |
| | | "allAccuracy":全站统计 正确率, |
| | | "analysis":"解析", |
| | | "submitAllNumber":全站 提交总数, |
| | | "usualFaultAnswers":易错题, |
| | | "allAccuracy":全站统计 正确率, |
| | | "analysis":"解析", |
| | | "submitAllNumber":全站 提交总数, |
| | | "usualFaultAnswers":易错题, |
| | | "exerciseAnalisisUId":null, |
| | | "accuracy":个人统计 正确率, |
| | | "submitNumber":个人统计 提交总数, |
| | | "submitErrorNumber":个人统计 提交错误总数, |
| | | "accuracy":个人统计 正确率, |
| | | "submitNumber":个人统计 提交总数, |
| | | "submitErrorNumber":个人统计 提交错误总数, |
| | | }, |
| | | "imgs":[ |
| | | { |
| | | "imgId":"ͼƬid", |
| | | "imgId":"图片id", |
| | | "exerciseObjectId":null, |
| | | "imgPath":图片路径, |
| | | "imgOrder":排序, |
| | | "objectType":图片类型 1:题目 2:选项 |
| | | "imgPath":图片路径, |
| | | "imgOrder":排序, |
| | | "objectType":图片类型 1:题目 2:选项 |
| | | }, |
| | | ... 循环多个 |
| | | ... 循环多个 |
| | | ], |
| | | "commentFlag": null, |
| | | } |
| | | ], |
| | | "answers":[// 个人答案集合 |
| | | "answers":[// 个人答案集合 |
| | | { |
| | | "answerUId":"主键id", |
| | | "answer":选择答案 如:多选为(A,B,C), |
| | | "answerUId":"主键id", |
| | | "answer":选择答案 如:多选为(A,B,C), |
| | | "correct":0, |
| | | "exerciseItemId":练习id, |
| | | EXERCISE_RECORD_ID:记录id, |
| | | "userId":用户id |
| | | "exerciseItemId":练习id, |
| | | EXERCISE_RECORD_ID:记录id, |
| | | "userId":用户id |
| | | }, |
| | | ... 循环多个 |
| | | ... 循环多个 |
| | | ] |
| | | } |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "homeworkExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_HOMEWORK); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取模拟考试练习题目数据 |
| | | * APP2.0: 获取模拟考试练习题目数据 |
| | | * URL: /exercise/Exercise/examExercise |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "examExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_MOCK_EXAM); |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 获取章节练习题目数据 |
| | | * APP2.0: 获取章节练习题目数据 |
| | | * URL: /exercise/Exercise/chapterExercise |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "chapterExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_CHAPTER_ITEM); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * URL: /exercise/Exercise/topicExercise |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "topicExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_EXERCISE_TOPIC); |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * URL: /exercise/Exercise/freeExercise |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "freeExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_EXERCISE_FREE); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * URL: /exercise/Exercise/newFreeExercise |
| | | * |
| | | * { |
| | | * source: 练习来源(1:练习题库 2:考试题库 3:家庭作业) 多个以逗号分开 |
| | | strategy:做题方式(1:未做题优先 2:错题优先) |
| | | mode:做题模式(1:练习模式 2:考试模式) |
| | | count:数量(30 50 100 200) |
| | | exerciseTime:练习时间 |
| | | * source: 练习来源(1:练习题库 2:考试题库 3:家庭作业) 多个以逗号分开 |
| | | strategy:做题方式(1:未做题优先 2:错题优先) |
| | | mode:做题模式(1:练习模式 2:考试模式) |
| | | count:数量(30 50 100 200) |
| | | exerciseTime:练习时间 |
| | | * } |
| | | * |
| | | * @return |
| | |
| | | return null; |
| | | } |
| | | |
| | | // 根据条件获取自由练习 |
| | | // 根据条件获取自由练习 |
| | | ExerItemResponseData result = exerciseVerService.doGetFreeExercise( |
| | | null, source, strategy, mode, count, exerciseTime); |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 提交练习答案 |
| | | * APP2.0: 提交练习答案 |
| | | * URL: /exercise/Exercise/exerAnswers |
| | | * |
| | | * 请求参数={ |
| | | "exerciseGroupId": 组id, |
| | | EXERCISE_RECORD_ID: 记录id, |
| | | * 请求参数={ |
| | | "exerciseGroupId": 组id, |
| | | EXERCISE_RECORD_ID: 记录id, |
| | | "exerciseExtendId": null, |
| | | "currTitleNum": "当前题号", |
| | | "status": ״̬, |
| | | "type": 练习类型,// 整型 |
| | | "doCount": 练习类型, |
| | | "correctCount": 正确个数, |
| | | "allCount":题目总数, |
| | | "currTitleNum": "当前题号", |
| | | "status": 状态, |
| | | "type": 练习类型,// 整型 |
| | | "doCount": 练习类型, |
| | | "correctCount": 正确个数, |
| | | "allCount":题目总数, |
| | | "items": [ |
| | | { |
| | | "exerciseId": "练习id", |
| | | "type": 练习类型,// 整数型 |
| | | "answer": "选择答案", |
| | | "correct": 是否正确(0:错误 1:正确 2:未知) |
| | | "exerciseId": "练习id", |
| | | "type": 练习类型,// 整数型 |
| | | "answer": "选择答案", |
| | | "correct": 是否正确(0:错误 1:正确 2:未知) |
| | | }, |
| | | { |
| | | "exerciseId": "练习id", |
| | | "type": 练习类型, |
| | | "answer": "选择答案", |
| | | "correct": 是否正确(0:错误 1:正确 2:未知) |
| | | "exerciseId": "练习id", |
| | | "type": 练习类型, |
| | | "answer": "选择答案", |
| | | "correct": 是否正确(0:错误 1:正确 2:未知) |
| | | } |
| | | ] |
| | | } |
| | | |
| | | 返回参数={ |
| | | "success":true,//true:成功 false:失败 |
| | | "attrs":{EXERCISE_RECORD_ID:练习记录id, |
| | | "updateTime":修改时间 |
| | | 返回参数={ |
| | | "success":true,//true:成功 false:失败 |
| | | "attrs":{EXERCISE_RECORD_ID:练习记录id, |
| | | "updateTime":修改时间 |
| | | }, |
| | | "msg":"提交成功",//结果信息 |
| | | "msg":"提交成功",//结果信息 |
| | | } |
| | | |
| | | * |
| | |
| | | public @ResponseBody Object doSubmitExerAnswer( |
| | | @RequestParam(value = "answers") String answers) { |
| | | |
| | | // 用户本次做题提交的数据 |
| | | // 用户本次做题提交的数据 |
| | | List<ExerciseItemAnswerData> lstAnswers = null; |
| | | |
| | | Result result = new Result(false); |
| | |
| | | try { |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | |
| | | // 装换json到对象 |
| | | // 装换json到对象 |
| | | ExerciseSubmitAnswerData answerData = mapper.readValue(answers, ExerciseSubmitAnswerData.class); |
| | | |
| | | lstAnswers = answerData.getItems(); |
| | | |
| | | // 记录id |
| | | // 记录id |
| | | String initExerciseRecordId = answerData.getExerciseRecordId(); |
| | | |
| | | if(lstAnswers.isEmpty() |
| | |
| | | initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | | ExerciseDataSubmitLog.STATUS_FAILED, "/exercise/Exercise/exerAnswers"); |
| | | |
| | | return new Result(false,"提交数据异常"); |
| | | return new Result(false,"提交数据异常"); |
| | | } |
| | | |
| | | // 1.---------记录提交的数据日志 |
| | | // 记录提交的数据日志 |
| | | // 1.---------记录提交的数据日志 |
| | | // 记录提交的数据日志 |
| | | String exerciseDataLogId = exerciseVerService.doSaveExerciseDataSubmitLog(answers, |
| | | initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | | ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerAnswers"); |
| | | |
| | | // 2.-------- 提交答案 |
| | | // 操作练习数据 |
| | | // 2.-------- 提交答案 |
| | | // 操作练习数据 |
| | | Map<String,Object> resultMap = exerciseVerService.doOperExerciseAnswerData(answerData); |
| | | |
| | | result = new Result(true, "答案提交成功"); |
| | | result = new Result(true, "答案提交成功"); |
| | | result.setData(resultMap); |
| | | |
| | | // 3.-------- 班级统计数据 |
| | | // 3.-------- 班级统计数据 |
| | | if(resultMap.get("exerciseGroupId") != null){ |
| | | |
| | | String exerciseGroupId = String.valueOf(resultMap.get("exerciseGroupId")); |
| | | |
| | | // 2.发送班级排名请求 |
| | | // 2.发送班级排名请求 |
| | | exerciseVerService.sendUpdateClassRankMsg(exerciseGroupId); |
| | | |
| | | // 3.发送 题目的全站统计 、个人统计、班级正确率请求消息 |
| | | // 3.发送 题目的全站统计 、个人统计、班级正确率请求消息 |
| | | exerciseVerService.sendUpdateExerItemStatisticsMsg(exerciseGroupId, answerData); |
| | | //exerciseVerService.doStatisUserExerciseItemData(ClientUtils.getUserId(), ClientUtils.getUserName(), answerData); |
| | | } |
| | | |
| | | // 4.---------更新本次提交的数据日志exerciseRecordId |
| | | // 4.---------更新本次提交的数据日志exerciseRecordId |
| | | if(StringUtils.isBlank(initExerciseRecordId) |
| | | && resultMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交 更新日志记录id |
| | | && resultMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交 更新日志记录id |
| | | |
| | | exerciseRecordId = String.valueOf(resultMap.get(EXERCISE_RECORD_ID)); |
| | | |
| | |
| | | |
| | | } catch (Exception e) { |
| | | |
| | | result = new Result(false, "提交练习答案请求异常"); |
| | | log.error("提交练习答案请求异常===",e); |
| | | result = new Result(false, "提交练习答案请求异常"); |
| | | log.error("提交练习答案请求异常===",e); |
| | | |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(answers, |
| | | exerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 提交练习答案 |
| | | * APP2.0: 提交练习答案 |
| | | * URL: /exercise/Exercise/exerAnswers |
| | | * |
| | | * 请求参数=[{ |
| | | "exerciseGroupId": 组id, |
| | | EXERCISE_RECORD_ID: 记录id, |
| | | * 请求参数=[{ |
| | | "exerciseGroupId": 组id, |
| | | EXERCISE_RECORD_ID: 记录id, |
| | | "exerciseExtendId": null, |
| | | "currTitleNum": "当前题号", |
| | | "status": ״̬, |
| | | "type": 练习类型,// 整型 |
| | | "doCount": 练习类型, |
| | | "correctCount": 正确个数, |
| | | "allCount":题目总数, |
| | | "currTitleNum": "当前题号", |
| | | "status": 状态, |
| | | "type": 练习类型,// 整型 |
| | | "doCount": 练习类型, |
| | | "correctCount": 正确个数, |
| | | "allCount":题目总数, |
| | | "items": [ |
| | | { |
| | | "exerciseId": "练习id", |
| | | "type": 练习类型,// 整数型 |
| | | "answer": "选择答案", |
| | | "correct": 是否正确(0:错误 1:正确 2:未知) |
| | | "exerciseId": "练习id", |
| | | "type": 练习类型,// 整数型 |
| | | "answer": "选择答案", |
| | | "correct": 是否正确(0:错误 1:正确 2:未知) |
| | | }, |
| | | { |
| | | "exerciseId": "练习id", |
| | | "type": 练习类型, |
| | | "answer": "选择答案", |
| | | "correct": 是否正确(0:错误 1:正确 2:未知) |
| | | "exerciseId": "练习id", |
| | | "type": 练习类型, |
| | | "answer": "选择答案", |
| | | "correct": 是否正确(0:错误 1:正确 2:未知) |
| | | } |
| | | ] |
| | | }, |
| | | ... |
| | | ] |
| | | |
| | | 返回参数={"success":true,//true:成功 false:失败 |
| | | "attrs":[{EXERCISE_RECORD_ID:练习记录id, |
| | | exerciseGroupId:练习组id, |
| | | isNewRecord:是否为新增的record(true:是 false:否) |
| | | "updateTime":修改时间 |
| | | 返回参数={"success":true,//true:成功 false:失败 |
| | | "attrs":[{EXERCISE_RECORD_ID:练习记录id, |
| | | exerciseGroupId:练习组id, |
| | | isNewRecord:是否为新增的record(true:是 false:否) |
| | | "updateTime":修改时间 |
| | | },...], |
| | | "msg":"提交成功",//结果信息 |
| | | "msg":"提交成功",//结果信息 |
| | | } |
| | | |
| | | * |
| | |
| | | public @ResponseBody Object doSubmitMutiExerAnswer( |
| | | @RequestParam(value = "answers") String answers) { |
| | | |
| | | // 用户本次做题提交的数据 |
| | | // 用户本次做题提交的数据 |
| | | List<ExerciseSubmitAnswerData> lstRecord = null; |
| | | List<ExerciseItemAnswerData> lstAnswers= null; |
| | | String exerciseRecordId = null; |
| | |
| | | try { |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | |
| | | // 装换json到对象 |
| | | // 装换json到对象 |
| | | ExerciseSubmitAnswerDataList answerDataList = mapper.readValue(answers, ExerciseSubmitAnswerDataList.class); |
| | | |
| | | lstRecord = answerDataList.getDatas(); |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 记录id |
| | | // 记录id |
| | | String initExerciseRecordId = answerData.getExerciseRecordId(); |
| | | |
| | | // 记录提交的数据日志 |
| | | // 记录提交的数据日志 |
| | | String recordData = JSONObject.toJSONString(answerData); |
| | | |
| | | lstAnswers = answerData.getItems(); |
| | | |
| | | if(lstAnswers.isEmpty() |
| | | && !ExerciseRecord.STATUS_SUBMIT.equals(answerData.getStatus()) |
| | | && answerData.getSubmitType() != 1){// 仅提交 或仅仅本地无网重做 |
| | | && answerData.getSubmitType() != 1){// 仅提交 或仅仅本地无网重做 |
| | | |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(recordData, |
| | | initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 1.---------记录提交的数据日志 |
| | | // 1.---------记录提交的数据日志 |
| | | String exerciseDataLogId = exerciseVerService.doSaveExerciseDataSubmitLog(recordData, |
| | | initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | | ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerMutiAnswers"); |
| | | |
| | | // 2.-------- 提交答案 |
| | | // 操作练习数据 |
| | | // 2.-------- 提交答案 |
| | | // 操作练习数据 |
| | | returnMap = exerciseVerService.doOperExerciseAnswerData(answerData); |
| | | if(StringUtils.isBlank(initExerciseRecordId)){// 表示recordId为新增 |
| | | if(StringUtils.isBlank(initExerciseRecordId)){// 表示recordId为新增 |
| | | returnMap.put("isNewRecord", true); |
| | | }else{ |
| | | returnMap.put("isNewRecord", false); |
| | | } |
| | | |
| | | resultList.add(returnMap); |
| | | // 3.-------- 班级统计数据; |
| | | // 3.-------- 班级统计数据; |
| | | if(returnMap.get("exerciseGroupId") != null){ |
| | | |
| | | String exerciseGroupId = String.valueOf(returnMap.get("exerciseGroupId")); |
| | | |
| | | // 2.发送班级排名请求 |
| | | // 2.发送班级排名请求 |
| | | exerciseVerService.sendUpdateClassRankMsg(exerciseGroupId); |
| | | |
| | | // 3.发送 题目的全站统计 个人统计请求消息 |
| | | // 3.发送 题目的全站统计 个人统计请求消息 |
| | | exerciseVerService.sendUpdateExerItemStatisticsMsg(exerciseGroupId, answerData); |
| | | } |
| | | |
| | | // 4.---------更新本次提交的数据日志exerciseRecordId |
| | | // 4.---------更新本次提交的数据日志exerciseRecordId |
| | | if(StringUtils.isBlank(initExerciseRecordId) |
| | | && returnMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交 更新日志记录id |
| | | && returnMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交 更新日志记录id |
| | | |
| | | exerciseRecordId = String.valueOf(returnMap.get(EXERCISE_RECORD_ID)); |
| | | |
| | |
| | | |
| | | resultMap.put("success", true); |
| | | resultMap.put("attrs", resultList); |
| | | resultMap.put("msg", "提交成功"); |
| | | resultMap.put("msg", "提交成功"); |
| | | |
| | | } catch (Exception e) { |
| | | |
| | | log.error("提交练习答案请求异常===",e); |
| | | resultMap.put("msg", "提交练习答案请求异常"); |
| | | log.error("提交练习答案请求异常===",e); |
| | | resultMap.put("msg", "提交练习答案请求异常"); |
| | | |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(answers, |
| | | "exerMutiAnswers", ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 更新练习家庭作业、模拟考试是否提交 |
| | | * APP2.0: 更新练习家庭作业、模拟考试是否提交 |
| | | * URL: /exercise/Exercise/updateHomeExerSubmitNew |
| | | * |
| | | * @param exerciseRecordId 练习记录ID |
| | | * @param exerciseRecordId 练习记录ID |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "updateHomeExerSubmitNew", method = RequestMethod.GET) |
| | |
| | | ExerciseRecord record = commonDAO.read(ExerciseRecord.class, exerciseRecordId); |
| | | if(record == null |
| | | || !ClientUtils.getUserId().equals(record.getUserId())){ |
| | | return new Result(false, "非法操作,不是当前用户操作"); |
| | | return new Result(false, "非法操作,不是当前用户操作"); |
| | | } |
| | | |
| | | record.setStatus(ExerciseRecord.STATUS_SUBMIT); |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 更新练习家庭作业、模拟考试是否提交 |
| | | * APP2.0: 更新练习家庭作业、模拟考试是否提交 |
| | | * URL: /exercise/Exercise/updateExerciseRecord |
| | | * |
| | | * @param exerciseRecordId 练习记录ID |
| | | * @param exerciseRecordId 练习记录ID |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "updateExerciseRecord", method = RequestMethod.GET) |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 更新练习作业题号 app端重新开始做题 |
| | | * APP2.0: 更新练习作业题号 app端重新开始做题 |
| | | * URL: /exercise/Exercise/updateNewExerRecordNew |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "updateNewExerRecordNew", method = RequestMethod.GET) |
| | |
| | | |
| | | Map<String,Object> map = exerciseVerService.doInsertExerRecord(groupId); |
| | | |
| | | Result result = new Result(true, "状态更新成功"); |
| | | Result result = new Result(true, "状态更新成功"); |
| | | result.setData(map); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 题目答案分析 |
| | | * APP2.0: 题目答案分析 |
| | | * URL: /exercise/Exercise/itemstatisics |
| | | * |
| | | * |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "itemStatisics", method = RequestMethod.GET) |
| | | public @ResponseBody List<Map<String, Object>> doQueryExerciseItemStatisics( |
| | | @RequestParam(value = GROUP_ID) String groupId) { |
| | | |
| | | // 查询结果 |
| | | // 查询结果 |
| | | List<Map<String, Object>> resultLst = exerciseVerService.queryExerciseItemStatisics(groupId); |
| | | |
| | | return resultLst; |
| | |
| | | |
| | | |
| | | |
| | | /** -----------------------------------------------APP V2.0接口 end--------------------------------------------------------*/ |
| | | /** -----------------------------------------------APP V2.0接口 end--------------------------------------------------------*/ |
| | | |
| | | |
| | | /**------------------------------ web 后端------------------------------------------------------------------------*/ |
| | | /**------------------------------ web 后端------------------------------------------------------------------------*/ |
| | | |
| | | /** |
| | | * 练习管理主页 |
| | | * 练习管理主页 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 机构练习管理主页 |
| | | * 机构练习管理主页 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * (后台管理系统) |
| | | * |
| | | * 练习管理列表,获取列表数据 |
| | | * 练习管理列表,获取列表数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | sql = sql.concat(" order by g.order_num asc"); |
| | | |
| | | //剔除互动及教学评估 |
| | | //剔除互动及教学评估 |
| | | List<ExerciseGroup> result = new ArrayList<ExerciseGroup>(); |
| | | if(StringUtils.isNotBlank(tid)){ |
| | | result = exerciseService.queryExerciceGroupList(sql, CollectionUtils.newList(ExerciseGroup.TYPE_EXERCISE_FREE, |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * (后台管理系统) |
| | | * |
| | | * 机构练习管理列表,获取列表数据 |
| | | * 机构练习管理列表,获取列表数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查看练习已经指定的机构和班级 |
| | | * 查看练习已经指定的机构和班级 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | return result; |
| | | } |
| | | /** |
| | | * 获取练习组数据 |
| | | * 获取练习组数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取练习数据 |
| | | * 获取练习数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取练习数据 |
| | | * 获取练习数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * 删除练习组(优化) |
| | | * (后台管理系统) |
| | | * 删除练习组(优化) |
| | | * |
| | | * 更新20150907:更新习题组最后修改时间 |
| | | * 更新20150907:更新习题组最后修改时间 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "deleteNew", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * 删除练习组(优化) |
| | | * (后台管理系统) |
| | | * 删除练习组(优化) |
| | | * |
| | | * 更新20150907:更新习题组最后修改时间 |
| | | * 更新20150907:更新习题组最后修改时间 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "deleteOrg", method = RequestMethod.POST) |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取习题列表 |
| | | * 获取习题列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * 管理员同步习题到班级 |
| | | * (后台管理系统) |
| | | * 管理员同步习题到班级 |
| | | * |
| | | * @param exerciseItemId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * 增加习题 |
| | | * (后台管理系统) |
| | | * 增加习题 |
| | | * |
| | | * 更新20150617:更新习题组最后修改时间 |
| | | * 更新20150617:更新习题组最后修改时间 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "item/addOrUpdate", method = RequestMethod.POST) |
| | |
| | | createItemOption(getOptionOrder(type,'N'),params.getOptionN(), checkN, params.getOptionN_Id(), params.getOptionN_imgIds(), lstOptions); |
| | | createItemOption(getOptionOrder(type,'O'),params.getOptionO(), checkO, params.getOptionO_Id(), params.getOptionO_imgIds(), lstOptions); |
| | | |
| | | // 得到正确答案 |
| | | // 得到正确答案 |
| | | if(StringUtils.isBlank(params.getOptionE())){ |
| | | checkE=false; |
| | | } |
| | |
| | | item.setTitle(params.getTitle()); |
| | | item.setType(type); |
| | | item.setImgs(getExerciseTitleImgs(params.getTitle_imgsIds())); |
| | | if(groupId.contains("#")){// groupid结尾多# |
| | | if(groupId.contains("#")){// groupid结尾多# |
| | | groupId = groupId.substring(0, groupId.indexOf('#')); |
| | | } |
| | | // 练习不发系统通知 |
| | | // 练习不发系统通知 |
| | | //sendSysNotice(0, groupId); |
| | | return exerciseService.insertExerciseItem(groupId, item, lstOptions,params.getAnalysis()); |
| | | }else{ |
| | |
| | | item.setAnswer(answer); |
| | | item.setTitle(params.getTitle()); |
| | | item.setType(type); |
| | | // 练习不发系统通知 |
| | | // 练习不发系统通知 |
| | | //sendSysNotice(1, groupId); |
| | | return exerciseService.updateExerciseItem(item, lstOptions,params.getAnalysis()); |
| | | } |
| | |
| | | |
| | | |
| | | /** |
| | | * 得到正确答案 |
| | | * 得到正确答案 |
| | | * @param checkA |
| | | * @param checkB |
| | | * @param checkC |
| | |
| | | private String getCorrectAnswer(ExerciseAddItemParams params,short type){ |
| | | StringBuffer answer = new StringBuffer(64); |
| | | |
| | | if(ExerciseItem.TYPE_TRUE_OR_FALSE==type){//判断 |
| | | if(ExerciseItem.TYPE_TRUE_OR_FALSE==type){//判断 |
| | | return params.getCheckA()?"True":params.getCheckB()?"False":null; |
| | | } |
| | | |
| | |
| | | answer.append(',').append('B'); |
| | | } |
| | | |
| | | // 组装余下正确答案 |
| | | // 组装余下正确答案 |
| | | packagingCorrectAnswer(params, answer); |
| | | |
| | | String answers = answer.toString(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 组装正确答案 |
| | | * 组装正确答案 |
| | | * @param checkC |
| | | * @param checkD |
| | | * @param checkE |
| | |
| | | } |
| | | |
| | | /** |
| | | * 组装正确答案 |
| | | * 组装正确答案 |
| | | * @param checkC |
| | | * @param checkD |
| | | * @param checkE |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到练习题目图片list |
| | | * 得到练习题目图片list |
| | | * @param title_imgsIds |
| | | * @return |
| | | */ |
| | | private List<ExerciseObjectImg> getExerciseTitleImgs(String title_imgsIds){ |
| | | if(StringUtils.isBlank(title_imgsIds)){//新增图片 |
| | | if(StringUtils.isBlank(title_imgsIds)){//新增图片 |
| | | return null; |
| | | } |
| | | String[] strImgsId = title_imgsIds.split(","); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 创建习题选项 |
| | | * 创建习题选项 |
| | | * @param option |
| | | * @param check |
| | | * @param lstOptions |
| | |
| | | } |
| | | |
| | | ExerciseItemOption a = new ExerciseItemOption(); |
| | | if(StringUtils.isNotBlank(optionId)){// 更新 |
| | | if(StringUtils.isNotBlank(optionId)){// 更新 |
| | | a.setOptionId(optionId); |
| | | }else{ |
| | | if(StringUtils.isEmpty(option)){ |
| | |
| | | } |
| | | } |
| | | |
| | | if(StringUtils.isNotBlank(imgsId)){//新增图片 |
| | | if(StringUtils.isNotBlank(imgsId)){//新增图片 |
| | | String[] strImgsId = imgsId.split(","); |
| | | List<ExerciseObjectImg> imgs = new ArrayList<ExerciseObjectImg>(strImgsId.length); |
| | | ExerciseObjectImg objImg = null; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新习题 |
| | | * 更新习题 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理) |
| | | * 删除习题 |
| | | * 更新20150617:更新习题组最后修改时间 |
| | | * (后台管理) |
| | | * 删除习题 |
| | | * 更新20150617:更新习题组最后修改时间 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据classID获取所有课程 |
| | | * 根据classID获取所有课程 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取组名称 |
| | | * 获取组名称 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | List<Map<String,Object>> lstMap = new ArrayList<Map<String,Object>>(1); |
| | | Map<String,Object> map = null; |
| | | |
| | | if(group.getType() == ExerciseGroup.TYPE_CHAPTER_ITEM || group.getType() == ExerciseGroup.TYPE_EXERCISE_TOPIC || group.getType() == ExerciseGroup.TYPE_EXERCISE_EXAM){ // 章节练习 、 专项练习 |
| | | if(group.getType() == ExerciseGroup.TYPE_CHAPTER_ITEM || group.getType() == ExerciseGroup.TYPE_EXERCISE_TOPIC || group.getType() == ExerciseGroup.TYPE_EXERCISE_EXAM){ // 章节练习 、 专项练习 |
| | | map = new HashMap<String, Object>(7); |
| | | map.put("groupId", group.getGroupId()); |
| | | map.put("name", group.getName()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 编辑练习保存 |
| | | * 编辑练习保存 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据lessionId获取所有章节,排除掉当前班级 |
| | | * 根据lessionId获取所有章节,排除掉当前班级 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据classID获取顺序练习 |
| | | * 根据classID获取顺序练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | |
| | | int result = commonDAO.findCount(hql, CollectionUtils.newList(ClientUtils.getClassId(),ExerciseGroup.TYPE_EXERCISE_SEQUENCE)); |
| | | List<ClsClass> lstResult = new ArrayList<ClsClass>(); |
| | | //存在顺序练习,将班级信息传回 |
| | | //存在顺序练习,将班级信息传回 |
| | | if( result > 0){ |
| | | hql = "from ClsClass where classId = ? "; |
| | | lstResult = commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getClassId()), ClsClass.class); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据classID获取顺序练习 |
| | | * 根据classID获取顺序练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增练习 |
| | | * 新增练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 机构新增练习 |
| | | * 机构新增练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 机构指定练习 |
| | | * 机构指定练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * ORG 获取机构科目列表 |
| | | * ORG 获取机构科目列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增图片路径到数据库 |
| | | * 新增图片路径到数据库 |
| | | * @param fullPaths |
| | | * @param imgObjId |
| | | * @param imgObjType |
| | |
| | | } |
| | | String[] imgPaths = fullPaths.split(";"); |
| | | |
| | | // 更新路径到数据库 |
| | | // 更新路径到数据库 |
| | | List<Map<String,Object>> lstResult = exerciseService.doAddExerciseObjImg(imgPaths, imgObjId, imgObjType); |
| | | |
| | | return lstResult; |
| | | } |
| | | |
| | | /** 新增图片路径到数据库 */ |
| | | /** 新增图片路径到数据库 */ |
| | | @RequestMapping(value = "delExerObjImg",method = RequestMethod.POST) |
| | | public @ResponseBody Result dodelExerciseObjImg( |
| | | @RequestParam("imgId") String imgId){ |
| | |
| | | return result; |
| | | } |
| | | |
| | | /** 查询图片路径 */ |
| | | /** 查询图片路径 */ |
| | | @RequestMapping(value = "queryExerObjImg",method = RequestMethod.POST) |
| | | public @ResponseBody List<Map<String,Object>> doQueryExerciseObjImg( |
| | | @RequestParam("imgObjId") String imgObjId, |
| | |
| | | return null; |
| | | } |
| | | String hql = "from ExerciseObjectImg where deleteFlag is false and exerciseObjectId=? and objectType=? order by imgOrder"; |
| | | // 查询此练习是否已经存在记录 |
| | | // 查询此练习是否已经存在记录 |
| | | List<ExerciseObjectImg> lstObjImg = commonDAO.find(hql, |
| | | CollectionUtils.newList(imgObjId,imgObjType), ExerciseObjectImg.class); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-习题导入深度解析 |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-习题导入深度解析 |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @param uuid uuid |
| | | * @param fileName 文件名称 |
| | | * @param fileName 文件名称 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/deepAnalysisDoc", method = RequestMethod.POST) |
| | |
| | | |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-第一次将word解析结果返回给前台,并不保存到数据库 |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-第一次将word解析结果返回给前台,并不保存到数据库 |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @param uuid uuid |
| | | * @param fileName 文件名称 |
| | | * @param fileName 文件名称 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/import/parser/{groupId}", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 校验内容,返回解析结果 |
| | | * (后台管理系统:导入习题模块) |
| | | * 校验内容,返回解析结果 |
| | | * |
| | | * @param content 文本内容 |
| | | * @param content 文本内容 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/import/validateExercise", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取所有班级,当前班级除外,增加过滤没有习题的班级 |
| | | * 获取所有班级,当前班级除外,增加过滤没有习题的班级 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "loadClasses", method = RequestMethod.GET) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复制习题 |
| | | * 复制习题 |
| | | * @param fromClassId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 学员得分详情列表 |
| | | * 学员得分详情列表 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 初始化平均成绩和最高成绩 |
| | | * 初始化平均成绩和最高成绩 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 每道题得分详情 |
| | | * 每道题得分详情 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 加载题目选项详情 - 班级、机构 |
| | | * 加载题目选项详情 - 班级、机构 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 刷新更新统计 |
| | | * 刷新更新统计 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 导出练习每道题得分详情 |
| | | * 导出练习每道题得分详情 |
| | | * |
| | | * @return |
| | | * @throws IOException |
| | |
| | | public String exportItemStatis(@PathVariable String groupId,HttpServletResponse response) throws IOException { |
| | | ExerciseGroup exeGroup= this.commonDAO.read(ExerciseGroup.class, groupId); |
| | | |
| | | //获取每道题得分详情列表 |
| | | //获取每道题得分详情列表 |
| | | List<ExerciseItemStatistics> itemStatisLst = exerciseService.itemDetailList(groupId); |
| | | |
| | | ExcelExportUtils<ExerciseItemStatistics> ex = new ExcelExportUtils<ExerciseItemStatistics>(); |
| | | ExcelExportParam<ExerciseItemStatistics> obj = new ExcelExportParam<ExerciseItemStatistics>(); |
| | | obj.setColData(itemStatisLst); |
| | | String[] headers = { "序号","题号","题目", "类型", "正确答案","班级正确率","全站正确率"}; |
| | | String[] headers = { "序号","题号","题目", "类型", "正确答案","班级正确率","全站正确率"}; |
| | | |
| | | obj.setHeaders(headers); |
| | | obj.setLstColumn(new ArrayList<String>(Arrays.asList("itemNo","exerciseItemTitel","itemTypeName","correctAnswer","classAccuracyShow","orgAccuracyShow"))); |
| | |
| | | |
| | | response.reset(); |
| | | response.setContentType("application/vnd.ms-excel;charset=utf-8"); |
| | | response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName()+ "_" + exeGroup.getName() + "_详情.xls").getBytes(), "iso-8859-1")); |
| | | response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName()+ "_" + exeGroup.getName() + "_详情.xls").getBytes(), "iso-8859-1")); |
| | | response.setCharacterEncoding("utf-8"); |
| | | OutputStream ouputStream = response.getOutputStream(); |
| | | obj.setOut(ouputStream); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 导出练习学员得分详情 |
| | | * 导出练习学员得分详情 |
| | | * |
| | | * @return |
| | | * @throws IOException |
| | | */ |
| | | @RequestMapping(value = "userScoreStatis/data/{groupId}", method = RequestMethod.GET) |
| | | public String exportUserScore(@PathVariable String groupId,HttpServletResponse response) throws IOException { |
| | | // 获取组名称 |
| | | // 获取组名称 |
| | | ExerciseGroup exeGroup= this.commonDAO.read(ExerciseGroup.class, groupId); |
| | | |
| | | // 获取之前组装的排名List<Map<String, Object>>列表 |
| | | // 获取之前组装的排名List<Map<String, Object>>列表 |
| | | List<Map<String, Object>> userScoreMap = exerciseService.resultList(groupId); |
| | | List<ExportUserScore> userLst = new ArrayList<ExportUserScore>(userScoreMap.size()); |
| | | ExportUserScore user = null; |
| | | |
| | | if(userScoreMap != null){ |
| | | // 将获取的Map列表转换为List列表 |
| | | // 将获取的Map列表转换为List列表 |
| | | for(Map<String, Object> userScore:userScoreMap){ |
| | | user = new ExportUserScore(); |
| | | user.setName(String.valueOf(userScore.get("name"))); |
| | |
| | | ExcelExportUtils<ExportUserScore> ex = new ExcelExportUtils<ExportUserScore>(); |
| | | ExcelExportParam<ExportUserScore> obj = new ExcelExportParam<ExportUserScore>(); |
| | | obj.setColData(userLst); |
| | | String[] headers = { "排名","学员姓名","报名码","报名时间","手机号码", "提交时间", "成绩"}; |
| | | String[] headers = { "排名","学员姓名","报名码","报名时间","手机号码", "提交时间", "成绩"}; |
| | | |
| | | obj.setHeaders(headers); |
| | | obj.setLstColumn(new ArrayList<String>(Arrays.asList("name","salesCode","createTime","mobilePhone","submitTime","score"))); |
| | |
| | | |
| | | response.reset(); |
| | | response.setContentType("application/vnd.ms-excel;charset=utf-8"); |
| | | response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName() + "_" + exeGroup.getName() + "_成绩.xls").getBytes(), "iso-8859-1")); |
| | | response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName() + "_" + exeGroup.getName() + "_成绩.xls").getBytes(), "iso-8859-1")); |
| | | response.setCharacterEncoding("utf-8"); |
| | | OutputStream ouputStream = response.getOutputStream(); |
| | | obj.setOut(ouputStream); |
| | |
| | | |
| | | |
| | | /** |
| | | * 习题组排序 |
| | | * 习题组排序 |
| | | * |
| | | * @param key |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 习题排序 |
| | | * 习题排序 |
| | | * |
| | | * @param key |
| | | * @return |
| | |
| | | |
| | | |
| | | |
| | | /******************************************py导入******************************************************************/ |
| | | /******************************************py导入******************************************************************/ |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-第一次将word解析结果返回给前台,并不保存到数据库 |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-第一次将word解析结果返回给前台,并不保存到数据库 |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @param uuid uuid |
| | | * @param fileName 文件名称 |
| | | * @param fileName 文件名称 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/importpy/parse/{groupId}", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 校验内容,返回解析结果 |
| | | * (后台管理系统:导入习题模块) |
| | | * 校验内容,返回解析结果 |
| | | * |
| | | * @param content 文本内容 |
| | | * @param content 文本内容 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/importpy/validate", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入内容,返回解析结果 |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入内容,返回解析结果 |
| | | * |
| | | * @param content 文本内容 |
| | | * @param content 文本内容 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | |
| | | return exercisePyService.doImportPyExercise(lst,groupId); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("提交数据有误" + e ); |
| | | log.error("提交数据有误" + e ); |
| | | } |
| | | |
| | | return new Result(false,"解析json失败"); |
| | | return new Result(false,"解析json失败"); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /**----------------- 问卷调查----start-----------------------------------*/ |
| | | /**----------------- 问卷调查----start-----------------------------------*/ |
| | | /** |
| | | * 评估模块添加问答 |
| | | * 评估模块添加问答 |
| | | * |
| | | * @param jsonExerciseItemDTO |
| | | * @return |
| | |
| | | boolean mustAnswer = jsonObject.getBooleanValue("mustAnswer"); |
| | | short type = jsonObject.getShort("type"); |
| | | String analysis = jsonObject.getString("analysis"); |
| | | JSONArray titleImgs = jsonObject.getJSONArray("imags");// 题目的图片路径 |
| | | JSONArray titleImgs = jsonObject.getJSONArray("imags");// 题目的图片路径 |
| | | |
| | | //获取选项 |
| | | //获取选项 |
| | | List<ExerciseItemOption> lstOptions = JSONArray.parseArray(jsonObject.getString("lstOptions"), ExerciseItemOption.class); |
| | | ExerciseItem item = null; |
| | | |
| | | if(StringUtils.isEmpty(exerciseId)){// 新增 |
| | | if(StringUtils.isEmpty(exerciseId)){// 新增 |
| | | item = new ExerciseItem(); |
| | | item.setTitle(title); |
| | | item.setType(type); |
| | | item.setMustAnswer(mustAnswer); |
| | | exerciseService.insertExerciseItem4Evaluate(groupId, item, lstOptions,analysis,titleImgs); |
| | | }else{// 编辑 |
| | | }else{// 编辑 |
| | | item = this.commonDAO.read(ExerciseItem.class, exerciseId); |
| | | item.setTitle(title); |
| | | item.setType(type); |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取问卷习题列表 |
| | | * 获取问卷习题列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查看学员答卷情况 |
| | | * 查看学员答卷情况 |
| | | * |
| | | * @param recordId 答题记录id |
| | | * @param recordId 答题记录id |
| | | * @param schEvaluateId |
| | | * @return |
| | | */ |
| | |
| | | return exerciseService.queryUserEvaExerciseDetail(recordId, evaluateId); |
| | | } |
| | | |
| | | /** 查询图片路径 */ |
| | | /** 查询图片路径 */ |
| | | @RequestMapping(value = "evaluate/queryExerObjImg",method = RequestMethod.GET) |
| | | public @ResponseBody ResultJson queryEvaExerciseObjImg( |
| | | @RequestParam("imgObjId") String imgObjId, |
| | | @RequestParam("imgObjType") int imgObjType){ |
| | | |
| | | if(StringUtils.isBlank(imgObjId)){ |
| | | return new ResultJson(false,"参数为空"); |
| | | return new ResultJson(false,"参数为空"); |
| | | } |
| | | |
| | | List<Map<String,Object>> lstResult = exerciseService.queryEvaExerciseObjImg(imgObjId, imgObjType); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增图片路径到数据库 |
| | | * 新增图片路径到数据库 |
| | | * @param fullPaths |
| | | * @param imgObjId |
| | | * @param imgObjType |
| | |
| | | } |
| | | String[] imgPaths = fullPaths.split(";"); |
| | | |
| | | // 更新路径到数据库 |
| | | // 更新路径到数据库 |
| | | List<Map<String,Object>> lstResult = exerciseService.doAddEvaExerciseObjImg(imgPaths, imgObjId, imgObjType); |
| | | |
| | | return new ResultJson(true,"success",lstResult); |
| | | } |
| | | |
| | | /** 删除图片路径到数据库 */ |
| | | /** 删除图片路径到数据库 */ |
| | | @RequestMapping(value = "evaluate/delExerObjImg",method = RequestMethod.POST) |
| | | public @ResponseBody ResultJson dodelEvaExerciseObjImg( |
| | | @RequestParam("imgId") String imgId){ |
| | |
| | | |
| | | return result; |
| | | } |
| | | /**------------------ 问卷调查----end------------------------------------*/ |
| | | /**------------------ 问卷调查----end------------------------------------*/ |
| | | |
| | | |
| | | /**------------------------------ web 后端----end--------------------------------------------------------------------*/ |
| | | /**------------------------------ web 后端----end--------------------------------------------------------------------*/ |
| | | |
| | | } |
src/main/java/com/qxueyou/scc/exercise/action/ExerciseCorrectionController.java
src/main/java/com/qxueyou/scc/exercise/action/ExerciseDeepAnaController.java
src/main/java/com/qxueyou/scc/exercise/action/ExerciseExtendController.java
src/main/java/com/qxueyou/scc/exercise/action/ExerciseGroupController.java
src/main/java/com/qxueyou/scc/exercise/action/ExerciseInfoController.java
src/main/java/com/qxueyou/scc/exercise/action/ExerciseItemController.java
src/main/java/com/qxueyou/scc/exercise/dao/ExerciseDAO.java
src/main/java/com/qxueyou/scc/exercise/model/ExciseAnswerResult.java
src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqData.java
src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqListData.java
src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendResult.java
src/main/java/com/qxueyou/scc/exercise/model/ExerGroupResponseData.java
src/main/java/com/qxueyou/scc/exercise/model/ExerItemResponseData.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseAddItemParams.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnalisisResult.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnswerData.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseChapter.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseCompleteInfo.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrection.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionImg.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionResult.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseDataSubmitLog.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseDeepAnalysis.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReGroup.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendData.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendRecordData.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultBook.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultRecord.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultStatistics.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteBook.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteRecord.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroup.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupExtend.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupShareInfo.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseImportResult.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseInfo.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItem.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisiU.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerData.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerU.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemOption.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatis.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatistics.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseObjectImg.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionStatistics.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseParse.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseParseResult.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseReCourse.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecord.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerData.java
src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerDataList.java
src/main/java/com/qxueyou/scc/exercise/service/IExerciseCompleteService.java
src/main/java/com/qxueyou/scc/exercise/service/IExerciseCorrectionService.java
src/main/java/com/qxueyou/scc/exercise/service/IExerciseDeepAnaService.java
src/main/java/com/qxueyou/scc/exercise/service/IExerciseExtendService.java
src/main/java/com/qxueyou/scc/exercise/service/IExerciseGroupService.java
src/main/java/com/qxueyou/scc/exercise/service/IExerciseInfoService.java
src/main/java/com/qxueyou/scc/exercise/service/IExercisePyService.java
src/main/java/com/qxueyou/scc/exercise/service/IExerciseService.java
src/main/java/com/qxueyou/scc/exercise/service/IExerciseVerService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCompleteService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCorrectionService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseDeepAnaService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseExtendService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupAccuracyDealService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseInfoService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseItemStatisticsDealService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExercisePyService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseStatisticsDealService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseSysMsgDealService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseVerService.java
src/main/java/com/qxueyou/scc/exercise/service/impl/Handler.java
src/main/java/com/qxueyou/scc/exercise/service/impl/ParseResult.java
src/main/java/com/qxueyou/scc/exercise/service/impl/node/Doc.java
src/main/java/com/qxueyou/scc/exercise/service/impl/node/Item.java
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/DocParser.java
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnalysisParser.java
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnswerParser.java
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemParser.java
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemTypeParser.java
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/OptionParser.java
src/main/java/com/qxueyou/scc/exercise/timer/ExerciseTimer.java
src/main/java/com/qxueyou/scc/exercise/util/ExerciseUtils.java
src/main/java/com/qxueyou/scc/media/dao/MediaVideoDAO.java
src/main/java/com/qxueyou/scc/media/model/MediaVideo.java
src/main/java/com/qxueyou/scc/media/model/MediaVideoCache.java
src/main/java/com/qxueyou/scc/media/model/MediaVideoReCourse.java
src/main/java/com/qxueyou/scc/media/model/MediaVideoRecord.java
src/main/java/com/qxueyou/scc/media/model/MediaVideoStatistic.java
src/main/java/com/qxueyou/scc/media/model/MediaVideoTrans.java
src/main/java/com/qxueyou/scc/media/model/MediaVideoViewVO.java
src/main/java/com/qxueyou/scc/media/model/SchLiveReVideo.java
src/main/java/com/qxueyou/scc/media/model/VideoConverTask.java
src/main/java/com/qxueyou/scc/media/model/VideoInf.java
src/main/java/com/qxueyou/scc/media/model/VideoLiveChatroom.java
src/main/java/com/qxueyou/scc/media/model/VideoLiveViewVO.java
src/main/java/com/qxueyou/scc/media/model/VideoRecordDTO.java
src/main/java/com/qxueyou/scc/media/service/IMediaVideoService.java
src/main/java/com/qxueyou/scc/msg/model/Message.java
src/main/java/com/qxueyou/scc/msg/model/MsgChatroomMsg.java
src/main/java/com/qxueyou/scc/msg/model/MsgFriend.java
src/main/java/com/qxueyou/scc/msg/model/MsgGroup.java
src/main/java/com/qxueyou/scc/msg/model/MsgGroupUserRe.java
src/main/java/com/qxueyou/scc/msg/model/MsgInfo.java
src/main/java/com/qxueyou/scc/msg/model/MsgUser.java
src/main/java/com/qxueyou/scc/msg/service/IMsgInfoService.java
src/main/java/com/qxueyou/scc/msg/service/impl/ChatroomMessageBean.java
src/main/java/com/qxueyou/scc/msg/service/impl/MsgInfoService.java
src/main/java/com/qxueyou/scc/notice/model/Notice.java
src/main/java/com/qxueyou/scc/operation/comment/mode/Comment.java
src/main/java/com/qxueyou/scc/operation/comment/mode/CommentImg.java
src/main/java/com/qxueyou/scc/operation/comment/mode/CommentObject.java
src/main/java/com/qxueyou/scc/operation/comment/mode/CommentPraise.java
src/main/java/com/qxueyou/scc/operation/comment/mode/SnsCommentToMe.java
src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyComment.java
src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyPraise.java
src/main/java/com/qxueyou/scc/operation/comment/mode/SnsPraiseToMe.java
src/main/java/com/qxueyou/scc/operation/topic/action/StuTopicController.java
src/main/java/com/qxueyou/scc/operation/topic/model/TopicClassRe.java
src/main/java/com/qxueyou/scc/operation/topic/model/TopicInfo.java
src/main/java/com/qxueyou/scc/operation/topic/service/ITopicService.java
src/main/java/com/qxueyou/scc/operation/topic/service/impl/TopicService.java
src/main/java/com/qxueyou/scc/org/dao/OrgCourseDAO.java
src/main/java/com/qxueyou/scc/org/dao/OrgDAO.java
src/main/java/com/qxueyou/scc/org/model/DiscoverBanner.java
src/main/java/com/qxueyou/scc/org/model/ExternelTeacherInfo.java
src/main/java/com/qxueyou/scc/org/model/OrgAppInfo.java
src/main/java/com/qxueyou/scc/org/model/OrgAppMenu.java
src/main/java/com/qxueyou/scc/org/model/OrgBank.java
src/main/java/com/qxueyou/scc/org/model/OrgBankAccount.java
src/main/java/com/qxueyou/scc/org/model/OrgBanner.java
src/main/java/com/qxueyou/scc/org/model/OrgCategoryLevel.java
src/main/java/com/qxueyou/scc/org/model/OrgClass.java
src/main/java/com/qxueyou/scc/org/model/OrgClassBanner.java
src/main/java/com/qxueyou/scc/org/model/OrgClassQueryCm.java
src/main/java/com/qxueyou/scc/org/model/OrgClassReTeacher.java
src/main/java/com/qxueyou/scc/org/model/OrgClassReUser.java
src/main/java/com/qxueyou/scc/org/model/OrgClassUserCustom.java
src/main/java/com/qxueyou/scc/org/model/OrgCollege.java
src/main/java/com/qxueyou/scc/org/model/OrgCollegeCourse.java
src/main/java/com/qxueyou/scc/org/model/OrgCollegePublic.java
src/main/java/com/qxueyou/scc/org/model/OrgCourse.java
src/main/java/com/qxueyou/scc/org/model/OrgCourseCateData.java
src/main/java/com/qxueyou/scc/org/model/OrgCourseCategory.java
src/main/java/com/qxueyou/scc/org/model/OrgCourseData.java
src/main/java/com/qxueyou/scc/org/model/OrgCourseJsonData.java
src/main/java/com/qxueyou/scc/org/model/OrgMarketPrivilege.java
src/main/java/com/qxueyou/scc/org/model/OrgNewUserModel.java
src/main/java/com/qxueyou/scc/org/model/OrgPhotoalbum.java
src/main/java/com/qxueyou/scc/org/model/OrgPrivilege.java
src/main/java/com/qxueyou/scc/org/model/OrgReCollegePublic.java
src/main/java/com/qxueyou/scc/org/model/OrgSalesman.java
src/main/java/com/qxueyou/scc/org/model/OrgStringExtend.java
src/main/java/com/qxueyou/scc/org/model/OrgStudent.java
src/main/java/com/qxueyou/scc/org/model/OrgTeacher.java
src/main/java/com/qxueyou/scc/org/model/OrgText.java
src/main/java/com/qxueyou/scc/org/model/Organization.java
src/main/java/com/qxueyou/scc/org/model/OrganizationExtend.java
src/main/java/com/qxueyou/scc/org/service/IOrgClassService.java
src/main/java/com/qxueyou/scc/org/service/IOrgClassTeacherService.java
src/main/java/com/qxueyou/scc/org/service/IOrgTextService.java
src/main/java/com/qxueyou/scc/org/service/IOrganizationService.java
src/main/java/com/qxueyou/scc/org/service/ITeacherService.java
src/main/java/com/qxueyou/scc/org/service/impl/OrgClassTeacherService.java
src/main/java/com/qxueyou/scc/org/service/impl/OrgTextService.java
src/main/java/com/qxueyou/scc/org/service/impl/OrganizationService.java
src/main/java/com/qxueyou/scc/org/util/CourseMarketUtils.java
src/main/java/com/qxueyou/scc/portal/information/model/Information.java
src/main/java/com/qxueyou/scc/school/action/ArticleController.java
src/main/java/com/qxueyou/scc/school/action/StudentScoreController.java
src/main/java/com/qxueyou/scc/school/dao/EvaluateDAO.java
src/main/java/com/qxueyou/scc/school/dao/HandoutDAO.java
src/main/java/com/qxueyou/scc/school/dao/InteractDAO.java
src/main/java/com/qxueyou/scc/school/dao/LessonDAO.java
src/main/java/com/qxueyou/scc/school/dao/RankDAO.java
src/main/java/com/qxueyou/scc/school/dao/SignDAO.java
src/main/java/com/qxueyou/scc/school/helper/IJudgeLimitStrategy.java
src/main/java/com/qxueyou/scc/school/helper/IJudgeUpdateStrategy.java
src/main/java/com/qxueyou/scc/school/helper/judge/CommonJudgeStrategy.java
src/main/java/com/qxueyou/scc/school/model/ClassCardTemplet.java
src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentV.java
src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentVId.java
src/main/java/com/qxueyou/scc/school/model/HandoutAnswerData.java
src/main/java/com/qxueyou/scc/school/model/HandoutAnswerResult.java
src/main/java/com/qxueyou/scc/school/model/HandoutConverTask.java
src/main/java/com/qxueyou/scc/school/model/InteractResultData.java
src/main/java/com/qxueyou/scc/school/model/InterateAnswer.java
src/main/java/com/qxueyou/scc/school/model/LessionSignStatistics.java
src/main/java/com/qxueyou/scc/school/model/SchArticle.java
src/main/java/com/qxueyou/scc/school/model/SchArticleReCourse.java
src/main/java/com/qxueyou/scc/school/model/SchArticleStatistic.java
src/main/java/com/qxueyou/scc/school/model/SchChapter.java
src/main/java/com/qxueyou/scc/school/model/SchClassCard.java
src/main/java/com/qxueyou/scc/school/model/SchClassCardTemplet.java
src/main/java/com/qxueyou/scc/school/model/SchClassCourseware.java
src/main/java/com/qxueyou/scc/school/model/SchClassSchedule.java
src/main/java/com/qxueyou/scc/school/model/SchClassSubject.java
src/main/java/com/qxueyou/scc/school/model/SchCourseware.java
src/main/java/com/qxueyou/scc/school/model/SchEvaRecordRe.java
src/main/java/com/qxueyou/scc/school/model/SchEvaluate.java
src/main/java/com/qxueyou/scc/school/model/SchEvaluateDetail.java
src/main/java/com/qxueyou/scc/school/model/SchEvaluateTemplate.java
src/main/java/com/qxueyou/scc/school/model/SchFile.java
src/main/java/com/qxueyou/scc/school/model/SchHandout.java
src/main/java/com/qxueyou/scc/school/model/SchHandoutPage.java
src/main/java/com/qxueyou/scc/school/model/SchHandoutReCourse.java
src/main/java/com/qxueyou/scc/school/model/SchHandoutRecord.java
src/main/java/com/qxueyou/scc/school/model/SchHandoutRecordDetail.java
src/main/java/com/qxueyou/scc/school/model/SchHandoutStatistic.java
src/main/java/com/qxueyou/scc/school/model/SchImg.java
src/main/java/com/qxueyou/scc/school/model/SchInteract.java
src/main/java/com/qxueyou/scc/school/model/SchInteractResult.java
src/main/java/com/qxueyou/scc/school/model/SchNote.java
src/main/java/com/qxueyou/scc/school/model/SchQRUrl.java
src/main/java/com/qxueyou/scc/school/model/SchRank.java
src/main/java/com/qxueyou/scc/school/model/SchRankHis.java
src/main/java/com/qxueyou/scc/school/model/SchRankVer.java
src/main/java/com/qxueyou/scc/school/model/SchReClassUser.java
src/main/java/com/qxueyou/scc/school/model/SchReLessonLiveVideo.java
src/main/java/com/qxueyou/scc/school/model/SchReLessonPeriod.java
src/main/java/com/qxueyou/scc/school/model/SchReLessonVideo.java
src/main/java/com/qxueyou/scc/school/model/SchScheduleAddress.java
src/main/java/com/qxueyou/scc/school/model/SchSchoolDay.java
src/main/java/com/qxueyou/scc/school/model/SchSchoolDayItem.java
src/main/java/com/qxueyou/scc/school/model/SchSchoolYear.java
src/main/java/com/qxueyou/scc/school/model/SchSign.java
src/main/java/com/qxueyou/scc/school/model/SchSignCode.java
src/main/java/com/qxueyou/scc/school/model/SchSignItem.java
src/main/java/com/qxueyou/scc/school/model/SchSignOrder.java
src/main/java/com/qxueyou/scc/school/model/SchSignStatistics.java
src/main/java/com/qxueyou/scc/school/model/SchSpreadFootprint.java
src/main/java/com/qxueyou/scc/school/model/SchStudentAchievement.java
src/main/java/com/qxueyou/scc/school/model/SchStudentSchedule.java
src/main/java/com/qxueyou/scc/school/model/SchStudyReport.java
src/main/java/com/qxueyou/scc/school/model/SchSubjectExtend.java
src/main/java/com/qxueyou/scc/school/model/SchSubjectReCourse.java
src/main/java/com/qxueyou/scc/school/model/SchTerm.java
src/main/java/com/qxueyou/scc/school/model/SchTermReDay.java
src/main/java/com/qxueyou/scc/school/model/SchVideoFile.java
src/main/java/com/qxueyou/scc/school/model/SchYearReClass.java
src/main/java/com/qxueyou/scc/school/model/SchYearReOrg.java
src/main/java/com/qxueyou/scc/school/model/SignResult.java
src/main/java/com/qxueyou/scc/school/model/SignScreenResult.java
src/main/java/com/qxueyou/scc/school/model/SignStatisResult.java
src/main/java/com/qxueyou/scc/school/model/StudentEvaCategory.java
src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreData.java
src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreResult.java
src/main/java/com/qxueyou/scc/school/model/viewvo/SchNoteViewVO.java
src/main/java/com/qxueyou/scc/school/model/viewvo/SchSemesterViewVO.java
src/main/java/com/qxueyou/scc/school/model/viewvo/SchStudentScheduleViewVO.java
src/main/java/com/qxueyou/scc/school/model/viewvo/SchWeekScheduleViewVO.java
src/main/java/com/qxueyou/scc/school/model/viewvo/SchYearViewVO.java
src/main/java/com/qxueyou/scc/school/service/IArticleService.java
src/main/java/com/qxueyou/scc/school/service/IClassCardService.java
src/main/java/com/qxueyou/scc/school/service/IClassCircleService.java
src/main/java/com/qxueyou/scc/school/service/ICourseWareService.java
src/main/java/com/qxueyou/scc/school/service/IDocdealMsgSenderService.java
src/main/java/com/qxueyou/scc/school/service/IHandoutService.java
src/main/java/com/qxueyou/scc/school/service/IInteractService.java
src/main/java/com/qxueyou/scc/school/service/ILessonService.java
src/main/java/com/qxueyou/scc/school/service/INoteService.java
src/main/java/com/qxueyou/scc/school/service/IRankService.java
src/main/java/com/qxueyou/scc/school/service/ISchoolDayService.java
src/main/java/com/qxueyou/scc/school/service/ISchoolTermService.java
src/main/java/com/qxueyou/scc/school/service/ISchoolYearService.java
src/main/java/com/qxueyou/scc/school/service/IScoreChangeService.java
src/main/java/com/qxueyou/scc/school/service/ISignService.java
src/main/java/com/qxueyou/scc/school/service/ISpreadFootprintService.java
src/main/java/com/qxueyou/scc/school/service/IStudentScoreService.java
src/main/java/com/qxueyou/scc/school/service/IStudyReportService.java
src/main/java/com/qxueyou/scc/school/service/impl/ArticleService.java
src/main/java/com/qxueyou/scc/school/service/impl/ClassCardService.java
src/main/java/com/qxueyou/scc/school/service/impl/ClassCircleService.java
src/main/java/com/qxueyou/scc/school/service/impl/CoursewareService.java
src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgDealService.java
src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgSenderService.java
src/main/java/com/qxueyou/scc/school/service/impl/HandoutConvertPDFDealService.java
src/main/java/com/qxueyou/scc/school/service/impl/HandoutService.java
src/main/java/com/qxueyou/scc/school/service/impl/InteactService.java
src/main/java/com/qxueyou/scc/school/service/impl/LessonService.java
src/main/java/com/qxueyou/scc/school/service/impl/NoteService.java
src/main/java/com/qxueyou/scc/school/service/impl/RankMsgDealService.java
src/main/java/com/qxueyou/scc/school/service/impl/RankService.java
src/main/java/com/qxueyou/scc/school/service/impl/SchSignMsgDealService.java
src/main/java/com/qxueyou/scc/school/service/impl/SchoolDayService.java
src/main/java/com/qxueyou/scc/school/service/impl/SchoolTermService.java
src/main/java/com/qxueyou/scc/school/service/impl/SchoolYearService.java
src/main/java/com/qxueyou/scc/school/service/impl/SignService.java
src/main/java/com/qxueyou/scc/school/service/impl/SpreadFootprintService.java
src/main/java/com/qxueyou/scc/school/service/impl/StudentsScoreService.java
src/main/java/com/qxueyou/scc/school/service/impl/StudyReportService.java
src/main/java/com/qxueyou/scc/school/service/impl/VideoIssueStopDealService.java
src/main/java/com/qxueyou/scc/school/service/impl/WBONSProducer.java
src/main/java/com/qxueyou/scc/school/util/StudentEvaUtils.java
src/main/java/com/qxueyou/scc/school/util/StudyReportUtils.java
src/main/java/com/qxueyou/scc/shorturl/util/ShortUrlUtils.java
src/main/java/com/qxueyou/scc/sms/model/Sms.java
src/main/java/com/qxueyou/scc/sms/model/SmsConfig.java
src/main/java/com/qxueyou/scc/sms/model/SmsContants.java
src/main/java/com/qxueyou/scc/sms/utils/SmsUtils.java
src/main/java/com/qxueyou/scc/statistic/model/SchFlowStatisticDetail.java
src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java
src/main/java/com/qxueyou/scc/stucontroller/StuExamController.java
src/main/java/com/qxueyou/scc/stucontroller/StuExerciseController.java
src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java
src/main/java/com/qxueyou/scc/stucontroller/StuNoticeController.java
src/main/java/com/qxueyou/scc/stucontroller/StuResController.java
src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java
src/main/java/com/qxueyou/scc/sys/action/ImgController.java
src/main/java/com/qxueyou/scc/sys/action/LoginController.java
src/main/java/com/qxueyou/scc/sys/model/CacheParamters.java
src/main/java/com/qxueyou/scc/sys/model/ResponseResult.java
src/main/java/com/qxueyou/scc/sys/model/SysButton.java
src/main/java/com/qxueyou/scc/sys/model/SysCondition.java
src/main/java/com/qxueyou/scc/sys/model/SysConfigFile.java
src/main/java/com/qxueyou/scc/sys/model/SysLog.java
src/main/java/com/qxueyou/scc/sys/service/IAuthorizeService.java
src/main/java/com/qxueyou/scc/sys/service/IOssService.java
src/main/java/com/qxueyou/scc/sys/service/IPrivilegeService.java
src/main/java/com/qxueyou/scc/sys/service/ISysAttachmentService.java
src/main/java/com/qxueyou/scc/sys/service/impl/OssService.java
src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java
src/main/java/com/qxueyou/scc/sys/service/impl/SysAttachmentService.java
src/main/java/com/qxueyou/scc/sys/service/impl/VideoOssService.java
src/main/java/com/qxueyou/scc/sys/utils/AudioUtil.java
src/main/java/com/qxueyou/scc/sys/utils/DrawingUtil.java
src/main/java/com/qxueyou/scc/sys/utils/SpringContextHolder.java
src/main/java/com/qxueyou/scc/sys/utils/VideoUtil.java
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClip.java
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClipVer.java
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveExtend.java
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveOrder.java
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveRecord.java
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplay.java
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplayReClip.java
src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java
src/main/java/com/qxueyou/scc/teach/live/service/IMediaVideoLivePlayBackService.java
src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java
src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaVideoLivePlayBackService.java
src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegFileVO.java
src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegMediaHelper.java
src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegVideoInfo.java
src/main/java/com/qxueyou/scc/teach/res/model/ResItemAudio.java
src/main/java/com/qxueyou/scc/teach/res/model/ResItemDoc.java
src/main/java/com/qxueyou/scc/teach/res/model/ResItemVideo.java
src/main/java/com/qxueyou/scc/teach/res/service/IFileService.java
src/main/java/com/qxueyou/scc/teach/res/service/IResAudioService.java
src/main/java/com/qxueyou/scc/teach/res/service/IResItemService.java
src/main/java/com/qxueyou/scc/teach/res/service/IResService.java
src/main/java/com/qxueyou/scc/teach/res/service/impl/FileService.java
src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemDocService.java
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java
src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java
src/main/java/com/qxueyou/scc/teach/student/service/IStudentService.java
src/main/java/com/qxueyou/scc/teach/student/service/impl/StudentService.java
src/main/java/com/qxueyou/scc/teach/subject/model/Subject.java
src/main/java/com/qxueyou/scc/teach/subject/model/SubjectUtils.java
src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java
src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
src/main/java/com/qxueyou/scc/user/dao/RegistrationDAO.java
src/main/java/com/qxueyou/scc/user/dao/UserRoleDAO.java
src/main/java/com/qxueyou/scc/user/model/User.java
src/main/java/com/qxueyou/scc/user/model/UserAuthorizeTrace.java
src/main/java/com/qxueyou/scc/user/model/UserExtend.java
src/main/java/com/qxueyou/scc/user/model/UserRegistration.java
src/main/java/com/qxueyou/scc/user/model/UserSign.java
src/main/java/com/qxueyou/scc/user/model/UserStudent.java
src/main/java/com/qxueyou/scc/user/service/IUserOperateService.java
src/main/java/com/qxueyou/scc/user/service/IUserRegistrationService.java
src/main/java/com/qxueyou/scc/user/service/IUserRoleService.java
src/main/java/com/qxueyou/scc/user/service/IUserService.java
src/main/java/com/qxueyou/scc/user/service/IUserSignService.java
src/main/java/com/qxueyou/scc/user/service/impl/UserOperateService.java
src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java
src/main/java/com/qxueyou/scc/user/service/impl/UserService.java
src/main/java/com/qxueyou/scc/user/util/ExcelReader.java
src/main/java/com/qxueyou/scc/web/AuthorizeFilter.java
src/main/resources/application.properties |