dzx 1 рік тому
батько
коміт
19f318f85a

+ 134 - 112
src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskClassStudentServiceImpl.java

@@ -52,6 +52,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -97,6 +98,7 @@ public class BandingTaskClassStudentServiceImpl extends MPJBaseServiceImpl<Bandi
         return true;
     }
 
+    @Transactional
     @Override
     public Boolean changeClass(ChangeClassDto dto) {
         this.baseMapper.delete(
@@ -137,132 +139,152 @@ public class BandingTaskClassStudentServiceImpl extends MPJBaseServiceImpl<Bandi
             if(!updateList.isEmpty()){
                 newStudentService.updateBatchById(updateList);
             }
-            createStudentData(taskClass.getBandingTaskId(), dataList, updateList);
-        }
-        return true;
-    }
+            {
+                Date createDate = new Date();
+                BandingTask bandingTask = bandingTaskMapper.selectById(taskClass.getBandingTaskId());
+                List<BandingTaskClassSureListVo> classSure = taskClassMapper.getClassSure(new BandingTaskClassStudentPageDto() {{
+                    setBandingTaskId(taskClass.getBandingTaskId());
+                }});
 
-    void createStudentData(Long badingTaskId,List<BandingTaskClassStudent> classStudents, List<BaseNewStudent> updateList){
-        Date createDate = new Date();
-        BandingTask bandingTask = bandingTaskMapper.selectById(badingTaskId);
-        List<BandingTaskClassSureListVo> classSure = taskClassMapper.getClassSure(new BandingTaskClassStudentPageDto() {{
-            setBandingTaskId(badingTaskId);
-        }});
+                Map<Long, Integer> classTotal = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getNumber));
+                Map<Long, Integer> classBoy = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getMaleCount));
+                Map<Long, Integer> classGirl = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getFemaleCount));
 
-        Map<Long, Integer> classTotal = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getNumber));
-        Map<Long, Integer> classBoy = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getMaleCount));
-        Map<Long, Integer> classGirl = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getFemaleCount));
 
+                //生成班级数据
+                Map<Long, Long> classMap = new HashMap<>();
+                Map<Long, Long> taskClassMajorMap = new HashMap<>();
+                //查询出需要新增的班级信息
+                Map<Long, Long> majorDeptMap = majorSetMapper.selectList(
+                        new QueryWrapper<BaseMajorSet>()
+                ).stream().collect(Collectors.toMap(BaseMajorSet::getId, BaseMajorSet::getDepartmentId));
+                //先查询是否已经存在这个班级,如果存在就更新,不存在就新增
+                BaseClass baseClass = classService.getOne(
+                        new QueryWrapper<BaseClass>().lambda()
+                                .eq(BaseClass::getName, taskClass.getName())
+                                .eq(BaseClass::getClassroomId, taskClass.getClassroomId())
+                                .eq(BaseClass::getTeacherId, taskClass.getTeacherId())
+                                .eq(BaseClass::getMajorSetId, taskClass.getMajorSetId())
+                                .eq(BaseClass::getGradeId, bandingTask.getGradeId())
+                                .eq(BaseClass::getEnrollType, bandingTask.getEnrollType())
+                );
+                if(baseClass == null){
+                    baseClass = new BaseClass() {{
+                        setName(taskClass.getName());
+                        setClassroomId(taskClass.getClassroomId());
+                        setTeacherId(taskClass.getTeacherId());
+                        setIsGraduate(1);
+                        setMajorSetId(taskClass.getMajorSetId());
+                        setOrgId(majorDeptMap.get(taskClass.getMajorSetId()));
+                        setIsOrderClass(taskClass.getIsOrderClass()==null?0:taskClass.getIsOrderClass().intValue());
+                        setGradeId(bandingTask.getGradeId());
+                        setDeleteMark(DeleteMark.NODELETE.getCode());
+                        setEnrollType(bandingTask.getEnrollType());
+                    }};
 
-        //生成班级数据
-        Map<Long, Long> classMap = new HashMap<>();
-        Map<Long, Long> taskClassMajorMap = new HashMap<>();
-        //查询出需要新增的班级信息
-        List<Long> classIds = classStudents.stream().map(BandingTaskClassStudent::getBandingTaskClassId).collect(Collectors.toList());
-        List<BandingTaskClass> classList = taskClassMapper.selectList(new QueryWrapper<BandingTaskClass>().lambda().in(BandingTaskClass::getId, classIds));
-        Map<Long, Long> majorDeptMap = majorSetMapper.selectList(new QueryWrapper<BaseMajorSet>()).stream().collect(Collectors.toMap(BaseMajorSet::getId, BaseMajorSet::getDepartmentId));
-        for (BandingTaskClass taskClass : classList) {
-            BaseClass baseClass = new BaseClass() {{
-                setName(taskClass.getName());
-                setClassroomId(taskClass.getClassroomId());
-                setTeacherId(taskClass.getTeacherId());
-                setIsGraduate(1);
-                setOrgId(majorDeptMap.get(taskClass.getMajorSetId()));
-                setIsOrderClass(taskClass.getIsOrderClass()==null?0:taskClass.getIsOrderClass().intValue());
-                setGradeId(bandingTask.getGradeId());
-                setDeleteMark(DeleteMark.NODELETE.getCode());
-                setEnrollType(bandingTask.getEnrollType());
-            }};
+                    classService.save(baseClass);
 
-            classService.save(baseClass);
+                    BaseClassMajorSet majorSet = new BaseClassMajorSet() {{
+                        setCreateDate(createDate);
+                        setMajorSetId(taskClass.getMajorSetId());
+                        setPlanTotalStudent(taskClass.getNumber());
+                        setTotalStudent(classTotal.get(taskClass.getId()));
+                        setBoyNum(classBoy.get(taskClass.getId()));
+                        setGirlNum(classGirl.get(taskClass.getId()));
+                    }};
+                    majorSet.setClassId(baseClass.getId());
+                    classMajorSetMapper.insert(majorSet);
+                }
 
-            BaseClassMajorSet majorSet = new BaseClassMajorSet() {{
-                setCreateDate(createDate);
-                setMajorSetId(taskClass.getMajorSetId());
-                setClassId(baseClass.getId());
-                setPlanTotalStudent(taskClass.getNumber());
-                setTotalStudent(classTotal.get(taskClass.getId()));
-                setBoyNum(classBoy.get(taskClass.getId()));
-                setGirlNum(classGirl.get(taskClass.getId()));
-            }};
-            classMajorSetMapper.insert(majorSet);
 
-            classMap.put(taskClass.getId(), baseClass.getId());
-            taskClassMajorMap.put(taskClass.getId(), taskClass.getMajorSetId());
-        }
+                classMap.put(taskClass.getId(), baseClass.getId());
+                taskClassMajorMap.put(taskClass.getId(), taskClass.getMajorSetId());
 
