浏览代码

Merge remote-tracking branch 'origin/dev' into dev

大数据与最优化研究所 1 年之前
父节点
当前提交
3e8c13f350

+ 1 - 0
src/main/java/com/xjrsoft/module/room/mapper/RoomBedMapper.java

@@ -143,4 +143,5 @@ public interface RoomBedMapper extends MPJBaseMapper<RoomBed> {
      * @return
      */
     List<AdjustBedClassPageVo> getClassTeacherInfo(@Param("dto") AdjustClassPageDto dto);
+
 }

+ 20 - 0
src/main/java/com/xjrsoft/module/room/mapper/RoomMapper.java

@@ -6,6 +6,7 @@ import com.xjrsoft.module.room.dto.AddRoomDto;
 import com.xjrsoft.module.room.dto.RoomPageDto;
 import com.xjrsoft.module.room.entity.Room;
 import com.xjrsoft.module.room.vo.RoomClassCountVo;
+import com.xjrsoft.module.room.vo.RoomClassExistentVo;
 import com.xjrsoft.module.room.vo.RoomExcelVo;
 import com.xjrsoft.module.room.vo.RoomPageVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -42,4 +43,23 @@ public interface RoomMapper extends MPJBaseMapper<Room> {
     Integer getMaxSortCode();
 
     List<RoomClassCountVo> getRoomClassCount(List<Long> ids);
+
+    /**
+     * 查询每个寝室已经入住的班级有哪些
+     * @param ids
+     * @return
+     */
+    List<RoomClassExistentVo> getRoomClassExistent(List<Long> ids);
+
+    /**
+     * 将有多个班级的寝室设置为混合寝室
+     * @return
+     */
+    Boolean setIsmaxTrue();
+
+    /**
+     * 将没有多个班级的混合寝室清除掉
+     * @return
+     */
+    Boolean setIsmaxFalse();
 }

+ 26 - 27
src/main/java/com/xjrsoft/module/room/service/impl/RoomBedServiceImpl.java

@@ -42,6 +42,7 @@ import com.xjrsoft.module.room.vo.NoBedStudentPageVo;
 import com.xjrsoft.module.room.vo.RoomBedExcelVo;
 import com.xjrsoft.module.room.vo.RoomBedPageVo;
 import com.xjrsoft.module.room.vo.RoomClassCountVo;
+import com.xjrsoft.module.room.vo.RoomClassExistentVo;
 import com.xjrsoft.module.room.vo.StudentPayStatusVo;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
@@ -277,7 +278,12 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
             genderSet.add(room.getGender());
             roomClassMaps.put(room.getId(), null);
         }
-
+        //
+        List<RoomClassExistentVo> roomClassExistent = roomMapper.getRoomClassExistent(dto.getRoomIds());
+        Map<Long, String> roomClassExistentMaps = new HashMap<>();
+        for (RoomClassExistentVo roomClassExistentVo : roomClassExistent) {
+            roomClassExistentMaps.put(roomClassExistentVo.getId(), roomClassExistentVo.getClassIds());
+        }
         Date modifyDate = new Date();
         Long modifyUserId = StpUtil.getLoginIdAsLong();
         //查询每个班的学生,修改床位信息
