package com.qxueyou.scc.admin.teacher.service.impl; import java.util.Date; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.qxueyou.scc.admin.classes.model.QClsClass; import com.qxueyou.scc.admin.classes.model.QClsClassReSubject; import com.qxueyou.scc.admin.teacher.dao.TeacherDAO; import com.qxueyou.scc.admin.teacher.service.ITeacherService; import com.qxueyou.scc.base.model.Pager; import com.qxueyou.scc.base.model.Result; import com.qxueyou.scc.base.service.impl.CommonAppService; import com.qxueyou.scc.base.util.ClientUtils; import com.qxueyou.scc.base.util.CollectionUtils; import com.qxueyou.scc.base.util.TraceUtils; import com.qxueyou.scc.teach.student.model.QStuStudent; import com.qxueyou.scc.teach.student.model.StuStudent; import com.qxueyou.scc.teach.subject.model.QSubject; import com.qxueyou.scc.teach.subject.model.Subject; import com.qxueyou.scc.user.model.User; import com.qxueyou.scc.user.model.UserRole; import com.qxueyou.scc.user.model.UserTeacher; import com.qxueyou.scc.user.service.IUserService; @Service public class TeacherService extends CommonAppService implements ITeacherService { @Autowired IUserService userService; @Autowired 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, "老师编号已存在或被其他用户占用"); } User user = userService.insertUser(teacherName, teacherNo, mobilePhone, password, Boolean.FALSE, ClientUtils.getOrgId()); userService.addRole(user.getUserId(), UserRole.ROLE_TEACHER_ID); UserTeacher teacher = new UserTeacher(); TraceUtils.setCreateTrace(teacher); teacher.setOrganizationId(ClientUtils.getOrgId()); teacher.setName(teacherName); teacher.setMobilePhone(mobilePhone); teacher.setUserId(user.getUserId()); teacher.setTeacherNo(teacherNo); save(teacher); return new Result(true, "success"); } /** * 更新 */ @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, "手机号已存在"); } UserTeacher teacher = read(UserTeacher.class, teacherId); TraceUtils.setUpdateTrace(teacher); teacher.setName(teacherName); teacher.setMobilePhone(mobilePhone); teacher.setTeacherNo(teacherNo); save(teacher); User user = read(User.class, teacher.getUserId()); user.setAccount(teacherNo); TraceUtils.setCreateTrace(user); save(user); if(StringUtils.isNotEmpty(password)){ userService.updatePassword(teacher.getUserId(), password); } return new Result(true, "success"); } /** * 教师管理显示列表 */ @Override public List lstTeacher(String keyword, Integer pageSize, Integer pageNum) { String keyword_ = StringUtils.isEmpty(keyword) ? "" : keyword; String hql = "from UserTeacher where name like ? and deleteFlag is false and organizationId = ? order by createTime desc"; return findList(hql, new Pager(pageSize, pageNum), CollectionUtils.newList(keyword_.concat("%"), ClientUtils.getOrgId()), UserTeacher.class); } /** * 获取教师总条数 */ @Override public int findTeacherCount(String keyword) { String hql = "from UserTeacher where name like :keyword and deleteFlag is false and organizationId = :organizationId"; return findCountByComplexHql(hql, CollectionUtils.newObjectMap("keyword", keyword + "%","organizationId",ClientUtils.getOrgId())); } @Override public List> findLstToRole(String keyword, Integer pageSize, Integer pageNum, String roleId) { String hql = "select u.userId as userId ,u.name as teacherName ,u.teacherNo as teacherNo ,u.mobilePhone as mobilePhone ,u.teacherId as teacherId " + " from UserTeacher u where u.deleteFlag is false and u.name like :keyword and not Exists(select userId from UserReRoleUser re where re.roleId " + "=:roleId and re.deleteFlag is false and re.userId = u.userId) "; return findListWithMapByHql(hql, CollectionUtils.newObjectMap("roleId", roleId, "keyword", "%" + keyword + "%"), new Pager(pageSize, pageNum)); } @Override public int findLstCountToRole(String roleId, String keyword) { String hql = " from UserTeacher u where u.deleteFlag is false and u.name like :keyword and not Exists(select userId from UserReRoleUser re where re.roleId " + "=:roleId and re.deleteFlag is false and re.userId = u.userId) "; return findCountByComplexHql(hql, CollectionUtils.newObjectMap("roleId", roleId, "keyword", "%" + keyword + "%")); } /** * 教师管理 删除教师 */ @Override public Result deleteTeacher(String[] teacherIds) { for (String teacherId : teacherIds) { deleteTeacherInner(teacherId); } return new Result(true, "success"); } public Result deleteTeacherInner(String teacherId) { UserTeacher teacher = read(UserTeacher.class, teacherId); TraceUtils.setUpdateTrace(teacher); teacher.setDeleteFlag(true); save(teacher); User user = read(User.class, teacher.getUserId()); if (user != null) { deleteAll(CollectionUtils.newList(user)); } return new Result(true, "success"); } @Override public List LstTeacher4Cls() { String hql = "from UserTeacher where deleteFlag is false and organizationId=? "; return find(hql, CollectionUtils.newList(ClientUtils.getOrgId()), UserTeacher.class); } @Override public String getTeacherIdByUserId(String userId) { String hql = "from UserTeacher where userId = ? and deleteFlag is false"; UserTeacher userTeacher = findUnique(hql, CollectionUtils.newList(userId), UserTeacher.class); if(userTeacher == null) { return StringUtils.EMPTY; } return userTeacher.getTeacherId(); } @Override public UserTeacher getTeacherByUserId(String userId) { String hql = "from UserTeacher where userId = ? and deleteFlag is false"; UserTeacher userTeacher = findUnique(hql, CollectionUtils.newList(userId), UserTeacher.class); return userTeacher; } @Override public Result getTeacherInfo() { QSubject subject = QSubject.subject; QClsClass clsClass = QClsClass.clsClass; QClsClassReSubject re = QClsClassReSubject.clsClassReSubject; QStuStudent student = QStuStudent.stuStudent; User u = this.read(User.class, ClientUtils.getUserId()); String teacherId = this.getTeacherIdByUserId(u.getUserId()); if(StringUtils.isEmpty(teacherId)) { return new Result(false, "当前用户无教师角色信息"); } long subjectCount = this.getQueryFactory().selectDistinct(subject.subjectId).from(subject) .where(subject.deleteFlag.isFalse().and(subject.createId.eq(u.getUserId())).and(subject.status.eq(Subject.STATUS_ISSUED)). and(subject.type.in(new Integer[] {Subject.TYPE_ORG_SUBJECT, Subject.TYPE_PUBLIC_SUBJECT}))).fetchCount(); long classCount = this.getQueryFactory().selectDistinct(clsClass.classId).from(subject, clsClass, re) .where(subject.deleteFlag.isFalse().and(subject.teacherId.eq(teacherId)) .and(clsClass.deleteFlag.isFalse()).and(re.deleteFlag.isFalse()) .and(re.subjectId.eq(subject.subjectId)).and(clsClass.classId.eq(re.classId)) .and(clsClass.endTime.after(new Date()))) .fetchCount(); long studentCount = this.getQueryFactory().selectDistinct(student.studentId) .from(subject, clsClass, re, student) .where(subject.deleteFlag.isFalse().and(subject.teacherId.eq(teacherId)) .and(clsClass.deleteFlag.isFalse()).and(re.deleteFlag.isFalse()) .and(clsClass.endTime.after(new Date())).and(re.subjectId.eq(subject.subjectId)) .and(clsClass.classId.eq(re.classId)).and(student.classId.eq(clsClass.classId)) .and(student.deleteFlag.isFalse()).and(student.status.eq(StuStudent.STATUS_ACTIVE))) .fetchCount(); return new Result(true, "success", CollectionUtils.newObjectMap("name", u.getName(), "account", u.getAccount(), "mobilePhone", u.getMobilePhone(), "imgPath", u.getImgPath(), "sex", u.getSex(), "subjectCount", subjectCount, "classCount", classCount, "studentCount", studentCount, "teacherNo", this.read(UserTeacher.class, teacherId).getTeacherNo())); } }