-        /**
-         * 新增学生数据
-         * 1、新增用户xjr_user
-         * 2、新增用户与角色的关系xjr_user_role_relation
-         * 3、新增学生基本信息base_student
-         * 4、新增学籍信息表base_student_school_roll
-         * 5、新增家庭信息表base_student_family
-         */
-        LocalDateTime now = LocalDateTime.now();
-        Map<Long, Long> studentClassRelation = classStudents.stream().collect(Collectors.toMap(BandingTaskClassStudent::getNewStudentId, BandingTaskClassStudent::getBandingTaskClassId));
-        for (BaseNewStudent student : updateList) {
-            LocalDate birthDate = getBirthDate(student.getCredentialNumber());
-            User xjrUser = new User() {{
-                setCreateDate(now);
-                setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
-                setName(student.getName());
-                setUserName(student.getCredentialNumber());
-                setCredentialNumber(student.getCredentialNumber());
-                setCredentialType("ZZLS10007");
-                setMobile(student.getMobile());
-                setEnabledMark(EnabledMark.DISABLED.getCode());
-                setGender(student.getGender());
-                setIsChangePassword(1);
-                setBirthDate(birthDate.atStartOfDay());
-            }};
-            userService.save(xjrUser);
+                /**
+                 * 新增学生数据
+                 * 1、新增用户xjr_user
+                 * 2、新增用户与角色的关系xjr_user_role_relation
+                 * 3、新增学生基本信息base_student
+                 * 4、新增学籍信息表base_student_school_roll
+                 * 5、新增家庭信息表base_student_family
+                 */
+                LocalDateTime now = LocalDateTime.now();
+                List<String> idNumbers = updateList.stream().map(BaseNewStudent::getCredentialNumber).collect(Collectors.toList());
+                List<User> students = userService.list(new QueryWrapper<User>().lambda().in(User::getCredentialNumber, idNumbers));
+                Set<String> userSet = students.stream().map(User::getCredentialNumber).collect(Collectors.toSet());
+                Map<Long, Long> studentClassRelation = dataList.stream().collect(Collectors.toMap(BandingTaskClassStudent::getNewStudentId, BandingTaskClassStudent::getBandingTaskClassId));
+                for (BaseNewStudent student : updateList) {
+                    if(userSet.contains(student.getCredentialNumber())){
+                        continue;
+                    }
+                    LocalDate birthDate = getBirthDate(student.getCredentialNumber());
+                    User xjrUser = new User() {{
+                        setCreateDate(now);
+                        setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
+                        setName(student.getName());
+                        setUserName(student.getCredentialNumber());
+                        setCredentialNumber(student.getCredentialNumber());
+                        setCredentialType("ZZLS10007");
+                        setMobile(student.getMobile());
+                        setEnabledMark(EnabledMark.DISABLED.getCode());
+                        setGender(student.getGender());
+                        setIsChangePassword(1);
+                        setBirthDate(birthDate.atStartOfDay());
+                    }};
+                    userService.save(xjrUser);
 
-            UserRoleRelation userRoleRelation = new UserRoleRelation() {{
-                setRoleId(RoleEnum.STUDENT.getCode());
-                setUserId(xjrUser.getId());
-            }};
-            roleRelationService.save(userRoleRelation);
+                    UserRoleRelation userRoleRelation = new UserRoleRelation() {{
+                        setRoleId(RoleEnum.STUDENT.getCode());
+                        setUserId(xjrUser.getId());
+                    }};
+                    roleRelationService.save(userRoleRelation);
 
-            BaseStudent baseStudent = new BaseStudent() {{
-                setUserId(xjrUser.getId());
-                setCreateDate(now);
-                setStudentId(student.getCredentialNumber());
-                if(student.getHeight() != null){
-                    setHeight(student.getHeight().doubleValue());
-                }
-                if(student.getWeight() != null){
-                    setWeight(student.getWeight().doubleValue());
-                }
-            }};
-            studentService.save(baseStudent);
+                    BaseStudent baseStudent = new BaseStudent() {{
+                        setUserId(xjrUser.getId());
+                        setCreateDate(now);
+                        setStudentId(student.getCredentialNumber());
+                        if(student.getHeight() != null){
+                            setHeight(student.getHeight().doubleValue());
+                        }
+                        if(student.getWeight() != null){
+                            setWeight(student.getWeight().doubleValue());
+                        }
+                    }};
+                    studentService.save(baseStudent);
 
-            BaseStudentSchoolRoll schoolRoll = new BaseStudentSchoolRoll() {{
-                setUserId(xjrUser.getId());
-                if(student.getScore() != null){
-                    setGraduatedScore(student.getScore().doubleValue());
-                }
+                    BaseStudentSchoolRoll schoolRoll = new BaseStudentSchoolRoll() {{
+                        setUserId(xjrUser.getId());
+                        if(student.getScore() != null){
+                            setGraduatedScore(student.getScore().doubleValue());
+                        }
 
-                setGraduatedUniversity(student.getGraduateSchool());
-                setClassId(classMap.get(studentClassRelation.get(student.getId())));
-                setMajorSetId(taskClassMajorMap.get(studentClassRelation.get(student.getId())));
-                setStduyStatus(student.getStduyStatus());
-                setEnrollType(bandingTask.getEnrollType());
-                setStudentSource(student.getSource());
-                setGradeId(bandingTask.getGradeId());
-                setArchivesStatus(ArchivesStatusEnum.FB2901.getCode());
-                setCreateDate(now);
-            }};
-            schoolRollService.save(schoolRoll);
+                        setGraduatedUniversity(student.getGraduateSchool());
+                        setClassId(classMap.get(studentClassRelation.get(student.getId())));
+                        setMajorSetId(taskClassMajorMap.get(studentClassRelation.get(student.getId())));
+                        setStduyStatus(student.getStduyStatus());
+                        setEnrollType(bandingTask.getEnrollType());
+                        setStudentSource(student.getSource());
+                        setGradeId(bandingTask.getGradeId());
+                        setArchivesStatus(ArchivesStatusEnum.FB2901.getCode());
+                        setCreateDate(now);
+                    }};
+                    schoolRollService.save(schoolRoll);
 
-            BaseStudentFamily studentFamily = new BaseStudentFamily() {{
-                setCreateDate(now);
-                setUserId(xjrUser.getId());
-                setTelephone(student.getFamilyMobile());
-                setAddress(student.getFamilyAddress());
-            }};
-            familyService.save(studentFamily);
+                    BaseStudentFamily studentFamily = new BaseStudentFamily() {{
+                        setCreateDate(now);
+                        setUserId(xjrUser.getId());
+                        setTelephone(student.getFamilyMobile());
+                        setAddress(student.getFamilyAddress());
+                    }};
+                    familyService.save(studentFamily);
+                }
+            }
         }
+        return true;
+    }
+
+    void createStudentData(Long badingTaskId,List<BandingTaskClassStudent> classStudents, List<BaseNewStudent> updateList){
+
     }
 
     LocalDate getBirthDate(String idCardNumber){

+ 129 - 127
src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskServiceImpl.java

@@ -523,6 +523,7 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
         return classStudentMap;
     }
 
