Browse Source

“吴震修改招生就业和学生空床位查询”

“wuzhen” 4 tháng trước cách đây
mục cha
commit
80cdde97a1

+ 50 - 1
backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBedServiceImpl.java

@@ -30,6 +30,7 @@ import java.util.Collection;
 import java.util.Set;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.HashSet;
 
 
 /**
 /**
  * 宿舍床位信息Service业务层处理
  * 宿舍床位信息Service业务层处理
@@ -157,7 +158,55 @@ public class XgDormBedServiceImpl implements IXgDormBedService {
      */
      */
     @Override
     @Override
     public List<XgDormBedDetailVo> queryBedDetailsByRoomId(Long roomId) {
     public List<XgDormBedDetailVo> queryBedDetailsByRoomId(Long roomId) {
-        return baseMapper.selectBedDetailsByRoomId(roomId);
+        List<XgDormBedDetailVo> result = new ArrayList<>();
+
+        // 第一步:从 xg_dorm_bed_student 为主表查有学生的床位
+        List<Map<String, Object>> studentBeds = xgDormBedStudentMapper.selectRoomStudents(roomId);
+
+        Set<Long> occupiedBedIds = new HashSet<>();
+        for (Map<String, Object> row : studentBeds) {
+            XgDormBedDetailVo vo = new XgDormBedDetailVo();
+            Object bedIdObj = row.get("bed_id");
+            Long bedId = bedIdObj != null ? ((Number) bedIdObj).longValue() : null;
+            if (bedId != null) {
+                occupiedBedIds.add(bedId);
+            }
+            vo.setId(bedId);
+            vo.setBedCode(row.get("bed_code") != null ? row.get("bed_code").toString() : null);
+            vo.setBedName(row.get("bed_name") != null ? row.get("bed_name").toString() : null);
+            vo.setRoomId(roomId);
+            vo.setStudentId(row.get("student_id") != null ? ((Number) row.get("student_id")).longValue() : null);
+            vo.setStudentNo(row.get("student_no") != null ? row.get("student_no").toString() : null);
+            vo.setStudentName(row.get("student_name") != null ? row.get("student_name").toString() : null);
+            vo.setStudentGender(row.get("gender") != null ? row.get("gender").toString() : null);
+            vo.setClassName(row.get("class_name") != null ? row.get("class_name").toString() : null);
+            vo.setCollegeName(row.get("college_name") != null ? row.get("college_name").toString() : null);
+            vo.setMajorName(row.get("major_name") != null ? row.get("major_name").toString() : null);
+            vo.setAssignmentStatus("0");
+            vo.setBedStatus("1");
+            result.add(vo);
+        }
+
+        // 第二步:补查 xg_dorm_bed 中未被分配的空床位
+        List<XgDormBed> emptyBeds = baseMapper.selectList(
+            Wrappers.<XgDormBed>lambdaQuery()
+                .eq(XgDormBed::getRoomId, roomId)
+                .notIn(!occupiedBedIds.isEmpty(), XgDormBed::getId, occupiedBedIds)
+        );
+
+        for (XgDormBed bed : emptyBeds) {
+            XgDormBedDetailVo vo = new XgDormBedDetailVo();
+            vo.setId(bed.getId());
+            vo.setBedCode(bed.getBedCode());
+            vo.setBedName(bed.getBedName());
+            vo.setRoomId(bed.getRoomId());
+            vo.setBedType(bed.getBedType());
+            vo.setBedStatus(bed.getBedStatus());
+            vo.setBedRemark(bed.getRemark());
+            result.add(vo);
+        }
+
+        return result;
     }
     }
 
 
     /**
     /**

+ 2 - 2
backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/ZsjyEnrollmentInfoBo.java

@@ -68,9 +68,9 @@ public class ZsjyEnrollmentInfoBo extends BaseEntity {
     private String phone1;
     private String phone1;
 
 
     /**
     /**
-     * 联系手机号码2
+     * 联系手机号码2(非必填,填写时需符合手机号格式)
      */
      */