@@ -337,7 +343,10 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
                 if(dto.getIsNeedMaxRoom() == 0 && i <= bedInfoList.size()){
                     //预先查看下一个床位所属寝室是否已经有其他班级入住,有就直接跳过
                     for (int j = i; j < bedInfoList.size(); j ++) {
-                        if(roomClassMaps.get(bedInfoList.get(j).getRoomId()) != null && !classId.equals(roomClassMaps.get(bedInfoList.get(j).getRoomId())) ){
+                        Long roomId = bedInfoList.get(j).getRoomId();
+                        if((roomClassMaps.get(roomId) != null
+                                && !classId.equals(roomClassMaps.get(roomId)))
+                                && (roomClassExistentMaps.get(roomId) != null && roomClassExistentMaps.get(roomId).contains(classId.toString()))){
                             i ++;
                         }
                     }
@@ -383,16 +392,18 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
             record.setDeleteMark(DeleteMark.NODELETE.getCode());
             roomBedRecordMapper.insert(record);
         }
-
-        //查询每个寝室住入的班级数量,大于2的设置为混合寝室
-        List<RoomClassCountVo> classCountVoList = roomMapper.getRoomClassCount(dto.getRoomIds());
-        for (RoomClassCountVo roomClassCountVo : classCountVoList) {
-            if(roomClassCountVo.getClassCount() > 1){
-                Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
-                updRoom.setIsMax(1);
-                roomMapper.updateById(updRoom);
-            }
+        if(dto.getIsNeedMaxRoom() == 1){
+            roomMapper.setIsmaxTrue();
         }
+        //查询每个寝室住入的班级数量,大于2的设置为混合寝室
+//        List<RoomClassCountVo> classCountVoList = roomMapper.getRoomClassCount(dto.getRoomIds());
+//        for (RoomClassCountVo roomClassCountVo : classCountVoList) {
+//            if(roomClassCountVo.getClassCount() > 1){
+//                Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
+//                updRoom.setIsMax(1);
+//                roomMapper.updateById(updRoom);
+//            }
+//        }
         return true;
     }
 
@@ -609,22 +620,10 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
                     setStudentUserId(todoStudent.getStudentUserId());
                 }});
             }
-            //如果寝室的人是多个班级,将混合寝室改为是
-            List<RoomClassCountVo> classCountVoList = roomMapper.getRoomClassCount(roomIds);
-            for (RoomClassCountVo roomClassCountVo : classCountVoList) {
-                if(roomClassCountVo.getClassCount() > 1){
-                    Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
-                    updRoom.setIsMax(1);
-                    roomMapper.updateById(updRoom);
-                }else{
-                    Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
-                    if(updRoom != null){
-                        updRoom.setIsMax(0);
-                        roomMapper.updateById(updRoom);
-                    }
-
-                }
-            }
+            //将有多个班级的寝室设置为混合寝室
+            roomMapper.setIsmaxTrue();
+            //将没有多个班级的混合寝室清除掉
+            roomMapper.setIsmaxFalse();
         }else{
             String boyMsg = "学生";
             int i = 0;

+ 27 - 0
src/main/java/com/xjrsoft/module/room/vo/RoomClassExistentVo.java

@@ -0,0 +1,27 @@
+package com.xjrsoft.module.room.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 寝室表单出参
+* @Author dzx
+* @Date: 2024年3月20日
+* @Version 1.0
+*/
+@Data
+public class RoomClassExistentVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("班级ids")
+    private String classIds;
+
+
+}

+ 18 - 13
src/main/java/com/xjrsoft/module/student/service/impl/PbVXsxxsfytbServiceImpl.java

@@ -1,32 +1,36 @@
 package com.xjrsoft.module.student.service.impl;
 
-import camundajar.impl.scala.concurrent.impl.FutureConvertersImpl;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseSemester;
-import com.xjrsoft.module.base.service.IBaseGradeService;
-import com.xjrsoft.module.base.service.IBaseSemesterService;
-import com.xjrsoft.module.material.entity.MaterialTaskAssign;
 import com.xjrsoft.module.student.dto.PbVXsxxsfytbExcelDto;
 import com.xjrsoft.module.student.dto.PbVXsxxsfytbPageDto;
 import com.xjrsoft.module.student.dto.PersonalPortraitFeeInformationDto;
-import com.xjrsoft.module.student.entity.*;
+import com.xjrsoft.module.student.entity.BaseStudent;
+import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
+import com.xjrsoft.module.student.entity.BaseStudentUser;
+import com.xjrsoft.module.student.entity.PbSemesterConfig;
+import com.xjrsoft.module.student.entity.PbVXsxxsfytb;
 import com.xjrsoft.module.student.mapper.PbVXsxxsfytbMapper;
-import com.xjrsoft.module.student.service.IPbSemesterConfigService;
 import com.xjrsoft.module.student.service.IPbVXsxxsfytbService;