+    @Transactional
     @Override
     public Boolean sure(SureBandingTaskDto dto) {
         List<BandingTaskClassStudent> classStudents = classStudentService.selectJoinList(BandingTaskClassStudent.class,
@@ -552,7 +553,134 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
         }
 
         //形成学生数据
-        createStudentData(dto.getId(), classStudents, updateList);
+        {
+            Date createDate = new Date();
+            BandingTask bandingTask = this.getById(dto.getId());
+            List<BandingTaskClassSureListVo> classSure = taskClassMapper.getClassSure(new BandingTaskClassStudentPageDto() {{
+                setBandingTaskId(dto.getId());
+            }});
+
+            Map<Long, Integer> classTotal = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getNumber));
+            Map<Long, Integer> classBoy = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getMaleCount));
+            Map<Long, Integer> classGirl = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getFemaleCount));
+
+            //生成班级数据
+            Map<Long, Long> classMap = new HashMap<>();
+            Map<Long, Long> taskClassMajorMap = new HashMap<>();
+            //查询出需要新增的班级信息
+            List<Long> classIds = classStudents.stream().map(BandingTaskClassStudent::getBandingTaskClassId).collect(Collectors.toList());
+            List<BandingTaskClass> classList = taskClassMapper.selectList(new QueryWrapper<BandingTaskClass>().lambda().in(BandingTaskClass::getId, classIds));
+
+            long maxCode = classService.count(
+                    new QueryWrapper<BaseClass>().lambda()
+                            .eq(BaseClass::getGradeId, bandingTask.getGradeId())
+            );
+            BaseGrade baseGrade = gradeService.getById(bandingTask.getGradeId());
+            String gradeCode = baseGrade.getTitle().replace("年", "");
+
+            Map<Long, Long> majorDeptMap = majorSetMapper.selectList(new QueryWrapper<BaseMajorSet>()).stream().collect(Collectors.toMap(BaseMajorSet::getId, BaseMajorSet::getDepartmentId));
+            for (BandingTaskClass taskClass : classList) {
+                long finalMaxCode = maxCode;
+                BaseClass baseClass = new BaseClass() {{
+                    setName(taskClass.getName());
+                    setClassroomId(taskClass.getClassroomId());
+                    setTeacherId(taskClass.getTeacherId());
+                    setIsGraduate(1);
+                    setIsOrderClass(taskClass.getIsOrderClass()==null?0:taskClass.getIsOrderClass().intValue());
+                    setGradeId(bandingTask.getGradeId());
+                    setDeleteMark(DeleteMark.NODELETE.getCode());
+                    setEnrollType(bandingTask.getEnrollType());
+                    setOrgId(majorDeptMap.get(taskClass.getMajorSetId()));
+                    setCode(gradeCode + String.format("%03d", finalMaxCode));
+                    setMajorSetId(taskClass.getMajorSetId());
+                }};
+
+                classService.save(baseClass);
+
+                BaseClassMajorSet majorSet = new BaseClassMajorSet() {{
+                    setCreateDate(createDate);
+                    setMajorSetId(taskClass.getMajorSetId());
+                    setClassId(baseClass.getId());
+                    setPlanTotalStudent(taskClass.getNumber());
+                    setTotalStudent(classTotal.get(taskClass.getId()));
+                    setBoyNum(classBoy.get(taskClass.getId()));
+                    setGirlNum(classGirl.get(taskClass.getId()));
+                }};
+                classMajorSetMapper.insert(majorSet);
+
+                classMap.put(taskClass.getId(), baseClass.getId());
+                taskClassMajorMap.put(taskClass.getId(), taskClass.getMajorSetId());
+                maxCode ++;
+            }
+
+            /**
+             * 新增学生数据
+             * 1、新增用户xjr_user
+             * 2、新增用户与角色的关系xjr_user_role_relation
+             * 3、新增学生基本信息base_student
+             * 4、新增学籍信息表base_student_school_roll
+             * 5、新增家庭信息表base_student_family
+             */
+            LocalDateTime now = LocalDateTime.now();
+            Map<Long, Long> studentClassRelation = classStudents.stream().collect(Collectors.toMap(BandingTaskClassStudent::getNewStudentId, BandingTaskClassStudent::getBandingTaskClassId));
+            for (BaseNewStudent student : updateList) {
+                LocalDate birthDate = getBirthDate(student.getCredentialNumber());
+                User xjrUser = new User() {{
+                    setCreateDate(now);
+                    setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
+                    setName(student.getName());
+                    setUserName(student.getCredentialNumber());
+                    setCredentialNumber(student.getCredentialNumber());
+                    setCredentialType("ZZLS10007");
+                    setMobile(student.getMobile());
+                    setEnabledMark(EnabledMark.DISABLED.getCode());
+                    setGender(student.getGender());
+                    setIsChangePassword(1);
+                    setBirthDate(birthDate.atStartOfDay());
+                }};
+                userService.save(xjrUser);
+
+                UserRoleRelation userRoleRelation = new UserRoleRelation() {{
+                    setRoleId(RoleEnum.STUDENT.getCode());
+                    setUserId(xjrUser.getId());
+                }};
+                roleRelationService.save(userRoleRelation);
+
+                BaseStudent baseStudent = new BaseStudent() {{
+                    setUserId(xjrUser.getId());
+                    setCreateDate(now);
+                    setStudentId(student.getCredentialNumber());
+                    setHeight(student.getHeight().doubleValue());
+                    setWeight(student.getWeight().doubleValue());
+                }};
+                studentService.save(baseStudent);
+
+                BaseStudentSchoolRoll schoolRoll = new BaseStudentSchoolRoll() {{
+                    setUserId(xjrUser.getId());
+                    if(student.getScore() != null){
+                        setGraduatedScore(student.getScore().doubleValue());
+                    }
+                    setGraduatedUniversity(student.getGraduateSchool());
+                    setClassId(classMap.get(studentClassRelation.get(student.getId())));
+                    setMajorSetId(taskClassMajorMap.get(studentClassRelation.get(student.getId())));
+                    setStduyStatus(student.getStduyStatus());
+                    setEnrollType(bandingTask.getEnrollType());
+                    setStudentSource(student.getSource());
+                    setGradeId(bandingTask.getGradeId());
+                    setArchivesStatus(ArchivesStatusEnum.FB2901.getCode());
+                    setCreateDate(now);
+                }};
+                schoolRollService.save(schoolRoll);
+
+                BaseStudentFamily studentFamily = new BaseStudentFamily() {{
+                    setCreateDate(now);
+                    setUserId(xjrUser.getId());
+                    setTelephone(student.getFamilyMobile());
+                    setAddress(student.getFamilyAddress());
+                }};
+                familyService.save(studentFamily);
+            }
+        }
 
         BandingTask bandingTask = this.getById(dto.getId());
         bandingTask.setStatus(1);
@@ -566,132 +694,6 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
         return this.baseMapper.getPage(page, dto);
     }
 
