You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
343 lines
12 KiB
Java
343 lines
12 KiB
Java
package com.ibeetl.jlw.service;
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.lang.Assert;
|
|
import cn.hutool.core.map.MapUtil;
|
|
import cn.hutool.core.util.RandomUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.extra.pinyin.PinyinUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.ibeetl.admin.core.service.CoreBaseService;
|
|
import com.ibeetl.admin.core.util.PlatformException;
|
|
import com.ibeetl.jlw.dao.SchoolClassDao;
|
|
import com.ibeetl.jlw.entity.SchoolClass;
|
|
import com.ibeetl.jlw.entity.UniversitiesColleges;
|
|
import com.ibeetl.jlw.util.BXApiUtil;
|
|
import com.ibeetl.jlw.util.BxJDBCUtil;
|
|
import com.ibeetl.jlw.util.HttpJsonRequest;
|
|
import com.ibeetl.jlw.web.query.SchoolClassQuery;
|
|
import org.beetl.sql.core.SqlId;
|
|
import org.beetl.sql.core.engine.PageQuery;
|
|
import org.beetl.sql.core.query.interfacer.StrongValue;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import javax.validation.constraints.NotNull;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
import static cn.hutool.core.collection.CollUtil.getFirst;
|
|
import static cn.hutool.core.util.ObjectUtil.defaultIfBlank;
|
|
import static com.ibeetl.admin.core.util.ListUtils.getDuplicateElements;
|
|
|
|
|
|
/**
|
|
* SchoolClass Service
|
|
*/
|
|
|
|
@Service
|
|
@Transactional
|
|
public class SchoolClassService extends CoreBaseService<SchoolClass> {
|
|
|
|
@Autowired
|
|
private SchoolClassDao schoolClassDao;
|
|
@Autowired
|
|
@Lazy
|
|
private UniversitiesCollegesService universitiesCollegesService;
|
|
|
|
public PageQuery<SchoolClass> queryByCondition(PageQuery query) {
|
|
PageQuery ret = schoolClassDao.queryByCondition(query);
|
|
queryListAfter(ret.getList());
|
|
return ret;
|
|
}
|
|
|
|
public void deleteSchoolClass(String ids) {
|
|
try {
|
|
schoolClassDao.deleteSchoolClassByIds(ids);
|
|
} catch (Exception e) {
|
|
throw new PlatformException("批量删除SchoolClass失败", e);
|
|
}
|
|
}
|
|
|
|
public List<SchoolClass> getValues(Object paras) {
|
|
return sqlManager.select(SqlId.of("jlw.schoolClass.getSchoolClassValues"), SchoolClass.class, paras);
|
|
}
|
|
|
|
public List<SchoolClass> getValuesByQuery(SchoolClassQuery schoolClassQuery) {
|
|
return schoolClassDao.getValuesByQuery(schoolClassQuery);
|
|
}
|
|
|
|
public List<SchoolClass> getValuesByQueryNotWithPermission(SchoolClassQuery schoolClassQuery) {
|
|
return schoolClassDao.getValuesByQueryNotWithPermission(schoolClassQuery);
|
|
}
|
|
|
|
/**
|
|
* 获取不重复的班级编号
|
|
*
|
|
* @param prefix 自定义前缀 (非必传)
|
|
* @return
|
|
*/
|
|
public String randomClassSn(String prefix) {
|
|
String classSn = defaultIfBlank(prefix, "") + RandomUtil.randomNumbers(6);
|
|
long count = schoolClassDao.createLambdaQuery().andEq(SchoolClass::getClassSn, classSn).count();
|
|
|
|
if (count > 0) {
|
|
return randomClassSn(prefix);
|
|
}
|
|
return classSn;
|
|
}
|
|
|
|
/**
|
|
* 验证班级编号数据,是否已经存在
|
|
*
|
|
* @param classList
|
|
*/
|
|
public void validateClassSnListIsExistsThrow(List<SchoolClass> classList, String orgIds) {
|
|
if (CollectionUtil.isEmpty(classList)) {
|
|
return;
|
|
}
|
|
// 查询所有的班级编号
|
|
List<String> classSnList = classList.stream().map(SchoolClass::getClassSn).collect(Collectors.toList());
|
|
// 获取重复的元素
|
|
List<String> duplicateElements = getDuplicateElements(classSnList);
|
|
// 构建异常信息,传给前端
|
|
String duplicateElementsAsString = CollectionUtil.emptyIfNull(duplicateElements).stream().collect(Collectors.joining(","));
|
|
Assert.isTrue(CollectionUtil.isEmpty(duplicateElements), "本次上传的文件中,存在重复的的班级编号:\"{}\",请修改后再进行提交!", duplicateElementsAsString);
|
|
// 查询库里已经存在的编号
|
|
List<String> existsList = schoolClassDao.createLambdaQuery()
|
|
.andIsNotNull(SchoolClass::getClassSn)
|
|
.andIn(SchoolClass::getClassSn, classSnList)
|
|
.andIn(SchoolClass::getOrgId, new StrongValue() {
|
|
@Override
|
|
public boolean isEffective() {
|
|
return StrUtil.isNotBlank(orgIds);
|
|
}
|
|
|
|
@Override
|
|
public Object getValue() {
|
|
return Arrays.asList(orgIds.split(","));
|
|
}
|
|
})
|
|
.andEq(SchoolClass::getClassStatus, 1).select(String.class, "class_sn");
|
|
// 如果存在的话,属于异常数据
|
|
String errorClassSns = CollectionUtil.emptyIfNull(existsList).stream().collect(Collectors.joining(","));
|
|
// 构建异常信息,传给前端
|
|
Assert.isTrue(StrUtil.isBlank(errorClassSns), "已存在的班级编号:\"{}\",请修改后再进行提交!", errorClassSns);
|
|
}
|
|
|
|
/**
|
|
* 没有传递机构ID的验证方法
|
|
*
|
|
* @param classList
|
|
*/
|
|
public void validateClassSnListIsExistsThrow(List<SchoolClass> classList) {
|
|
validateClassSnListIsExistsThrow(classList, null);
|
|
}
|
|
|
|
/**
|
|
* 查询所有的班级
|
|
*
|
|
* @return 结果
|
|
*/
|
|
public static List<String> getAllSchoolClassWithOrgId() {
|
|
// Long currentOrgId = SpringUtil.getBean(CorePlatformService.class).getCurrentOrgId();
|
|
return SpringUtil.getBean(SchoolClassDao.class).getAllSchoolClass(null);
|
|
}
|
|
|
|
public SchoolClass getByName(String name, Long orgId) {
|
|
SchoolClassQuery query = new SchoolClassQuery();
|
|
// query.setClassStatus(1);
|
|
query.setClassName(name.trim());
|
|
|
|
if (orgId != null && orgId != 1) {
|
|
query.setOrgId(orgId);
|
|
}
|
|
return getFirst(getValuesByQueryNotWithPermission(query));
|
|
}
|
|
|
|
|
|
public SchoolClass getByNameAndCollegeIdAndMajorId(String name,Long majorId,Long collegeId, Long orgId) {
|
|
SchoolClassQuery query = new SchoolClassQuery();
|
|
// query.setClassStatus(1);
|
|
query.setClassName(name.trim());
|
|
query.setUniversitySystemId(majorId);
|
|
query.setUniversityFacultyId(collegeId);
|
|
if (orgId != null && orgId != 1) {
|
|
query.setOrgId(orgId);
|
|
}
|
|
return getFirst(getValuesByQueryNotWithPermission(query));
|
|
}
|
|
|
|
public SchoolClass getByOldId(Long oldClassId){
|
|
SchoolClassQuery query = new SchoolClassQuery();
|
|
query.setOldClassId(oldClassId);
|
|
return getFirst(getValuesByQueryNotWithPermission(query));
|
|
}
|
|
|
|
public SchoolClass getByName(String name) {
|
|
return getByName(name, null);
|
|
}
|
|
|
|
/**
|
|
* 通过名称查询数据,没有查询到的话,则插入数据,并返回给前端这条插入的数据
|
|
*
|
|
* @param name
|
|
* @param orgId
|
|
* @return
|
|
*/
|
|
public SchoolClass getByNameOrCreate(String name, Long orgId, Long userId, Long universityFacultyId, Long universitySystemId) {
|
|
SchoolClass schoolClass = getByName(name, orgId);
|
|
|
|
if (schoolClass != null) {
|
|
return schoolClass;
|
|
}
|
|
// 通过机构ID查询院校信息
|
|
UniversitiesColleges universitiesColleges = universitiesCollegesService.getByOrgId(orgId);
|
|
|
|
SchoolClass insertSchoolClass = new SchoolClass();
|
|
|
|
if (universitiesColleges != null) {
|
|
insertSchoolClass.setUniversitiesCollegesId(universitiesColleges.getUniversitiesCollegesId());
|
|
}
|
|
insertSchoolClass.setUniversityFacultyId(universityFacultyId);
|
|
insertSchoolClass.setUniversitySystemId(universitySystemId);
|
|
insertSchoolClass.setClassName(name);
|
|
insertSchoolClass.setClassSn(buildClassSnEnsureUnique(universitiesColleges, name));
|
|
insertSchoolClass.setClassStatus(1);
|
|
insertSchoolClass.setAddTime(new Date());
|
|
insertSchoolClass.setOrgId(orgId);
|
|
insertSchoolClass.setUserId(userId);
|
|
Integer icibtClassId = BXApiUtil.createBxClass(insertSchoolClass.getClassName(), universitiesColleges.getIcibtSchoolId());
|
|
insertSchoolClass.setIcibtClassId(icibtClassId);
|
|
insert(insertSchoolClass);
|
|
SchoolClass s = new SchoolClass();
|
|
s.setClassId(insertSchoolClass.getClassId());
|
|
s.setOldClassId(insertSchoolClass.getClassId()+1500);
|
|
schoolClassDao.updateTemplateById(s);
|
|
insertSchoolClass.setOldClassId(s.getOldClassId());
|
|
return insertSchoolClass;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* 构建一个确保全局唯一的班级编号
|
|
*
|
|
* @return
|
|
*/
|
|
public String buildClassSnEnsureUnique(@NotNull(message = "院校不能为空!") UniversitiesColleges universitiesColleges, @NotNull(message = "班级名称不能为空!") String className) {
|
|
|
|
// 左侧的名称
|
|
String leftName = universitiesColleges != null ? universitiesColleges.getUniversitiesCollegesName() : (RandomUtil.randomInt(6) + "");
|
|
|
|
// 初步生成的班级编号
|
|
String classSnBefore = StrUtil.format("{}_{}_{}", leftName, replaceAllByClassNameRule(className), RandomUtil.randomNumbers(6));
|
|
|
|
// 中文的部分取拼音首字母
|
|
String classSnPinyin = PinyinUtil.getFirstLetter(classSnBefore, "");
|
|
|
|
if (countByClassSn(classSnPinyin) > 0L) {
|
|
return buildClassSnEnsureUnique(universitiesColleges, className);
|
|
}
|
|
|
|
return classSnPinyin;
|
|
}
|
|
|
|
/**
|
|
* 查询班级编号的数量
|
|
*
|
|
* @param classSn
|
|
* @return
|
|
*/
|
|
public long countByClassSn(String classSn) {
|
|
return schoolClassDao.createLambdaQuery().andEq(SchoolClass::getClassSn, classSn)
|
|
.count();
|
|
}
|
|
|
|
/**
|
|
* 班级的一些命名规则
|
|
*/
|
|
public final static Map<String, String> SCHOOL_CLASS_NAME_RULE = MapUtil.unmodifiable(new HashMap<String, String>() {{
|
|
put("第_?", "NO_");
|
|
}});
|
|
|
|
/**
|
|
* 功能描述: <br>
|
|
* 通过规则替换字符串
|
|
*
|
|
* @param name
|
|
* @return {@link String}
|
|
* @Author: lx
|
|
* @Date: 2023/3/23 22:00
|
|
*/
|
|
public String replaceAllByClassNameRule(String name) {
|
|
// 暂存name
|
|
String nowName = null;
|
|
for (String key : SCHOOL_CLASS_NAME_RULE.keySet()) {
|
|
nowName = defaultIfBlank(nowName, name).replaceAll(key, SCHOOL_CLASS_NAME_RULE.get(key));
|
|
}
|
|
return nowName;
|
|
}
|
|
|
|
|
|
public List<Map<String, Object>> findClassByOrgId(Long orgId) {
|
|
return schoolClassDao.getClassesByOrgId(orgId);
|
|
}
|
|
|
|
public List<Map<String,Object>> findClassesByTeacherId(Long teacherId){
|
|
return schoolClassDao.findClassesByTeacherId(teacherId);
|
|
}
|
|
|
|
public List<Map<String,Object>> getClassesBySchoolId(Long schoolId){
|
|
return schoolClassDao.getClassesBySchoolId(schoolId);
|
|
}
|
|
|
|
public List<Map<String,Object>> userClassDalGetClassListById(){
|
|
return schoolClassDao.userClassDalGetClassListById();
|
|
}
|
|
|
|
public List<Map<String, Object>> getClassListByMajorId(String majorId) {
|
|
return schoolClassDao.getClassListByMajorId(majorId);
|
|
}
|
|
|
|
public SchoolClass getByNameAndMajorId(String name, Long majorId,Long collegeId,Long facultyId) {
|
|
SchoolClassQuery query = new SchoolClassQuery();
|
|
query.setClassName(name);
|
|
query.setUniversitySystemId(majorId);
|
|
// query.setClassStatus(1);
|
|
query.setUniversitiesCollegesId(collegeId);
|
|
query.setUniversityFacultyId(facultyId);
|
|
return getFirst(getValuesByQueryNotWithPermission(query));
|
|
}
|
|
|
|
public List<SchoolClass> getAll(){
|
|
return schoolClassDao.all();
|
|
}
|
|
|
|
|
|
public List<SchoolClass> getClassesByOldSchoolId(Long oldSchoolId){
|
|
return schoolClassDao.getClassesByOldSchoolId(oldSchoolId);
|
|
}
|
|
|
|
public List<Map<String,Object>> getClassIdsByZhiyun(Long userId){
|
|
return schoolClassDao.getClassIdsByZhiyun(userId);
|
|
}
|
|
|
|
public List<Map<String,Object>> findAllClass(){
|
|
|
|
return schoolClassDao.findAllClass();
|
|
}
|
|
|
|
public List<Map<String,Object>> getClassIdsByZhiyunAndUserIdIsNull(){
|
|
return schoolClassDao.getClassIdsByZhiyunAndUserIdIsNull();
|
|
}
|
|
|
|
public String findClassNameByClassId(Long classId){
|
|
return schoolClassDao.findClassNameByClassId(classId);
|
|
}
|
|
} |