-import com.xjrsoft.module.student.vo.*;
+import com.xjrsoft.module.student.vo.PbVXsxxsfytbExcelVo;
+import com.xjrsoft.module.student.vo.PbVXsxxsfytbPageVo;
+import com.xjrsoft.module.student.vo.PbVXsxxsfytbPersonal;
+import com.xjrsoft.module.student.vo.PbVXsxxsfytbPersonalMap;
+import com.xjrsoft.module.student.vo.PersonalPortraitFeeInformationVo;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -107,18 +111,19 @@ public class PbVXsxxsfytbServiceImpl extends MPJBaseServiceImpl<PbVXsxxsfytbMapp
 
         MPJLambdaWrapper<PbVXsxxsfytb> pbVXsxxsfytbMPJLambdaWrapper = new MPJLambdaWrapper<>();
         if (dto.getSemesterId() != null && dto.getSemesterId() > 0) {
-            pbVXsxxsfytbMPJLambdaWrapper.exists("select 1 from `pb_semester_config` where base_semester_id = " + dto.getSemesterId() + " and beltcode = pb_v_xsxxsfytb.beltcode");
+            pbVXsxxsfytbMPJLambdaWrapper.exists("select 1 from `pb_semester_config` where base_semester_id = " + dto.getSemesterId() + " and beltcode = t.beltcode");
         }
 
         pbVXsxxsfytbMPJLambdaWrapper
                 .disableSubLogicDel()
                 .like(dto.getFeeitemname() != null && !dto.getFeeitemname().equals(""), PbVXsxxsfytb::getFeeitemname, dto.getFeeitemname())
                 .like(dto.getName() != null && !dto.getName().equals(""), PbVXsxxsfytb::getFeeobjname, dto.getName())
-                .eq(dto.getStudentId() != null && !dto.getStudentId().equals(""), PbVXsxxsfytb::getStudentcode, dto.getStudentId())
+                .eq(dto.getStudentId() != null && !dto.getStudentId().equals(""), BaseStudent::getStudentId, dto.getStudentId())
                 .in(dto.getClassIdList() != null && !dto.getClassIdList().isEmpty(), BaseStudentSchoolRoll::getClassId, dto.getClassIdList())
                 .eq(dto.getSemesterId() != null && dto.getSemesterId() > 0, PbSemesterConfig::getBaseSemesterId, dto.getSemesterId())
                 .leftJoin(XjrUser.class, XjrUser::getCredentialNumber, PbVXsxxsfytb::getPersonalid)
                 .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId)
+                .leftJoin(BaseStudent.class, BaseStudent::getUserId, XjrUser::getId)
                 .leftJoin(PbSemesterConfig.class, PbSemesterConfig::getBeltcode, PbVXsxxsfytb::getBeltcode)
                 .leftJoin(BaseSemester.class, BaseSemester::getId, PbSemesterConfig::getBaseSemesterId)
                 .selectAs(BaseSemester::getId, PbVXsxxsfytbPageVo::getBaseSemester)

+ 0 - 168
src/main/java/com/xjrsoft/module/student/vo/PbVXsxxsfytbExcelVo.java