-    void createStudentData(Long badingTaskId,List<BandingTaskClassStudent> classStudents, List<BaseNewStudent> updateList){
-        Date createDate = new Date();
-        BandingTask bandingTask = this.getById(badingTaskId);
-        List<BandingTaskClassSureListVo> classSure = taskClassMapper.getClassSure(new BandingTaskClassStudentPageDto() {{
-            setBandingTaskId(badingTaskId);
-        }});
-
-        Map<Long, Integer> classTotal = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getNumber));
-        Map<Long, Integer> classBoy = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getMaleCount));
-        Map<Long, Integer> classGirl = classSure.stream().collect(Collectors.toMap(BandingTaskClassSureListVo::getId, BandingTaskClassSureListVo::getFemaleCount));
-
-        //生成班级数据
-        Map<Long, Long> classMap = new HashMap<>();
-        Map<Long, Long> taskClassMajorMap = new HashMap<>();
-        //查询出需要新增的班级信息
-        List<Long> classIds = classStudents.stream().map(BandingTaskClassStudent::getBandingTaskClassId).collect(Collectors.toList());
-        List<BandingTaskClass> classList = taskClassMapper.selectList(new QueryWrapper<BandingTaskClass>().lambda().in(BandingTaskClass::getId, classIds));
-
-        long maxCode = classService.count(
-                new QueryWrapper<BaseClass>().lambda()
-                        .eq(BaseClass::getGradeId, bandingTask.getGradeId())
-        );
-        BaseGrade baseGrade = gradeService.getById(bandingTask.getGradeId());
-        String gradeCode = baseGrade.getTitle().replace("年", "");
-
-        Map<Long, Long> majorDeptMap = majorSetMapper.selectList(new QueryWrapper<BaseMajorSet>()).stream().collect(Collectors.toMap(BaseMajorSet::getId, BaseMajorSet::getDepartmentId));
-        for (BandingTaskClass taskClass : classList) {
-            BaseClass baseClass = new BaseClass() {{
-                setName(taskClass.getName());
-                setClassroomId(taskClass.getClassroomId());
-                setTeacherId(taskClass.getTeacherId());
-                setIsGraduate(1);
-                setIsOrderClass(taskClass.getIsOrderClass()==null?0:taskClass.getIsOrderClass().intValue());
-                setGradeId(bandingTask.getGradeId());
-                setDeleteMark(DeleteMark.NODELETE.getCode());
-                setEnrollType(bandingTask.getEnrollType());
-                setOrgId(majorDeptMap.get(taskClass.getMajorSetId()));
-                setCode(gradeCode + String.format("%03d", maxCode));
-            }};
-
-            classService.save(baseClass);
-
-            BaseClassMajorSet majorSet = new BaseClassMajorSet() {{
-                setCreateDate(createDate);
-                setMajorSetId(taskClass.getMajorSetId());
-                setClassId(baseClass.getId());
-                setPlanTotalStudent(taskClass.getNumber());
-                setTotalStudent(classTotal.get(taskClass.getId()));
-                setBoyNum(classBoy.get(taskClass.getId()));
-                setGirlNum(classGirl.get(taskClass.getId()));
-            }};
-            classMajorSetMapper.insert(majorSet);
-
-            classMap.put(taskClass.getId(), baseClass.getId());
-            taskClassMajorMap.put(taskClass.getId(), taskClass.getMajorSetId());
-        }
-
-        /**
-         * 新增学生数据
-         * 1、新增用户xjr_user
-         * 2、新增用户与角色的关系xjr_user_role_relation
-         * 3、新增学生基本信息base_student
-         * 4、新增学籍信息表base_student_school_roll
-         * 5、新增家庭信息表base_student_family
-         */
-        LocalDateTime now = LocalDateTime.now();
-        Map<Long, Long> studentClassRelation = classStudents.stream().collect(Collectors.toMap(BandingTaskClassStudent::getNewStudentId, BandingTaskClassStudent::getBandingTaskClassId));
-        for (BaseNewStudent student : updateList) {
-            LocalDate birthDate = getBirthDate(student.getCredentialNumber());
-            User xjrUser = new User() {{
-                setCreateDate(now);
-                setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
-                setName(student.getName());
-                setUserName(student.getCredentialNumber());
-                setCredentialNumber(student.getCredentialNumber());
-                setCredentialType("ZZLS10007");
-                setMobile(student.getMobile());
-                setEnabledMark(EnabledMark.DISABLED.getCode());
-                setGender(student.getGender());
-                setIsChangePassword(1);
-                setBirthDate(birthDate.atStartOfDay());
-            }};
-            userService.save(xjrUser);
-
-            UserRoleRelation userRoleRelation = new UserRoleRelation() {{
-                setRoleId(RoleEnum.STUDENT.getCode());
-                setUserId(xjrUser.getId());
-            }};
-            roleRelationService.save(userRoleRelation);
-
-            BaseStudent baseStudent = new BaseStudent() {{
-                setUserId(xjrUser.getId());
-                setCreateDate(now);
-                setStudentId(student.getCredentialNumber());
-                setHeight(student.getHeight().doubleValue());
-                setWeight(student.getWeight().doubleValue());
-            }};
-            studentService.save(baseStudent);
-
-            BaseStudentSchoolRoll schoolRoll = new BaseStudentSchoolRoll() {{
-                setUserId(xjrUser.getId());
-                if(student.getScore() != null){
-                    setGraduatedScore(student.getScore().doubleValue());
-                }
-                setGraduatedUniversity(student.getGraduateSchool());
-                setClassId(classMap.get(studentClassRelation.get(student.getId())));
-                setMajorSetId(taskClassMajorMap.get(studentClassRelation.get(student.getId())));
-                setStduyStatus(student.getStduyStatus());
-                setEnrollType(bandingTask.getEnrollType());
-                setStudentSource(student.getSource());
-                setGradeId(bandingTask.getGradeId());
-                setArchivesStatus(ArchivesStatusEnum.FB2901.getCode());
-                setCreateDate(now);
-            }};
-            schoolRollService.save(schoolRoll);
-
-            BaseStudentFamily studentFamily = new BaseStudentFamily() {{
-                setCreateDate(now);
-                setUserId(xjrUser.getId());
-                setTelephone(student.getFamilyMobile());
-                setAddress(student.getFamilyAddress());
-            }};
-            familyService.save(studentFamily);
-        }
-    }
-
     LocalDate getBirthDate(String idCardNumber){
         // 获取出生日期前6位,即yyyyMM
         String birthdayString = idCardNumber.substring(6, 14);

+ 12 - 0
src/main/java/com/xjrsoft/module/base/controller/WhitelistManagementController.java

@@ -102,6 +102,18 @@ public class WhitelistManagementController {
         return RT.ok(updated);
     }
 
+    @PostMapping("/set-temporary")
+    @ApiOperation(value = "设置为永久")
+    @SaCheckPermission("whitelistmanagement:add")
+    public RT<Boolean> setTemporary(@Valid @RequestBody List<Long> ids){
+        List<WhitelistManagement> list = whitelistManagementService.listByIds(ids);
+        for (WhitelistManagement whitelistManagement : list) {
+            whitelistManagement.setIsTemporary(0);
+        }
+        boolean updated = whitelistManagementService.updateBatchById(list);
+        return RT.ok(updated);
+    }
+
     @PutMapping
     @ApiOperation(value = "修改白名单管理")
     @SaCheckPermission("whitelistmanagement:edit")

+ 49 - 61
src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java

@@ -6,12 +6,7 @@ import cn.hutool.core.util.ClassUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.db.Db;
-import cn.hutool.db.Entity;
-import cn.hutool.db.GlobalDbConfig;
-import cn.hutool.db.Page;
-import cn.hutool.db.PageResult;
-import cn.hutool.db.Session;
+import cn.hutool.db.*;
 import cn.hutool.db.meta.Column;
 import cn.hutool.db.meta.JdbcType;
 import cn.hutool.db.meta.MetaUtil;
@@ -37,19 +32,7 @@ import com.xjrsoft.common.utils.LocalDateTimeUtil;
 import com.xjrsoft.module.app.entity.AppFuncDesign;
 import com.xjrsoft.module.app.service.IAppFuncDesignService;
 import com.xjrsoft.module.authority.utils.AuthorityUtil;
-import com.xjrsoft.module.form.dto.AppFormExecuteAddOrUpdateDto;
-import com.xjrsoft.module.form.dto.AppFormExecuteDeleteDto;
-import com.xjrsoft.module.form.dto.AppFormExecuteInfoDto;
-import com.xjrsoft.module.form.dto.AppFormExecuteListDto;
-import com.xjrsoft.module.form.dto.AppFormExecutePageDto;
-import com.xjrsoft.module.form.dto.FormExecuteAddOrUpdateDto;
-import com.xjrsoft.module.form.dto.FormExecuteDeleteDto;
-import com.xjrsoft.module.form.dto.FormExecuteInfoDto;
-import com.xjrsoft.module.form.dto.FormExecuteListDto;
-import com.xjrsoft.module.form.dto.FormExecutePageDto;
-import com.xjrsoft.module.form.dto.FormExecuteWorkflowAddDto;
-import com.xjrsoft.module.form.dto.FormExecuteWorkflowInfoDto;
-import com.xjrsoft.module.form.dto.FormExecuteWorkflowUpdateDto;
+import com.xjrsoft.module.form.dto.*;
 import com.xjrsoft.module.form.entity.FormDesignConfig;
 import com.xjrsoft.module.form.entity.FormRelease;
 import com.xjrsoft.module.form.entity.FormReleaseConfig;
@@ -61,12 +44,7 @@ import com.xjrsoft.module.form.utils.FormDataTransUtil;
 import com.xjrsoft.module.form.vo.DeskColumnsVo;
 import com.xjrsoft.module.form.vo.DeskTableInfoVo;
 import com.xjrsoft.module.generator.constant.ComponentTypeConstant;
-import com.xjrsoft.module.generator.entity.ColumnConfig;
-import com.xjrsoft.module.generator.entity.ListConfig;
-import com.xjrsoft.module.generator.entity.QueryConfig;
-import com.xjrsoft.module.generator.entity.TableConfig;
-import com.xjrsoft.module.generator.entity.TableFieldConfig;
-import com.xjrsoft.module.generator.entity.TableStructureConfig;
+import com.xjrsoft.module.generator.entity.*;
 import com.xjrsoft.module.generator.utils.GeneratorUtil;
 import com.xjrsoft.module.system.service.ICodeRuleService;
 import lombok.AllArgsConstructor;
@@ -95,17 +73,10 @@ import javax.sql.DataSource;
 import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
+
 /**
  * @Author: tzx
  * @Date: 2022/5/11 15:05
@@ -470,7 +441,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
         FormTemplate template = formTemplateMapper.selectById(formRelease.getFormId());
 
         long id = insertFormData(formData, template);
-        if(id != 0){
+        if (id != 0) {
             return true;
         }
         return false;
@@ -501,7 +472,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
         template.setFormJson(configJson);
 
         long id = insertFormData(formData, template);
-        if(id != 0){
+        if (id != 0) {
             return true;
         }
         return false;
@@ -524,11 +495,13 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
             Table tableMeta = SqlRunnerAdapter.db().getTableMeta(tableName);
             Collection<Column> columns = tableMeta.getColumns();
             Optional<Column> pk = columns.stream().filter(Column::isPk).findFirst();
+            // 根据表单配置获取字典数据
+            Map<String, Map<String, Object>> formDicData = FormDataTransUtil.formConfigGetDicData(formDesignConfig);
 
             for (Map<String, Object> data : dataList) {
                 Entity where = Entity.create(tableName);
                 // 处理字段值
-                Map<String, Object> toSaveFormData = handleFormDataForSave(data, formDesignConfig, tableName, new ArrayList<>());
+                Map<String, Object> toSaveFormData = handleFormDataForSave(data, formDesignConfig, tableName, new ArrayList<>(), formDicData);
 
                 //formData 默认插入雪花Id主键
                 pk.ifPresent(column -> toSaveFormData.put(column.getName(), IdUtil.getSnowflakeNextId()));
@@ -660,7 +633,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
 
                             long count = SqlRunnerAdapter.db().selectCount("select count(*) from " + childTableConfig.get().getTableName() + " where " + childTableConfig.get().getRelationField() + " in " + keyValuesStr);
 
-                            if(count > 0){
+                            if (count > 0) {
                                 Boolean result = SqlRunnerAdapter.db().dynamicDelete(childTableConfig.get().getTableName(), childDeleteWhere);
                                 if (!result) {
                                     throw new MyException("删除数据失败");
@@ -698,7 +671,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
 
                             long count = SqlRunnerAdapter.db().selectCount("select count(*) from " + childTableConfig.get().getTableName() + " where " + childTableConfig.get().getRelationField() + " in " + keyValuesStr);
 
-                            if(count > 0){
+                            if (count > 0) {
                                 Boolean result = SqlRunnerAdapter.db().dynamicDelete(childTableConfig.get().getTableName(), childDeleteWhere);
                                 if (!result) {
                                     throw new MyException("删除数据失败");
@@ -921,7 +894,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
             // 自动编码code
             List<String> autoCodeList = new ArrayList<>();
             // 处理字段值
-            Map<String, Object> toSaveFormData = handleFormDataForSave(formData, formDesignConfig, tableName, autoCodeList);
+            Map<String, Object> toSaveFormData = handleFormDataForSave(formData, formDesignConfig, tableName, autoCodeList, null);
             //formData 默认插入雪花Id主键
             if (pk.isPresent()) {
                 formData.put(pk.get().getName(), keyValue);
@@ -1010,7 +983,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
             wrapperChildEntity(tableConfigList, childMaps, formData, formDesignConfig, keyValue2, null);
 
             // 处理字段值
-            formData = handleFormDataForSave(formData, formDesignConfig, tableName, null);
+            formData = handleFormDataForSave(formData, formDesignConfig, tableName, null, null);
 //            for (Map.Entry<String, Object> entry : formData.entrySet()) {
 //                if (entry.getValue().toString().isEmpty()) {
 //                    entry.setValue(null);
@@ -1036,10 +1009,15 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
 
                     if (childTableConfig.isPresent()) {
                         //删除子表单数据
-                        Entity childDeleteWhere = Entity.create(tableMap.getKey()).set(childTableConfig.get().getRelationField(), keyValue2);
-                        result = SqlRunnerAdapter.db().dynamicDelete(tableMap.getKey(), childDeleteWhere);
-                        if (!result) {
-                            throw new MyException("删除数据失败");
+                        // 查询是否有子表数据,如果有就删除,没有返回
+                        long count = SqlRunnerAdapter.db().selectCount("select * from " + tableMap.getKey() + " where " + childTableConfig.get().getRelationField() + " = " + keyValue2);
+
+                        if (count > 0) {
+                            Entity childDeleteWhere = Entity.create(tableMap.getKey()).set(childTableConfig.get().getRelationField(), keyValue2);
+                            result = SqlRunnerAdapter.db().dynamicDelete(tableMap.getKey(), childDeleteWhere);
+                            if (!result) {
+                                throw new MyException("删除数据失败");
+                            }
                         }
 
                         //再重新新增
@@ -1099,7 +1077,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
             Map<String, List<Map<String, Object>>> childFormData = wrapperChildEntity(tableConfigList, childMaps, newFormData, formDesignConfig, keyValue, autoCodeList);
 
             // 处理字段值
-            newFormData = handleFormDataForSave(newFormData, formDesignConfig, tableName, autoCodeList);
+            newFormData = handleFormDataForSave(newFormData, formDesignConfig, tableName, autoCodeList, null);
 
             //formData 默认插入雪花Id主键
             if (pk.isPresent()) {
@@ -1183,7 +1161,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
             Map<String, List<Map<String, Object>>> childFormData = wrapperChildEntity(tableConfigList, childMaps, newFormData, formDesignConfig, keyValue, null);
 
             // 处理字段值
-            newFormData = handleFormDataForSave(newFormData, formDesignConfig, tableName, null);
+            newFormData = handleFormDataForSave(newFormData, formDesignConfig, tableName, null, null);
 
             //此时的formData 已经是剔除了子表单数据了
             newFormData.remove(pk.getName());
@@ -1287,7 +1265,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
                 Map<String, List<Map<String, Object>>> childFormData = wrapperChildEntity(tableConfigList, childMaps, newFormData, formDesignConfig, keyValue, null);
 
                 // 处理字段值
-                Map<String, Object> toSaveFormData = handleFormDataForSave(newFormData, formDesignConfig, tableName, null);
+                Map<String, Object> toSaveFormData = handleFormDataForSave(newFormData, formDesignConfig, tableName, null, null);
                 //此时的formData 已经是剔除了子表单数据了
                 toSaveFormData.remove(pk.getName());
                 entity.putAll(toSaveFormData);
@@ -1299,12 +1277,12 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
                 findwhere.putAll(entity);
                 Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, findwhere);
                 Boolean isUpdate = false;
-                if(objectMap == null){
+                if (objectMap == null) {
                     isUpdate = true;
                 }
 
                 Boolean result = null;
-                if(isUpdate){
+                if (isUpdate) {
                     result = SqlRunnerAdapter.db().dynamicUpdate(tableName, entity, where);
                     if (!result) {
                         throw new MyException("更新数据失败");
@@ -1320,7 +1298,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
                         String keyValuesStr = "(" + keyValue + ")";
 
                         long count = SqlRunnerAdapter.db().selectCount("select * from " + childTableConfig.get().getTableName() + " where " + childTableConfig.get().getRelationField() + " in " + keyValuesStr);
-                        if(count > 0){
+                        if (count > 0) {
                             Entity childDeleteWhere = Entity.create(tableMap.getKey()).set(childTableConfig.get().getRelationField(), keyValue);
                             result = SqlRunnerAdapter.db().dynamicDelete(childTableConfig.get().getTableName(), childDeleteWhere);
                             if (!result) {
@@ -1361,7 +1339,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
                 Map<String, List<Map<String, Object>>> childFormData = wrapperChildEntity(tableConfigList, childMaps, newFormData, formDesignConfig, keyValue, autoCodeList);
                 System.out.println("insertOrUpdateFormDataByWorkflow 3");
                 // 处理字段值
-                Map<String, Object> toSaveFormData = handleFormDataForSave(newFormData, formDesignConfig, tableName, autoCodeList);
+                Map<String, Object> toSaveFormData = handleFormDataForSave(newFormData, formDesignConfig, tableName, autoCodeList, null);
                 toSaveFormData.put(pk.getName(), keyValue);
                 formData.put(pk.getName(), keyValue);
                 //此时的formData 已经是剔除了子表单数据了
@@ -1598,7 +1576,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
         for (Map<String, Object> item : result) {
             Entity entity = Entity.create();
             for (String key : item.keySet()) {
-                entity.set(key,item.get(key));
+                entity.set(key, item.get(key));
             }
             //将所有查询的数据id 转string
             entity.set(pkColumn.getName(), entity.get(pkColumn.getName()).toString());
@@ -1909,16 +1887,16 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
         }
         plainSelect.setWhere(queryExpression);
 
-        com.baomidou.mybatisplus.extension.plugins.pagination.Page mybatisPage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(page.getPageNumber()+1, page.getPageSize());
+        com.baomidou.mybatisplus.extension.plugins.pagination.Page mybatisPage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(page.getPageNumber() + 1, page.getPageSize());
 
         IPage<Map<String, Object>> pageResult = SqlRunnerAdapter.db().
-                selectPage(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPageNumber()+1, page.getPageSize()), plainSelect.toString());
+                selectPage(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPageNumber() + 1, page.getPageSize()), plainSelect.toString());
 
         List<Entity> rData = new ArrayList<>();
         for (Map<String, Object> item : pageResult.getRecords()) {
             Entity entity = Entity.create();
             for (String key : item.keySet()) {
-                entity.set(key,item.get(key));
+                entity.set(key, item.get(key));
             }
             //将所有查询的数据id 转string
             entity.set(pkColumn.getName(), entity.get(pkColumn.getName()).toString());
@@ -1926,9 +1904,9 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
         }
 
         PageOutput<Entity> pageOutput = new PageOutput<>();
-        pageOutput.setPageSize((int)pageResult.getSize());
-        pageOutput.setCurrentPage((int)pageResult.getCurrent());
-        pageOutput.setTotal((int)pageResult.getTotal());
+        pageOutput.setPageSize((int) pageResult.getSize());
+        pageOutput.setCurrentPage((int) pageResult.getCurrent());
+        pageOutput.setTotal((int) pageResult.getTotal());
         pageOutput.setList(rData);
 
         return pageOutput;
@@ -2175,7 +2153,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
 
             List<Entity> childEntities = new ArrayList<>();
             for (Map<String, Object> stringObjectMap : childMap) {
-                Map<String, Object> handedMap = handleFormDataForSave(stringObjectMap, formDesignConfig, tableConfig.getTableName(), autoCodeList);
+                Map<String, Object> handedMap = handleFormDataForSave(stringObjectMap, formDesignConfig, tableConfig.getTableName(), autoCodeList, null);
                 Entity entity = Entity.create(tableConfig.getTableName());
                 entity.putAll(handedMap);
 
@@ -2283,7 +2261,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
      * @param formDesignConfig
      */
     private Map<String, Object> handleFormDataForSave(Map<String, Object> formData, FormDesignConfig formDesignConfig,
-                                                      String tableName, List<String> autoCodeList) {
+                                                      String tableName, List<String> autoCodeList, Map<String, Map<String, Object>> formDicData) {
         Map<String, Object> resultData = new HashMap<>(formData.size());
         Map<String, List<ComponentConfig>> componentListMap = GeneratorUtil.buildFormComponentList(formDesignConfig.getFormJson().getList());
         List<ComponentConfig> configList = componentListMap.get(tableName);
@@ -2367,6 +2345,16 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
                 if (autoCodeList != null)
                     autoCodeList.add(MapUtils.getString(options, ComponentTypeConstant.AUTO_CODE_RULE));
             }
+            // 针对导入数据做处理()
+            if (formDicData != null) {
+                if (formDicData.containsKey(bindField)) {
+                    Map<String, Object> dicData = formDicData.get(bindField);
+                    List<Object> mapKey = FormDataTransUtil.getMapKey(dicData, formData.get(bindField));
+                    if (!mapKey.isEmpty()) {
+                        resultData.put(bindField, mapKey.stream().findFirst().get());
+                    }
+                }
+            }
         }
         return resultData;
     }

