提交代码

This commit is contained in:
zlwu committed 2025-08-13 22:16:44 +08:00
1 parent 4d7bb19fd9
commit 4e16396463
14 files changed
+436 -33

No files matched your search

+2 -2
View File
@@ -119,10 +119,10 @@
<version>${revision}</version>
</dependency> -->
<!-- 招生就业管理模块 -->
<dependency>
<!-- <dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-zsjy</artifactId>
</dependency>
</dependency> -->
<!-- 安全保卫管理模块 -->
<dependency>
<groupId>org.dromara</groupId>
+2 -2
View File
@@ -16,13 +16,13 @@
<module>ruoyi-workflow</module>
<module>ruoyi-xg</module>
<!-- <module>ruoyi-xg-xx</module> -->
<module>ruoyi-zsjy</module>
<!-- <module>ruoyi-zsjy</module> -->
<module>ruoyi-hq</module>
<module>ruoyi-aqbw</module>
<module>ruoyi-cw</module>
<module>ruoyi-rs</module>
<module>ruoyi-xljk</module>
<module>ruoyi-jcbt</module>
<module>ruoyi-jcbt</module>
<!-- <module>ruoyi-stgl</module> -->
</modules>
@@ -114,6 +114,19 @@ public class XgDormBedController extends BaseController {
return R.ok(list);
}
/**
* 查询当前用户所在学院的指定房间床位详细信息列表(包含学生信息)
*
* @param roomId 房间ID
*/
@SaCheckPermission("dormbed:dormBed:query")
@GetMapping("/details/college/room/{roomId}")
public R<List<XgDormBedDetailVo>> getBedDetailsByRoomIdForCurrentUserCollege(
@NotNull(message = "房间ID不能为空") @PathVariable Long roomId) {
List<XgDormBedDetailVo> list = xgDormBedService.queryBedDetailsByRoomIdForCurrentUserCollege(roomId);
return R.ok(list);
}
/**
* 查询指定宿舍楼的床位详细信息列表(包含学生信息)
*
@@ -45,6 +45,15 @@ public class XgDormRoomController extends BaseController {
return xgDormRoomService.queryPageList(bo, pageQuery);
}
/**
* 查询当前用户所在学院的宿舍房间信息列表
*/
@SaCheckPermission("xgss:dormRoom:list")
@GetMapping("/college/list")
public TableDataInfo<XgDormRoomVo> collegeList(XgDormRoomBo bo, PageQuery pageQuery) {
return xgDormRoomService.queryPageListByCurrentUserCollege(bo, pageQuery);
}
/**
* 导出宿舍房间信息列表
*/
@@ -63,8 +72,7 @@ public class XgDormRoomController extends BaseController {
*/
@SaCheckPermission("xgss:dormRoom:query")
@GetMapping("/{id}")
public R<XgDormRoomVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
public R<XgDormRoomVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
return R.ok(xgDormRoomService.queryById(id));
}
@@ -98,8 +106,7 @@ public class XgDormRoomController extends BaseController {
@SaCheckPermission("xgss:dormRoom:remove")
@Log(title = "宿舍房间信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
return toAjax(xgDormRoomService.deleteWithValidByIds(List.of(ids), true));
}
}
@@ -1,5 +1,6 @@
package org.dromara.xg.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -70,8 +71,9 @@ public class XgSysDept extends BaseEntity {
private String delFlag;
/**
* 父部门名称
* 父部门名称(冗余字段,用于显示,不持久化到数据库)
*/
@TableField(exist = false)
private String parentName;
/**
@@ -129,4 +129,63 @@ public interface XgDormBedMapper extends BaseMapperPlus<XgDormBed, XgDormBedVo>
""")
List<XgDormBedDetailVo> selectBedDetailsByBuildingId(@Param("buildingId") Long buildingId);
/**
* 查询指定房间中属于指定学院的床位详细信息列表(包含学生信息)
*
* @param roomId 房间ID
* @param collegeId 学院ID
* @return 床位详细信息列表
*/
@Select("""
SELECT
b.id,
b.bed_code,
b.bed_name,
b.room_id,
r.room_name,
b.bed_type,
b.bed_status,
b.remark as bed_remark,
b.create_by,
b.create_time,
b.update_by,
b.update_time,
bs.id as assignment_id,
bs.assign_time,
bs.status as assignment_status,
bs.college_id,
college_dept.dept_name as college_name,
bs.major_id,
major_dept.dept_name as major_name,
bs.class_id,
class_dept.dept_name as class_name,
c.class_code,
c.grade,
bs.student_id,
s.student_no,
s.name as student_name,
s.gender as student_gender,
s.phone as student_phone,
s.id_card as student_id_card
FROM xg_dorm_bed b
LEFT JOIN xg_dorm_room r ON b.room_id = r.id
INNER JOIN xg_dorm_bed_student bs ON b.id = bs.bed_id AND bs.status = '0' AND bs.deleted = '0'
LEFT JOIN sys_dept college_dept ON bs.college_id = college_dept.dept_id AND college_dept.del_flag = '0'
LEFT JOIN sys_dept major_dept ON bs.major_id = major_dept.dept_id AND major_dept.del_flag = '0'
LEFT JOIN sys_dept class_dept ON bs.class_id = class_dept.dept_id AND class_dept.del_flag = '0'
LEFT JOIN xg_class_msg c ON bs.class_id = c.id AND c.deleted = 0
LEFT JOIN xg_student_msg s ON bs.student_id = s.id AND s.deleted = 0
WHERE b.room_id = #{roomId}
AND bs.college_id = #{collegeId}
AND b.deleted = '0'
ORDER BY b.bed_code
""")
List<XgDormBedDetailVo> selectBedDetailsByRoomIdAndCollegeId(@Param("roomId") Long roomId,
@Param("collegeId") Long collegeId);
}
@@ -75,6 +75,14 @@ public interface IXgDormBedService {
*/
List<XgDormBedDetailVo> queryBedDetailsByRoomId(Long roomId);
/**
* 查询当前用户所在学院的指定房间床位详细信息列表(包含学生信息)
*
* @param roomId 房间ID
* @return 床位详细信息列表
*/
List<XgDormBedDetailVo> queryBedDetailsByRoomIdForCurrentUserCollege(Long roomId);
/**
* 查询指定宿舍楼的床位详细信息列表(包含学生信息)
*
@@ -33,6 +33,15 @@ public interface IXgDormRoomService {
*/
TableDataInfo<XgDormRoomVo> queryPageList(XgDormRoomBo bo, PageQuery pageQuery);
/**
* 分页查询当前用户所在学院的宿舍房间信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 宿舍房间信息分页列表
*/
TableDataInfo<XgDormRoomVo> queryPageListByCurrentUserCollege(XgDormRoomBo bo, PageQuery pageQuery);
/**
* 查询符合条件的宿舍房间信息列表
*
@@ -14,12 +14,22 @@ import org.dromara.xg.domain.bo.XgDormBedBo;
import org.dromara.xg.domain.vo.XgDormBedVo;
import org.dromara.xg.domain.vo.XgDormBedDetailVo;
import org.dromara.xg.domain.XgDormBed;
import org.dromara.xg.domain.XgDormRoom;
import org.dromara.xg.domain.XgDormBedStudent;
import org.dromara.xg.domain.XgSysDept;
import org.dromara.xg.mapper.XgDormBedMapper;
import org.dromara.xg.mapper.XgDormRoomMapper;
import org.dromara.xg.mapper.XgDormBedStudentMapper;
import org.dromara.xg.mapper.XgSysDeptMapper;
import org.dromara.xg.service.IXgDormBedService;
import org.dromara.common.satoken.utils.LoginHelper;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.ArrayList;
/**
* 宿舍床位信息Service业务层处理
@@ -33,6 +43,9 @@ import java.util.Collection;
public class XgDormBedServiceImpl implements IXgDormBedService {
private final XgDormBedMapper baseMapper;
private final XgDormRoomMapper xgDormRoomMapper;
private final XgDormBedStudentMapper xgDormBedStudentMapper;
private final XgSysDeptMapper xgSysDeptMapper;
/**
* 查询宿舍床位信息
@@ -41,7 +54,7 @@ public class XgDormBedServiceImpl implements IXgDormBedService {
* @return 宿舍床位信息
*/
@Override
public XgDormBedVo queryById(Long id){
public XgDormBedVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
@@ -117,8 +130,8 @@ public class XgDormBedServiceImpl implements IXgDormBedService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XgDormBed entity){
//TODO 做一些数据校验,如唯一约束
private void validEntityBeforeSave(XgDormBed entity) {
// TODO 做一些数据校验,如唯一约束
}
/**
@@ -130,8 +143,8 @@ public class XgDormBedServiceImpl implements IXgDormBedService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
if (isValid) {
// TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
@@ -147,6 +160,26 @@ public class XgDormBedServiceImpl implements IXgDormBedService {
return baseMapper.selectBedDetailsByRoomId(roomId);
}
/**
* 查询当前用户所在学院的指定房间床位详细信息列表(包含学生信息)
*
* @param roomId 房间ID
* @return 床位详细信息列表
*/
@Override
public List<XgDormBedDetailVo> queryBedDetailsByRoomIdForCurrentUserCollege(Long roomId) {
// 1. 获取当前用户的学院ID
Long currentUserCollegeId = getCurrentUserCollegeId();
if (currentUserCollegeId == null) {
log.warn("无法获取当前用户的学院信息,返回空结果");
return new ArrayList<>();
}
// 2. 直接查询指定房间中属于当前学院的床位详细信息
// 通过SQL关联xg_dorm_bed_student表,只返回分配给当前学院的床位
return baseMapper.selectBedDetailsByRoomIdAndCollegeId(roomId, currentUserCollegeId);
}
/**
* 查询指定宿舍楼的床位详细信息列表(包含学生信息)
*
@@ -157,4 +190,105 @@ public class XgDormBedServiceImpl implements IXgDormBedService {
public List<XgDormBedDetailVo> queryBedDetailsByBuildingId(Long buildingId) {
return baseMapper.selectBedDetailsByBuildingId(buildingId);
}
/**
* 获取当前用户的二级学院ID
* 通过当前用户的部门id,向上寻找包括他自己,找到dept_category前几位是xy-的就是二级学院
* 或者parent_id = 101的部门就是二级学院
*/
private Long getCurrentUserCollegeId() {
try {
Long currentUserId = LoginHelper.getUserId();
Long currentDeptId = LoginHelper.getDeptId();
if (currentUserId == null || currentDeptId == null) {
log.warn("用户未登录或没有部门信息");
return null;
}
// 首先查找parent_id = 101的部门(使用LambdaQueryWrapper)
LambdaQueryWrapper<XgSysDept> parentQuery = Wrappers.lambdaQuery();
parentQuery.eq(XgSysDept::getParentId, 101L)
.eq(XgSysDept::getStatus, "0")
.eq(XgSysDept::getDelFlag, "0")
.and(wrapper -> wrapper.eq(XgSysDept::getDeptId, currentDeptId)
.or().like(XgSysDept::getAncestors, "," + currentDeptId + ",") // 中间位置
.or().likeRight(XgSysDept::getAncestors, currentDeptId + ",") // 开头位置
.or().likeLeft(XgSysDept::getAncestors, "," + currentDeptId) // 末尾位置
.or().eq(XgSysDept::getAncestors, currentDeptId.toString())) // 单独一个值
.last("LIMIT 1");
List<XgSysDept> parentColleges = xgSysDeptMapper.selectList(parentQuery);
if (!parentColleges.isEmpty()) {
return parentColleges.get(0).getDeptId();
}
// 如果上面的查询没找到,尝试通过dept_category查找
LambdaQueryWrapper<XgSysDept> categoryQuery = Wrappers.lambdaQuery();
categoryQuery.likeRight(XgSysDept::getDeptCategory, "xy-")
.eq(XgSysDept::getStatus, "0")
.eq(XgSysDept::getDelFlag, "0")
.and(wrapper -> wrapper.eq(XgSysDept::getDeptId, currentDeptId)
.or().like(XgSysDept::getAncestors, "," + currentDeptId + ",") // 中间位置
.or().likeRight(XgSysDept::getAncestors, currentDeptId + ",") // 开头位置
.or().likeLeft(XgSysDept::getAncestors, "," + currentDeptId) // 末尾位置
.or().eq(XgSysDept::getAncestors, currentDeptId.toString())) // 单独一个值
.last("LIMIT 1");
List<XgSysDept> categoryColleges = xgSysDeptMapper.selectList(categoryQuery);
return categoryColleges.isEmpty() ? null : categoryColleges.get(0).getDeptId();
} catch (Exception e) {
log.error("获取当前用户二级学院ID失败", e);
return null;
}
}
/**
* 获取分配给指定学院的房间ID列表
*/
private Set<Long> getCollegeAllocatedRoomIds(Long collegeId) {
try {
LambdaQueryWrapper<XgDormBedStudent> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.select(XgDormBedStudent::getRoomId)
.eq(XgDormBedStudent::getCollegeId, collegeId)
.eq(XgDormBedStudent::getStatus, "0")
.eq(XgDormBedStudent::getDeleted, "0")
.isNotNull(XgDormBedStudent::getRoomId)
.groupBy(XgDormBedStudent::getRoomId);
List<XgDormBedStudent> roomRecords = xgDormBedStudentMapper.selectList(queryWrapper);
return roomRecords.stream()
.map(XgDormBedStudent::getRoomId)
.collect(Collectors.toSet());
} catch (Exception e) {
log.error("获取学院 {} 分配的房间ID列表失败", collegeId, e);
return Set.of();
}
}
/**
* 获取分配给指定学院的宿舍楼ID列表
*/
private Set<Long> getCollegeAllocatedBuildingIds(Long collegeId) {
try {
LambdaQueryWrapper<XgDormBedStudent> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.select(XgDormBedStudent::getBuildingId)
.eq(XgDormBedStudent::getCollegeId, collegeId)
.eq(XgDormBedStudent::getStatus, "0")
.eq(XgDormBedStudent::getDeleted, "0")
.isNotNull(XgDormBedStudent::getBuildingId)
.groupBy(XgDormBedStudent::getBuildingId);
List<XgDormBedStudent> buildingRecords = xgDormBedStudentMapper.selectList(queryWrapper);
return buildingRecords.stream()
.map(XgDormBedStudent::getBuildingId)
.collect(Collectors.toSet());
} catch (Exception e) {
log.error("获取学院 {} 分配的宿舍楼ID列表失败", collegeId, e);
return Set.of();
}
}
}
@@ -13,12 +13,19 @@ import org.springframework.stereotype.Service;
import org.dromara.xg.domain.bo.XgDormRoomBo;
import org.dromara.xg.domain.vo.XgDormRoomVo;
import org.dromara.xg.domain.XgDormRoom;
import org.dromara.xg.domain.XgDormBedStudent;
import org.dromara.xg.domain.XgSysDept;
import org.dromara.xg.mapper.XgDormRoomMapper;
import org.dromara.xg.mapper.XgDormBedStudentMapper;
import org.dromara.xg.mapper.XgSysDeptMapper;
import org.dromara.xg.service.IXgDormRoomService;
import org.dromara.common.satoken.utils.LoginHelper;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 宿舍房间信息Service业务层处理
@@ -32,6 +39,8 @@ import java.util.Collection;
public class XgDormRoomServiceImpl implements IXgDormRoomService {
private final XgDormRoomMapper baseMapper;
private final XgDormBedStudentMapper xgDormBedStudentMapper;
private final XgSysDeptMapper xgSysDeptMapper;
/**
* 查询宿舍房间信息
@@ -58,6 +67,37 @@ public class XgDormRoomServiceImpl implements IXgDormRoomService {
return TableDataInfo.build(result);
}
/**
* 分页查询当前用户所在学院的宿舍房间信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 宿舍房间信息分页列表
*/
@Override
public TableDataInfo<XgDormRoomVo> queryPageListByCurrentUserCollege(XgDormRoomBo bo, PageQuery pageQuery) {
// 1. 获取当前用户的学院ID
Long currentUserCollegeId = getCurrentUserCollegeId();
if (currentUserCollegeId == null) {
log.warn("无法获取当前用户的学院信息,返回空结果");
return TableDataInfo.build(new Page<>());
}
// 2. 获取分配给当前学院的房间ID列表
Set<Long> collegeAllocatedRoomIds = getCollegeAllocatedRoomIds(currentUserCollegeId);
if (collegeAllocatedRoomIds.isEmpty()) {
log.info("当前学院 {} 没有分配的房间,返回空结果", currentUserCollegeId);
return TableDataInfo.build(new Page<>());
}
// 3. 构建查询条件,只查询分配给当前学院的具体房间,并支持额外的过滤条件
LambdaQueryWrapper<XgDormRoom> lqw = buildQueryWrapper(bo);
lqw.in(XgDormRoom::getId, collegeAllocatedRoomIds);
Page<XgDormRoomVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的宿舍房间信息列表
*
@@ -138,4 +178,81 @@ public class XgDormRoomServiceImpl implements IXgDormRoomService {
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 获取当前用户的二级学院ID
* 通过当前用户的部门id,向上寻找包括他自己,找到dept_category前几位是xy-的就是二级学院
* 或者parent_id = 101的部门就是二级学院
*/
private Long getCurrentUserCollegeId() {
try {
Long currentUserId = LoginHelper.getUserId();
Long currentDeptId = LoginHelper.getDeptId();
if (currentUserId == null || currentDeptId == null) {
log.warn("用户未登录或没有部门信息");
return null;
}
// 首先查找parent_id = 101的部门(使用LambdaQueryWrapper)
LambdaQueryWrapper<XgSysDept> parentQuery = Wrappers.lambdaQuery();
parentQuery.eq(XgSysDept::getParentId, 101L)
.eq(XgSysDept::getStatus, "0")
.eq(XgSysDept::getDelFlag, "0")
.and(wrapper -> wrapper.eq(XgSysDept::getDeptId, currentDeptId)
.or().like(XgSysDept::getAncestors, "," + currentDeptId + ",") // 中间位置
.or().likeRight(XgSysDept::getAncestors, currentDeptId + ",") // 开头位置
.or().likeLeft(XgSysDept::getAncestors, "," + currentDeptId) // 末尾位置
.or().eq(XgSysDept::getAncestors, currentDeptId.toString())) // 单独一个值
.last("LIMIT 1");
List<XgSysDept> parentColleges = xgSysDeptMapper.selectList(parentQuery);
if (!parentColleges.isEmpty()) {
return parentColleges.get(0).getDeptId();
}
// 如果上面的查询没找到,尝试通过dept_category查找
LambdaQueryWrapper<XgSysDept> categoryQuery = Wrappers.lambdaQuery();
categoryQuery.likeRight(XgSysDept::getDeptCategory, "xy-")
.eq(XgSysDept::getStatus, "0")
.eq(XgSysDept::getDelFlag, "0")
.and(wrapper -> wrapper.eq(XgSysDept::getDeptId, currentDeptId)
.or().like(XgSysDept::getAncestors, "," + currentDeptId + ",") // 中间位置
.or().likeRight(XgSysDept::getAncestors, currentDeptId + ",") // 开头位置
.or().likeLeft(XgSysDept::getAncestors, "," + currentDeptId) // 末尾位置
.or().eq(XgSysDept::getAncestors, currentDeptId.toString())) // 单独一个值
.last("LIMIT 1");
List<XgSysDept> categoryColleges = xgSysDeptMapper.selectList(categoryQuery);
return categoryColleges.isEmpty() ? null : categoryColleges.get(0).getDeptId();
} catch (Exception e) {
log.error("获取当前用户二级学院ID失败", e);
return null;
}
}
/**
* 获取分配给指定学院的房间ID列表
*/
private Set<Long> getCollegeAllocatedRoomIds(Long collegeId) {
try {
LambdaQueryWrapper<XgDormBedStudent> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.select(XgDormBedStudent::getRoomId)
.eq(XgDormBedStudent::getCollegeId, collegeId)
.eq(XgDormBedStudent::getStatus, "0")
.eq(XgDormBedStudent::getDeleted, "0")
.isNotNull(XgDormBedStudent::getRoomId)
.groupBy(XgDormBedStudent::getRoomId);
List<XgDormBedStudent> roomRecords = xgDormBedStudentMapper.selectList(queryWrapper);
return roomRecords.stream()
.map(XgDormBedStudent::getRoomId)
.collect(Collectors.toSet());
} catch (Exception e) {
log.error("获取学院 {} 分配的房间ID列表失败", collegeId, e);
return Set.of();
}
}
}
@@ -391,6 +391,35 @@ def run_all_tests(self):
**问题**:代码变更后文档未更新
**解决**:建立强制性文档同步更新规则,代码完成后立即更新文档
#### 5. MyBatis-Plus 实体字段映射问题 (2025-08-13 新增)
**问题**:SQL 错误 "Unknown column 'parent_name' in 'field list'"
**原因**:实体类中包含数据库表不存在的字段,MyBatis-Plus 自动生成 SQL 时包含了这些字段
**典型场景**:实体类中有用于显示的冗余字段(如 parentName),但数据库表中没有对应字段
**解决方案**:
```java
/**
* 父部门名称(冗余字段,用于显示,不持久化到数据库)
*/
@TableField(exist = false)
private String parentName;
```
**关键要点**:
- 添加 `@TableField(exist = false)` 注解告诉 MyBatis-Plus 该字段不存在于数据库表中
- 导入正确的注解包:`import com.baomidou.mybatisplus.annotation.TableField;`
- 适用于所有用于显示但不持久化的冗余字段
- 避免在使用 `selectList()` 等 MyBatis-Plus 方法时出现字段不存在的错误
**错误示例**:
```
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column 'parent_name' in 'field list'
### SQL: SELECT dept_id, parent_id, ancestors, dept_name, order_num, leader, phone, email, status, del_flag, parent_name, dept_category, create_dept, create_by, create_time, update_by, update_time FROM sys_dept WHERE...
```
### 性能优化建议
1. **数据库查询优化**:合理使用索引,避免全表扫描
+12 -2
View File
@@ -1,13 +1,12 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { DormBedVO, DormBedDetailVO, DormBedForm, DormBedQuery } from '@/api/xg/xgss/dormBed/types';
import { DormBedVO, DormBedForm, DormBedQuery, DormBedDetailVO } from '@/api/xg/xgss/dormBed/types';
/**
* 查询宿舍床位信息列表
* @param query
* @returns {*}
*/
export const listDormBed = (query?: DormBedQuery): AxiosPromise<DormBedVO[]> => {
return request({
url: '/dormbed/dormBed/list',
@@ -73,6 +72,17 @@ export const getBedDetailsByRoomId = (roomId: string | number): AxiosPromise<Dor
});
};
/**
* 查询当前用户所在学院的指定房间床位详细信息列表(包含学生信息)
* @param roomId 房间ID
*/
export const getBedDetailsByRoomIdForCurrentUserCollege = (roomId: string | number): AxiosPromise<DormBedDetailVO[]> => {
return request({
url: '/dormbed/dormBed/details/college/room/' + roomId,
method: 'get'
});
};
/**
* 查询指定宿舍楼的床位详细信息列表(包含学生信息)
* @param buildingId 宿舍楼ID
+13
View File
@@ -16,6 +16,19 @@ export const listDormRoom = (query?: DormRoomQuery): AxiosPromise<DormRoomVO[]>
});
};
/**
* 查询当前用户所在学院的宿舍房间信息列表
* @param query
* @returns {*}
*/
export const listDormRoomForCurrentUserCollege = (query?: DormRoomQuery): AxiosPromise<DormRoomVO[]> => {
return request({
url: '/xgss/dormRoom/college/list',
method: 'get',
params: query
});
};
/**
* 查询宿舍房间信息详细
* @param id
+19 -17
View File
@@ -237,14 +237,16 @@
<el-tag v-if="scope.row.roomStatus === '0'" type="success">正常</el-tag>
<el-tag v-else-if="scope.row.roomStatus === '1'" type="warning">维修中</el-tag>
<el-tag v-else type="danger">停用</el-tag>
<!-- 房间床位占用状态 -->
<span v-if="scope.row.roomStatus === '0'" class="text-xs text-gray-500"> ({{ getRoomBedStatusText(scope.row) }}) </span>
<!-- 房间床位分配数量 -->
<span v-if="scope.row.roomStatus === '0'" class="text-xs text-gray-500">
(已分配: {{ scope.row.children?.filter((bed) => bed.classId).length || 0 }}/{{ scope.row.children?.length || 0 }}床位)
</span>
</div>
</template>
<template v-else>
<el-tag v-if="scope.row.bedStatus === '0'" type="success">空闲</el-tag>
<el-tag v-else-if="scope.row.bedStatus === '1'" type="warning">已分配</el-tag>
<el-tag v-else type="danger">维修中</el-tag>
<el-tag v-if="scope.row.bedStatus === '2'" type="danger">维修中</el-tag>
<el-tag v-else-if="scope.row.classId" type="warning">已分配</el-tag>
<el-tag v-else type="success">空闲</el-tag>
</template>
</template>
</el-table-column>
@@ -298,7 +300,7 @@
{{ scope.row.remark || scope.row.bedRemark }}
</template>
</el-table-column>
<el-table-column label="操作" width="180" align="center" fixed="right">
<el-table-column label="操作" width="180" align="center" fixed="right" v-if="false">
<template #default="scope">
<template v-if="!scope.row.isBed">
<!-- <el-button type="primary" link icon="Plus" @click="handleAddBed(scope.row)" /> -->
@@ -357,8 +359,8 @@ import type { DormRoomVO } from '@/api/xg/xgss/dormRoom/types';
import type { DormBedDetailVO } from '@/api/xg/xgss/dormBed/types';
import type { XgStudentTreeVO } from '@/api/xg/xsjcxx/studentMsg/types';
import { getCurrentUserCollegeDormTree } from '@/api/xg/xgss/dormBedStudent/dormBedStudent';
import { getBedDetailsByRoomId, delDormBed, getDormBed } from '@/api/xg/xgss/dormBed';
import { listDormRoom, delDormRoom } from '@/api/xg/xgss/dormRoom';
import { getBedDetailsByRoomIdForCurrentUserCollege, delDormBed, getDormBed } from '@/api/xg/xgss/dormBed';
import { listDormRoomForCurrentUserCollege, delDormRoom } from '@/api/xg/xgss/dormRoom';
import { getCurrentUserStudentTree } from '@/api/xg/xsjcxx/studentMsg';
import ElMessage from 'element-plus/es/components/message/index';
import ElMessageBox from 'element-plus/es/components/message-box/index';
@@ -567,7 +569,7 @@ const loadRoomData = async () => {
try {
// 获取房间列表
const res = await listDormRoom({
const res = await listDormRoomForCurrentUserCollege({
...queryParams
});
const rooms = res.rows || [];
@@ -584,7 +586,7 @@ const loadRoomData = async () => {
};
try {
const bedDetailRes = await getBedDetailsByRoomId(room.id);
const bedDetailRes = await getBedDetailsByRoomIdForCurrentUserCollege(room.id);
// 如果请求已被取消,不继续处理
if (controller?.signal?.aborted) return roomRecord;
@@ -874,9 +876,9 @@ const getRoomBedStatusText = (room: any) => {
}
const totalBeds = room.children.length;
const availableBeds = room.children.filter((bed: any) => bed.bedStatus === '0').length;
const allocatedBeds = room.children.filter((bed: any) => bed.bedStatus === '1').length;
const maintenanceBeds = room.children.filter((bed: any) => bed.bedStatus === '2').length;
const allocatedBeds = room.children.filter((bed: any) => bed.classId).length;
const availableBeds = room.children.filter((bed: any) => bed.bedStatus !== '2' && !bed.classId).length;
if (availableBeds === totalBeds) {
return '空闲';
@@ -1004,12 +1006,12 @@ const updateSelectionCount = (rows: any[]) => {
// 床位:记录床位ID并统计状态
uniqueBeds.add(row.id);
// 统计床位状态
if (row.bedStatus === '0') {
bedStats.available++;
} else if (row.bedStatus === '1') {
bedStats.allocated++;
} else if (row.bedStatus === '2') {
if (row.bedStatus === '2') {
bedStats.maintenance++;
} else if (row.classId) {
bedStats.allocated++;
} else {
bedStats.available++;
}
} else {
// 房间:记录房间ID