-    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式不正确", groups = { AddGroup.class, EditGroup.class })
+    @Pattern(regexp = "^$|^1[3-9]\\d{9}$", message = "手机号码格式不正确", groups = { AddGroup.class, EditGroup.class })
     private String phone2;
     private String phone2;
 
 
     /**
     /**

+ 23 - 0
mobile/src/pages.json

@@ -207,6 +207,29 @@
 				"navigationStyle": "custom"
 				"navigationStyle": "custom"
 			}
 			}
 		},
 		},
+		{
+			"path": "pages/xgss/dmdl/dmdl",
+			"style": {
+				"navigationBarTitleText": "宿舍点名",
+				"navigationBarBackgroundColor": "#0051d9",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/xgss/dmdl/dmdlCheck",
+			"style": {
+				"navigationBarTitleText": "宿舍点名",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/xgss/dmdl/dmdlDetail",
+			"style": {
+				"navigationBarTitleText": "点名详情",
+				"navigationBarBackgroundColor": "#0051d9",
+				"navigationBarTextStyle": "white"
+			}
+		},
 		{
 		{
 			"path": "pages/xgss/xssswsjc/xssswsjc",
 			"path": "pages/xgss/xssswsjc/xssswsjc",
 			"style": {
 			"style": {

+ 1 - 1
mobile/src/pages/enrollment/index.vue

@@ -553,7 +553,7 @@ export default {
                     { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' },
                     { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' },
                 ],
                 ],
                 phone2: [
                 phone2: [
-                    { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' },
+                    { pattern: /^$|^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' },
                 ],
                 ],
                 collegeName: [{ required: true, message: '所属学院不能为空', trigger: 'change' }],
                 collegeName: [{ required: true, message: '所属学院不能为空', trigger: 'change' }],
                 appliedMajor: [{ required: true, message: '报考专业不能为空', trigger: 'change' }],
                 appliedMajor: [{ required: true, message: '报考专业不能为空', trigger: 'change' }],

+ 20 - 0
mobile/src/pages/index/index.vue

@@ -220,6 +220,19 @@
                             />
                             />
                         </template>
                         </template>
                     </ServiceItem>
                     </ServiceItem>
+                    <ServiceItem
+                        v-if="hasPermi(['student:dormrollcall:listapp'])"
+                        title="宿舍点名"
+                        @click="gotoDormRollCall"
+                    >
+                        <template #icon>
+                            <image
+                                src="/static/00135.png"
+                                mode="aspectFit"
+                                style="width: 24px; height: 24px"
+                            />
+                        </template>
+                    </ServiceItem>
 
 
                     <ServiceItem
                     <ServiceItem
                         v-if="hasPermi(['student:dynamics:list'])"
                         v-if="hasPermi(['student:dynamics:list'])"
@@ -1204,6 +1217,13 @@ export default {
             });
             });
         },
         },
 
 
+        // 跳转到宿舍点名页面
+        gotoDormRollCall() {
+            uni.navigateTo({
+                url: '/pages/xgss/dmdl/dmdl',
+            });
+        },
+
         // 跳转到勤工俭学页面
         // 跳转到勤工俭学页面
         gotoWorkStudy() {
         gotoWorkStudy() {
             uni.navigateTo({
             uni.navigateTo({

+ 13 - 0
web/src/api/xg/xgss/dormBedStudent/dormBedStudent/index.ts

@@ -272,3 +272,16 @@ export const getClassUnoccupiedBedDetails = (classId?: string | number) => {
     params: { classId }
     params: { classId }
   });
   });
 };
 };
+
+/**
+ * 根据房间ID获取住在当前房间的所有学生信息
+ * 包含学生姓名、学号、性别、学院名称、专业名称、班级名称、床位编码、床位ID
+ * @param roomId 房间ID
+ */
+export const getRoomStudents = (roomId: string | number) => {
+  return request({
+    url: '/dormBedStudent/dormBedStudent/getRoomStudents',
+    method: 'get',
+    params: { roomId }
+  });
+};

+ 2 - 2
web/src/api/zsjy/enrollment/types.ts

@@ -35,9 +35,9 @@ export interface EnrollmentInfoVO {
   phone1: string;
   phone1: string;
 
 
   /**
   /**
-   * 联系手机号码2
+   * 联系手机号码2(非必填)
    */
    */
-  phone2: string;
+  phone2?: string;
 
 
   /**
   /**
    * 民族
    * 民族

+ 1 - 1
web/src/views/zsjy/enrollment/apply.vue

@@ -358,7 +358,7 @@ const rules = {
     { required: true, message: '联系电话不能为空', trigger: 'blur' },
     { required: true, message: '联系电话不能为空', trigger: 'blur' },
     { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
     { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
   ],
   ],
-  phone2: [{ pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }],
+  phone2: [{ pattern: /^$|^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }],
   collegeName: [{ required: true, message: '所属学院不能为空', trigger: 'change' }],
   collegeName: [{ required: true, message: '所属学院不能为空', trigger: 'change' }],
   appliedMajor: [{ required: true, message: '报考专业不能为空', trigger: 'change' }],
   appliedMajor: [{ required: true, message: '报考专业不能为空', trigger: 'change' }],
   totalScoreFull: [{ type: 'number', min: 100, max: 1000, message: '中考满分应在100-1000之间', trigger: 'blur' }],
   totalScoreFull: [{ type: 'number', min: 100, max: 1000, message: '中考满分应在100-1000之间', trigger: 'blur' }],

+ 1 - 1
web/src/views/zsjy/enrollment/index.vue

@@ -1058,7 +1058,7 @@ const data = reactive<PageData<EnrollmentInfoForm, EnrollmentInfoQuery>>({
       { required: true, message: '联系电话不能为空', trigger: 'blur' },
       { required: true, message: '联系电话不能为空', trigger: 'blur' },
       { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
       { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
     ],
     ],
-    phone2: [{ pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }],
+    phone2: [{ pattern: /^$|^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }],
     appliedMajor: [{ required: true, message: '报考专业不能为空', trigger: 'change' }],
     appliedMajor: [{ required: true, message: '报考专业不能为空', trigger: 'change' }],
     totalScoreFull: [{ type: 'number', min: 100, max: 1000, message: '中考满分应在100-1000之间', trigger: 'blur' }],
     totalScoreFull: [{ type: 'number', min: 100, max: 1000, message: '中考满分应在100-1000之间', trigger: 'blur' }],
     totalScore: [{ type: 'number', min: 0, message: '中考成绩不能小于0', trigger: 'blur' }],
     totalScore: [{ type: 'number', min: 0, message: '中考成绩不能小于0', trigger: 'blur' }],