+ 100 - 0
src/main/java/com/xjrsoft/module/form/utils/FormDataTransUtil.java

@@ -54,6 +54,92 @@ public final class FormDataTransUtil {
         areaService = SpringUtil.getBean(IAreaService.class);
     }
 
+    /**
+     * 根据表单配置获取数据字典
+     */
+    public static Map<String, Map<String, Object>> formConfigGetDicData(FormDesignConfig formDesignConfig) {
+        List<DictionaryDetail> detailList = null;
+        Map<String, Object> userMap = null;
+        Map<String, Object> deptMap = null;
+        Map<String, Object> areaMap = null;
+        Map<String, Map<String, Object>> apiDataMap = new HashMap<>();
+        List<ComponentConfig> componentConfigList = GeneratorUtil.getFormComponentListWithMain(formDesignConfig.getFormJson().getList());
+        Map<String, Map<String, Object>> fieldValuesMap = new HashMap<>(componentConfigList.size());
+        for (ComponentConfig componentConfig : componentConfigList) {
+            String type = componentConfig.getType();
+            String bindField = componentConfig.getBindField();
+            Map<String, Object> options = componentConfig.getOptions();
+            Integer infoType = MapUtils.getInteger(options, "infoType");
+            boolean isCascade = StrUtil.equalsIgnoreCase(ComponentTypeConstant.CASCADE, type);
+            if (StrUtil.equalsIgnoreCase(ComponentTypeConstant.CHECKBOX, type)
+                    || StrUtil.equalsIgnoreCase(ComponentTypeConstant.SELECT, type)
+                    || StrUtil.equalsIgnoreCase(ComponentTypeConstant.ASSOCIATE_SELECT, type)
+                    || StrUtil.equalsIgnoreCase(ComponentTypeConstant.ASSOCIATE_POPUP, type)
+                    || StrUtil.equalsIgnoreCase(ComponentTypeConstant.MULTIPLE_POPUP, type)
+                    || StrUtil.equalsIgnoreCase(ComponentTypeConstant.RADIO, type)
+                    || isCascade) {
+                String datasourceType = MapUtils.getString(options, "datasourceType");
+                if (StrUtil.equalsIgnoreCase(datasourceType, "dic")) {
+                    if (detailList == null) {
+                        detailList = redisUtil.get(GlobalConstant.DIC_DETAIL_CACHE_KEY, new TypeReference<List<DictionaryDetail>>() {});
+                    }
+                    Map<String, Object> detailMap = detailList.stream().filter(x -> StrUtil.equalsIgnoreCase(x.getItemId().toString(), MapUtils.getString(options, "itemId"))).collect(Collectors.toMap(DictionaryDetail::getValue, DictionaryDetail::getName, (e1, e2) -> e1));
+                    fieldValuesMap.put(bindField, detailMap);
+                }else if(StrUtil.equalsIgnoreCase(ComponentTypeConstant.SELECT, type) && StrUtil.equalsIgnoreCase(datasourceType, "staticData")){ // 处理下拉静态数据
+                    List<JSONObject> staticOptions = Convert.toList(JSONObject.class, options.get("staticOptions"));
+                    Map<String, Object> dataMap = staticOptions.stream().collect(Collectors.toMap(data -> data.get("value").toString(), data -> data.get("label"), (e1, e2) -> e1));
+                    fieldValuesMap.put(bindField, dataMap);
+                }else if (StrUtil.equalsIgnoreCase(datasourceType, "api") || isCascade) {
+                    String apiId = MapUtils.getString(MapUtils.getMap(options, "apiConfig"), "apiId");
+                    if (apiDataMap.get(apiId) == null) {
+                        Object resultApiData = magicApiService.executeApi(apiId);
+                        List<Map<String, Object>> apiDataList = null;
+                        if (resultApiData instanceof PageResult) {
+                            apiDataList = (List<Map<String, Object>>) ((PageResult) resultApiData).getList();
+                        } else if (resultApiData instanceof List) {
+                            apiDataList = (List<Map<String, Object>>) resultApiData;
+                        }
+                        if (isCascade) apiDataList = treeToList(apiDataList);
+                        if (apiDataList != null ){
+                            apiDataMap.put(apiId, apiDataList.stream()
+                                    .filter(x -> ObjectUtil.isNotNull(x.get("value")))
+                                    .collect(Collectors.toMap(data -> data.get("value").toString(), data -> data.get("label"), (e1, e2) -> e1)));
+                        }
+                    }
+                    fieldValuesMap.put(bindField, apiDataMap.get(apiId));
+                }
+            } else if (StrUtil.equalsIgnoreCase(ComponentTypeConstant.AREA, type)) {
+                // TODO 待优化
+                Set<Long> areaValueList = new LinkedHashSet<>();
+                if (CollectionUtils.isNotEmpty(areaValueList)) {
+                    List<Area> areaList = areaService.list(Wrappers.<Area>query().lambda().in(Area::getId, areaValueList));
+                    areaMap = areaList.stream().collect(Collectors.toMap(area -> area.getId().toString(), Area::getName, (e1, e2) -> e1));
+                } else {
+                    areaMap = new HashMap<>(0);
+                }
+                fieldValuesMap.put(bindField, areaMap);
+            }else if (StrUtil.equalsIgnoreCase(ComponentTypeConstant.ORGANIZATION, type)
+                    || (StrUtil.equalsIgnoreCase(ComponentTypeConstant.INFO, type) && infoType.equals(1))) {
+                if (deptMap == null) {
+                    List<Department> departmentList = redisUtil.get(GlobalConstant.DEP_CACHE_KEY, new TypeReference<List<Department>>() {});
+                    deptMap = departmentList.stream().collect(Collectors.toMap(department -> department.getId().toString(), Department::getName, (e1, e2) -> e1));
+                }
+                fieldValuesMap.put(bindField, deptMap);
+            } else if (StrUtil.equalsIgnoreCase(ComponentTypeConstant.USER, type)
+                    || (StrUtil.equalsIgnoreCase(ComponentTypeConstant.INFO, type) && infoType.equals(0))) {
+                if (userMap == null) {
+                    List<User> userList = redisUtil.get(GlobalConstant.USER_CACHE_KEY, new TypeReference<List<User>>() {});
+                    userMap = userList.stream()
+                            .filter(user -> user.getId() != null)
+                            .filter(user -> user.getName() != null)
+                            .collect(Collectors.toMap(user -> user.getId().toString(), User::getName, (e1, e2) -> e1));
+                }
+                fieldValuesMap.put(bindField, userMap);
+            }
+        }
+        return fieldValuesMap;
+    }
+
     public static void transData(List<Entity> dataList, FormDesignConfig formDesignConfig) {
         if (CollectionUtils.isEmpty(dataList)) {
             return;
@@ -401,4 +487,18 @@ public final class FormDataTransUtil {
         }
         return resultList;
     }
+
+    /**
+     * 根据value获取key
+     */
+    public static List<Object> getMapKey(Map map, Object value){
+        List<Object> keyList = new ArrayList<>();
+        for(Object key: map.keySet()){
+            if(map.get(key).equals(value)){
+                keyList.add(key);
+            }
+        }
+        return keyList;
+    }
+
 }