@@ -17,13 +17,6 @@ import java.math.BigDecimal;
 @Data
 public class PbVXsxxsfytbExcelVo {
 
-    /**
-    * 学生主键
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("学生主键")
-    @ApiModelProperty("学生主键")
-    private String pkfeeobj;
     /**
     * 学号
     */
@@ -46,97 +39,6 @@ public class PbVXsxxsfytbExcelVo {
     @ApiModelProperty("所属班级名称")
     private String classname;
     /**
-    * 所属班级编码
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("所属班级编码")
-    @ApiModelProperty("所属班级编码")
-    private String classcode;
-    /**
-    * 所属专业名称
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("所属专业名称")
-    @ApiModelProperty("所属专业名称")
-    private String specname;
-    /**
-    * 所属专业编码
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("所属专业编码")
-    @ApiModelProperty("所属专业编码")
-    private String speccode;
-    /**
-    * 所属院系名称
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("所属院系名称")
-    @ApiModelProperty("所属院系名称")
-    private String deptname;
-    /**
-    * 所属院系编码
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("所属院系编码")
-    @ApiModelProperty("所属院系编码")
-    private String deptcode;
-    /**
-    * 入校年度
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("入校年度")
-    @ApiModelProperty("入校年度")
-    private String enteryear;
-    /**
-    * 离校年度
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("离校年度")
-    @ApiModelProperty("离校年度")
-    private String leaveyear;
-    /**
-    * 身份证号
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("身份证号")
-    @ApiModelProperty("身份证号")
-    private String personalid;
-    /**
-    *
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("")
-    @ApiModelProperty("")
-    private String userdef1;
-    /**
-    * 招生老师
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("招生老师")
-    @ApiModelProperty("招生老师")
-    private String recruiters;
-    /**
-    * 
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("")
-    @ApiModelProperty("")
-    private String userdef2;
-    /**
-    * 录取号
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("录取号")
-    @ApiModelProperty("录取号")
-    private String admissions;
-    /**
-    * 地址
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("地址")
-    @ApiModelProperty("地址")
-    private String address;
-    /**
     * 电话
     */
     @ContentStyle(dataFormat = 49)
@@ -144,41 +46,6 @@ public class PbVXsxxsfytbExcelVo {
     @ApiModelProperty("电话")
     private String telephone;
     /**
-    * 民族
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("民族")
-    @ApiModelProperty("民族")
-    private String nationality;
-    /**
-    * 政治面貌
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("政治面貌")
-    @ApiModelProperty("政治面貌")
-    private String property;
-    /**
-    * 备注
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("备注")
-    @ApiModelProperty("备注")
-    private String remarks;
-    /**
-    * 毕业学校
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("毕业学校")
-    @ApiModelProperty("毕业学校")
-    private String graduations;
-    /**
-    * 学生状态
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("学生状态")
-    @ApiModelProperty("学生状态")
-    private String state;
-    /**
     * 姓名
     */
     @ContentStyle(dataFormat = 49)
@@ -249,13 +116,6 @@ public class PbVXsxxsfytbExcelVo {
     @ApiModelProperty("缴费状态")
     private String jfzt;
     /**
-    * 收费项目编码
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("收费项目编码")
-    @ApiModelProperty("收费项目编码")
-    private String feeitemcode;
-    /**
     * 收费项目名称
     */
     @ContentStyle(dataFormat = 49)
@@ -263,13 +123,6 @@ public class PbVXsxxsfytbExcelVo {
     @ApiModelProperty("收费项目名称")
     private String feeitemname;
     /**
-    * 收费区间编码
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("收费区间编码")
-    @ApiModelProperty("收费区间编码")
-    private String beltcode;
-    /**
     * 收费区间名称
     */
     @ContentStyle(dataFormat = 49)
@@ -291,13 +144,6 @@ public class PbVXsxxsfytbExcelVo {
     @ExcelProperty("学期Id")
     @ApiModelProperty("学期Id")
     private String baseSemesterCn;
-    /**
-    * 学制
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("学制")
-    @ApiModelProperty("学制")
-    private String ratetypename;
     /**
      * 学生Id
      */
@@ -307,20 +153,6 @@ public class PbVXsxxsfytbExcelVo {
     @ApiModelProperty("学生Id")
     private String userId;
     /**
-    * 学生来源
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("学生来源")
-    @ApiModelProperty("学生来源")
-    private String resourcename;
-    /**
-    * 住宿类型
-    */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("住宿类型")
-    @ApiModelProperty("住宿类型")
-    private String quartername;
-    /**
     * 主键
     */
     @ContentStyle(dataFormat = 49)

+ 37 - 5
src/main/java/com/xjrsoft/module/workflow/utils/WorkFlowUtil.java

@@ -222,8 +222,43 @@ public class WorkFlowUtil {
     public static String generatorProcessName(WorkflowSchema workflowSchema, WorkflowSchemaConfig workflowSchemaConfig, Long workflowSerialNumber, LaunchDto dto) {
 
         if (workflowSchemaConfig.getProcessConfig().getNameRuleConfigs().size() == 0) {
+            if(dto.getFormData() != null){
+                Map<String, Map<String, Object>> formData = dto.getFormData();
+                String title_last = null;
+                for (Map<String, Object> value : formData.values()) {
+                    if(title_last != null){
+                        continue;
+                    }
+                    //物品申购特殊处理
+                    if(value.containsKey("wf_subscription_listList")){
+                        ArrayList<Map<String, Object>> list = (ArrayList<Map<String, Object>>) value.get("wf_subscription_listList");
+                        if(list.size() > 0){
+                            Map<String, Object> objectMap = list.get(0);
+//                        Set<String> keys = objectMap.keySet();
+                            String firstKey = "name_of_the_purchased_item";
+//                        for (String key : keys) {
+//                            if(firstKey != null){
+//                                continue;
+//                            }
+//                            firstKey = key;
+//                        }
+                            title_last = objectMap.get(firstKey).toString();
+                        }
+                    }
+                    for (Object o : value.values()) {
+                        if(title_last != null){
+                            continue;
+                        }
+                        title_last = o.toString();
+                    }
+                }
+                return "【" + workflowSchema.getName() + "】" + title_last;
+            }
             return workflowSchema.getName();
         }
+
+        String nameTemplate = workflowSchemaConfig.getProcessConfig().getNameRuleConfigs().stream().map(NameRuleConfig::getKey).map(String::valueOf).collect(Collectors.joining(StringPool.SPACE));
+        String replacePlaceHolder = WorkFlowUtil.replacePlaceHolder(nameTemplate, workflowSchema, workflowSerialNumber, workflowSerialNumber);
         if(dto.getFormData() != null){
             Map<String, Map<String, Object>> formData = dto.getFormData();
             String title_last = null;
@@ -254,12 +289,9 @@ public class WorkFlowUtil {
                     title_last = o.toString();
                 }
             }
-            return "【" + workflowSchema.getName() + "】" + title_last;
+            return "【" + replacePlaceHolder + "】" + title_last;
         }
-
-        String nameTemplate = workflowSchemaConfig.getProcessConfig().getNameRuleConfigs().stream().map(NameRuleConfig::getKey).map(String::valueOf).collect(Collectors.joining(StringPool.SPACE));
-
-        return WorkFlowUtil.replacePlaceHolder(nameTemplate, workflowSchema, workflowSerialNumber, workflowSerialNumber);
+        return replacePlaceHolder;
     }
 
     /**

+ 38 - 0
src/main/resources/mapper/room/RoomMapper.xml

@@ -76,4 +76,42 @@
             </foreach>
         </if>
     </select>
+
+    <select id="getRoomClassExistent" resultType="com.xjrsoft.module.room.vo.RoomClassExistentVo">
+        SELECT id,(
+        SELECT GROUP_CONCAT(DISTINCT t1.class_id) FROM base_student_school_roll t1
+        LEFT JOIN room_bed t3 ON t1.user_id = t3.student_user_id
+        WHERE t3.room_id = room.id AND t3.delete_mark = 0
+        ) AS class_count FROM room
+        where delete_mark = 0
+        <if test="ids != null and ids.size() > 0">
+            and id in
+            <foreach item="roomId" index="index" collection="ids" open="(" close=")" separator=",">
+                #{roomId}
+            </foreach>
+        </if>
+    </select>
+
+    <!-- 将有多个班级的寝室设置为混合寝室 -->
+    <update id="setIsmaxTrue">
+        UPDATE room SET is_max = 0 WHERE delete_mark = 0
+        AND (
+        SELECT COUNT(*) FROM (
+        SELECT COUNT(*) FROM base_student_school_roll t1
+        LEFT JOIN room_bed t3 ON t1.user_id = t3.student_user_id
+        WHERE t3.room_id = room.id AND t3.delete_mark = 0 GROUP BY t1.class_id
+        ) class_data
+        ) > 1
+    </update>
+    <!-- 将没有多个班级的混合寝室清除掉 -->
+    <update id="setIsmaxFalse">
+        UPDATE room SET is_max = 0 WHERE delete_mark = 0
+        AND 1 >(
+        SELECT COUNT(*) FROM (
+        SELECT COUNT(*) FROM base_student_school_roll t1
+        LEFT JOIN room_bed t3 ON t1.user_id = t3.student_user_id
+        WHERE t3.room_id = room.id AND t3.delete_mark = 0 GROUP BY t1.class_id
+        ) class_data
+        )
+    </update>
 </mapper>

+ 1 - 0
src/main/resources/sqlScript/20240311_sql.sql

@@ -50,6 +50,7 @@ CREATE TABLE `pb_semester_config` (
   `enabled_mark` INT DEFAULT NULL,
   `base_semester_id` BIGINT DEFAULT NULL COMMENT '学期',
   `beltcode` VARCHAR(30) DEFAULT NULL COMMENT '攀宝学期code',
+  `beltname` VARCHAR(30) DEFAULT NULL COMMENT '攀宝学期名称',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='攀宝学期对应';