From 80cdde97a160c1f0ad5d878efa03f7d423f757db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cwuzhen=E2=80=9D?= Date: Mon, 8 Jun 2026 08:52:36 +0800 Subject: [PATCH] =?UTF-8?q?=E2=80=9C=E5=90=B4=E9=9C=87=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8B=9B=E7=94=9F=E5=B0=B1=E4=B8=9A=E5=92=8C=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E7=A9=BA=E5=BA=8A=E4=BD=8D=E6=9F=A5=E8=AF=A2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xg/service/impl/XgDormBedServiceImpl.java | 51 ++++++++++++++++++- .../zsjy/domain/bo/ZsjyEnrollmentInfoBo.java | 4 +- mobile/src/pages.json | 23 +++++++++ mobile/src/pages/enrollment/index.vue | 2 +- mobile/src/pages/index/index.vue | 20 ++++++++ .../dormBedStudent/dormBedStudent/index.ts | 13 +++++ web/src/api/zsjy/enrollment/types.ts | 4 +- web/src/views/zsjy/enrollment/apply.vue | 2 +- web/src/views/zsjy/enrollment/index.vue | 2 +- 9 files changed, 113 insertions(+), 8 deletions(-) diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBedServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBedServiceImpl.java index 76221a79..f742846d 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBedServiceImpl.java +++ b/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.stream.Collectors; import java.util.ArrayList; +import java.util.HashSet; /** * 宿舍床位信息Service业务层处理 @@ -157,7 +158,55 @@ public class XgDormBedServiceImpl implements IXgDormBedService { */ @Override public List queryBedDetailsByRoomId(Long roomId) { - return baseMapper.selectBedDetailsByRoomId(roomId); + List result = new ArrayList<>(); + + // 第一步:从 xg_dorm_bed_student 为主表查有学生的床位 + List> studentBeds = xgDormBedStudentMapper.selectRoomStudents(roomId); + + Set occupiedBedIds = new HashSet<>(); + for (Map 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 emptyBeds = baseMapper.selectList( + Wrappers.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; } /** diff --git a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/ZsjyEnrollmentInfoBo.java b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/ZsjyEnrollmentInfoBo.java index 3663bfb1..2698b5e3 100644 --- a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/ZsjyEnrollmentInfoBo.java +++ b/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; /** - * 联系手机号码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; /** diff --git a/mobile/src/pages.json b/mobile/src/pages.json index d0026e05..273bc357 100644 --- a/mobile/src/pages.json +++ b/mobile/src/pages.json @@ -207,6 +207,29 @@ "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", "style": { diff --git a/mobile/src/pages/enrollment/index.vue b/mobile/src/pages/enrollment/index.vue index 843a370c..a2a1ef63 100644 --- a/mobile/src/pages/enrollment/index.vue +++ b/mobile/src/pages/enrollment/index.vue @@ -553,7 +553,7 @@ export default { { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }, ], 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' }], appliedMajor: [{ required: true, message: '报考专业不能为空', trigger: 'change' }], diff --git a/mobile/src/pages/index/index.vue b/mobile/src/pages/index/index.vue index cbf959f0..351895ed 100644 --- a/mobile/src/pages/index/index.vue +++ b/mobile/src/pages/index/index.vue @@ -220,6 +220,19 @@ /> + + + { params: { classId } }); }; + +/** + * 根据房间ID获取住在当前房间的所有学生信息 + * 包含学生姓名、学号、性别、学院名称、专业名称、班级名称、床位编码、床位ID + * @param roomId 房间ID + */ +export const getRoomStudents = (roomId: string | number) => { + return request({ + url: '/dormBedStudent/dormBedStudent/getRoomStudents', + method: 'get', + params: { roomId } + }); +}; diff --git a/web/src/api/zsjy/enrollment/types.ts b/web/src/api/zsjy/enrollment/types.ts index 9fca2949..b0bad298 100644 --- a/web/src/api/zsjy/enrollment/types.ts +++ b/web/src/api/zsjy/enrollment/types.ts @@ -35,9 +35,9 @@ export interface EnrollmentInfoVO { phone1: string; /** - * 联系手机号码2 + * 联系手机号码2(非必填) */ - phone2: string; + phone2?: string; /** * 民族 diff --git a/web/src/views/zsjy/enrollment/apply.vue b/web/src/views/zsjy/enrollment/apply.vue index b1925348..346e14cc 100644 --- a/web/src/views/zsjy/enrollment/apply.vue +++ b/web/src/views/zsjy/enrollment/apply.vue @@ -358,7 +358,7 @@ const rules = { { required: true, 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' }], appliedMajor: [{ required: true, message: '报考专业不能为空', trigger: 'change' }], totalScoreFull: [{ type: 'number', min: 100, max: 1000, message: '中考满分应在100-1000之间', trigger: 'blur' }], diff --git a/web/src/views/zsjy/enrollment/index.vue b/web/src/views/zsjy/enrollment/index.vue index de03664e..00068d4f 100644 --- a/web/src/views/zsjy/enrollment/index.vue +++ b/web/src/views/zsjy/enrollment/index.vue @@ -1058,7 +1058,7 @@ const data = reactive>({ { required: true, 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' }], totalScoreFull: [{ type: 'number', min: 100, max: 1000, message: '中考满分应在100-1000之间', trigger: 'blur' }], totalScore: [{ type: 'number', min: 0, message: '中考成绩不能小于0', trigger: 'blur' }],