+ 1 - 0
src/main/java/com/xjrsoft/module/liteflow/node/StudentLeaveNode.java

@@ -26,6 +26,7 @@ public class StudentLeaveNode extends NodeComponent {
         if (formId != null) {
             // 数据处理
             studentLeaveService.hikvisionLeave(formId);
+            studentLeaveService.noticeParents(formId);
         }
     }
 }

+ 3 - 1
src/main/java/com/xjrsoft/module/organization/vo/DepartmentVo.java

@@ -45,7 +45,9 @@ public class DepartmentVo implements Serializable {
     @ApiModelProperty("备注")
     private String remark;
 
-
     @ApiModelProperty("组织类别,1:公司,0:部门")
     private Integer departmentType;
+
+    @ApiModelProperty("是否专业部(1:是 0:否)")
+    private Integer isMajor;
 }

+ 4 - 1
src/main/java/com/xjrsoft/module/student/controller/BaseStudentInfoController.java

@@ -124,7 +124,10 @@ public class  BaseStudentInfoController {
         whitelistInfoVo.setWhitelistStatus(0);
         if(one != null){
             whitelistInfoVo.setWhitelistStatus(1);
-            whitelistInfoVo.setEndTime(one.getEndTime());
+            if(one.getIsTemporary() == 1){
+                whitelistInfoVo.setEndTime(one.getEndTime());
+            }
+
             whitelistInfoVo.setIsTemporary(one.getIsTemporary());
         }
 

+ 5 - 1
src/main/java/com/xjrsoft/module/student/controller/BaseStudentScholarshipReleaseController.java

@@ -106,6 +106,10 @@ public class BaseStudentScholarshipReleaseController {
     @ApiOperation(value = "新增奖学金发放记录表")
     @SaCheckPermission("basestudentscholarshiprelease:add")
     public RT<Boolean> add(@Valid @RequestBody AddBaseStudentScholarshipReleaseDto dto) {
+        BaseStudentScholarshipApplicant applicant = applicantService.getById(dto.getBaseStudentScholarshipApplicantId());
+        if(dto.getAmount() > applicant.getAmount()){
+            return RT.error("发放金额不能大于获奖金额");
+        }
         BaseStudentScholarshipRelease baseStudentScholarshipRelease = BeanUtil.toBean(dto, BaseStudentScholarshipRelease.class);
         boolean isSuccess = releaseService.save(baseStudentScholarshipRelease);
         return RT.ok(isSuccess);
@@ -149,7 +153,7 @@ public class BaseStudentScholarshipReleaseController {
                 insertList.add(
                         new BaseStudentScholarshipRelease(){{
                             setCreateDate(new Date());
-                            setAmount(applicantVo.getAmount());
+                            setAmount(0D);
                             setBaseStudentScholarshipApplicantId(applicantVo.getId());
                         }}
                 );

+ 2 - 2
src/main/java/com/xjrsoft/module/student/service/IStudentLeaveService.java

@@ -3,10 +3,8 @@ package com.xjrsoft.module.student.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.attendance.dto.AttendanceStatisticDto;
-import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.dto.StudentLeavePageDto;
 import com.xjrsoft.module.student.entity.StudentLeave;
-import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import com.xjrsoft.module.student.vo.StudentLeavePageVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -32,4 +30,6 @@ public interface IStudentLeaveService extends MPJBaseService<StudentLeave> {
     Map<Long, StudentLeave> getLeaveList(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
 
     Page<StudentLeavePageVo> getLeavePage(Page<StudentLeavePageVo> page, StudentLeavePageDto dto);
+
+    Boolean noticeParents(Long id);
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentScholarshipReleaseServiceImpl.java

@@ -37,7 +37,7 @@ public class BaseStudentScholarshipReleaseServiceImpl extends MPJBaseServiceImpl
         for (BaseStudentScholarshipApplicant applicant : applicantList) {
             UpdateWrapper<BaseStudentScholarshipApplicant> updateWrapper = new UpdateWrapper<>();
             updateWrapper.eq("id", applicant.getId());
-            updateWrapper.setSql("review_status = null");
+            updateWrapper.setSql("review_status = 0");
             applicantMapper.update(applicant, updateWrapper);
         }
 

+ 67 - 2
src/main/java/com/xjrsoft/module/student/service/impl/StudentLeaveServiceImpl.java

@@ -1,27 +1,35 @@
 package com.xjrsoft.module.student.service.impl;
 
+import cn.hutool.core.util.IdUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
+import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.attendance.dto.AttendanceStatisticDto;
 import com.xjrsoft.module.hikvision.entity.HikvisionData;
 import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
 import com.xjrsoft.module.hikvision.util.ApiUtil;
+import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.entity.UserStudent;
+import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.organization.service.IWeChatService;
 import com.xjrsoft.module.outint.vo.IdCountVo;
-import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.dto.StudentLeavePageDto;
 import com.xjrsoft.module.student.entity.StudentLeave;
 import com.xjrsoft.module.student.mapper.StudentLeaveMapper;
 import com.xjrsoft.module.student.service.IStudentLeaveService;
-import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import com.xjrsoft.module.student.vo.StudentLeavePageVo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
@@ -39,6 +47,8 @@ import java.util.Map;
 public class StudentLeaveServiceImpl extends MPJBaseServiceImpl<StudentLeaveMapper, StudentLeave> implements IStudentLeaveService {
 
     private final HikvisionDataMapper hikvisionDataMapper;
+    private final IUserService userService;
+    private final IWeChatService weChatService;
 
     @Override
     public Boolean hikvisionLeave(Long id) {
@@ -115,6 +125,61 @@ public class StudentLeaveServiceImpl extends MPJBaseServiceImpl<StudentLeaveMapp
         return baseMapper.getLeavePage(page, dto);
     }
 
+    /**
+     * 流程通过后通知学生家长
+     * @param id
+     * @return
+     */
+    @Override
+    public Boolean noticeParents(Long id) {
+        StudentLeave studentLeave = this.getById(id);
+        List<User> list = userService.list(
+                new MPJLambdaWrapper<User>()
+                        .select(User::getId)
+                        .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
+                        .innerJoin(UserStudent.class, UserStudent::getUserId, User::getId)
+                        .eq(UserStudent::getStudentId, studentLeave.getStudentUserId())
+                        .isNotNull(User::getOpenId)
+        );
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
+        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
+        String endDate = studentLeave.getEndDate().format(formatter);
+        String startDate = studentLeave.getStartDate().format(formatter);
+
+        User student = userService.getById(studentLeave.getStudentUserId());
+        String wechatTemplate = "sHsmz7LRj7HLd7GSTS3r2jCLvK-4Wp19iGzEvYK8n_I";
+        for (User user : list) {
+            WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
+            weChatSendMessageDto.setUserId(user.getOpenId());
+            weChatSendMessageDto.setTemplateId(wechatTemplate);
+            weChatSendMessageDto.setMsgId(IdUtil.getSnowflakeNextId() + "");
+
+            JSONObject data = new JSONObject();
+            // 任务名称
+            data.put("thing8", new JSONObject() {{
+                put("value", "学生请假");
+            }});
+            // 事项名称
+            data.put("thing2", new JSONObject() {{
+                put("value", "请假时间:" + startDate + "~" + endDate);
+            }});
+            // 申请人
+            data.put("thing6", new JSONObject() {{
+                put("value", student.getName());
+            }});
+            // 时间
+            data.put("time3", new JSONObject() {{
+                put("value", sdf.format(studentLeave.getCreateDate()));
+            }});
+            weChatSendMessageDto.setContent(data);
+            weChatService.sendTemplateMessage(weChatSendMessageDto);
+        }
+
+
+
+        return null;
+    }
+
     JsonArray selectResource(ApiUtil apiUtil){
         String apiPath = "/api/irds/v2/resource/resourcesByParams";
         JsonObject jsonObject = new JsonObject();