大数据与最优化研究所 1 рік тому
батько
коміт
339b1ef7d9

+ 224 - 0
src/test/java/com/xjrsoft/xjrsoftboot/DataMaintenanceTest.java

@@ -0,0 +1,224 @@
+package com.xjrsoft.xjrsoftboot;
+
+import cn.hutool.db.Db;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.xjrsoft.common.utils.DatasourceUtil;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseGrade;
+import com.xjrsoft.module.base.entity.BaseMajorSet;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
+import com.xjrsoft.module.teacher.entity.XjrUser;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.sql.DataSource;
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+@SpringBootTest
+public class DataMaintenanceTest {
+
+    @Test
+    public void maintenanceStudent(){
+        //读取excel的数据
+        List<StudentInfo> studentInfoList = new ArrayList<>();
+        String fileName = "C:\\Users\\大数据与最优化研究所\\Desktop\\公司-沈祖山\\学生信息20240222.xls";
+        EasyExcel.read(fileName, StudentInfo.class, new PageReadListener<StudentInfo>(studentInfoList::addAll)).sheet().doRead();
+
+        //读取数据库的数据
+        List<XjrUser> xjrUserList = new ArrayList<>();
+        List<BaseGrade> baseGradeList = new ArrayList<>();
+        List<BaseMajorSet> baseMajorSetList = new ArrayList<>();
+        List<BaseClass> baseClassList = new ArrayList<>();
+        List<DictionaryDetail> studentTypeList = new ArrayList<>();
+        List<DictionaryDetail> stduyStatusList = new ArrayList<>();
+        DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
+        try {
+            Db use = Db.use(datasource);
+            //学生用户id和身份证
+            String listXjrUserSql = "select t.credential_number,t.id from xjr_user t left join xjr_user_role_relation t1 on t1.user_id = t.id where t1.role_id = 3 and t.delete_mark = 0 and t.enabled_mark = 1";
+            xjrUserList = use.query(listXjrUserSql, XjrUser.class);
+            //年级id和年级name
+            String listGradeSql = "select t.id,t.name from base_grade t";
+            baseGradeList = use.query(listGradeSql, BaseGrade.class);
+            //在读专业方向id和在读专业方向name
+            String listMajorSeteSql = "select t.id,t.name from base_major_set t";
+            baseMajorSetList = use.query(listMajorSeteSql, BaseMajorSet.class);
+            //班级id和班级name
+            String listClassSql = "select t.id,t.name from base_class t";
+            baseClassList = use.query(listClassSql, BaseClass.class);
+            //学生类型code和学生类型name
+            String liststudentTypeSql = "select t.code,t.name from xjr_dictionary_detail t LEFT JOIN xjr_dictionary_item t1 on t1.id = t.item_id where t.delete_mark = 0 and t.enabled_mark = 1 and t1.`code` = 'student_type'";
+            studentTypeList = use.query(liststudentTypeSql, DictionaryDetail.class);
+            //就读方式code和就读方式name
+            String liststudentStatusSql = "select t.code,t.name from xjr_dictionary_detail t LEFT JOIN xjr_dictionary_item t1 on t1.id = t.item_id where t.delete_mark = 0 and t.enabled_mark = 1 and t1.`code` = 'stduy_status'";
+            stduyStatusList = use.query(liststudentStatusSql, DictionaryDetail.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        List<Object> propertyList1 = studentInfoList.stream()
+                .map(studentInfo -> getProperty(studentInfo, "sfzh"))
+                .collect(Collectors.toList());
+
+        List<Object> propertyList2 = xjrUserList.stream()
+                .map(xjrUser -> getProperty(xjrUser, "credentialNumber"))
+                .collect(Collectors.toList());
+
+        List<Object> differentProperties = new ArrayList<>(propertyList1);
+        differentProperties.removeAll(propertyList2);
+
+        System.out.println("集合一中有,集合二中没有的的属性值:");
+        differentProperties.forEach(System.out::println);
+
+        List<Object> differentProperties1 = new ArrayList<>(propertyList2);
+        differentProperties1.removeAll(propertyList1);
+
+        //System.out.println("集合二中有,集合一中没有的的属性值:");
+        //differentProperties1.forEach(System.out::println);
+
+        //已有学生数据身份证号和用户id的映射
+        Map<String, Long> credentialNumberAndUserId = new HashMap<>();
+        for (XjrUser xjrUser : xjrUserList){
+            if(xjrUser.getCredentialNumber() != null){
+                credentialNumberAndUserId.put(xjrUser.getCredentialNumber(), xjrUser.getId());
+            }
+        }
+
+        //年级id和年级name的映射
+        Map<String, Long> gradeByNameAndIdMap = new HashMap<>();
+        for (BaseGrade baseGrade : baseGradeList){
+            if(baseGrade.getName() != null){
+                gradeByNameAndIdMap.put(baseGrade.getName(), baseGrade.getId());
+            }
+        }
+
+        //在读专业方向id和在读专业方向name的映射
+        Map<String, Long> baseMajorSetByNameAndIdMap = new HashMap<>();
+        for (BaseMajorSet baseMajorSet : baseMajorSetList){
+            if(baseMajorSet.getName() != null){
+                baseMajorSetByNameAndIdMap.put(baseMajorSet.getName(), baseMajorSet.getId());
+            }
+        }
+
+        //班级id和班级name的映射
+        Map<String, Long> baseClassByNameAndIdMap = new HashMap<>();
+        for (BaseClass baseClass : baseClassList){
+            if(baseClass.getName() != null){
+                baseClassByNameAndIdMap.put(baseClass.getName(), baseClass.getId());
+            }
+        }
+
+        //学生类型code和学生类型name的映射
+        Map<String, String> studentTypeByNameAndCodeMap = new HashMap<>();
+        for (DictionaryDetail dictionaryDetail : studentTypeList){
+            if(dictionaryDetail.getName() != null){
+                studentTypeByNameAndCodeMap.put(dictionaryDetail.getName(), dictionaryDetail.getCode());
+            }
+        }
+
+        //就读方式code和就读方式name的映射
+        Map<String, String> stduyStatusByNameAndCodeMap = new HashMap<>();
+        for (DictionaryDetail dictionaryDetail : stduyStatusList){
+            if(dictionaryDetail.getName() != null){
+                stduyStatusByNameAndCodeMap.put(dictionaryDetail.getName(), dictionaryDetail.getCode());
+            }
+        }
+
+        //处理所有数据的信息
+        //添加学生家庭成员信息,添加的为监护人
+        StringBuilder modifyBSFMSqlSb = new StringBuilder();
+        modifyBSFMSqlSb.append("# base_student_family_member新增监护人电话 \n");
+        modifyBSFMSqlSb.append("INSERT INTO base_student_family_member (id, create_user_id, create_date, delete_mark, enabled_mark, user_id, name, mobile, is_guardian) \nVALUES ");
+        //学生学籍信息修改
+        StringBuilder modifyBSSRSqlSb = new StringBuilder();
+        modifyBSSRSqlSb.append("# base_student_school_roll学生学籍信息修改 \n");
+        //学生学号信息修改
+        StringBuilder modifyBSSqlSb = new StringBuilder();
+        modifyBSSqlSb.append("# base_student学生学号信息修改 \n");
+
+        long BSFMId = 456789123462290L;
+        for (int i = 0; i < studentInfoList.size(); i++) {
+            StudentInfo studentInfo = studentInfoList.get(i);
+            if(differentProperties.contains(studentInfo.getSfzh())
+                    || credentialNumberAndUserId.get(studentInfo.getSfzh()) == null
+                    || studentInfo.getJhrdh().isEmpty()){
+                continue;
+            }
+            modifyBSFMSqlSb.append("(");
+            modifyBSFMSqlSb.append(++BSFMId);
+            modifyBSFMSqlSb.append(", 1000000000000000000, '2024-02-23', 0, 1, ");
+            modifyBSFMSqlSb.append(credentialNumberAndUserId.get(studentInfo.getSfzh()));
+            modifyBSFMSqlSb.append(", '', '");
+            modifyBSFMSqlSb.append(studentInfo.getJhrdh());
+            modifyBSFMSqlSb.append("', 1),\n");
+
+            if(differentProperties.contains(studentInfo.getSfzh()) || studentInfo.getJhrdh().isEmpty()){
+                continue;
+            }
+
+            modifyBSSRSqlSb.append("UPDATE base_student_school_roll SET roll_number = '"
+                    + studentInfo.getXjh()
+                    + "', archives_number = '"
+                    + studentInfo.getXsdabh()
+                    + "', grade_id = "
+                    + ((gradeByNameAndIdMap.get(studentInfo.getBjnj())==null) ? "" : (gradeByNameAndIdMap.get(studentInfo.getBjnj())))
+                    + ", major_set_id = "
+                    + ((baseMajorSetByNameAndIdMap.get(studentInfo.getZdzyfx())==null) ? "" : (baseMajorSetByNameAndIdMap.get(studentInfo.getZdzyfx())))
+                    + ", class_id = "
+                    + ((baseClassByNameAndIdMap.get(studentInfo.getBjmc())==null) ? "" : (baseClassByNameAndIdMap.get(studentInfo.getBjmc())))
+                    + ", student_type = '"
+                    + studentTypeByNameAndCodeMap.get(studentInfo.getXslb())
+                    + "', stduy_status = '"
+                    + stduyStatusByNameAndCodeMap.get(studentInfo.getJdfs())
+                    + "' WHERE user_id = "
+                    + credentialNumberAndUserId.get(studentInfo.getSfzh())
+                    + ";\n");
+
+            modifyBSSqlSb.append("UPDATE base_student SET student_id = '"
+                    + studentInfo.getXh()
+                    + "' WHERE user_id = "
+                    + credentialNumberAndUserId.get(studentInfo.getSfzh())
+                    + ";\n");
+        }
+        //System.err.println(modifyBSFMSqlSb.toString());
+        if (modifyBSFMSqlSb.length() > 0) {
+            char lastChar = modifyBSFMSqlSb.charAt(modifyBSFMSqlSb.length() - 2);
+            if(lastChar == ','){
+                modifyBSFMSqlSb.deleteCharAt(modifyBSFMSqlSb.length() - 2);
+            }
+            //System.out.println("最后一个字符是:" + lastChar);
+            //System.out.println(lastChar == ',');
+        }
+        modifyBSFMSqlSb.append(";\n\n");
+        modifyBSSRSqlSb.append("\n\n");
+        modifyBSSqlSb.append("\n\n");
+
+        /*String filePath = "C:\\Users\\大数据与最优化研究所\\Downloads\\output.sql";
+
+        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
+            writer.write(modifyBSFMSqlSb.toString());
+            writer.write(modifyBSSRSqlSb.toString());
+            writer.write(modifyBSSqlSb.toString());
+            //System.out.println("StringBuilder content has been written to the file: " + filePath);
+        } catch (IOException e) {
+            //System.err.println("Error writing to the file: " + e.getMessage());
+        }*/
+    }
+
+    public static Object getProperty(Object object, String propertyName) {
+        try {
+            return object.getClass().getMethod("get" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1)).invoke(object);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+}

+ 71 - 0
src/test/java/com/xjrsoft/xjrsoftboot/StudentInfo.java

@@ -0,0 +1,71 @@
+package com.xjrsoft.xjrsoftboot;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Comparator;
+import java.util.Objects;
+
+@Data
+public class StudentInfo {
+    //身份证号
+    @ExcelProperty(index = 62)
+    private String sfzh;
+
+    //监护人电话
+    @ExcelProperty(index = 6)
+    private String jhrdh;
+
+    //班级名称
+    @ExcelProperty(index = 30)
+    private String bjmc;
+
+    //班级年级
+    @ExcelProperty(index = 20)
+    private String bjnj;
+
+    //在读专业方向
+    @ExcelProperty(index = 24)
+    private String zdzyfx;
+
+    //在读专业代码
+    @ExcelProperty(index = 25)
+    private String zdzydm;
+
+    //在读专业
+    @ExcelProperty(index = 26)
+    private String zdzy;
+
+    //学籍号
+    @ExcelProperty(index = 15)
+    private String xjh;
+
+    //学生档案编号
+    @ExcelProperty(index = 16)
+    private String xsdabh;
+
+    //学生类别
+    @ExcelProperty(index = 33)
+    private String xslb;
+
+    //就读方式
+    @ExcelProperty(index = 34)
+    private String jdfs;
+
+    //学号
+    @ExcelProperty(index = 54)
+    private String xh;
+
+    //报名缴费状态
+    @ExcelProperty(index = 99)
+    private String bmjfzt;
+
+    //录取专业方向
+    @ExcelProperty(index = 107)
+    private String lqzyfx;
+
+    //报读专业方向
+    @ExcelProperty(index = 111)
+    private String bdzyfx;
+}