Kaynağa Gözat

Merge remote-tracking branch 'origin/dev_v2.2.1' into dev_v2.2.1

wangliang 3 yıl önce
ebeveyn
işleme
d2d23f91d3

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCourseDataImportService.java

@@ -48,7 +48,7 @@ public class AsyncCourseDataImportService extends AsyncImportTaskTemplete {
         try {
             TaskLogicService taskLogicService = SpringContextHolder.getBean(TaskLogicService.class);
 
-            // 执行导入基础学生数据
+            // 执行导入基础课程数据
             Map<String, Object> result = taskLogicService.executeImportBasicCourseLogic(map);
 
 

+ 50 - 27
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -1182,7 +1182,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         InputStream inputStream = (InputStream) map.get("inputStream");
         List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(BasicCourseImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
             List<ExcelError> excelErrorTemp = new ArrayList<>();
-//            Map<String, String> checkMap = new HashMap<>();
+            Map<String, BasicCourseImportDto> courseDtoMap = new HashMap<>();
             for (int i = 0; i < finalExcelList.size(); i++) {
                 LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
                 List<Object> basicCourseImportDtoList = excelMap.get(i);
@@ -1190,6 +1190,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 if (basicCourseImportDtoList.get(0) instanceof DescribeImportDto) {
                     continue;
                 }
+                map.put("dataCount", basicCourseImportDtoList.size());
+                List<BasicCourseImportDto> duplicateData = new ArrayList<>();
                 for (int y = 0; y < Objects.requireNonNull(basicCourseImportDtoList).size(); y++) {
                     BasicCourseImportDto basicCourseImportDto = (BasicCourseImportDto) basicCourseImportDtoList.get(y);
                     String courseName = basicCourseImportDto.getCourseName();
@@ -1197,12 +1199,25 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     String teachingRoomName = basicCourseImportDto.getTeachingRoomName();
                     String clazz = basicCourseImportDto.getClazz();
 
-                    // 检验excel中
-//                    if (checkMap.containsKey(courseCode)) {
-//                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【课程编号】:" + courseCode);
-//                    } else {
-//                        checkMap.put(courseCode, courseName);
-//                    }
+                    if (courseDtoMap.containsKey(courseCode)){
+                        BasicCourseImportDto primaryCell = courseDtoMap.get(courseCode);
+                        String primaryName = primaryCell.getCourseName();
+                        String primaryTeachingRoomName = primaryCell.getTeachingRoomName();
+                        if (!Objects.equals(primaryName,courseName)){
+                            throw ExceptionResultEnum.ERROR.exception("【课程编号】 : " + courseCode + ",存在不同的【课程名称】");
+                        }
+                        if (!Objects.equals(primaryTeachingRoomName,teachingRoomName)){
+                            throw ExceptionResultEnum.ERROR.exception("【课程编号】 : " + courseCode + ",存在不同的【所属教研室】");
+                        }
+                        String primaryClazz = primaryCell.getClazz();
+                        if (SystemConstant.strNotNull(clazz)){
+                            primaryClazz = primaryClazz + SystemConstant.COMMA + clazz;
+                            primaryCell.setClazz(primaryClazz);
+                        }
+                        duplicateData.add(basicCourseImportDto);
+                    }else {
+                        courseDtoMap.put(courseCode, basicCourseImportDto);
+                    }
 
                     excelErrorTemp.addAll(ExcelUtil.checkExcelField(basicCourseImportDto, y, i));
                     if (Objects.isNull(courseCode) || courseCode.length() > 30 || !courseCode.matches(SystemConstant.REGULAR_EXPRESSION_OF_CODE)) {
@@ -1212,6 +1227,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                         excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程名称]不符合输入规范"));
                     }
                 }
+                // 删除重复的(需要累加的)excel数据
+                basicCourseImportDtoList.removeAll(duplicateData);
             }
             if (excelErrorTemp.size() > 0) {
                 throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(excelErrorTemp));
@@ -1227,9 +1244,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         InputStream inputStream = (InputStream) map.get("inputStream");
         List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(SysUserImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
             List<ExcelError> excelErrorTemp = new ArrayList<>();
-//            Map<String, String> checkName = new HashMap<>();
-            Map<String, String> checkCode = new HashMap<>();
-            Map<String, String> checkPhoneMap = new HashMap<>();
+            Map<String,SysUserImportDto> checkDtoMap = new HashMap<>();
+
             for (int i = 0; i < finalExcelList.size(); i++) {
                 LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
                 List<Object> sysUserImportDtoList = excelMap.get(i);
@@ -1237,6 +1253,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 if (sysUserImportDtoList.get(0) instanceof DescribeImportDto) {
                     continue;
                 }
+                map.put("dataCount", sysUserImportDtoList.size());
+                List<SysUserImportDto> duplicateData = new ArrayList<>();
                 for (int y = 0; y < Objects.requireNonNull(sysUserImportDtoList).size(); y++) {
                     SysUserImportDto sysUserImportDto = (SysUserImportDto) sysUserImportDtoList.get(y);
                     String name = sysUserImportDto.getName();
@@ -1245,24 +1263,28 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     String orgName = sysUserImportDto.getOrgName();
                     String roleName = sysUserImportDto.getRoleName();
 
-                    // 检验excel中
-//                    if (checkName.containsKey(name)) {
-//                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【姓名】:" + name);
-//                    } else {
-//                        checkName.put(name, code);
-//                    }
-                    if (checkCode.containsKey(code)) {
-                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【工号】:" + code);
-                    } else {
-                        checkCode.put(code, name);
-                    }
-                    // 如果电话有值则检验电话excel中唯一性
-                    if (SystemConstant.strNotNull(phoneNumber)) {
-                        if (checkPhoneMap.containsKey(phoneNumber)) {
-                            throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【电话号码】:" + phoneNumber);
-                        } else {
-                            checkPhoneMap.put(phoneNumber, code);
+                    if (checkDtoMap.containsKey(code)){
+                        SysUserImportDto primaryCell = checkDtoMap.get(code);
+                        String priName = primaryCell.getName();
+                        String priPhoneNumber = primaryCell.getPhoneNumber();
+                        String priOrgName = primaryCell.getOrgName();
+                        if (!Objects.equals(priName,name)){
+                            throw ExceptionResultEnum.ERROR.exception("【工号】 :" + code + ",的用户存在不同的用户名称异常");
+                        }
+                        if (!Objects.equals(priPhoneNumber,phoneNumber)){
+                            throw ExceptionResultEnum.ERROR.exception("【工号】 :" + code + ",的用户存在不同的手机号异常");
+                        }
+                        if (!Objects.equals(priOrgName,orgName)){
+                            throw ExceptionResultEnum.ERROR.exception("【工号】 :" + code + ",的用户存在不同的组织架构异常");
+                        }
+                        String priRoleName = primaryCell.getRoleName();
+                        if (SystemConstant.strNotNull(roleName)){
+                            priRoleName = priRoleName + SystemConstant.COMMA + roleName;
+                            primaryCell.setRoleName(priRoleName);
                         }
+                        duplicateData.add(sysUserImportDto);
+                    }else {
+                        checkDtoMap.put(code,sysUserImportDto);
                     }
 
                     excelErrorTemp.addAll(ExcelUtil.checkExcelField(sysUserImportDto, y, i));
@@ -1276,6 +1298,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                         excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[电话号码]不符合输入规范"));
                     }
                 }
+                sysUserImportDtoList.removeAll(duplicateData);
             }
             if (excelErrorTemp.size() > 0) {
                 throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(excelErrorTemp));

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java

@@ -95,7 +95,7 @@ public class BasicCourseController {
                                       @ApiParam(value = "状态") @RequestParam(required = false) Boolean enable,
                                       @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                       @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(basicCourseService.basicCoursePage(courseName, SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime), enable, pageNumber, pageSize));
+        return ResultUtil.ok(basicCourseService.basicCoursePage(SystemConstant.convertIdToLong(belongOrgId), courseName, SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime), enable, pageNumber, pageSize));
     }
 
     @ApiOperation(value = "课程管理-新增/编辑")

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -70,6 +70,7 @@ public class SystemConstant {
     public static final int ALL_CARD = -1;
     public static final String MANUAL = "manual";
     public static final String DELIMITER = ":";
+    public static final String COMMA = ",";
     public static final int FINAL_SCALE = 1;
     public static final int CALCULATE_SCALE = 4;
     public static final int OPER_SCALE = 8;

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicCourseMapper.java

@@ -32,6 +32,7 @@ public interface BasicCourseMapper extends BaseMapper<BasicCourse> {
      * 查询课程字典
      *
      * @param iPage           分页参数
+     * @param belongOrgId     所属机构id
      * @param courseName      课程名称(模糊查询)
      * @param startCreateTime 课程创建时间(起始值)
      * @param endCreateTime   课程创建时间(终止值)
@@ -41,6 +42,7 @@ public interface BasicCourseMapper extends BaseMapper<BasicCourse> {
      * @return 结果
      */
     IPage<BasicCourseResult> findBasicCoursePage(@Param("iPage") Page<BasicCourseResult> iPage,
+                                                 @Param("belongOrgId") Long belongOrgId,
                                                  @Param("courseName") String courseName,
                                                  @Param("startCreateTime") Long startCreateTime,
                                                  @Param("endCreateTime") Long endCreateTime,

+ 2 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java

@@ -59,6 +59,7 @@ public interface BasicCourseService extends IService<BasicCourse> {
     /**
      * 查询课程信息-分页查询
      *
+     * @param belongOrgId      所属机构id
      * @param courseName      课程名称(模糊查询)
      * @param startCreateTime 课程创建时间(起始)
      * @param endCreateTime   课程创建时间(终止)
@@ -67,7 +68,7 @@ public interface BasicCourseService extends IService<BasicCourse> {
      * @param pageSize        分页容量
      * @return 查询结果
      */
-    IPage<BasicCourseResult> basicCoursePage(String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, int pageNumber, int pageSize);
+    IPage<BasicCourseResult> basicCoursePage(Long belongOrgId,String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, int pageNumber, int pageSize);
 
     /**
      * 新增/编辑 课程基础信息

+ 25 - 43
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -118,26 +118,28 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
     }
 
     @Override
-    public IPage<BasicCourseResult> basicCoursePage(String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, int pageNumber, int pageSize) {
+    public IPage<BasicCourseResult> basicCoursePage(Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, int pageNumber, int pageSize) {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
         courseName = SystemConstant.translateSpecificSign(courseName);
-        IPage<BasicCourseResult> iPage = basicCourseMapper.findBasicCoursePage(new Page<>(pageNumber, pageSize), courseName, startCreateTime, endCreateTime, enable, schoolId, orgIds);
+        IPage<BasicCourseResult> iPage = basicCourseMapper.findBasicCoursePage(new Page<>(pageNumber, pageSize),belongOrgId, courseName, startCreateTime, endCreateTime, enable, schoolId, orgIds);
         List<BasicCourseResult> list = iPage.getRecords();
         for (BasicCourseResult basicCourseResult : list) {
             Long courseId = basicCourseResult.getId();
             List<BasicUserCourse> basicUserCourseList = basicUserCourseService.list(new QueryWrapper<BasicUserCourse>().lambda().eq(BasicUserCourse::getCourseId,courseId));
             Set<Long> clazzIdSet = basicUserCourseList.stream().map(BasicUserCourse::getClazzId).collect(Collectors.toSet());
             List<ClazzDatasourceResult> clazzDatasourceResultList = new ArrayList<>();
-            for (Long id : clazzIdSet) {
-                ClazzDatasourceResult clazzDatasourceResult = new ClazzDatasourceResult();
-                BasicClazz clazz = basicClazzService.getById(id);
-                clazzDatasourceResult.setId(clazz.getId());
-                clazzDatasourceResult.setCode(clazz.getClazzCode());
-                clazzDatasourceResult.setName(clazz.getClazzName());
-                clazzDatasourceResultList.add(clazzDatasourceResult);
+            if (clazzIdSet.size() > 0){
+                List<BasicClazz> clazzList = basicClazzService.list(new QueryWrapper<BasicClazz>().lambda().in(BasicClazz::getId,clazzIdSet).orderByAsc(BasicClazz::getCreateTime));
+                for (BasicClazz clazz : clazzList) {
+                    ClazzDatasourceResult clazzDatasourceResult = new ClazzDatasourceResult();
+                    clazzDatasourceResult.setId(clazz.getId());
+                    clazzDatasourceResult.setCode(clazz.getClazzCode());
+                    clazzDatasourceResult.setName(clazz.getClazzName());
+                    clazzDatasourceResultList.add(clazzDatasourceResult);
+                }
+                basicCourseResult.setClazzList(clazzDatasourceResultList);
             }
-            basicCourseResult.setClazzList(clazzDatasourceResultList);
         }
         return iPage;
     }
@@ -198,15 +200,9 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Map<String, Object> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
-        // 班级分割标志
-        final String clazzSplit = ",";
-
         SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
         Long schoolId = sysUser.getSchoolId();
         List<BasicCourseParams> addBasicCourseParamsList = new ArrayList<>();
-        Map<String,BasicCourseParams> courseMap = new HashMap<>();
-
-
         for (int i = 0; i < finalList.size(); i++) {
             LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
             List<Object> basicCourseImportDtoList = excelMap.get(i);
@@ -214,7 +210,6 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
             if (basicCourseImportDtoList.get(0) instanceof DescribeImportDto) {
                 continue;
             }
-            map.put("dataCount", basicCourseImportDtoList.size());
             for (int y = 0; y < Objects.requireNonNull(basicCourseImportDtoList).size(); y++) {
                 BasicCourseImportDto basicCourseImportDto = (BasicCourseImportDto) basicCourseImportDtoList.get(y);
                 String courseName = basicCourseImportDto.getCourseName();
@@ -231,8 +226,8 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                     throw ExceptionResultEnum.ERROR.exception("输入的教研室【" + teachingRoomName + "】不存在");
                 }
                 Long teachingRoomId = sysOrg.getId();
-                String[] clazzList = clazz.split(clazzSplit);
-                Set<Long> clazzIdSet = new TreeSet<>();
+                String[] clazzList = clazz.split(SystemConstant.COMMA);
+                LinkedHashSet<Long> clazzIdSet = new LinkedHashSet<>();
                 for (String clzName : clazzList) {
                     BasicClazz basicClazz = basicClazzService.getOne(new QueryWrapper<BasicClazz>().lambda()
                             .eq(BasicClazz::getEnable, true)
@@ -245,31 +240,18 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                 }
 
                 BasicCourseParams basicCourseParams = new BasicCourseParams();
-                if (courseMap.containsKey(courseCode)){
-                    basicCourseParams = courseMap.get(courseCode);
-                    if (!courseName.equals(basicCourseParams.getCourseName())){
-                        throw ExceptionResultEnum.ERROR.exception("excel中相同【课程编号】:" + courseCode + ",存在不同的【课程名称】异常");
-                    }
-                    if (!teachingRoomId.equals(basicCourseParams.getTeachingRoomId())){
-                        throw ExceptionResultEnum.ERROR.exception("excel中相同【课程编号】:" + courseCode + ",存在不同的【所属教研室】异常");
-                    }
-                    Set<Long> oldClazzIdSet = basicCourseParams.getClazzIdSet();
-                    oldClazzIdSet.addAll(clazzIdSet);
-                } else {
-                    basicCourseParams.setCourseCode(courseCode);
-                    basicCourseParams.setCourseName(courseName);
-                    basicCourseParams.setTeachingRoomId(teachingRoomId);
-                    basicCourseParams.setClazzIdSet(clazzIdSet);
-                    BasicCourse old = this.getOne(new QueryWrapper<BasicCourse>().lambda()
-                            .eq(BasicCourse::getSchoolId, schoolId)
-                            .eq(BasicCourse::getEnable, true)
-                            .eq(BasicCourse::getCode, courseCode));
-                    if (Objects.nonNull(old)) {
-                        basicCourseParams.setId(old.getId());
-                    }
-                    courseMap.put(courseCode,basicCourseParams);
-                    addBasicCourseParamsList.add(basicCourseParams);
+                basicCourseParams.setCourseCode(courseCode);
+                basicCourseParams.setCourseName(courseName);
+                basicCourseParams.setTeachingRoomId(teachingRoomId);
+                basicCourseParams.setClazzIdSet(clazzIdSet);
+                BasicCourse old = this.getOne(new QueryWrapper<BasicCourse>().lambda()
+                        .eq(BasicCourse::getSchoolId, schoolId)
+                        .eq(BasicCourse::getEnable, true)
+                        .eq(BasicCourse::getCode, courseCode));
+                if (Objects.nonNull(old)) {
+                    basicCourseParams.setId(old.getId());
                 }
+                addBasicCourseParamsList.add(basicCourseParams);
             }
             List<BasicCourse> editBasicCourse = this.editEntityHelp(addBasicCourseParamsList, sysUser);
             this.saveOrUpdateBatch(editBasicCourse);

+ 4 - 5
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -689,7 +689,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             if (sysUserImportDtoList.get(0) instanceof DescribeImportDto) {
                 continue;
             }
-            map.put("dataCount", sysUserImportDtoList.size());
             for (int y = 0; y < Objects.requireNonNull(sysUserImportDtoList).size(); y++) {
                 SysUserImportDto sysUserImportDto = (SysUserImportDto) sysUserImportDtoList.get(y);
                 String name = sysUserImportDto.getName();
@@ -700,7 +699,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
                 UserSaveParams userSaveParams = new UserSaveParams();
                 Long orgId = this.analyzeOrgName(schoolId, orgName);
-                List<Long> roleIdList = this.analyzeRoleName(schoolId, roleName);
+                LinkedHashSet<Long> roleIdList = this.analyzeRoleName(schoolId, roleName);
 
                 SysUser oldUser = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getCode, code).eq(SysUser::getSchoolId, schoolId));
                 Long oldUserId = null;
@@ -1188,9 +1187,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      * @param roleName 角色名称组
      * @return 角色集合
      */
-    private List<Long> analyzeRoleName(Long schoolId, String roleName) {
-        List<Long> roleIdList = new ArrayList<>();
-        String[] arr = roleName.split(",");
+    private LinkedHashSet<Long> analyzeRoleName(Long schoolId, String roleName) {
+        LinkedHashSet<Long> roleIdList = new LinkedHashSet<>();
+        String[] arr = roleName.split(SystemConstant.COMMA);
         for (String cell : arr) {
             SysRole sysRole = sysRoleService.getOne(new QueryWrapper<SysRole>().lambda()
                     .eq(SysRole::getEnable, true)

+ 3 - 0
teachcloud-common/src/main/resources/mapper/BasicCourseMapper.xml

@@ -74,6 +74,9 @@
                 AND org.type = 'TEACHING_ROOM'
                 AND org.enable = TRUE
         <where>
+            <if test="belongOrgId != null and belongOrgId != ''">
+                AND bc.teaching_room_id = #{belongOrgId}
+            </if>
             <if test="courseName != null and courseName != ''">
                 AND bc.name LIKE CONCAT('%',#{courseName},'%')
             </if>