提交代码
This commit is contained in:
1 parent
e60161f7b9
commit
8e1c094d6e
33 files changed
+6946
No files matched your search
+11
@@ -321,4 +321,15 @@ public class XgDormBedStudentController extends BaseController {
|
||||
return R.ok(unoccupiedBedDetails);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据房间ID获取住在当前房间的所有学生信息
|
||||
* 包含学生姓名、学号、性别、学院名称、专业名称、班级名称
|
||||
*/
|
||||
@SaCheckPermission("dormBedStudent:dormBedStudent:list")
|
||||
@GetMapping("/getRoomStudents")
|
||||
public R<List<Object>> getRoomStudents(@RequestParam Long roomId) {
|
||||
List<Object> roomStudents = xgDormBedStudentService.getRoomStudents(roomId);
|
||||
return R.ok(roomStudents);
|
||||
}
|
||||
|
||||
}
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
package org.dromara.xg.controller;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.xg.domain.vo.XgDormHygieneCheckVo;
|
||||
import org.dromara.xg.domain.bo.XgDormHygieneCheckBo;
|
||||
import org.dromara.xg.service.IXgDormHygieneCheckService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/dormHygieneCheck/dormHygieneCheck")
|
||||
public class XgDormHygieneCheckController extends BaseController {
|
||||
|
||||
private final IXgDormHygieneCheckService xgDormHygieneCheckService;
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查列表
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneCheck:dormHygieneCheck:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<XgDormHygieneCheckVo> list(XgDormHygieneCheckBo bo, PageQuery pageQuery) {
|
||||
return xgDormHygieneCheckService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出宿舍卫生检查列表
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneCheck:dormHygieneCheck:export")
|
||||
@Log(title = "宿舍卫生检查", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(XgDormHygieneCheckBo bo, HttpServletResponse response) {
|
||||
List<XgDormHygieneCheckVo> list = xgDormHygieneCheckService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "宿舍卫生检查", XgDormHygieneCheckVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取宿舍卫生检查详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneCheck:dormHygieneCheck:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<XgDormHygieneCheckVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(xgDormHygieneCheckService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneCheck:dormHygieneCheck:add")
|
||||
@Log(title = "宿舍卫生检查", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody XgDormHygieneCheckBo bo) {
|
||||
return toAjax(xgDormHygieneCheckService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改宿舍卫生检查
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneCheck:dormHygieneCheck:edit")
|
||||
@Log(title = "宿舍卫生检查", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XgDormHygieneCheckBo bo) {
|
||||
return toAjax(xgDormHygieneCheckService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除宿舍卫生检查
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneCheck:dormHygieneCheck:remove")
|
||||
@Log(title = "宿舍卫生检查", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(xgDormHygieneCheckService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
package org.dromara.xg.controller;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.xg.domain.vo.XgDormHygieneStudentScoreVo;
|
||||
import org.dromara.xg.domain.bo.XgDormHygieneStudentScoreBo;
|
||||
import org.dromara.xg.service.IXgDormHygieneStudentScoreService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查学生评分
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/dormHygieneStudentScore/dormHygieneStudentScore")
|
||||
public class XgDormHygieneStudentScoreController extends BaseController {
|
||||
|
||||
private final IXgDormHygieneStudentScoreService xgDormHygieneStudentScoreService;
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查学生评分列表
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneStudentScore:dormHygieneStudentScore:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<XgDormHygieneStudentScoreVo> list(XgDormHygieneStudentScoreBo bo, PageQuery pageQuery) {
|
||||
return xgDormHygieneStudentScoreService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出宿舍卫生检查学生评分列表
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneStudentScore:dormHygieneStudentScore:export")
|
||||
@Log(title = "宿舍卫生检查学生评分", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(XgDormHygieneStudentScoreBo bo, HttpServletResponse response) {
|
||||
List<XgDormHygieneStudentScoreVo> list = xgDormHygieneStudentScoreService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "宿舍卫生检查学生评分", XgDormHygieneStudentScoreVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取宿舍卫生检查学生评分详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneStudentScore:dormHygieneStudentScore:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<XgDormHygieneStudentScoreVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(xgDormHygieneStudentScoreService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查学生评分
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneStudentScore:dormHygieneStudentScore:add")
|
||||
@Log(title = "宿舍卫生检查学生评分", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody XgDormHygieneStudentScoreBo bo) {
|
||||
return toAjax(xgDormHygieneStudentScoreService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改宿舍卫生检查学生评分
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneStudentScore:dormHygieneStudentScore:edit")
|
||||
@Log(title = "宿舍卫生检查学生评分", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XgDormHygieneStudentScoreBo bo) {
|
||||
return toAjax(xgDormHygieneStudentScoreService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除宿舍卫生检查学生评分
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("dormHygieneStudentScore:dormHygieneStudentScore:remove")
|
||||
@Log(title = "宿舍卫生检查学生评分", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(xgDormHygieneStudentScoreService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
||||
+143
@@ -0,0 +1,143 @@
|
||||
package org.dromara.xg.domain;
|
||||
|
||||
import org.dromara.common.tenant.core.TenantEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查对象 xg_dorm_hygiene_check
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("xg_dorm_hygiene_check")
|
||||
public class XgDormHygieneCheck extends TenantEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
private Long deleted;
|
||||
|
||||
/**
|
||||
* 检查标题
|
||||
*/
|
||||
private String checkTitle;
|
||||
|
||||
/**
|
||||
* 检查日期
|
||||
*/
|
||||
private Date checkDate;
|
||||
|
||||
/**
|
||||
* 检查员ID,关联sys_user.id
|
||||
*/
|
||||
private Long checkerId;
|
||||
|
||||
/**
|
||||
* 检查员姓名
|
||||
*/
|
||||
private String checkerName;
|
||||
|
||||
/**
|
||||
* 检查类型(1日常检查 2专项检查 3突击检查 4复查)
|
||||
*/
|
||||
private String checkType;
|
||||
|
||||
/**
|
||||
* 检查级别(1宿管员 2学院 3学校)
|
||||
*/
|
||||
private String checkLevel;
|
||||
|
||||
/**
|
||||
* 宿舍房间ID,关联xg_dorm_room.id
|
||||
*/
|
||||
private Long roomId;
|
||||
|
||||
/**
|
||||
* 房间编号
|
||||
*/
|
||||
private String roomCode;
|
||||
|
||||
/**
|
||||
* 房间名称
|
||||
*/
|
||||
private String roomName;
|
||||
|
||||
/**
|
||||
* 宿舍楼ID,关联xg_dorm_building.id
|
||||
*/
|
||||
private Long buildingId;
|
||||
|
||||
/**
|
||||
* 宿舍楼名称
|
||||
*/
|
||||
private String buildingName;
|
||||
|
||||
/**
|
||||
* 宿舍区ID,关联xg_dorm_area.id
|
||||
*/
|
||||
private Long areaId;
|
||||
|
||||
/**
|
||||
* 宿舍区名称
|
||||
*/
|
||||
private String areaName;
|
||||
|
||||
/**
|
||||
* 校区ID,关联xg_dorm_campus.id
|
||||
*/
|
||||
private Long campusId;
|
||||
|
||||
/**
|
||||
* 校区名称
|
||||
*/
|
||||
private String campusName;
|
||||
|
||||
/**
|
||||
* 宿舍总分(0-100分)
|
||||
*/
|
||||
private Double totalScore;
|
||||
|
||||
/**
|
||||
* 卫生等级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
private String hygieneGrade;
|
||||
|
||||
/**
|
||||
* 附件OSS ID列表,逗号分隔
|
||||
*/
|
||||
private String attachmentIds;
|
||||
|
||||
/**
|
||||
* 检查总结
|
||||
*/
|
||||
private String checkSummary;
|
||||
|
||||
/**
|
||||
* 整改建议
|
||||
*/
|
||||
private String improvementSuggestions;
|
||||
|
||||
/**
|
||||
* 检查备注
|
||||
*/
|
||||
private String checkRemarks;
|
||||
|
||||
|
||||
}
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
package org.dromara.xg.domain;
|
||||
|
||||
import org.dromara.common.tenant.core.TenantEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查学生评分对象 xg_dorm_hygiene_student_score
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("xg_dorm_hygiene_student_score")
|
||||
public class XgDormHygieneStudentScore extends TenantEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
private Long deleted;
|
||||
|
||||
/**
|
||||
* 卫生检查ID,关联xg_dorm_hygiene_check.id
|
||||
*/
|
||||
private Long hygieneCheckId;
|
||||
|
||||
/**
|
||||
* 学生ID,关联xg_student_msg.id
|
||||
*/
|
||||
private Long studentId;
|
||||
|
||||
/**
|
||||
* 学号
|
||||
*/
|
||||
private String studentNo;
|
||||
|
||||
/**
|
||||
* 学生姓名
|
||||
*/
|
||||
private String studentName;
|
||||
|
||||
/**
|
||||
* 班级ID
|
||||
*/
|
||||
private Long classId;
|
||||
|
||||
/**
|
||||
* 班级名称
|
||||
*/
|
||||
private String className;
|
||||
|
||||
/**
|
||||
* 专业ID
|
||||
*/
|
||||
private Long majorId;
|
||||
|
||||
/**
|
||||
* 专业名称
|
||||
*/
|
||||
private String majorName;
|
||||
|
||||
/**
|
||||
* 学院ID
|
||||
*/
|
||||
private Long collegeId;
|
||||
|
||||
/**
|
||||
* 学院名称
|
||||
*/
|
||||
private String collegeName;
|
||||
|
||||
/**
|
||||
* 床位ID,关联xg_dorm_bed.id
|
||||
*/
|
||||
private Long bedId;
|
||||
|
||||
/**
|
||||
* 床位编号
|
||||
*/
|
||||
private String bedCode;
|
||||
|
||||
/**
|
||||
* 学生个人得分(0-100分)
|
||||
*/
|
||||
private Double studentScore;
|
||||
|
||||
/**
|
||||
* 是否在寝(1在寝 2外出 3请假 4其他)
|
||||
*/
|
||||
private String attendanceStatus;
|
||||
|
||||
/**
|
||||
* 学生评级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
private String studentGrade;
|
||||
|
||||
/**
|
||||
* 是否为寝室长(0否 1是)
|
||||
*/
|
||||
private Long isResponsiblePerson;
|
||||
|
||||
/**
|
||||
* 评分备注
|
||||
*/
|
||||
private String scoreRemarks;
|
||||
|
||||
/**
|
||||
* 改进意见
|
||||
*/
|
||||
private String improvementNotes;
|
||||
|
||||
|
||||
}
|
||||
+151
@@ -0,0 +1,151 @@
|
||||
package org.dromara.xg.domain.bo;
|
||||
|
||||
import org.dromara.xg.domain.XgDormHygieneCheck;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查业务对象 xg_dorm_hygiene_check
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = XgDormHygieneCheck.class, reverseConvertGenerate = false)
|
||||
public class XgDormHygieneCheckBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
private Long deleted;
|
||||
|
||||
/**
|
||||
* 检查标题
|
||||
*/
|
||||
@NotBlank(message = "检查标题不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String checkTitle;
|
||||
|
||||
/**
|
||||
* 检查日期
|
||||
*/
|
||||
@NotNull(message = "检查日期不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Date checkDate;
|
||||
|
||||
/**
|
||||
* 检查员ID,关联sys_user.id
|
||||
*/
|
||||
@NotNull(message = "检查员ID,关联sys_user.id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long checkerId;
|
||||
|
||||
/**
|
||||
* 检查员姓名
|
||||
*/
|
||||
@NotBlank(message = "检查员姓名不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String checkerName;
|
||||
|
||||
/**
|
||||
* 检查类型(1日常检查 2专项检查 3突击检查 4复查)
|
||||
*/
|
||||
private String checkType;
|
||||
|
||||
/**
|
||||
* 检查级别(1宿管员 2学院 3学校)
|
||||
*/
|
||||
private String checkLevel;
|
||||
|
||||
/**
|
||||
* 宿舍房间ID,关联xg_dorm_room.id
|
||||
*/
|
||||
@NotNull(message = "宿舍房间ID,关联xg_dorm_room.id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long roomId;
|
||||
|
||||
/**
|
||||
* 房间编号
|
||||
*/
|
||||
@NotBlank(message = "房间编号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String roomCode;
|
||||
|
||||
/**
|
||||
* 房间名称
|
||||
*/
|
||||
@NotBlank(message = "房间名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String roomName;
|
||||
|
||||
/**
|
||||
* 宿舍楼ID,关联xg_dorm_building.id
|
||||
*/
|
||||
@NotNull(message = "宿舍楼ID,关联xg_dorm_building.id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long buildingId;
|
||||
|
||||
/**
|
||||
* 宿舍楼名称
|
||||
*/
|
||||
@NotBlank(message = "宿舍楼名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String buildingName;
|
||||
|
||||
/**
|
||||
* 宿舍区ID,关联xg_dorm_area.id
|
||||
*/
|
||||
private Long areaId;
|
||||
|
||||
/**
|
||||
* 宿舍区名称
|
||||
*/
|
||||
private String areaName;
|
||||
|
||||
/**
|
||||
* 校区ID,关联xg_dorm_campus.id
|
||||
*/
|
||||
private Long campusId;
|
||||
|
||||
/**
|
||||
* 校区名称
|
||||
*/
|
||||
private String campusName;
|
||||
|
||||
/**
|
||||
* 宿舍总分(0-100分)
|
||||
*/
|
||||
private Double totalScore;
|
||||
|
||||
/**
|
||||
* 卫生等级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
private String hygieneGrade;
|
||||
|
||||
/**
|
||||
* 附件OSS ID列表,逗号分隔
|
||||
*/
|
||||
private String attachmentIds;
|
||||
|
||||
/**
|
||||
* 检查总结
|
||||
*/
|
||||
private String checkSummary;
|
||||
|
||||
/**
|
||||
* 整改建议
|
||||
*/
|
||||
private String improvementSuggestions;
|
||||
|
||||
/**
|
||||
* 检查备注
|
||||
*/
|
||||
private String checkRemarks;
|
||||
|
||||
|
||||
}
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
package org.dromara.xg.domain.bo;
|
||||
|
||||
import org.dromara.xg.domain.XgDormHygieneStudentScore;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查学生评分业务对象 xg_dorm_hygiene_student_score
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = XgDormHygieneStudentScore.class, reverseConvertGenerate = false)
|
||||
public class XgDormHygieneStudentScoreBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
private Long deleted;
|
||||
|
||||
/**
|
||||
* 卫生检查ID,关联xg_dorm_hygiene_check.id
|
||||
*/
|
||||
@NotNull(message = "卫生检查ID,关联xg_dorm_hygiene_check.id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long hygieneCheckId;
|
||||
|
||||
/**
|
||||
* 学生ID,关联xg_student_msg.id
|
||||
*/
|
||||
@NotNull(message = "学生ID,关联xg_student_msg.id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long studentId;
|
||||
|
||||
/**
|
||||
* 学号
|
||||
*/
|
||||
@NotBlank(message = "学号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String studentNo;
|
||||
|
||||
/**
|
||||
* 学生姓名
|
||||
*/
|
||||
@NotBlank(message = "学生姓名不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String studentName;
|
||||
|
||||
/**
|
||||
* 班级ID
|
||||
*/
|
||||
private Long classId;
|
||||
|
||||
/**
|
||||
* 班级名称
|
||||
*/
|
||||
private String className;
|
||||
|
||||
/**
|
||||
* 专业ID
|
||||
*/
|
||||
private Long majorId;
|
||||
|
||||
/**
|
||||
* 专业名称
|
||||
*/
|
||||
private String majorName;
|
||||
|
||||
/**
|
||||
* 学院ID
|
||||
*/
|
||||
private Long collegeId;
|
||||
|
||||
/**
|
||||
* 学院名称
|
||||
*/
|
||||
private String collegeName;
|
||||
|
||||
/**
|
||||
* 床位ID,关联xg_dorm_bed.id
|
||||
*/
|
||||
private Long bedId;
|
||||
|
||||
/**
|
||||
* 床位编号
|
||||
*/
|
||||
private String bedCode;
|
||||
|
||||
/**
|
||||
* 学生个人得分(0-100分)
|
||||
*/
|
||||
private Double studentScore;
|
||||
|
||||
/**
|
||||
* 是否在寝(1在寝 2外出 3请假 4其他)
|
||||
*/
|
||||
private String attendanceStatus;
|
||||
|
||||
/**
|
||||
* 学生评级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
private String studentGrade;
|
||||
|
||||
/**
|
||||
* 是否为寝室长(0否 1是)
|
||||
*/
|
||||
private Long isResponsiblePerson;
|
||||
|
||||
/**
|
||||
* 评分备注
|
||||
*/
|
||||
private String scoreRemarks;
|
||||
|
||||
/**
|
||||
* 改进意见
|
||||
*/
|
||||
private String improvementNotes;
|
||||
|
||||
|
||||
}
|
||||
+177
@@ -0,0 +1,177 @@
|
||||
package org.dromara.xg.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.dromara.xg.domain.XgDormHygieneCheck;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查视图对象 xg_dorm_hygiene_check
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = XgDormHygieneCheck.class)
|
||||
public class XgDormHygieneCheckVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
@ExcelProperty(value = "删除标志", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "0=代表存在,1=代表删除")
|
||||
private Long deleted;
|
||||
|
||||
/**
|
||||
* 检查标题
|
||||
*/
|
||||
@ExcelProperty(value = "检查标题")
|
||||
private String checkTitle;
|
||||
|
||||
/**
|
||||
* 检查日期
|
||||
*/
|
||||
@ExcelProperty(value = "检查日期")
|
||||
private Date checkDate;
|
||||
|
||||
/**
|
||||
* 检查员ID,关联sys_user.id
|
||||
*/
|
||||
@ExcelProperty(value = "检查员ID,关联sys_user.id")
|
||||
private Long checkerId;
|
||||
|
||||
/**
|
||||
* 检查员姓名
|
||||
*/
|
||||
@ExcelProperty(value = "检查员姓名")
|
||||
private String checkerName;
|
||||
|
||||
/**
|
||||
* 检查类型(1日常检查 2专项检查 3突击检查 4复查)
|
||||
*/
|
||||
@ExcelProperty(value = "检查类型", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(dictType = "xg_dorm_hygiene_check_type")
|
||||
private String checkType;
|
||||
|
||||
/**
|
||||
* 检查级别(1宿管员 2学院 3学校)
|
||||
*/
|
||||
@ExcelProperty(value = "检查级别", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(dictType = "xg_dorm_hygiene_check_level")
|
||||
private String checkLevel;
|
||||
|
||||
/**
|
||||
* 宿舍房间ID,关联xg_dorm_room.id
|
||||
*/
|
||||
@ExcelProperty(value = "宿舍房间ID,关联xg_dorm_room.id")
|
||||
private Long roomId;
|
||||
|
||||
/**
|
||||
* 房间编号
|
||||
*/
|
||||
@ExcelProperty(value = "房间编号")
|
||||
private String roomCode;
|
||||
|
||||
/**
|
||||
* 房间名称
|
||||
*/
|
||||
@ExcelProperty(value = "房间名称")
|
||||
private String roomName;
|
||||
|
||||
/**
|
||||
* 宿舍楼ID,关联xg_dorm_building.id
|
||||
*/
|
||||
@ExcelProperty(value = "宿舍楼ID,关联xg_dorm_building.id")
|
||||
private Long buildingId;
|
||||
|
||||
/**
|
||||
* 宿舍楼名称
|
||||
*/
|
||||
@ExcelProperty(value = "宿舍楼名称")
|
||||
private String buildingName;
|
||||
|
||||
/**
|
||||
* 宿舍区ID,关联xg_dorm_area.id
|
||||
*/
|
||||
@ExcelProperty(value = "宿舍区ID,关联xg_dorm_area.id")
|
||||
private Long areaId;
|
||||
|
||||
/**
|
||||
* 宿舍区名称
|
||||
*/
|
||||
@ExcelProperty(value = "宿舍区名称")
|
||||
private String areaName;
|
||||
|
||||
/**
|
||||
* 校区ID,关联xg_dorm_campus.id
|
||||
*/
|
||||
@ExcelProperty(value = "校区ID,关联xg_dorm_campus.id")
|
||||
private Long campusId;
|
||||
|
||||
/**
|
||||
* 校区名称
|
||||
*/
|
||||
@ExcelProperty(value = "校区名称")
|
||||
private String campusName;
|
||||
|
||||
/**
|
||||
* 宿舍总分(0-100分)
|
||||
*/
|
||||
@ExcelProperty(value = "宿舍总分", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "0=-100分")
|
||||
private Double totalScore;
|
||||
|
||||
/**
|
||||
* 卫生等级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
@ExcelProperty(value = "卫生等级", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(dictType = "xg_dorm_hygiene_grade")
|
||||
private String hygieneGrade;
|
||||
|
||||
/**
|
||||
* 附件OSS ID列表,逗号分隔
|
||||
*/
|
||||
@ExcelProperty(value = "附件OSS ID列表,逗号分隔")
|
||||
private String attachmentIds;
|
||||
|
||||
/**
|
||||
* 检查总结
|
||||
*/
|
||||
@ExcelProperty(value = "检查总结")
|
||||
private String checkSummary;
|
||||
|
||||
/**
|
||||
* 整改建议
|
||||
*/
|
||||
@ExcelProperty(value = "整改建议")
|
||||
private String improvementSuggestions;
|
||||
|
||||
/**
|
||||
* 检查备注
|
||||
*/
|
||||
@ExcelProperty(value = "检查备注")
|
||||
private String checkRemarks;
|
||||
|
||||
|
||||
}
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
package org.dromara.xg.domain.vo;
|
||||
|
||||
import org.dromara.xg.domain.XgDormHygieneStudentScore;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查学生评分视图对象 xg_dorm_hygiene_student_score
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = XgDormHygieneStudentScore.class)
|
||||
public class XgDormHygieneStudentScoreVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
@ExcelProperty(value = "删除标志", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "0=代表存在,1=代表删除")
|
||||
private Long deleted;
|
||||
|
||||
/**
|
||||
* 卫生检查ID,关联xg_dorm_hygiene_check.id
|
||||
*/
|
||||
@ExcelProperty(value = "卫生检查ID,关联xg_dorm_hygiene_check.id")
|
||||
private Long hygieneCheckId;
|
||||
|
||||
/**
|
||||
* 学生ID,关联xg_student_msg.id
|
||||
*/
|
||||
@ExcelProperty(value = "学生ID,关联xg_student_msg.id")
|
||||
private Long studentId;
|
||||
|
||||
/**
|
||||
* 学号
|
||||
*/
|
||||
@ExcelProperty(value = "学号")
|
||||
private String studentNo;
|
||||
|
||||
/**
|
||||
* 学生姓名
|
||||
*/
|
||||
@ExcelProperty(value = "学生姓名")
|
||||
private String studentName;
|
||||
|
||||
/**
|
||||
* 班级ID
|
||||
*/
|
||||
@ExcelProperty(value = "班级ID")
|
||||
private Long classId;
|
||||
|
||||
/**
|
||||
* 班级名称
|
||||
*/
|
||||
@ExcelProperty(value = "班级名称")
|
||||
private String className;
|
||||
|
||||
/**
|
||||
* 专业ID
|
||||
*/
|
||||
@ExcelProperty(value = "专业ID")
|
||||
private Long majorId;
|
||||
|
||||
/**
|
||||
* 专业名称
|
||||
*/
|
||||
@ExcelProperty(value = "专业名称")
|
||||
private String majorName;
|
||||
|
||||
/**
|
||||
* 学院ID
|
||||
*/
|
||||
@ExcelProperty(value = "学院ID")
|
||||
private Long collegeId;
|
||||
|
||||
/**
|
||||
* 学院名称
|
||||
*/
|
||||
@ExcelProperty(value = "学院名称")
|
||||
private String collegeName;
|
||||
|
||||
/**
|
||||
* 床位ID,关联xg_dorm_bed.id
|
||||
*/
|
||||
@ExcelProperty(value = "床位ID,关联xg_dorm_bed.id")
|
||||
private Long bedId;
|
||||
|
||||
/**
|
||||
* 床位编号
|
||||
*/
|
||||
@ExcelProperty(value = "床位编号")
|
||||
private String bedCode;
|
||||
|
||||
/**
|
||||
* 学生个人得分(0-100分)
|
||||
*/
|
||||
@ExcelProperty(value = "学生个人得分", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "0=-100分")
|
||||
private Double studentScore;
|
||||
|
||||
/**
|
||||
* 是否在寝(1在寝 2外出 3请假 4其他)
|
||||
*/
|
||||
@ExcelProperty(value = "是否在寝", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(dictType = "xg_student_attendance_status")
|
||||
private String attendanceStatus;
|
||||
|
||||
/**
|
||||
* 学生评级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
@ExcelProperty(value = "学生评级", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(dictType = "xg_dorm_hygiene_grade")
|
||||
private String studentGrade;
|
||||
|
||||
/**
|
||||
* 是否为寝室长(0否 1是)
|
||||
*/
|
||||
@ExcelProperty(value = "是否为寝室长", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(dictType = "sys_yesno")
|
||||
private Long isResponsiblePerson;
|
||||
|
||||
/**
|
||||
* 评分备注
|
||||
*/
|
||||
@ExcelProperty(value = "评分备注")
|
||||
private String scoreRemarks;
|
||||
|
||||
/**
|
||||
* 改进意见
|
||||
*/
|
||||
@ExcelProperty(value = "改进意见")
|
||||
private String improvementNotes;
|
||||
|
||||
|
||||
}
|
||||
+46
@@ -141,4 +141,50 @@ public interface XgDormBedStudentMapper extends BaseMapperPlus<XgDormBedStudent,
|
||||
""")
|
||||
List<Map<String, Object>> selectClassUnoccupiedBedDetails(@Param("classId") Long classId);
|
||||
|
||||
/**
|
||||
* 根据房间ID查询住在当前房间的所有学生信息
|
||||
* 包含学生姓名、学号、性别、学院名称、专业名称、班级名称
|
||||
*
|
||||
* @param roomId 房间ID
|
||||
* @return 房间学生信息列表
|
||||
*/
|
||||
@Select("""
|
||||
SELECT
|
||||
bs.student_id,
|
||||
bs.bed_id,
|
||||
|
||||
-- 学生基本信息
|
||||
s.student_no,
|
||||
s.name as student_name,
|
||||
s.gender,
|
||||
|
||||
-- 床位信息
|
||||
b.bed_name,
|
||||
|
||||
-- 班级信息
|
||||
c.class_name,
|
||||
|
||||
-- 学院信息
|
||||
d.dept_name as college_name,
|
||||
|
||||
-- 专业信息(通过班级关联)
|
||||
major.dept_name as major_name
|
||||
|
||||
FROM xg_dorm_bed_student bs
|
||||
INNER JOIN xg_dorm_bed b ON bs.bed_id = b.id AND b.deleted = '0'
|
||||
INNER JOIN xg_student_msg s ON bs.student_id = s.id AND s.deleted = 0
|
||||
LEFT JOIN xg_class_msg c ON s.class_id = c.id AND c.deleted = 0
|
||||
LEFT JOIN sys_dept d ON c.college_id = d.dept_id AND d.del_flag = '0'
|
||||
LEFT JOIN sys_dept major ON c.major_id = major.dept_id AND major.del_flag = '0'
|
||||
|
||||
WHERE b.room_id = #{roomId}
|
||||
AND bs.student_id IS NOT NULL
|
||||
AND bs.status = '0'
|
||||
AND bs.deleted = '0'
|
||||
AND s.student_status = '1'
|
||||
|
||||
ORDER BY b.bed_code, s.student_no
|
||||
""")
|
||||
List<Map<String, Object>> selectRoomStudents(@Param("roomId") Long roomId);
|
||||
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package org.dromara.xg.mapper;
|
||||
|
||||
import org.dromara.xg.domain.XgDormHygieneCheck;
|
||||
import org.dromara.xg.domain.vo.XgDormHygieneCheckVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查Mapper接口
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
public interface XgDormHygieneCheckMapper extends BaseMapperPlus<XgDormHygieneCheck, XgDormHygieneCheckVo> {
|
||||
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package org.dromara.xg.mapper;
|
||||
|
||||
import org.dromara.xg.domain.XgDormHygieneStudentScore;
|
||||
import org.dromara.xg.domain.vo.XgDormHygieneStudentScoreVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查学生评分Mapper接口
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
public interface XgDormHygieneStudentScoreMapper extends BaseMapperPlus<XgDormHygieneStudentScore, XgDormHygieneStudentScoreVo> {
|
||||
|
||||
}
|
||||
+9
@@ -233,4 +233,13 @@ public interface IXgDormBedStudentService {
|
||||
* @return 未安排学生的床位详情列表
|
||||
*/
|
||||
List<Object> getClassUnoccupiedBedDetails(Long classId);
|
||||
|
||||
/**
|
||||
* 根据房间ID获取住在当前房间的所有学生信息
|
||||
* 包含学生姓名、学号、性别、学院名称、专业名称、班级名称
|
||||
*
|
||||
* @param roomId 房间ID
|
||||
* @return 房间学生信息列表
|
||||
*/
|
||||
List<Object> getRoomStudents(Long roomId);
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
package org.dromara.xg.service;
|
||||
|
||||
import org.dromara.xg.domain.vo.XgDormHygieneCheckVo;
|
||||
import org.dromara.xg.domain.bo.XgDormHygieneCheckBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查Service接口
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
public interface IXgDormHygieneCheckService {
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 宿舍卫生检查
|
||||
*/
|
||||
XgDormHygieneCheckVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询宿舍卫生检查列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 宿舍卫生检查分页列表
|
||||
*/
|
||||
TableDataInfo<XgDormHygieneCheckVo> queryPageList(XgDormHygieneCheckBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的宿舍卫生检查列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 宿舍卫生检查列表
|
||||
*/
|
||||
List<XgDormHygieneCheckVo> queryList(XgDormHygieneCheckBo bo);
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查
|
||||
*
|
||||
* @param bo 宿舍卫生检查
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(XgDormHygieneCheckBo bo);
|
||||
|
||||
/**
|
||||
* 修改宿舍卫生检查
|
||||
*
|
||||
* @param bo 宿舍卫生检查
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(XgDormHygieneCheckBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除宿舍卫生检查信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
package org.dromara.xg.service;
|
||||
|
||||
import org.dromara.xg.domain.vo.XgDormHygieneStudentScoreVo;
|
||||
import org.dromara.xg.domain.bo.XgDormHygieneStudentScoreBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查学生评分Service接口
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
public interface IXgDormHygieneStudentScoreService {
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查学生评分
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 宿舍卫生检查学生评分
|
||||
*/
|
||||
XgDormHygieneStudentScoreVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询宿舍卫生检查学生评分列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 宿舍卫生检查学生评分分页列表
|
||||
*/
|
||||
TableDataInfo<XgDormHygieneStudentScoreVo> queryPageList(XgDormHygieneStudentScoreBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的宿舍卫生检查学生评分列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 宿舍卫生检查学生评分列表
|
||||
*/
|
||||
List<XgDormHygieneStudentScoreVo> queryList(XgDormHygieneStudentScoreBo bo);
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查学生评分
|
||||
*
|
||||
* @param bo 宿舍卫生检查学生评分
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(XgDormHygieneStudentScoreBo bo);
|
||||
|
||||
/**
|
||||
* 修改宿舍卫生检查学生评分
|
||||
*
|
||||
* @param bo 宿舍卫生检查学生评分
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(XgDormHygieneStudentScoreBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除宿舍卫生检查学生评分信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
+44
@@ -2268,4 +2268,48 @@ public class XgDormBedStudentServiceImpl implements IXgDormBedStudentService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据房间ID获取住在当前房间的所有学生信息
|
||||
* 包含学生姓名、学号、性别、学院名称、专业名称、班级名称
|
||||
*/
|
||||
@Override
|
||||
public List<Object> getRoomStudents(Long roomId) {
|
||||
try {
|
||||
log.info("开始获取房间学生信息,房间ID: {}", roomId);
|
||||
|
||||
// 使用SQL关联查询,一次性获取所有信息
|
||||
List<Map<String, Object>> studentDetails = baseMapper.selectRoomStudents(roomId);
|
||||
|
||||
List<Object> result = new ArrayList<>();
|
||||
|
||||
for (Map<String, Object> detailMap : studentDetails) {
|
||||
// 组装结果数据
|
||||
Map<String, Object> studentInfo = new LinkedHashMap<>();
|
||||
|
||||
// 学生基本信息
|
||||
studentInfo.put("studentId", detailMap.get("student_id"));
|
||||
studentInfo.put("studentName", detailMap.get("student_name"));
|
||||
studentInfo.put("studentNo", detailMap.get("student_no"));
|
||||
studentInfo.put("gender", detailMap.get("gender"));
|
||||
|
||||
// 学院、专业、班级信息
|
||||
studentInfo.put("collegeName", detailMap.get("college_name"));
|
||||
studentInfo.put("majorName", detailMap.get("major_name"));
|
||||
studentInfo.put("className", detailMap.get("class_name"));
|
||||
|
||||
// 床位信息
|
||||
studentInfo.put("bedName", detailMap.get("bed_name"));
|
||||
|
||||
result.add(studentInfo);
|
||||
}
|
||||
|
||||
log.info("获取房间学生信息成功,共{}条记录", result.size());
|
||||
return result;
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("获取房间学生信息失败", e);
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+153
@@ -0,0 +1,153 @@
|
||||
package org.dromara.xg.service.impl;
|
||||
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.xg.domain.bo.XgDormHygieneCheckBo;
|
||||
import org.dromara.xg.domain.vo.XgDormHygieneCheckVo;
|
||||
import org.dromara.xg.domain.XgDormHygieneCheck;
|
||||
import org.dromara.xg.mapper.XgDormHygieneCheckMapper;
|
||||
import org.dromara.xg.service.IXgDormHygieneCheckService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查Service业务层处理
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class XgDormHygieneCheckServiceImpl implements IXgDormHygieneCheckService {
|
||||
|
||||
private final XgDormHygieneCheckMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 宿舍卫生检查
|
||||
*/
|
||||
@Override
|
||||
public XgDormHygieneCheckVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询宿舍卫生检查列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 宿舍卫生检查分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<XgDormHygieneCheckVo> queryPageList(XgDormHygieneCheckBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<XgDormHygieneCheck> lqw = buildQueryWrapper(bo);
|
||||
Page<XgDormHygieneCheckVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的宿舍卫生检查列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 宿舍卫生检查列表
|
||||
*/
|
||||
@Override
|
||||
public List<XgDormHygieneCheckVo> queryList(XgDormHygieneCheckBo bo) {
|
||||
LambdaQueryWrapper<XgDormHygieneCheck> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<XgDormHygieneCheck> buildQueryWrapper(XgDormHygieneCheckBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<XgDormHygieneCheck> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(XgDormHygieneCheck::getId);
|
||||
lqw.eq(bo.getDeleted() != null, XgDormHygieneCheck::getDeleted, bo.getDeleted());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCheckTitle()), XgDormHygieneCheck::getCheckTitle, bo.getCheckTitle());
|
||||
lqw.eq(bo.getCheckDate() != null, XgDormHygieneCheck::getCheckDate, bo.getCheckDate());
|
||||
lqw.eq(bo.getCheckerId() != null, XgDormHygieneCheck::getCheckerId, bo.getCheckerId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCheckerName()), XgDormHygieneCheck::getCheckerName, bo.getCheckerName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getCheckType()), XgDormHygieneCheck::getCheckType, bo.getCheckType());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getCheckLevel()), XgDormHygieneCheck::getCheckLevel, bo.getCheckLevel());
|
||||
lqw.eq(bo.getRoomId() != null, XgDormHygieneCheck::getRoomId, bo.getRoomId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getRoomCode()), XgDormHygieneCheck::getRoomCode, bo.getRoomCode());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getRoomName()), XgDormHygieneCheck::getRoomName, bo.getRoomName());
|
||||
lqw.eq(bo.getBuildingId() != null, XgDormHygieneCheck::getBuildingId, bo.getBuildingId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getBuildingName()), XgDormHygieneCheck::getBuildingName, bo.getBuildingName());
|
||||
lqw.eq(bo.getAreaId() != null, XgDormHygieneCheck::getAreaId, bo.getAreaId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getAreaName()), XgDormHygieneCheck::getAreaName, bo.getAreaName());
|
||||
lqw.eq(bo.getCampusId() != null, XgDormHygieneCheck::getCampusId, bo.getCampusId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCampusName()), XgDormHygieneCheck::getCampusName, bo.getCampusName());
|
||||
lqw.eq(bo.getTotalScore() != null, XgDormHygieneCheck::getTotalScore, bo.getTotalScore());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getHygieneGrade()), XgDormHygieneCheck::getHygieneGrade, bo.getHygieneGrade());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getAttachmentIds()), XgDormHygieneCheck::getAttachmentIds, bo.getAttachmentIds());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCheckSummary()), XgDormHygieneCheck::getCheckSummary, bo.getCheckSummary());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getImprovementSuggestions()), XgDormHygieneCheck::getImprovementSuggestions, bo.getImprovementSuggestions());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCheckRemarks()), XgDormHygieneCheck::getCheckRemarks, bo.getCheckRemarks());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查
|
||||
*
|
||||
* @param bo 宿舍卫生检查
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(XgDormHygieneCheckBo bo) {
|
||||
XgDormHygieneCheck add = MapstructUtils.convert(bo, XgDormHygieneCheck.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改宿舍卫生检查
|
||||
*
|
||||
* @param bo 宿舍卫生检查
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(XgDormHygieneCheckBo bo) {
|
||||
XgDormHygieneCheck update = MapstructUtils.convert(bo, XgDormHygieneCheck.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(XgDormHygieneCheck entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除宿舍卫生检查信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
+150
@@ -0,0 +1,150 @@
|
||||
package org.dromara.xg.service.impl;
|
||||
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.xg.domain.bo.XgDormHygieneStudentScoreBo;
|
||||
import org.dromara.xg.domain.vo.XgDormHygieneStudentScoreVo;
|
||||
import org.dromara.xg.domain.XgDormHygieneStudentScore;
|
||||
import org.dromara.xg.mapper.XgDormHygieneStudentScoreMapper;
|
||||
import org.dromara.xg.service.IXgDormHygieneStudentScoreService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 宿舍卫生检查学生评分Service业务层处理
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-08-16
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class XgDormHygieneStudentScoreServiceImpl implements IXgDormHygieneStudentScoreService {
|
||||
|
||||
private final XgDormHygieneStudentScoreMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查学生评分
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 宿舍卫生检查学生评分
|
||||
*/
|
||||
@Override
|
||||
public XgDormHygieneStudentScoreVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询宿舍卫生检查学生评分列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 宿舍卫生检查学生评分分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<XgDormHygieneStudentScoreVo> queryPageList(XgDormHygieneStudentScoreBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<XgDormHygieneStudentScore> lqw = buildQueryWrapper(bo);
|
||||
Page<XgDormHygieneStudentScoreVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的宿舍卫生检查学生评分列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 宿舍卫生检查学生评分列表
|
||||
*/
|
||||
@Override
|
||||
public List<XgDormHygieneStudentScoreVo> queryList(XgDormHygieneStudentScoreBo bo) {
|
||||
LambdaQueryWrapper<XgDormHygieneStudentScore> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<XgDormHygieneStudentScore> buildQueryWrapper(XgDormHygieneStudentScoreBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<XgDormHygieneStudentScore> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(XgDormHygieneStudentScore::getId);
|
||||
lqw.eq(bo.getDeleted() != null, XgDormHygieneStudentScore::getDeleted, bo.getDeleted());
|
||||
lqw.eq(bo.getHygieneCheckId() != null, XgDormHygieneStudentScore::getHygieneCheckId, bo.getHygieneCheckId());
|
||||
lqw.eq(bo.getStudentId() != null, XgDormHygieneStudentScore::getStudentId, bo.getStudentId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getStudentNo()), XgDormHygieneStudentScore::getStudentNo, bo.getStudentNo());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getStudentName()), XgDormHygieneStudentScore::getStudentName, bo.getStudentName());
|
||||
lqw.eq(bo.getClassId() != null, XgDormHygieneStudentScore::getClassId, bo.getClassId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getClassName()), XgDormHygieneStudentScore::getClassName, bo.getClassName());
|
||||
lqw.eq(bo.getMajorId() != null, XgDormHygieneStudentScore::getMajorId, bo.getMajorId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getMajorName()), XgDormHygieneStudentScore::getMajorName, bo.getMajorName());
|
||||
lqw.eq(bo.getCollegeId() != null, XgDormHygieneStudentScore::getCollegeId, bo.getCollegeId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCollegeName()), XgDormHygieneStudentScore::getCollegeName, bo.getCollegeName());
|
||||
lqw.eq(bo.getBedId() != null, XgDormHygieneStudentScore::getBedId, bo.getBedId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getBedCode()), XgDormHygieneStudentScore::getBedCode, bo.getBedCode());
|
||||
lqw.eq(bo.getStudentScore() != null, XgDormHygieneStudentScore::getStudentScore, bo.getStudentScore());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getAttendanceStatus()), XgDormHygieneStudentScore::getAttendanceStatus, bo.getAttendanceStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getStudentGrade()), XgDormHygieneStudentScore::getStudentGrade, bo.getStudentGrade());
|
||||
lqw.eq(bo.getIsResponsiblePerson() != null, XgDormHygieneStudentScore::getIsResponsiblePerson, bo.getIsResponsiblePerson());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getScoreRemarks()), XgDormHygieneStudentScore::getScoreRemarks, bo.getScoreRemarks());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getImprovementNotes()), XgDormHygieneStudentScore::getImprovementNotes, bo.getImprovementNotes());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查学生评分
|
||||
*
|
||||
* @param bo 宿舍卫生检查学生评分
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(XgDormHygieneStudentScoreBo bo) {
|
||||
XgDormHygieneStudentScore add = MapstructUtils.convert(bo, XgDormHygieneStudentScore.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改宿舍卫生检查学生评分
|
||||
*
|
||||
* @param bo 宿舍卫生检查学生评分
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(XgDormHygieneStudentScoreBo bo) {
|
||||
XgDormHygieneStudentScore update = MapstructUtils.convert(bo, XgDormHygieneStudentScore.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(XgDormHygieneStudentScore entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除宿舍卫生检查学生评分信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.xg.mapper.XgDormHygieneCheckMapper">
|
||||
|
||||
</mapper>
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.xg.mapper.XgDormHygieneStudentScoreMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,394 @@
|
||||
# 宿舍卫生检查导出导入设计方案
|
||||
|
||||
## 📊 业务背景
|
||||
|
||||
宿舍卫生检查系统采用**主子表分离设计**:
|
||||
- **主表**:`xg_dorm_hygiene_check` - 宿舍整体检查信息
|
||||
- **子表**:`xg_dorm_hygiene_student_score` - 学生个人评分信息
|
||||
|
||||
## 🎯 设计方案
|
||||
|
||||
### 方案一:平铺式导出导入(推荐)
|
||||
|
||||
#### 📋 导出格式
|
||||
```
|
||||
检查编号 | 检查日期 | 宿舍楼 | 房间号 | 宿舍总分 | 卫生等级 | 学生1学号 | 学生1姓名 | 学生1得分 | 学生1评级 | 学生2学号 | 学生2姓名 | 学生2得分 | 学生2评级 | ...
|
||||
```
|
||||
|
||||
#### 💻 Controller层实现
|
||||
```java
|
||||
/**
|
||||
* 导出宿舍卫生检查数据(平铺格式)
|
||||
*/
|
||||
@SaCheckPermission("xg:hygiene:export")
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, XgDormHygieneCheckBo bo) {
|
||||
List<XgDormHygieneCheckFlatVo> list = hygieneCheckService.queryFlatList(bo);
|
||||
ExcelUtil.exportExcel(list, "宿舍卫生检查数据", XgDormHygieneCheckFlatVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入宿舍卫生检查数据(平铺格式)
|
||||
*/
|
||||
@SaCheckPermission("xg:hygiene:import")
|
||||
@PostMapping("/importData")
|
||||
public R<Void> importData(MultipartFile file) throws Exception {
|
||||
ExcelResult<XgDormHygieneCheckFlatVo> result = ExcelUtil.importExcel(file.getInputStream(), XgDormHygieneCheckFlatVo.class);
|
||||
List<XgDormHygieneCheckFlatVo> flatList = result.getList();
|
||||
String message = hygieneCheckService.importFlatData(flatList);
|
||||
return R.ok(message);
|
||||
}
|
||||
```
|
||||
|
||||
#### 📝 平铺式VO类设计
|
||||
```java
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class XgDormHygieneCheckFlatVo {
|
||||
|
||||
// ========== 宿舍检查基本信息 ==========
|
||||
@ExcelProperty(value = "检查编号")
|
||||
private String checkNo;
|
||||
|
||||
@ExcelProperty(value = "检查日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date checkDate;
|
||||
|
||||
@ExcelProperty(value = "宿舍楼")
|
||||
private String buildingName;
|
||||
|
||||
@ExcelProperty(value = "房间号")
|
||||
private String roomCode;
|
||||
|
||||
@ExcelProperty(value = "宿舍总分")
|
||||
private BigDecimal totalScore;
|
||||
|
||||
@ExcelProperty(value = "卫生等级")
|
||||
private String hygieneGrade;
|
||||
|
||||
// ========== 学生1信息 ==========
|
||||
@ExcelProperty(value = "学生1学号")
|
||||
private String student1No;
|
||||
|
||||
@ExcelProperty(value = "学生1姓名")
|
||||
private String student1Name;
|
||||
|
||||
@ExcelProperty(value = "学生1得分")
|
||||
private BigDecimal student1Score;
|
||||
|
||||
@ExcelProperty(value = "学生1评级")
|
||||
private String student1Grade;
|
||||
|
||||
// ========== 学生2信息 ==========
|
||||
@ExcelProperty(value = "学生2学号")
|
||||
private String student2No;
|
||||
|
||||
@ExcelProperty(value = "学生2姓名")
|
||||
private String student2Name;
|
||||
|
||||
@ExcelProperty(value = "学生2得分")
|
||||
private BigDecimal student2Score;
|
||||
|
||||
@ExcelProperty(value = "学生2评级")
|
||||
private String student2Grade;
|
||||
|
||||
// ========== 学生3信息 ==========
|
||||
@ExcelProperty(value = "学生3学号")
|
||||
private String student3No;
|
||||
|
||||
@ExcelProperty(value = "学生3姓名")
|
||||
private String student3Name;
|
||||
|
||||
@ExcelProperty(value = "学生3得分")
|
||||
private BigDecimal student3Score;
|
||||
|
||||
@ExcelProperty(value = "学生3评级")
|
||||
private String student3Grade;
|
||||
|
||||
// ========== 学生4信息 ==========
|
||||
@ExcelProperty(value = "学生4学号")
|
||||
private String student4No;
|
||||
|
||||
@ExcelProperty(value = "学生4姓名")
|
||||
private String student4Name;
|
||||
|
||||
@ExcelProperty(value = "学生4得分")
|
||||
private BigDecimal student4Score;
|
||||
|
||||
@ExcelProperty(value = "学生4评级")
|
||||
private String student4Grade;
|
||||
|
||||
// ========== 备注信息 ==========
|
||||
@ExcelProperty(value = "检查总结")
|
||||
private String checkSummary;
|
||||
|
||||
@ExcelProperty(value = "整改建议")
|
||||
private String improvementSuggestions;
|
||||
|
||||
// ========== 基础字段 ==========
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date updateTime;
|
||||
|
||||
private Long createBy;
|
||||
|
||||
private Long updateBy;
|
||||
}
|
||||
```
|
||||
|
||||
#### 🔧 Service层数据转换
|
||||
```java
|
||||
/**
|
||||
* 查询平铺格式的卫生检查列表
|
||||
*/
|
||||
public List<XgDormHygieneCheckFlatVo> queryFlatList(XgDormHygieneCheckBo bo) {
|
||||
// 1. 查询主表数据
|
||||
List<XgDormHygieneCheck> checkList = baseMapper.selectList(buildQueryWrapper(bo));
|
||||
|
||||
List<XgDormHygieneCheckFlatVo> flatList = new ArrayList<>();
|
||||
|
||||
for (XgDormHygieneCheck check : checkList) {
|
||||
// 2. 查询对应的学生评分数据
|
||||
List<XgDormHygieneStudentScore> studentScores = studentScoreMapper.selectList(
|
||||
new LambdaQueryWrapper<XgDormHygieneStudentScore>()
|
||||
.eq(XgDormHygieneStudentScore::getHygieneCheckId, check.getId())
|
||||
.eq(XgDormHygieneStudentScore::getDeleted, 0)
|
||||
.orderByAsc(XgDormHygieneStudentScore::getStudentNo)
|
||||
);
|
||||
|
||||
// 3. 数据转换为平铺格式
|
||||
XgDormHygieneCheckFlatVo flatVo = new XgDormHygieneCheckFlatVo();
|
||||
|
||||
// 填充主表信息
|
||||
BeanUtils.copyProperties(check, flatVo);
|
||||
|
||||
// 填充学生信息(最多支持4个学生)
|
||||
for (int i = 0; i < Math.min(studentScores.size(), 4); i++) {
|
||||
XgDormHygieneStudentScore student = studentScores.get(i);
|
||||
switch (i) {
|
||||
case 0:
|
||||
flatVo.setStudent1No(student.getStudentNo());
|
||||
flatVo.setStudent1Name(student.getStudentName());
|
||||
flatVo.setStudent1Score(student.getStudentScore());
|
||||
flatVo.setStudent1Grade(student.getStudentGrade());
|
||||
break;
|
||||
case 1:
|
||||
flatVo.setStudent2No(student.getStudentNo());
|
||||
flatVo.setStudent2Name(student.getStudentName());
|
||||
flatVo.setStudent2Score(student.getStudentScore());
|
||||
flatVo.setStudent2Grade(student.getStudentGrade());
|
||||
break;
|
||||
case 2:
|
||||
flatVo.setStudent3No(student.getStudentNo());
|
||||
flatVo.setStudent3Name(student.getStudentName());
|
||||
flatVo.setStudent3Score(student.getStudentScore());
|
||||
flatVo.setStudent3Grade(student.getStudentGrade());
|
||||
break;
|
||||
case 3:
|
||||
flatVo.setStudent4No(student.getStudentNo());
|
||||
flatVo.setStudent4Name(student.getStudentName());
|
||||
flatVo.setStudent4Score(student.getStudentScore());
|
||||
flatVo.setStudent4Grade(student.getStudentGrade());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
flatList.add(flatVo);
|
||||
}
|
||||
|
||||
return flatList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入平铺格式数据
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String importFlatData(List<XgDormHygieneCheckFlatVo> flatList) {
|
||||
if (CollUtil.isEmpty(flatList)) {
|
||||
throw new ServiceException("导入数据不能为空");
|
||||
}
|
||||
|
||||
int successCount = 0;
|
||||
int failureCount = 0;
|
||||
StringBuilder failureMsg = new StringBuilder();
|
||||
|
||||
for (XgDormHygieneCheckFlatVo flatVo : flatList) {
|
||||
try {
|
||||
// 1. 转换并保存主表数据
|
||||
XgDormHygieneCheck check = convertToCheck(flatVo);
|
||||
baseMapper.insert(check);
|
||||
|
||||
// 2. 转换并保存学生评分数据
|
||||
List<XgDormHygieneStudentScore> studentScores = convertToStudentScores(flatVo, check.getId());
|
||||
for (XgDormHygieneStudentScore score : studentScores) {
|
||||
studentScoreMapper.insert(score);
|
||||
}
|
||||
|
||||
successCount++;
|
||||
} catch (Exception e) {
|
||||
failureCount++;
|
||||
String msg = "<br/>" + failureCount + "、检查编号 " + flatVo.getCheckNo() + " 导入失败:" + e.getMessage();
|
||||
failureMsg.append(msg);
|
||||
}
|
||||
}
|
||||
|
||||
if (failureCount > 0) {
|
||||
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureCount + " 条数据格式不正确,错误如下:");
|
||||
throw new ServiceException(failureMsg.toString());
|
||||
} else {
|
||||
return "恭喜您,数据已全部导入成功!共 " + successCount + " 条";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 方案二:多Sheet导出导入
|
||||
|
||||
#### 📋 导出格式
|
||||
- **Sheet1**: 宿舍检查主数据
|
||||
- **Sheet2**: 学生评分详细数据
|
||||
|
||||
#### 💻 实现代码
|
||||
```java
|
||||
/**
|
||||
* 导出多Sheet格式数据
|
||||
*/
|
||||
@SaCheckPermission("xg:hygiene:exportMultiSheet")
|
||||
@PostMapping("/exportMultiSheet")
|
||||
public void exportMultiSheet(HttpServletResponse response, XgDormHygieneCheckBo bo) {
|
||||
// 1. 查询主表数据
|
||||
List<XgDormHygieneCheckVo> checkList = hygieneCheckService.queryList(bo);
|
||||
|
||||
// 2. 查询子表数据
|
||||
List<XgDormHygieneStudentScoreVo> studentScoreList = hygieneCheckService.queryStudentScoreList(bo);
|
||||
|
||||
// 3. 多Sheet导出
|
||||
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
|
||||
.autoCloseStream(Boolean.FALSE)
|
||||
.build();
|
||||
|
||||
try {
|
||||
// Sheet1: 宿舍检查数据
|
||||
WriteSheet writeSheet1 = EasyExcel.writerSheet(0, "宿舍检查数据")
|
||||
.head(XgDormHygieneCheckVo.class)
|
||||
.build();
|
||||
excelWriter.write(checkList, writeSheet1);
|
||||
|
||||
// Sheet2: 学生评分数据
|
||||
WriteSheet writeSheet2 = EasyExcel.writerSheet(1, "学生评分数据")
|
||||
.head(XgDormHygieneStudentScoreVo.class)
|
||||
.build();
|
||||
excelWriter.write(studentScoreList, writeSheet2);
|
||||
|
||||
} finally {
|
||||
excelWriter.finish();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 方案三:嵌套式导出导入
|
||||
|
||||
#### 📋 导出格式(纵向展开)
|
||||
```
|
||||
检查编号 | 检查日期 | 宿舍楼 | 房间号 | 宿舍总分 | 卫生等级 | 学号 | 姓名 | 个人得分 | 个人评级
|
||||
WSCC001 | 2025-01-28 | A栋 | 101 | 85.5 | B | 2023001 | 张三 | 88 | B
|
||||
WSCC001 | 2025-01-28 | A栋 | 101 | 85.5 | B | 2023002 | 李四 | 83 | C
|
||||
```
|
||||
|
||||
## 🔧 技术实现要点
|
||||
|
||||
### 1. 数据完整性校验
|
||||
```java
|
||||
// 导入时校验数据完整性
|
||||
private void validateImportData(XgDormHygieneCheckFlatVo flatVo) {
|
||||
// 必填字段校验
|
||||
if (StringUtils.isBlank(flatVo.getCheckNo())) {
|
||||
throw new ServiceException("检查编号不能为空");
|
||||
}
|
||||
|
||||
// 宿舍信息校验
|
||||
if (StringUtils.isBlank(flatVo.getRoomCode())) {
|
||||
throw new ServiceException("房间号不能为空");
|
||||
}
|
||||
|
||||
// 至少需要一个学生信息
|
||||
if (StringUtils.isAllBlank(flatVo.getStudent1No(), flatVo.getStudent2No(),
|
||||
flatVo.getStudent3No(), flatVo.getStudent4No())) {
|
||||
throw new ServiceException("至少需要填写一个学生信息");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 模板下载功能
|
||||
```java
|
||||
/**
|
||||
* 下载导入模板
|
||||
*/
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
// 生成模板数据
|
||||
List<XgDormHygieneCheckFlatVo> templateList = generateTemplateData();
|
||||
ExcelUtil.exportExcel(templateList, "宿舍卫生检查导入模板", XgDormHygieneCheckFlatVo.class, response);
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 批量操作优化
|
||||
```java
|
||||
// 使用批量插入优化性能
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void batchInsertStudentScores(List<XgDormHygieneStudentScore> studentScores) {
|
||||
if (CollUtil.isNotEmpty(studentScores)) {
|
||||
// 分批插入,每批500条
|
||||
List<List<XgDormHygieneStudentScore>> partition = CollUtil.split(studentScores, 500);
|
||||
for (List<XgDormHygieneStudentScore> batch : partition) {
|
||||
studentScoreMapper.insertBatch(batch);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 📊 推荐使用方案
|
||||
|
||||
### 🎯 方案选择建议
|
||||
|
||||
| 使用场景 | 推荐方案 | 理由 |
|
||||
|---------|---------|------|
|
||||
| **日常数据录入** | 平铺式 | 操作简单,一个Excel搞定 |
|
||||
| **数据分析报表** | 嵌套式 | 便于透视表分析 |
|
||||
| **系统间数据交换** | 多Sheet式 | 结构清晰,数据完整 |
|
||||
| **打印存档** | 平铺式 | 格式紧凑,便于查看 |
|
||||
|
||||
### ⚡ 性能优化建议
|
||||
|
||||
1. **导出时分页处理**:大数据量时分批导出
|
||||
2. **导入时异步处理**:超过1000条数据使用异步导入
|
||||
3. **缓存优化**:字典数据、宿舍信息等使用缓存
|
||||
4. **索引优化**:确保查询字段都有适当索引
|
||||
|
||||
### 🚨 注意事项
|
||||
|
||||
1. **数据一致性**:导入时需要保证主子表数据的一致性
|
||||
2. **权限控制**:导出导入功能需要适当的权限控制
|
||||
3. **错误处理**:提供详细的错误信息和导入结果反馈
|
||||
4. **模板维护**:定期更新导入模板,保持与业务同步
|
||||
|
||||
## 📝 相关配置
|
||||
|
||||
### Excel导出配置
|
||||
```yaml
|
||||
# application.yml
|
||||
ruoyi:
|
||||
excel:
|
||||
# 导出最大行数
|
||||
max-rows: 10000
|
||||
# 导入最大行数
|
||||
import-max-rows: 5000
|
||||
```
|
||||
|
||||
### 权限配置
|
||||
```sql
|
||||
-- 菜单权限配置
|
||||
INSERT INTO sys_menu VALUES (NULL, '宿舍卫生检查导出', 导出, 'xg:hygiene:export', '', '', 1, 0, 'C', '0', '0', '', 'export', 1, NOW(), NULL, NULL, '');
|
||||
INSERT INTO sys_menu VALUES (NULL, '宿舍卫生检查导入', 导入, 'xg:hygiene:import', '', '', 1, 0, 'C', '0', '0', '', 'upload', 1, NOW(), NULL, NULL, '');
|
||||
```
|
||||
@@ -0,0 +1,336 @@
|
||||
# 宿舍卫生检查管理API文档
|
||||
|
||||
## 概述
|
||||
|
||||
宿舍卫生检查管理模块提供完整的宿舍卫生检查功能,包括检查记录管理和学生个人评分管理。该模块支持同时操作两个数据表:`xg_dorm_hygiene_check`(主表)和 `xg_dorm_hygiene_student_score`(学生评分表)。
|
||||
|
||||
## 数据库表结构
|
||||
|
||||
### 主表:xg_dorm_hygiene_check
|
||||
- 存储宿舍卫生检查的基本信息
|
||||
- 包含检查标题、日期、检查员、宿舍信息、总分、等级等
|
||||
|
||||
### 子表:xg_dorm_hygiene_student_score
|
||||
- 存储每个学生的个人评分信息
|
||||
- 关联主表,包含学生信息、个人得分、出勤状态、评级等
|
||||
|
||||
## API接口规范
|
||||
|
||||
### 1. 新增宿舍卫生检查(包含学生评分)
|
||||
|
||||
**接口地址:** `POST /dormHygieneCheck/dormHygieneCheck/addWithStudentScores`
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"checkTitle": "2025年1月宿舍卫生检查",
|
||||
"checkDate": "2025-01-28 09:00:00",
|
||||
"checkerId": 1,
|
||||
"checkerName": "张检查员",
|
||||
"checkType": "1",
|
||||
"checkLevel": "1",
|
||||
"roomId": 1,
|
||||
"roomCode": "A101",
|
||||
"roomName": "A栋101室",
|
||||
"buildingId": 1,
|
||||
"buildingName": "A栋宿舍楼",
|
||||
"areaId": 1,
|
||||
"areaName": "东区",
|
||||
"campusId": 1,
|
||||
"campusName": "主校区",
|
||||
"totalScore": 85.5,
|
||||
"hygieneGrade": "B",
|
||||
"attachmentIds": "oss1,oss2,oss3",
|
||||
"checkSummary": "宿舍整体卫生良好",
|
||||
"improvementSuggestions": "建议加强个人物品整理",
|
||||
"checkRemarks": "检查顺利完成",
|
||||
"studentData": [
|
||||
{
|
||||
"studentId": 1,
|
||||
"studentName": "张三",
|
||||
"studentNo": "2021001",
|
||||
"className": "计算机科学1班",
|
||||
"majorName": "计算机科学与技术",
|
||||
"collegeName": "信息工程学院",
|
||||
"bedId": 1,
|
||||
"bedCode": "A101-1",
|
||||
"studentScore": 85.5,
|
||||
"attendanceStatus": "1",
|
||||
"studentGrade": "B",
|
||||
"isResponsiblePerson": 0,
|
||||
"scoreRemarks": "个人卫生良好",
|
||||
"improvementNotes": "建议整理桌面物品"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**实现要求:**
|
||||
1. **事务处理**:使用数据库事务确保两个表的操作原子性
|
||||
2. **主表插入**:插入宿舍卫生检查记录,获取生成的主键ID
|
||||
3. **子表插入**:为每个学生插入评分记录,关联主表ID
|
||||
4. **数据验证**:验证必填字段、数据格式、分数范围等
|
||||
5. **权限控制**:检查用户权限,记录操作日志
|
||||
|
||||
**响应格式:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "新增成功",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"checkTitle": "2025年1月宿舍卫生检查",
|
||||
"studentCount": 4
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 更新宿舍卫生检查(包含学生评分)
|
||||
|
||||
**接口地址:** `PUT /dormHygieneCheck/dormHygieneCheck/updateWithStudentScores`
|
||||
|
||||
**请求参数:** 与新增接口相同,但必须包含 `id` 字段
|
||||
|
||||
**实现要求:**
|
||||
1. **事务处理**:使用数据库事务确保操作的原子性
|
||||
2. **主表更新**:更新宿舍卫生检查记录
|
||||
3. **子表处理**:
|
||||
- 将原有学生评分记录的 `deleted` 字段设置为 1(逻辑删除)
|
||||
- 插入新的学生评分记录
|
||||
4. **数据验证**:验证记录存在性、权限等
|
||||
5. **历史保留**:保留历史数据,便于追溯
|
||||
|
||||
**响应格式:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "更新成功",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"checkTitle": "2025年1月宿舍卫生检查(更新)",
|
||||
"studentCount": 4,
|
||||
"updatedTime": "2025-01-28 10:30:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 后端实现示例
|
||||
|
||||
### Controller层
|
||||
|
||||
```java
|
||||
@RestController
|
||||
@RequestMapping("/dormHygieneCheck/dormHygieneCheck")
|
||||
public class DormHygieneCheckController {
|
||||
|
||||
@Autowired
|
||||
private DormHygieneCheckService dormHygieneCheckService;
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查(包含学生评分)
|
||||
*/
|
||||
@PostMapping("/addWithStudentScores")
|
||||
@SaCheckPermission("dormHygieneCheck:dormHygieneCheck:add")
|
||||
public R<Void> addWithStudentScores(@RequestBody @Valid DormHygieneCheckCompleteForm form) {
|
||||
dormHygieneCheckService.addWithStudentScores(form);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新宿舍卫生检查(包含学生评分)
|
||||
*/
|
||||
@PutMapping("/updateWithStudentScores")
|
||||
@SaCheckPermission("dormHygieneCheck:dormHygieneCheck:edit")
|
||||
public R<Void> updateWithStudentScores(@RequestBody @Valid DormHygieneCheckCompleteForm form) {
|
||||
dormHygieneCheckService.updateWithStudentScores(form);
|
||||
return R.ok();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Service层
|
||||
|
||||
```java
|
||||
@Service
|
||||
public class DormHygieneCheckServiceImpl implements DormHygieneCheckService {
|
||||
|
||||
@Autowired
|
||||
private DormHygieneCheckMapper dormHygieneCheckMapper;
|
||||
|
||||
@Autowired
|
||||
private DormHygieneStudentScoreMapper studentScoreMapper;
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查(包含学生评分)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void addWithStudentScores(DormHygieneCheckCompleteForm form) {
|
||||
// 1. 验证数据
|
||||
validateFormData(form);
|
||||
|
||||
// 2. 插入主表
|
||||
DormHygieneCheck entity = convertToEntity(form);
|
||||
dormHygieneCheckMapper.insert(entity);
|
||||
|
||||
// 3. 插入学生评分数据
|
||||
if (form.getStudentData() != null && !form.getStudentData().isEmpty()) {
|
||||
for (DormHygieneStudentScoreForm studentForm : form.getStudentData()) {
|
||||
DormHygieneStudentScore studentEntity = convertToStudentEntity(studentForm);
|
||||
studentEntity.setHygieneCheckId(entity.getId());
|
||||
studentScoreMapper.insert(studentEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新宿舍卫生检查(包含学生评分)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateWithStudentScores(DormHygieneCheckCompleteForm form) {
|
||||
// 1. 验证数据
|
||||
validateFormData(form);
|
||||
validateRecordExists(form.getId());
|
||||
|
||||
// 2. 更新主表
|
||||
DormHygieneCheck entity = convertToEntity(form);
|
||||
dormHygieneCheckMapper.updateById(entity);
|
||||
|
||||
// 3. 逻辑删除原有学生评分记录
|
||||
studentScoreMapper.logicDeleteByCheckId(entity.getId());
|
||||
|
||||
// 4. 插入新的学生评分数据
|
||||
if (form.getStudentData() != null && !form.getStudentData().isEmpty()) {
|
||||
for (DormHygieneStudentScoreForm studentForm : form.getStudentData()) {
|
||||
DormHygieneStudentScore studentEntity = convertToStudentEntity(studentForm);
|
||||
studentEntity.setHygieneCheckId(entity.getId());
|
||||
studentScoreMapper.insert(studentEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证表单数据
|
||||
*/
|
||||
private void validateFormData(DormHygieneCheckCompleteForm form) {
|
||||
// 验证必填字段
|
||||
if (StringUtils.isBlank(form.getCheckTitle())) {
|
||||
throw new ServiceException("检查标题不能为空");
|
||||
}
|
||||
if (form.getRoomId() == null) {
|
||||
throw new ServiceException("房间ID不能为空");
|
||||
}
|
||||
|
||||
// 验证分数范围
|
||||
if (form.getTotalScore() != null) {
|
||||
if (form.getTotalScore() < 0 || form.getTotalScore() > 100) {
|
||||
throw new ServiceException("宿舍总分必须在0-100分之间");
|
||||
}
|
||||
}
|
||||
|
||||
// 验证学生数据
|
||||
if (form.getStudentData() != null) {
|
||||
for (DormHygieneStudentScoreForm student : form.getStudentData()) {
|
||||
if (student.getStudentScore() != null) {
|
||||
if (student.getStudentScore() < 0 || student.getStudentScore() > 100) {
|
||||
throw new ServiceException("学生个人得分必须在0-100分之间");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证记录是否存在
|
||||
*/
|
||||
private void validateRecordExists(Long id) {
|
||||
DormHygieneCheck existing = dormHygieneCheckMapper.selectById(id);
|
||||
if (existing == null) {
|
||||
throw new ServiceException("记录不存在");
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Mapper层
|
||||
|
||||
```java
|
||||
@Mapper
|
||||
public interface DormHygieneStudentScoreMapper extends BaseMapperPlus<DormHygieneStudentScore, DormHygieneStudentScoreVO> {
|
||||
|
||||
/**
|
||||
* 根据检查ID逻辑删除学生评分记录
|
||||
*/
|
||||
@Update("UPDATE xg_dorm_hygiene_student_score SET deleted = 1, update_time = NOW(), update_by = #{updateBy} WHERE hygiene_check_id = #{checkId} AND deleted = 0")
|
||||
int logicDeleteByCheckId(@Param("checkId") Long checkId, @Param("updateBy") Long updateBy);
|
||||
|
||||
/**
|
||||
* 根据检查ID查询学生评分列表
|
||||
*/
|
||||
@Select("SELECT * FROM xg_dorm_hygiene_student_score WHERE hygiene_check_id = #{checkId} AND deleted = 0")
|
||||
List<DormHygieneStudentScore> selectByCheckId(@Param("checkId") Long checkId);
|
||||
}
|
||||
```
|
||||
|
||||
## 数据验证规则
|
||||
|
||||
### 主表验证
|
||||
- `checkTitle`: 必填,长度1-200字符
|
||||
- `checkDate`: 必填,日期时间格式
|
||||
- `checkerId`: 必填,关联用户表
|
||||
- `roomId`: 必填,关联房间表
|
||||
- `totalScore`: 可选,0-100分
|
||||
- `hygieneGrade`: 可选,A/B/C/D
|
||||
|
||||
### 学生评分表验证
|
||||
- `studentId`: 必填,关联学生表
|
||||
- `studentScore`: 可选,0-100分
|
||||
- `attendanceStatus`: 必填,1/2/3/4
|
||||
- `studentGrade`: 可选,A/B/C/D
|
||||
|
||||
## 错误处理
|
||||
|
||||
### 常见错误码
|
||||
- `400`: 参数验证失败
|
||||
- `401`: 权限不足
|
||||
- `404`: 记录不存在
|
||||
- `500`: 服务器内部错误
|
||||
|
||||
### 错误响应格式
|
||||
```json
|
||||
{
|
||||
"code": 400,
|
||||
"msg": "检查标题不能为空",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **事务一致性**:确保两个表的操作在同一事务中完成
|
||||
2. **数据完整性**:更新时保留历史数据,便于追溯
|
||||
3. **性能优化**:批量操作时考虑性能影响
|
||||
4. **权限控制**:严格检查用户权限
|
||||
5. **日志记录**:记录重要操作日志
|
||||
6. **数据验证**:前端和后端都要进行数据验证
|
||||
|
||||
## 测试用例
|
||||
|
||||
### 新增测试
|
||||
1. 正常新增:提供完整有效数据
|
||||
2. 数据验证:测试必填字段、格式验证
|
||||
3. 权限测试:测试不同用户权限
|
||||
4. 异常测试:测试网络异常、数据库异常
|
||||
|
||||
### 更新测试
|
||||
1. 正常更新:更新现有记录
|
||||
2. 记录不存在:更新不存在的记录
|
||||
3. 学生数据变更:测试学生数据的增删改
|
||||
4. 历史数据:验证历史数据保留
|
||||
|
||||
---
|
||||
|
||||
**文档版本:** v1.0
|
||||
**创建时间:** 2025-01-28
|
||||
**维护人员:** 系统开发团队
|
||||
@@ -0,0 +1,176 @@
|
||||
# 宿舍卫生检查API接口完善总结
|
||||
|
||||
## 项目概述
|
||||
|
||||
本次任务是对宿舍卫生检查管理模块的API接口进行完善,主要目标是实现同时操作两个数据表(主表和子表)的新增和更新功能。
|
||||
|
||||
## 完成的工作
|
||||
|
||||
### 1. 前端API接口完善
|
||||
|
||||
#### 1.1 类型定义扩展 (`types.ts`)
|
||||
- ✅ 新增 `DormHygieneStudentScoreVO` 接口:学生评分数据展示类型
|
||||
- ✅ 新增 `DormHygieneStudentScoreForm` 接口:学生评分数据表单类型
|
||||
- ✅ 新增 `DormHygieneStudentScoreQuery` 接口:学生评分查询类型
|
||||
- ✅ 新增 `DormHygieneCheckCompleteForm` 接口:完整的宿舍卫生检查表单类型(包含学生评分数据)
|
||||
|
||||
#### 1.2 API接口更新 (`index.ts`)
|
||||
- ✅ 更新 `addDormHygieneCheck` 接口:支持同时插入主表和子表数据
|
||||
- ✅ 更新 `updateDormHygieneCheck` 接口:支持同时更新主表和子表数据
|
||||
- ✅ 新增学生评分相关API接口:
|
||||
- `listDormHygieneStudentScores`:查询学生评分列表
|
||||
- `getDormHygieneStudentScore`:查询学生评分详情
|
||||
- `addDormHygieneStudentScore`:新增学生评分
|
||||
- `updateDormHygieneStudentScore`:更新学生评分
|
||||
- `delDormHygieneStudentScore`:删除学生评分
|
||||
- `getStudentScoresByCheckId`:根据检查ID查询学生评分
|
||||
- `deleteStudentScoresByCheckId`:批量删除指定检查的学生评分
|
||||
|
||||
### 2. 前端组件优化
|
||||
|
||||
#### 2.1 Dialog组件更新 (`DormHygieneCheckDialog.vue`)
|
||||
- ✅ 修复表单验证规则的类型问题
|
||||
- ✅ 更新 `submitForm` 方法:支持提交完整的学生评分数据
|
||||
- ✅ 优化数据格式转换:将前端数据格式转换为API接口要求的格式
|
||||
- ✅ 增强错误处理和用户提示
|
||||
|
||||
#### 2.2 主页面更新 (`index.vue`)
|
||||
- ✅ 更新 `handleDialogSubmit` 方法:支持处理完整表单数据
|
||||
- ✅ 添加新的类型导入:`DormHygieneCheckCompleteForm`
|
||||
|
||||
### 3. 后端API设计规范
|
||||
|
||||
#### 3.1 新增接口设计
|
||||
**接口地址:** `POST /dormHygieneCheck/dormHygieneCheck/addWithStudentScores`
|
||||
|
||||
**实现要求:**
|
||||
- 🔄 使用数据库事务确保两个表的操作原子性
|
||||
- 📝 先插入主表记录,获取生成的主键ID
|
||||
- 👥 为每个学生插入评分记录,关联主表ID
|
||||
- ✅ 进行完整的数据验证
|
||||
- 🔐 检查用户权限,记录操作日志
|
||||
|
||||
#### 3.2 更新接口设计
|
||||
**接口地址:** `PUT /dormHygieneCheck/dormHygieneCheck/updateWithStudentScores`
|
||||
|
||||
**实现要求:**
|
||||
- 🔄 使用数据库事务确保操作的原子性
|
||||
- 📝 更新主表记录
|
||||
- 🗑️ 将原有学生评分记录的 `deleted` 字段设置为 1(逻辑删除)
|
||||
- ➕ 插入新的学生评分记录
|
||||
- 📚 保留历史数据,便于追溯
|
||||
|
||||
### 4. 数据验证规则
|
||||
|
||||
#### 4.1 主表验证
|
||||
- `checkTitle`: 必填,长度1-200字符
|
||||
- `checkDate`: 必填,日期时间格式
|
||||
- `checkerId`: 必填,关联用户表
|
||||
- `roomId`: 必填,关联房间表
|
||||
- `totalScore`: 可选,0-100分
|
||||
- `hygieneGrade`: 可选,A/B/C/D
|
||||
|
||||
#### 4.2 学生评分表验证
|
||||
- `studentId`: 必填,关联学生表
|
||||
- `studentScore`: 可选,0-100分
|
||||
- `attendanceStatus`: 必填,1/2/3/4
|
||||
- `studentGrade`: 可选,A/B/C/D
|
||||
|
||||
### 5. 测试脚本开发
|
||||
|
||||
#### 5.1 完整测试脚本 (`test/宿舍卫生检查API测试脚本.py`)
|
||||
- ✅ AES+RSA双重加密登录方法
|
||||
- ✅ 新增宿舍卫生检查测试
|
||||
- ✅ 更新宿舍卫生检查测试
|
||||
- ✅ 查询详情和列表测试
|
||||
- ✅ 学生评分数据测试
|
||||
- ✅ 数据验证测试
|
||||
- ✅ 错误处理测试
|
||||
|
||||
## 技术特点
|
||||
|
||||
### 1. 数据一致性保证
|
||||
- 使用数据库事务确保两个表的操作原子性
|
||||
- 更新时采用逻辑删除策略,保留历史数据
|
||||
|
||||
### 2. 类型安全
|
||||
- 完整的TypeScript类型定义
|
||||
- 前端数据格式与API接口格式的自动转换
|
||||
|
||||
### 3. 用户体验优化
|
||||
- 自动为学生设置相同的个人得分和评级
|
||||
- 实时数据验证和错误提示
|
||||
- 完整的加载状态和操作反馈
|
||||
|
||||
### 4. 可维护性
|
||||
- 清晰的代码结构和注释
|
||||
- 完整的API文档和测试用例
|
||||
- 符合项目开发规范
|
||||
|
||||
## 文件清单
|
||||
|
||||
### 前端文件
|
||||
1. `web/src/api/xg/xgss/dormHygieneCheck/dormHygieneCheck/types.ts` - 类型定义
|
||||
2. `web/src/api/xg/xgss/dormHygieneCheck/dormHygieneCheck/index.ts` - API接口
|
||||
3. `web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckDialog.vue` - 弹窗组件
|
||||
4. `web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/index.vue` - 主页面
|
||||
|
||||
### 文档文件
|
||||
1. `docs/开发文档/API/宿舍卫生检查管理API.md` - API接口文档
|
||||
2. `docs/开发文档/宿舍卫生检查API接口完善总结.md` - 本总结文档
|
||||
|
||||
### 测试文件
|
||||
1. `test/宿舍卫生检查API测试脚本.py` - 完整测试脚本
|
||||
|
||||
## 数据库表结构
|
||||
|
||||
### 主表:xg_dorm_hygiene_check
|
||||
- 存储宿舍卫生检查的基本信息
|
||||
- 包含检查标题、日期、检查员、宿舍信息、总分、等级等
|
||||
|
||||
### 子表:xg_dorm_hygiene_student_score
|
||||
- 存储每个学生的个人评分信息
|
||||
- 关联主表,包含学生信息、个人得分、出勤状态、评级等
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 1. 新增操作
|
||||
1. 填写宿舍卫生检查基本信息
|
||||
2. 选择宿舍房间,系统自动加载学生信息
|
||||
3. 设置宿舍总分和卫生等级
|
||||
4. 为每个学生设置个人得分、出勤状态和评级
|
||||
5. 上传附件和填写备注信息
|
||||
6. 点击确定,系统同时保存主表和子表数据
|
||||
|
||||
### 2. 更新操作
|
||||
1. 修改宿舍卫生检查基本信息
|
||||
2. 调整学生评分数据
|
||||
3. 点击确定,系统更新主表并重新插入学生评分数据(保留历史)
|
||||
|
||||
### 3. 测试验证
|
||||
1. 运行测试脚本:`python test/宿舍卫生检查API测试脚本.py`
|
||||
2. 验证新增、更新、查询功能
|
||||
3. 检查数据一致性和完整性
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **事务一致性**:确保两个表的操作在同一事务中完成
|
||||
2. **数据完整性**:更新时保留历史数据,便于追溯
|
||||
3. **性能优化**:批量操作时考虑性能影响
|
||||
4. **权限控制**:严格检查用户权限
|
||||
5. **日志记录**:记录重要操作日志
|
||||
6. **数据验证**:前端和后端都要进行数据验证
|
||||
|
||||
## 后续优化建议
|
||||
|
||||
1. **批量操作优化**:考虑使用批量插入提高性能
|
||||
2. **缓存机制**:对常用数据进行缓存
|
||||
3. **异步处理**:对于大量数据的操作考虑异步处理
|
||||
4. **监控告警**:添加操作监控和异常告警
|
||||
5. **数据备份**:定期备份重要数据
|
||||
|
||||
---
|
||||
|
||||
**完成时间:** 2025-01-28
|
||||
**开发人员:** 系统开发团队
|
||||
**文档版本:** v1.0
|
||||
@@ -0,0 +1,187 @@
|
||||
-- ----------------------------
|
||||
-- 宿舍卫生检查数据库建表脚本
|
||||
-- 模块:学工管理-宿舍管理
|
||||
-- 功能:宿舍卫生检查管理,支持宿舍整体评分和学生个人评分
|
||||
-- 作者:系统设计
|
||||
-- 创建时间:2025-01-28
|
||||
-- ----------------------------
|
||||
|
||||
-- 1. 宿舍卫生检查表(主表)
|
||||
DROP TABLE IF EXISTS `xg_dorm_hygiene_check`;
|
||||
CREATE TABLE `xg_dorm_hygiene_check` (
|
||||
-- =============基础字段(强制性)=============
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
|
||||
-- =============检查基本信息=============
|
||||
`check_title` varchar(200) NOT NULL COMMENT '检查标题',
|
||||
`check_date` date NOT NULL COMMENT '检查日期',
|
||||
`checker_id` bigint(20) NOT NULL COMMENT '检查员ID,关联sys_user.id',
|
||||
`checker_name` varchar(50) NOT NULL COMMENT '检查员姓名',
|
||||
`check_type` char(1) DEFAULT '1' COMMENT '检查类型(1日常检查 2专项检查 3突击检查 4复查)',
|
||||
`check_level` char(1) DEFAULT '1' COMMENT '检查级别(1宿管员 2学院 3学校)',
|
||||
|
||||
-- =============宿舍信息字段=============
|
||||
`room_id` bigint(20) NOT NULL COMMENT '宿舍房间ID,关联xg_dorm_room.id',
|
||||
`room_code` varchar(50) NOT NULL COMMENT '房间编号',
|
||||
`room_name` varchar(100) NOT NULL COMMENT '房间名称',
|
||||
`building_id` bigint(20) NOT NULL COMMENT '宿舍楼ID,关联xg_dorm_building.id',
|
||||
`building_name` varchar(100) NOT NULL COMMENT '宿舍楼名称',
|
||||
`area_id` bigint(20) DEFAULT NULL COMMENT '宿舍区ID,关联xg_dorm_area.id',
|
||||
`area_name` varchar(100) DEFAULT NULL COMMENT '宿舍区名称',
|
||||
`campus_id` bigint(20) DEFAULT NULL COMMENT '校区ID,关联xg_dorm_campus.id',
|
||||
`campus_name` varchar(100) DEFAULT NULL COMMENT '校区名称',
|
||||
|
||||
-- =============宿舍整体评分=============
|
||||
`total_score` decimal(5,2) DEFAULT NULL COMMENT '宿舍总分(0-100分)',
|
||||
|
||||
-- =============评级和状态=============
|
||||
`hygiene_grade` char(1) DEFAULT NULL COMMENT '卫生等级(A优秀 B良好 C合格 D不合格)',
|
||||
|
||||
-- =============附件和备注=============
|
||||
`attachment_ids` text DEFAULT NULL COMMENT '附件OSS ID列表,逗号分隔',
|
||||
`check_summary` text DEFAULT NULL COMMENT '检查总结',
|
||||
`improvement_suggestions` text DEFAULT NULL COMMENT '整改建议',
|
||||
`check_remarks` varchar(500) DEFAULT NULL COMMENT '检查备注',
|
||||
|
||||
-- =============主键和索引=============
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_check_date` (`check_date`),
|
||||
KEY `idx_checker_id` (`checker_id`),
|
||||
KEY `idx_room_id` (`room_id`),
|
||||
KEY `idx_building_id` (`building_id`),
|
||||
KEY `idx_area_id` (`area_id`),
|
||||
KEY `idx_campus_id` (`campus_id`),
|
||||
KEY `idx_hygiene_grade` (`hygiene_grade`),
|
||||
KEY `idx_check_type` (`check_type`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍卫生检查表';
|
||||
|
||||
-- 2. 宿舍卫生检查学生评分表(子表)
|
||||
DROP TABLE IF EXISTS `xg_dorm_hygiene_student_score`;
|
||||
CREATE TABLE `xg_dorm_hygiene_student_score` (
|
||||
-- =============基础字段(强制性)=============
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)',
|
||||
|
||||
-- =============关联字段=============
|
||||
`hygiene_check_id` bigint(20) NOT NULL COMMENT '卫生检查ID,关联xg_dorm_hygiene_check.id',
|
||||
|
||||
-- =============学生信息=============
|
||||
`student_id` bigint(20) NOT NULL COMMENT '学生ID,关联xg_student_msg.id',
|
||||
`student_no` varchar(32) NOT NULL COMMENT '学号',
|
||||
`student_name` varchar(50) NOT NULL COMMENT '学生姓名',
|
||||
`class_id` bigint(20) DEFAULT NULL COMMENT '班级ID',
|
||||
`class_name` varchar(100) DEFAULT NULL COMMENT '班级名称',
|
||||
`major_id` bigint(20) DEFAULT NULL COMMENT '专业ID',
|
||||
`major_name` varchar(100) DEFAULT NULL COMMENT '专业名称',
|
||||
`college_id` bigint(20) DEFAULT NULL COMMENT '学院ID',
|
||||
`college_name` varchar(100) DEFAULT NULL COMMENT '学院名称',
|
||||
|
||||
-- =============床位信息=============
|
||||
`bed_id` bigint(20) DEFAULT NULL COMMENT '床位ID,关联xg_dorm_bed.id',
|
||||
`bed_code` varchar(50) DEFAULT NULL COMMENT '床位编号',
|
||||
|
||||
-- =============学生评分=============
|
||||
`student_score` decimal(5,2) DEFAULT NULL COMMENT '学生个人得分(0-100分)',
|
||||
|
||||
-- =============状态信息=============
|
||||
`attendance_status` char(1) DEFAULT '1' COMMENT '出勤状态(1在寝 2外出 3请假 4其他)',
|
||||
`student_grade` char(1) DEFAULT NULL COMMENT '学生评级(A优秀 B良好 C合格 D不合格)',
|
||||
`is_responsible_person` tinyint(1) DEFAULT 0 COMMENT '是否为寝室长(0否 1是)',
|
||||
|
||||
-- =============备注信息=============
|
||||
`score_remarks` varchar(500) DEFAULT NULL COMMENT '评分备注',
|
||||
`improvement_notes` varchar(500) DEFAULT NULL COMMENT '改进意见',
|
||||
|
||||
-- =============主键和索引=============
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `uk_check_student` (`hygiene_check_id`, `student_id`, `tenant_id`, `deleted`),
|
||||
KEY `idx_tenant_id` (`tenant_id`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_hygiene_check_id` (`hygiene_check_id`),
|
||||
KEY `idx_student_id` (`student_id`),
|
||||
KEY `idx_student_no` (`student_no`),
|
||||
KEY `idx_class_id` (`class_id`),
|
||||
KEY `idx_major_id` (`major_id`),
|
||||
KEY `idx_college_id` (`college_id`),
|
||||
KEY `idx_bed_id` (`bed_id`),
|
||||
KEY `idx_attendance_status` (`attendance_status`),
|
||||
KEY `idx_student_grade` (`student_grade`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍卫生检查学生评分表';
|
||||
|
||||
-- 3. 创建检查编号序列视图(用于生成检查编号)
|
||||
-- DROP VIEW IF EXISTS `v_hygiene_check_sequence`;
|
||||
-- CREATE VIEW `v_hygiene_check_sequence` AS
|
||||
-- SELECT
|
||||
-- DATE_FORMAT(NOW(), '%Y%m%d') as check_date_str,
|
||||
-- LPAD(IFNULL(MAX(SUBSTRING(check_no, 9, 4)), 0) + 1, 4, '0') as next_seq
|
||||
-- FROM `xg_dorm_hygiene_check`
|
||||
-- WHERE DATE(create_time) = CURDATE()
|
||||
-- AND check_no LIKE CONCAT('WSCC', DATE_FORMAT(NOW(), '%Y%m%d'), '%')
|
||||
-- AND deleted = 0;
|
||||
--
|
||||
-- 4. 插入字典数据
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES (NULL, '000000', '宿舍卫生检查类型', 'xg_dorm_hygiene_check_type', '0', 1, NOW(), '宿舍卫生检查类型字典');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) VALUES
|
||||
(NULL, '000000', 1, '日常检查', '1', 'xg_dorm_hygiene_check_type', '', 'default', 'Y', '0', 1, NOW(), '日常卫生检查'),
|
||||
(NULL, '000000', 2, '专项检查', '2', 'xg_dorm_hygiene_check_type', '', 'primary', 'N', '0', 1, NOW(), '专项卫生检查'),
|
||||
(NULL, '000000', 3, '突击检查', '3', 'xg_dorm_hygiene_check_type', '', 'warning', 'N', '0', 1, NOW(), '突击卫生检查'),
|
||||
(NULL, '000000', 4, '复查', '4', 'xg_dorm_hygiene_check_type', '', 'info', 'N', '0', 1, NOW(), '卫生复查');
|
||||
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES (NULL, '000000', '宿舍卫生检查级别', 'xg_dorm_hygiene_check_level', '0', 1, NOW(), '宿舍卫生检查级别字典');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) VALUES
|
||||
(NULL, '000000', 1, '宿管员检查', '1', 'xg_dorm_hygiene_check_level', '', 'default', 'Y', '0', 1, NOW(), '宿管员级别检查'),
|
||||
(NULL, '000000', 2, '学院检查', '2', 'xg_dorm_hygiene_check_level', '', 'primary', 'N', '0', 1, NOW(), '学院级别检查'),
|
||||
(NULL, '000000', 3, '学校检查', '3', 'xg_dorm_hygiene_check_level', '', 'warning', 'N', '0', 1, NOW(), '学校级别检查');
|
||||
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES (NULL, '000000', '宿舍卫生等级', 'xg_dorm_hygiene_grade', '0', 1, NOW(), '宿舍卫生等级字典');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) VALUES
|
||||
(NULL, '000000', 1, '优秀', 'A', 'xg_dorm_hygiene_grade', '', 'success', 'N', '0', 1, NOW(), '卫生优秀'),
|
||||
(NULL, '000000', 2, '良好', 'B', 'xg_dorm_hygiene_grade', '', 'primary', 'N', '0', 1, NOW(), '卫生良好'),
|
||||
(NULL, '000000', 3, '合格', 'C', 'xg_dorm_hygiene_grade', '', 'info', 'Y', '0', 1, NOW(), '卫生合格'),
|
||||
(NULL, '000000', 4, '不合格', 'D', 'xg_dorm_hygiene_grade', '', 'danger', 'N', '0', 1, NOW(), '卫生不合格');
|
||||
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES (NULL, '000000', '学生出勤状态', 'xg_student_attendance_status', '0', 1, NOW(), '学生出勤状态字典');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) VALUES
|
||||
(NULL, '000000', 1, '在寝', '1', 'xg_student_attendance_status', '', 'success', 'Y', '0', 1, NOW(), '学生在宿舍'),
|
||||
(NULL, '000000', 2, '外出', '2', 'xg_student_attendance_status', '', 'warning', 'N', '0', 1, NOW(), '学生外出'),
|
||||
(NULL, '000000', 3, '请假', '3', 'xg_student_attendance_status', '', 'info', 'N', '0', 1, NOW(), '学生请假'),
|
||||
(NULL, '000000', 4, '其他', '4', 'xg_student_attendance_status', '', 'default', 'N', '0', 1, NOW(), '其他情况');
|
||||
|
||||
-- 5. 创建示例数据(可选)
|
||||
-- INSERT INTO `xg_dorm_hygiene_check` VALUES
|
||||
-- (1, '000000', 1, 1, NOW(), 1, NOW(), 0, 'WSCC20250128001', '2025年1月宿舍卫生检查', '2025-01-28', '09:00:00', '11:00:00', 1, '张检查员', '1', '1', 1, 'A101', 'A栋101室', 1, 'A栋宿舍楼', 1, '东区', 1, '主校区', 1, 85.5, 20.0, 18.5, 15.0, 12.0, 10.0, 8.0, 2.0, 0.0, 'B', 1, '1', NULL, '宿舍整体卫生良好', '建议加强个人物品整理', '检查顺利完成', 4, 0, 4);
|
||||
|
||||
-- 数据库建表脚本完成
|
||||
-- 注意事项:
|
||||
-- 1. 所有表都包含了项目规范要求的基础字段
|
||||
-- 2. 使用逻辑删除,不使用外键约束
|
||||
-- 3. 创建了必要的索引优化查询性能
|
||||
-- 4. 包含了完整的字典数据
|
||||
-- 5. 检查编号自动生成规则:WSCC+年月日+4位流水号
|
||||
@@ -0,0 +1,210 @@
|
||||
# 宿舍卫生检查数据库设计验证清单
|
||||
|
||||
## 📋 文档说明
|
||||
|
||||
**版本**: v1.0
|
||||
**创建时间**: 2025-01-28
|
||||
**验证范围**: 宿舍卫生检查数据库表结构设计
|
||||
**参考规范**: `docs/设计文档/database/mysql-database-standard.md`
|
||||
|
||||
---
|
||||
|
||||
## ✅ 基础字段检查清单
|
||||
|
||||
### 🔴 强制性基础字段验证
|
||||
|
||||
| 字段名 | 主表 | 子表 | 数据类型 | 默认值 | 说明 |
|
||||
|--------|------|------|----------|--------|------|
|
||||
| **id** | ✅ | ✅ | `bigint(20) NOT NULL` | 无 | 主键ID,使用雪花ID |
|
||||
| **tenant_id** | ✅ | ✅ | `varchar(20) NOT NULL` | '000000' | 租户编号,多租户支持 |
|
||||
| **create_dept** | ✅ | ✅ | `bigint(20) DEFAULT NULL` | NULL | 创建部门 |
|
||||
| **create_by** | ✅ | ✅ | `bigint(20) DEFAULT NULL` | NULL | 创建者 |
|
||||
| **create_time** | ✅ | ✅ | `datetime DEFAULT NULL` | NULL | 创建时间 |
|
||||
| **update_by** | ✅ | ✅ | `bigint(20) DEFAULT NULL` | NULL | 更新者 |
|
||||
| **update_time** | ✅ | ✅ | `datetime DEFAULT NULL` | NULL | 更新时间 |
|
||||
| **deleted** | ✅ | ✅ | `tinyint(1) DEFAULT 0` | 0 | 逻辑删除标志 |
|
||||
|
||||
**验证结果**: ✅ 所有强制性基础字段已正确包含
|
||||
|
||||
---
|
||||
|
||||
## 🔍 表设计规范检查
|
||||
|
||||
### 主键设计验证
|
||||
- ✅ **主键类型**: 使用 `bigint(20) NOT NULL`
|
||||
- ✅ **主键策略**: 雪花ID (ASSIGN_ID)
|
||||
- ✅ **主键索引**: `PRIMARY KEY (id) USING BTREE`
|
||||
|
||||
### 逻辑删除验证
|
||||
- ✅ **删除字段**: `deleted` 字段存在
|
||||
- ✅ **字段类型**: `tinyint(1) DEFAULT 0`
|
||||
- ✅ **字段含义**: 0-存在,1-已删除
|
||||
- ✅ **禁止物理删除**: 设计中无物理删除操作
|
||||
|
||||
### 多租户支持验证
|
||||
- ✅ **租户字段**: `tenant_id` 字段存在
|
||||
- ✅ **字段类型**: `varchar(20) NOT NULL`
|
||||
- ✅ **默认值**: '000000'
|
||||
- ✅ **租户索引**: 创建了租户相关索引
|
||||
|
||||
### 外键约束验证
|
||||
- ✅ **无外键约束**: 严格遵循项目规范,不使用数据库外键
|
||||
- ✅ **关联字段命名**: 所有关联字段以 `_id` 结尾
|
||||
- ✅ **关联字段注释**: 明确标识关联表和字段
|
||||
|
||||
---
|
||||
|
||||
## 📊 索引设计验证
|
||||
|
||||
### 基础索引(必须创建)
|
||||
|
||||
**主表 (`xg_dorm_hygiene_check`) 索引验证:**
|
||||
- ✅ `idx_tenant_id` - 租户索引
|
||||
- ✅ `idx_deleted` - 删除标志索引
|
||||
- ✅ `idx_create_time` - 创建时间索引
|
||||
- ✅ `idx_tenant_deleted` - 组合索引(租户+删除标志)
|
||||
|
||||
**子表 (`xg_dorm_hygiene_student_score`) 索引验证:**
|
||||
- ✅ `idx_tenant_id` - 租户索引
|
||||
- ✅ `idx_deleted` - 删除标志索引
|
||||
- ✅ `idx_create_time` - 创建时间索引
|
||||
- ✅ `idx_tenant_deleted` - 组合索引(租户+删除标志)
|
||||
|
||||
### 业务索引验证
|
||||
|
||||
**主表业务索引:**
|
||||
- ✅ `idx_check_date` - 检查日期索引
|
||||
- ✅ `idx_checker_id` - 检查员索引
|
||||
- ✅ `idx_room_id` - 宿舍房间索引
|
||||
- ✅ `idx_building_id` - 宿舍楼索引
|
||||
- ✅ `idx_check_status` - 检查状态索引
|
||||
- ✅ `idx_hygiene_grade` - 卫生等级索引
|
||||
|
||||
**子表业务索引:**
|
||||
- ✅ `idx_hygiene_check_id` - 关联主表索引
|
||||
- ✅ `idx_student_id` - 学生ID索引
|
||||
- ✅ `idx_student_no` - 学号索引
|
||||
- ✅ `idx_attendance_status` - 出勤状态索引
|
||||
|
||||
### 唯一约束验证
|
||||
- ✅ **主表**: `uk_check_no_tenant` (检查编号+租户+删除标志)
|
||||
- ✅ **子表**: `uk_check_student` (检查ID+学生ID+租户+删除标志)
|
||||
|
||||
---
|
||||
|
||||
## 🏷️ 字段设计规范验证
|
||||
|
||||
### 命名规范检查
|
||||
- ✅ **小写字母和下划线**: 所有字段名符合规范
|
||||
- ✅ **见名知意**: 字段名称清晰明确
|
||||
- ✅ **统一后缀**: `_id`、`_time`、`_status` 等后缀规范
|
||||
|
||||
### 数据类型检查
|
||||
- ✅ **ID字段**: `bigint(20)` 用于所有ID类型字段
|
||||
- ✅ **字符串字段**: 合理使用 `varchar(n)` 和 `text`
|
||||
- ✅ **数值字段**: `decimal(5,2)` 用于评分字段
|
||||
- ✅ **状态字段**: `char(1)` 用于状态标识
|
||||
- ✅ **布尔字段**: `tinyint(1)` 用于布尔值
|
||||
|
||||
### 字段长度规范
|
||||
- ✅ **姓名字段**: `varchar(50)` - 符合规范
|
||||
- ✅ **编码字段**: `varchar(50)` - 符合规范
|
||||
- ✅ **标题字段**: `varchar(200)` - 符合规范
|
||||
- ✅ **备注字段**: `varchar(500)` - 符合规范
|
||||
|
||||
---
|
||||
|
||||
## 💬 注释完整性验证
|
||||
|
||||
### 表注释
|
||||
- ✅ **主表注释**: '宿舍卫生检查表' - 清晰明确
|
||||
- ✅ **子表注释**: '宿舍卫生检查学生评分表' - 清晰明确
|
||||
|
||||
### 字段注释
|
||||
- ✅ **基础字段**: 所有基础字段都有完整的中文注释
|
||||
- ✅ **业务字段**: 所有业务字段都有详细的中文注释
|
||||
- ✅ **关联字段**: 明确标识关联的表和字段
|
||||
- ✅ **枚举字段**: 详细说明取值范围和含义
|
||||
|
||||
---
|
||||
|
||||
## 🎯 业务需求满足度验证
|
||||
|
||||
### 功能需求验证
|
||||
- ✅ **宿舍整体评分**: 包含总分和各项分项评分字段
|
||||
- ✅ **学生个人评分**: 子表支持对每个学生的独立评分
|
||||
- ✅ **附件支持**: `attachment_ids` 字段存储OSS ID逗号分隔字符串
|
||||
- ✅ **无需审批**: 设计中无审批相关字段,符合需求
|
||||
- ✅ **检查记录**: 完整的检查信息记录和状态管理
|
||||
|
||||
### 关联关系验证
|
||||
- ✅ **宿舍关联**: 关联现有宿舍管理表结构
|
||||
- ✅ **学生关联**: 关联学生信息表 `xg_student_msg`
|
||||
- ✅ **用户关联**: 关联系统用户表 `sys_user`
|
||||
- ✅ **床位关联**: 关联宿舍床位表 `xg_dorm_bed`
|
||||
|
||||
### 扩展性验证
|
||||
- ✅ **检查类型**: 支持多种检查类型(日常、专项、突击、复查)
|
||||
- ✅ **检查级别**: 支持不同级别的检查(宿管员、学院、学校)
|
||||
- ✅ **状态管理**: 完整的状态流转(已完成、待整改、已整改、复查通过)
|
||||
- ✅ **统计支持**: 包含学生人数统计字段
|
||||
|
||||
---
|
||||
|
||||
## 📚 字典数据验证
|
||||
|
||||
### 字典类型创建
|
||||
- ✅ **检查类型字典**: `xg_dorm_hygiene_check_type`
|
||||
- ✅ **检查级别字典**: `xg_dorm_hygiene_check_level`
|
||||
- ✅ **卫生等级字典**: `xg_dorm_hygiene_grade`
|
||||
- ✅ **检查状态字典**: `xg_dorm_hygiene_check_status`
|
||||
- ✅ **出勤状态字典**: `xg_student_attendance_status`
|
||||
|
||||
### 字典数据完整性
|
||||
- ✅ **数据完整**: 所有字典类型都包含完整的选项数据
|
||||
- ✅ **默认值设置**: 合理设置默认选项
|
||||
- ✅ **样式配置**: 包含CSS样式和列表样式配置
|
||||
|
||||
---
|
||||
|
||||
## 🔧 辅助功能验证
|
||||
|
||||
### 编号生成
|
||||
- ✅ **编号规则**: WSCC+年月日+4位流水号
|
||||
- ✅ **序列视图**: 创建了编号生成视图 `v_hygiene_check_sequence`
|
||||
- ✅ **唯一性**: 通过唯一约束保证编号唯一性
|
||||
|
||||
### 性能优化
|
||||
- ✅ **索引覆盖**: 常用查询场景有相应索引支持
|
||||
- ✅ **组合索引**: 合理设计组合索引提升查询效率
|
||||
- ✅ **冗余字段**: 适度冗余提升查询性能(如检查编号)
|
||||
|
||||
---
|
||||
|
||||
## 📝 最终验证结果
|
||||
|
||||
### ✅ 完全符合项目规范
|
||||
|
||||
1. **基础字段**: 100% 符合强制性要求
|
||||
2. **表设计**: 完全遵循项目数据库设计规范
|
||||
3. **索引设计**: 覆盖所有必要的查询场景
|
||||
4. **命名规范**: 严格按照项目命名规范
|
||||
5. **注释完整**: 所有表和字段都有完整中文注释
|
||||
6. **无外键约束**: 严格遵循项目禁用外键的要求
|
||||
7. **业务需求**: 完全满足宿舍卫生检查功能需求
|
||||
|
||||
### 🎯 设计亮点
|
||||
|
||||
1. **完整的评分体系**: 支持宿舍整体和学生个人双重评分
|
||||
2. **灵活的检查类型**: 支持多种检查场景和级别
|
||||
3. **状态流转管理**: 完整的检查状态和整改流程
|
||||
4. **扩展性良好**: 预留了足够的扩展字段和机制
|
||||
5. **性能优化**: 合理的索引设计和冗余字段设置
|
||||
|
||||
---
|
||||
|
||||
**验证结论**: ✅ 宿舍卫生检查数据库表结构设计完全符合项目规范要求,可以直接用于生产环境部署。
|
||||
|
||||
**验证人**: 系统设计
|
||||
**验证时间**: 2025-01-28
|
||||
**下次复审**: 有重大变更时
|
||||
@@ -0,0 +1,203 @@
|
||||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import {
|
||||
DormHygieneCheckVO,
|
||||
DormHygieneCheckForm,
|
||||
DormHygieneCheckQuery,
|
||||
DormHygieneCheckCompleteForm,
|
||||
DormHygieneStudentScoreVO,
|
||||
DormHygieneStudentScoreForm,
|
||||
DormHygieneStudentScoreQuery
|
||||
} from '@/api/xg/xgss/dormHygieneCheck/dormHygieneCheck/types';
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listDormHygieneCheck = (query?: DormHygieneCheckQuery): AxiosPromise<DormHygieneCheckVO[]> => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneCheck/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查详细
|
||||
* @param id
|
||||
*/
|
||||
export const getDormHygieneCheck = (id: string | number): AxiosPromise<DormHygieneCheckVO> => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneCheck/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查(包含学生评分数据)
|
||||
* @param data 完整的宿舍卫生检查数据,包含学生评分信息
|
||||
*/
|
||||
export const addDormHygieneCheck = (data: DormHygieneCheckCompleteForm) => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneCheck/addWithStudentScores',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改宿舍卫生检查(包含学生评分数据)
|
||||
* @param data 完整的宿舍卫生检查数据,包含学生评分信息
|
||||
*/
|
||||
export const updateDormHygieneCheck = (data: DormHygieneCheckCompleteForm) => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneCheck/updateWithStudentScores',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除宿舍卫生检查
|
||||
* @param id
|
||||
*/
|
||||
export const delDormHygieneCheck = (id: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneCheck/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查学生评分列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
export const listDormHygieneStudentScores = (query?: DormHygieneStudentScoreQuery): AxiosPromise<DormHygieneStudentScoreVO[]> => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneStudentScore/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查学生评分详细
|
||||
* @param id
|
||||
*/
|
||||
export const getDormHygieneStudentScore = (id: string | number): AxiosPromise<DormHygieneStudentScoreVO> => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneStudentScore/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查学生评分
|
||||
* @param data
|
||||
*/
|
||||
export const addDormHygieneStudentScore = (data: DormHygieneStudentScoreForm) => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneStudentScore',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改宿舍卫生检查学生评分
|
||||
* @param data
|
||||
*/
|
||||
export const updateDormHygieneStudentScore = (data: DormHygieneStudentScoreForm) => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneStudentScore',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除宿舍卫生检查学生评分
|
||||
* @param id
|
||||
*/
|
||||
export const delDormHygieneStudentScore = (id: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneStudentScore/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 根据卫生检查ID查询学生评分列表
|
||||
* @param hygieneCheckId 卫生检查ID
|
||||
* @returns 学生评分列表
|
||||
*/
|
||||
export const getStudentScoresByCheckId = (hygieneCheckId: string | number): AxiosPromise<DormHygieneStudentScoreVO[]> => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneStudentScore/getByCheckId/' + hygieneCheckId,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 批量删除指定卫生检查的学生评分记录
|
||||
* @param hygieneCheckId 卫生检查ID
|
||||
*/
|
||||
export const deleteStudentScoresByCheckId = (hygieneCheckId: string | number) => {
|
||||
return request({
|
||||
url: '/dormHygieneCheck/dormHygieneStudentScore/deleteByCheckId/' + hygieneCheckId,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取校区选项列表
|
||||
* @returns 校区选项列表
|
||||
*/
|
||||
export const getCampusOptions = (): AxiosPromise<any[]> => {
|
||||
return request({
|
||||
url: '/xqxx/dormCampus/list',
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取指定校区的宿舍区选项列表
|
||||
* @param campusId 校区ID
|
||||
* @returns 宿舍区选项列表
|
||||
*/
|
||||
export const getAreaOptions = (campusId?: string | number): AxiosPromise<any[]> => {
|
||||
return request({
|
||||
url: '/ssqxx/dormArea/list',
|
||||
method: 'get',
|
||||
params: campusId ? { campusId } : undefined
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取指定宿舍区的宿舍楼选项列表
|
||||
* @param areaId 宿舍区ID
|
||||
* @returns 宿舍楼选项列表
|
||||
*/
|
||||
export const getBuildingOptions = (areaId?: string | number): AxiosPromise<any[]> => {
|
||||
return request({
|
||||
url: '/sslxx/dormBuilding/list',
|
||||
method: 'get',
|
||||
params: areaId ? { areaId } : undefined
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取指定宿舍楼的房间选项列表
|
||||
* @param buildingId 宿舍楼ID
|
||||
* @returns 房间选项列表
|
||||
*/
|
||||
export const getRoomOptions = (buildingId?: string | number): AxiosPromise<any[]> => {
|
||||
return request({
|
||||
url: '/xgss/dormRoom/list',
|
||||
method: 'get',
|
||||
params: buildingId ? { buildingId } : undefined
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,648 @@
|
||||
export interface DormHygieneCheckVO {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
deleted: number;
|
||||
|
||||
/**
|
||||
* 检查标题
|
||||
*/
|
||||
checkTitle: string;
|
||||
|
||||
/**
|
||||
* 检查日期
|
||||
*/
|
||||
checkDate: string;
|
||||
|
||||
/**
|
||||
* 检查员ID,关联sys_user.id
|
||||
*/
|
||||
checkerId: string | number;
|
||||
|
||||
/**
|
||||
* 检查员姓名
|
||||
*/
|
||||
checkerName: string;
|
||||
|
||||
/**
|
||||
* 检查类型(1日常检查 2专项检查 3突击检查 4复查)
|
||||
*/
|
||||
checkType: string;
|
||||
|
||||
/**
|
||||
* 检查级别(1宿管员 2学院 3学校)
|
||||
*/
|
||||
checkLevel: string;
|
||||
|
||||
/**
|
||||
* 宿舍房间ID,关联xg_dorm_room.id
|
||||
*/
|
||||
roomId: string | number;
|
||||
|
||||
/**
|
||||
* 房间编号
|
||||
*/
|
||||
roomCode: string;
|
||||
|
||||
/**
|
||||
* 房间名称
|
||||
*/
|
||||
roomName: string;
|
||||
|
||||
/**
|
||||
* 宿舍楼ID,关联xg_dorm_building.id
|
||||
*/
|
||||
buildingId: string | number;
|
||||
|
||||
/**
|
||||
* 宿舍楼名称
|
||||
*/
|
||||
buildingName: string;
|
||||
|
||||
/**
|
||||
* 宿舍区ID,关联xg_dorm_area.id
|
||||
*/
|
||||
areaId: string | number;
|
||||
|
||||
/**
|
||||
* 宿舍区名称
|
||||
*/
|
||||
areaName: string;
|
||||
|
||||
/**
|
||||
* 校区ID,关联xg_dorm_campus.id
|
||||
*/
|
||||
campusId: string | number;
|
||||
|
||||
/**
|
||||
* 校区名称
|
||||
*/
|
||||
campusName: string;
|
||||
|
||||
/**
|
||||
* 宿舍总分(0-100分)
|
||||
*/
|
||||
totalScore: number;
|
||||
|
||||
/**
|
||||
* 卫生等级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
hygieneGrade: string;
|
||||
|
||||
/**
|
||||
* 附件OSS ID列表,逗号分隔
|
||||
*/
|
||||
attachmentIds: string | number;
|
||||
|
||||
/**
|
||||
* 检查总结
|
||||
*/
|
||||
checkSummary: string;
|
||||
|
||||
/**
|
||||
* 整改建议
|
||||
*/
|
||||
improvementSuggestions: string;
|
||||
|
||||
/**
|
||||
* 检查备注
|
||||
*/
|
||||
checkRemarks: string;
|
||||
|
||||
}
|
||||
|
||||
export interface DormHygieneCheckForm extends BaseEntity {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
deleted?: number;
|
||||
|
||||
/**
|
||||
* 检查标题
|
||||
*/
|
||||
checkTitle?: string;
|
||||
|
||||
/**
|
||||
* 检查日期
|
||||
*/
|
||||
checkDate?: string;
|
||||
|
||||
/**
|
||||
* 检查员ID,关联sys_user.id
|
||||
*/
|
||||
checkerId?: string | number;
|
||||
|
||||
/**
|
||||
* 检查员姓名
|
||||
*/
|
||||
checkerName?: string;
|
||||
|
||||
/**
|
||||
* 检查类型(1日常检查 2专项检查 3突击检查 4复查)
|
||||
*/
|
||||
checkType?: string;
|
||||
|
||||
/**
|
||||
* 检查级别(1宿管员 2学院 3学校)
|
||||
*/
|
||||
checkLevel?: string;
|
||||
|
||||
/**
|
||||
* 宿舍房间ID,关联xg_dorm_room.id
|
||||
*/
|
||||
roomId?: string | number;
|
||||
|
||||
/**
|
||||
* 房间编号
|
||||
*/
|
||||
roomCode?: string;
|
||||
|
||||
/**
|
||||
* 房间名称
|
||||
*/
|
||||
roomName?: string;
|
||||
|
||||
/**
|
||||
* 宿舍楼ID,关联xg_dorm_building.id
|
||||
*/
|
||||
buildingId?: string | number;
|
||||
|
||||
/**
|
||||
* 宿舍楼名称
|
||||
*/
|
||||
buildingName?: string;
|
||||
|
||||
/**
|
||||
* 宿舍区ID,关联xg_dorm_area.id
|
||||
*/
|
||||
areaId?: string | number;
|
||||
|
||||
/**
|
||||
* 宿舍区名称
|
||||
*/
|
||||
areaName?: string;
|
||||
|
||||
/**
|
||||
* 校区ID,关联xg_dorm_campus.id
|
||||
*/
|
||||
campusId?: string | number;
|
||||
|
||||
/**
|
||||
* 校区名称
|
||||
*/
|
||||
campusName?: string;
|
||||
|
||||
/**
|
||||
* 宿舍总分(0-100分)
|
||||
*/
|
||||
totalScore?: number;
|
||||
|
||||
/**
|
||||
* 卫生等级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
hygieneGrade?: string;
|
||||
|
||||
/**
|
||||
* 附件OSS ID列表,逗号分隔
|
||||
*/
|
||||
attachmentIds?: string | number;
|
||||
|
||||
/**
|
||||
* 检查总结
|
||||
*/
|
||||
checkSummary?: string;
|
||||
|
||||
/**
|
||||
* 整改建议
|
||||
*/
|
||||
improvementSuggestions?: string;
|
||||
|
||||
/**
|
||||
* 检查备注
|
||||
*/
|
||||
checkRemarks?: string;
|
||||
|
||||
}
|
||||
|
||||
export interface DormHygieneCheckQuery extends PageQuery {
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
deleted?: number;
|
||||
|
||||
/**
|
||||
* 检查标题
|
||||
*/
|
||||
checkTitle?: string;
|
||||
|
||||
/**
|
||||
* 检查日期
|
||||
*/
|
||||
checkDate?: string;
|
||||
|
||||
/**
|
||||
* 检查员ID,关联sys_user.id
|
||||
*/
|
||||
checkerId?: string | number;
|
||||
|
||||
/**
|
||||
* 检查员姓名
|
||||
*/
|
||||
checkerName?: string;
|
||||
|
||||
/**
|
||||
* 检查类型(1日常检查 2专项检查 3突击检查 4复查)
|
||||
*/
|
||||
checkType?: string;
|
||||
|
||||
/**
|
||||
* 检查级别(1宿管员 2学院 3学校)
|
||||
*/
|
||||
checkLevel?: string;
|
||||
|
||||
/**
|
||||
* 宿舍房间ID,关联xg_dorm_room.id
|
||||
*/
|
||||
roomId?: string | number;
|
||||
|
||||
/**
|
||||
* 房间编号
|
||||
*/
|
||||
roomCode?: string;
|
||||
|
||||
/**
|
||||
* 房间名称
|
||||
*/
|
||||
roomName?: string;
|
||||
|
||||
/**
|
||||
* 宿舍楼ID,关联xg_dorm_building.id
|
||||
*/
|
||||
buildingId?: string | number;
|
||||
|
||||
/**
|
||||
* 宿舍楼名称
|
||||
*/
|
||||
buildingName?: string;
|
||||
|
||||
/**
|
||||
* 宿舍区ID,关联xg_dorm_area.id
|
||||
*/
|
||||
areaId?: string | number;
|
||||
|
||||
/**
|
||||
* 宿舍区名称
|
||||
*/
|
||||
areaName?: string;
|
||||
|
||||
/**
|
||||
* 校区ID,关联xg_dorm_campus.id
|
||||
*/
|
||||
campusId?: string | number;
|
||||
|
||||
/**
|
||||
* 校区名称
|
||||
*/
|
||||
campusName?: string;
|
||||
|
||||
/**
|
||||
* 宿舍总分(0-100分)
|
||||
*/
|
||||
totalScore?: number;
|
||||
|
||||
/**
|
||||
* 卫生等级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
hygieneGrade?: string;
|
||||
|
||||
/**
|
||||
* 附件OSS ID列表,逗号分隔
|
||||
*/
|
||||
attachmentIds?: string | number;
|
||||
|
||||
/**
|
||||
* 检查总结
|
||||
*/
|
||||
checkSummary?: string;
|
||||
|
||||
/**
|
||||
* 整改建议
|
||||
*/
|
||||
improvementSuggestions?: string;
|
||||
|
||||
/**
|
||||
* 检查备注
|
||||
*/
|
||||
checkRemarks?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
||||
|
||||
// 宿舍级联选择相关类型
|
||||
export interface CampusOptionVO {
|
||||
id: string | number;
|
||||
campusName: string;
|
||||
}
|
||||
|
||||
export interface AreaOptionVO {
|
||||
id: string | number;
|
||||
areaName: string;
|
||||
}
|
||||
|
||||
export interface BuildingOptionVO {
|
||||
id: string | number;
|
||||
buildingName: string;
|
||||
}
|
||||
|
||||
export interface RoomOptionVO {
|
||||
id: string | number;
|
||||
roomName: string;
|
||||
roomCode?: string;
|
||||
}
|
||||
|
||||
// 学生评分相关类型定义
|
||||
export interface DormHygieneStudentScoreVO {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
deleted: number;
|
||||
|
||||
/**
|
||||
* 卫生检查ID,关联xg_dorm_hygiene_check.id
|
||||
*/
|
||||
hygieneCheckId: string | number;
|
||||
|
||||
/**
|
||||
* 学生ID,关联xg_student_msg.id
|
||||
*/
|
||||
studentId: string | number;
|
||||
|
||||
/**
|
||||
* 学号
|
||||
*/
|
||||
studentNo: string;
|
||||
|
||||
/**
|
||||
* 学生姓名
|
||||
*/
|
||||
studentName: string;
|
||||
|
||||
/**
|
||||
* 班级ID
|
||||
*/
|
||||
classId?: string | number;
|
||||
|
||||
/**
|
||||
* 班级名称
|
||||
*/
|
||||
className?: string;
|
||||
|
||||
/**
|
||||
* 专业ID
|
||||
*/
|
||||
majorId?: string | number;
|
||||
|
||||
/**
|
||||
* 专业名称
|
||||
*/
|
||||
majorName?: string;
|
||||
|
||||
/**
|
||||
* 学院ID
|
||||
*/
|
||||
collegeId?: string | number;
|
||||
|
||||
/**
|
||||
* 学院名称
|
||||
*/
|
||||
collegeName?: string;
|
||||
|
||||
/**
|
||||
* 床位ID,关联xg_dorm_bed.id
|
||||
*/
|
||||
bedId?: string | number;
|
||||
|
||||
/**
|
||||
* 床位编号
|
||||
*/
|
||||
bedCode?: string;
|
||||
|
||||
/**
|
||||
* 学生个人得分(0-100分)
|
||||
*/
|
||||
studentScore?: number;
|
||||
|
||||
/**
|
||||
* 出勤状态(1在寝 2外出 3请假 4其他)
|
||||
*/
|
||||
attendanceStatus: string;
|
||||
|
||||
/**
|
||||
* 学生评级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
studentGrade?: string;
|
||||
|
||||
/**
|
||||
* 是否为寝室长(0否 1是)
|
||||
*/
|
||||
isResponsiblePerson?: number;
|
||||
|
||||
/**
|
||||
* 评分备注
|
||||
*/
|
||||
scoreRemarks?: string;
|
||||
|
||||
/**
|
||||
* 改进意见
|
||||
*/
|
||||
improvementNotes?: string;
|
||||
}
|
||||
|
||||
export interface DormHygieneStudentScoreForm extends BaseEntity {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
deleted?: number;
|
||||
|
||||
/**
|
||||
* 卫生检查ID,关联xg_dorm_hygiene_check.id
|
||||
*/
|
||||
hygieneCheckId?: string | number;
|
||||
|
||||
/**
|
||||
* 学生ID,关联xg_student_msg.id
|
||||
*/
|
||||
studentId?: string | number;
|
||||
|
||||
/**
|
||||
* 学号
|
||||
*/
|
||||
studentNo?: string;
|
||||
|
||||
/**
|
||||
* 学生姓名
|
||||
*/
|
||||
studentName?: string;
|
||||
|
||||
/**
|
||||
* 班级ID
|
||||
*/
|
||||
classId?: string | number;
|
||||
|
||||
/**
|
||||
* 班级名称
|
||||
*/
|
||||
className?: string;
|
||||
|
||||
/**
|
||||
* 专业ID
|
||||
*/
|
||||
majorId?: string | number;
|
||||
|
||||
/**
|
||||
* 专业名称
|
||||
*/
|
||||
majorName?: string;
|
||||
|
||||
/**
|
||||
* 学院ID
|
||||
*/
|
||||
collegeId?: string | number;
|
||||
|
||||
/**
|
||||
* 学院名称
|
||||
*/
|
||||
collegeName?: string;
|
||||
|
||||
/**
|
||||
* 床位ID,关联xg_dorm_bed.id
|
||||
*/
|
||||
bedId?: string | number;
|
||||
|
||||
/**
|
||||
* 床位编号
|
||||
*/
|
||||
bedCode?: string;
|
||||
|
||||
/**
|
||||
* 学生个人得分(0-100分)
|
||||
*/
|
||||
studentScore?: number;
|
||||
|
||||
/**
|
||||
* 出勤状态(1在寝 2外出 3请假 4其他)
|
||||
*/
|
||||
attendanceStatus?: string;
|
||||
|
||||
/**
|
||||
* 学生评级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
studentGrade?: string;
|
||||
|
||||
/**
|
||||
* 是否为寝室长(0否 1是)
|
||||
*/
|
||||
isResponsiblePerson?: number;
|
||||
|
||||
/**
|
||||
* 评分备注
|
||||
*/
|
||||
scoreRemarks?: string;
|
||||
|
||||
/**
|
||||
* 改进意见
|
||||
*/
|
||||
improvementNotes?: string;
|
||||
}
|
||||
|
||||
export interface DormHygieneStudentScoreQuery extends PageQuery {
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
deleted?: number;
|
||||
|
||||
/**
|
||||
* 卫生检查ID,关联xg_dorm_hygiene_check.id
|
||||
*/
|
||||
hygieneCheckId?: string | number;
|
||||
|
||||
/**
|
||||
* 学生ID,关联xg_student_msg.id
|
||||
*/
|
||||
studentId?: string | number;
|
||||
|
||||
/**
|
||||
* 学号
|
||||
*/
|
||||
studentNo?: string;
|
||||
|
||||
/**
|
||||
* 学生姓名
|
||||
*/
|
||||
studentName?: string;
|
||||
|
||||
/**
|
||||
* 班级ID
|
||||
*/
|
||||
classId?: string | number;
|
||||
|
||||
/**
|
||||
* 专业ID
|
||||
*/
|
||||
majorId?: string | number;
|
||||
|
||||
/**
|
||||
* 学院ID
|
||||
*/
|
||||
collegeId?: string | number;
|
||||
|
||||
/**
|
||||
* 床位ID,关联xg_dorm_bed.id
|
||||
*/
|
||||
bedId?: string | number;
|
||||
|
||||
/**
|
||||
* 出勤状态(1在寝 2外出 3请假 4其他)
|
||||
*/
|
||||
attendanceStatus?: string;
|
||||
|
||||
/**
|
||||
* 学生评级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
studentGrade?: string;
|
||||
}
|
||||
|
||||
// 宿舍卫生检查完整表单类型(包含学生评分数据)
|
||||
export interface DormHygieneCheckCompleteForm extends DormHygieneCheckForm {
|
||||
/**
|
||||
* 学生评分数据列表
|
||||
*/
|
||||
studentData?: DormHygieneStudentScoreForm[];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import {
|
||||
DormHygieneStudentScoreVO,
|
||||
DormHygieneStudentScoreForm,
|
||||
DormHygieneStudentScoreQuery
|
||||
} from '@/api/xg/xgss/dormHygieneStudentScore/dormHygieneStudentScore/types';
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查学生评分列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listDormHygieneStudentScore = (query?: DormHygieneStudentScoreQuery): AxiosPromise<DormHygieneStudentScoreVO[]> => {
|
||||
return request({
|
||||
url: '/dormHygieneStudentScore/dormHygieneStudentScore/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询宿舍卫生检查学生评分详细
|
||||
* @param id
|
||||
*/
|
||||
export const getDormHygieneStudentScore = (id: string | number): AxiosPromise<DormHygieneStudentScoreVO> => {
|
||||
return request({
|
||||
url: '/dormHygieneStudentScore/dormHygieneStudentScore/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增宿舍卫生检查学生评分
|
||||
* @param data
|
||||
*/
|
||||
export const addDormHygieneStudentScore = (data: DormHygieneStudentScoreForm) => {
|
||||
return request({
|
||||
url: '/dormHygieneStudentScore/dormHygieneStudentScore',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改宿舍卫生检查学生评分
|
||||
* @param data
|
||||
*/
|
||||
export const updateDormHygieneStudentScore = (data: DormHygieneStudentScoreForm) => {
|
||||
return request({
|
||||
url: '/dormHygieneStudentScore/dormHygieneStudentScore',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除宿舍卫生检查学生评分
|
||||
* @param id
|
||||
*/
|
||||
export const delDormHygieneStudentScore = (id: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/dormHygieneStudentScore/dormHygieneStudentScore/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,311 @@
|
||||
export interface DormHygieneStudentScoreVO {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
deleted: number;
|
||||
|
||||
/**
|
||||
* 卫生检查ID,关联xg_dorm_hygiene_check.id
|
||||
*/
|
||||
hygieneCheckId: string | number;
|
||||
|
||||
/**
|
||||
* 学生ID,关联xg_student_msg.id
|
||||
*/
|
||||
studentId: string | number;
|
||||
|
||||
/**
|
||||
* 学号
|
||||
*/
|
||||
studentNo: string;
|
||||
|
||||
/**
|
||||
* 学生姓名
|
||||
*/
|
||||
studentName: string;
|
||||
|
||||
/**
|
||||
* 班级ID
|
||||
*/
|
||||
classId: string | number;
|
||||
|
||||
/**
|
||||
* 班级名称
|
||||
*/
|
||||
className: string;
|
||||
|
||||
/**
|
||||
* 专业ID
|
||||
*/
|
||||
majorId: string | number;
|
||||
|
||||
/**
|
||||
* 专业名称
|
||||
*/
|
||||
majorName: string;
|
||||
|
||||
/**
|
||||
* 学院ID
|
||||
*/
|
||||
collegeId: string | number;
|
||||
|
||||
/**
|
||||
* 学院名称
|
||||
*/
|
||||
collegeName: string;
|
||||
|
||||
/**
|
||||
* 床位ID,关联xg_dorm_bed.id
|
||||
*/
|
||||
bedId: string | number;
|
||||
|
||||
/**
|
||||
* 床位编号
|
||||
*/
|
||||
bedCode: string;
|
||||
|
||||
/**
|
||||
* 学生个人得分(0-100分)
|
||||
*/
|
||||
studentScore: number;
|
||||
|
||||
/**
|
||||
* 是否在寝(1在寝 2外出 3请假 4其他)
|
||||
*/
|
||||
attendanceStatus: string;
|
||||
|
||||
/**
|
||||
* 学生评级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
studentGrade: string;
|
||||
|
||||
/**
|
||||
* 是否为寝室长(0否 1是)
|
||||
*/
|
||||
isResponsiblePerson: number;
|
||||
|
||||
/**
|
||||
* 评分备注
|
||||
*/
|
||||
scoreRemarks: string;
|
||||
|
||||
/**
|
||||
* 改进意见
|
||||
*/
|
||||
improvementNotes: string;
|
||||
|
||||
}
|
||||
|
||||
export interface DormHygieneStudentScoreForm extends BaseEntity {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
deleted?: number;
|
||||
|
||||
/**
|
||||
* 卫生检查ID,关联xg_dorm_hygiene_check.id
|
||||
*/
|
||||
hygieneCheckId?: string | number;
|
||||
|
||||
/**
|
||||
* 学生ID,关联xg_student_msg.id
|
||||
*/
|
||||
studentId?: string | number;
|
||||
|
||||
/**
|
||||
* 学号
|
||||
*/
|
||||
studentNo?: string;
|
||||
|
||||
/**
|
||||
* 学生姓名
|
||||
*/
|
||||
studentName?: string;
|
||||
|
||||
/**
|
||||
* 班级ID
|
||||
*/
|
||||
classId?: string | number;
|
||||
|
||||
/**
|
||||
* 班级名称
|
||||
*/
|
||||
className?: string;
|
||||
|
||||
/**
|
||||
* 专业ID
|
||||
*/
|
||||
majorId?: string | number;
|
||||
|
||||
/**
|
||||
* 专业名称
|
||||
*/
|
||||
majorName?: string;
|
||||
|
||||
/**
|
||||
* 学院ID
|
||||
*/
|
||||
collegeId?: string | number;
|
||||
|
||||
/**
|
||||
* 学院名称
|
||||
*/
|
||||
collegeName?: string;
|
||||
|
||||
/**
|
||||
* 床位ID,关联xg_dorm_bed.id
|
||||
*/
|
||||
bedId?: string | number;
|
||||
|
||||
/**
|
||||
* 床位编号
|
||||
*/
|
||||
bedCode?: string;
|
||||
|
||||
/**
|
||||
* 学生个人得分(0-100分)
|
||||
*/
|
||||
studentScore?: number;
|
||||
|
||||
/**
|
||||
* 是否在寝(1在寝 2外出 3请假 4其他)
|
||||
*/
|
||||
attendanceStatus?: string;
|
||||
|
||||
/**
|
||||
* 学生评级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
studentGrade?: string;
|
||||
|
||||
/**
|
||||
* 是否为寝室长(0否 1是)
|
||||
*/
|
||||
isResponsiblePerson?: number;
|
||||
|
||||
/**
|
||||
* 评分备注
|
||||
*/
|
||||
scoreRemarks?: string;
|
||||
|
||||
/**
|
||||
* 改进意见
|
||||
*/
|
||||
improvementNotes?: string;
|
||||
|
||||
}
|
||||
|
||||
export interface DormHygieneStudentScoreQuery extends PageQuery {
|
||||
|
||||
/**
|
||||
* 删除标志(0代表存在 1代表删除)
|
||||
*/
|
||||
deleted?: number;
|
||||
|
||||
/**
|
||||
* 卫生检查ID,关联xg_dorm_hygiene_check.id
|
||||
*/
|
||||
hygieneCheckId?: string | number;
|
||||
|
||||
/**
|
||||
* 学生ID,关联xg_student_msg.id
|
||||
*/
|
||||
studentId?: string | number;
|
||||
|
||||
/**
|
||||
* 学号
|
||||
*/
|
||||
studentNo?: string;
|
||||
|
||||
/**
|
||||
* 学生姓名
|
||||
*/
|
||||
studentName?: string;
|
||||
|
||||
/**
|
||||
* 班级ID
|
||||
*/
|
||||
classId?: string | number;
|
||||
|
||||
/**
|
||||
* 班级名称
|
||||
*/
|
||||
className?: string;
|
||||
|
||||
/**
|
||||
* 专业ID
|
||||
*/
|
||||
majorId?: string | number;
|
||||
|
||||
/**
|
||||
* 专业名称
|
||||
*/
|
||||
majorName?: string;
|
||||
|
||||
/**
|
||||
* 学院ID
|
||||
*/
|
||||
collegeId?: string | number;
|
||||
|
||||
/**
|
||||
* 学院名称
|
||||
*/
|
||||
collegeName?: string;
|
||||
|
||||
/**
|
||||
* 床位ID,关联xg_dorm_bed.id
|
||||
*/
|
||||
bedId?: string | number;
|
||||
|
||||
/**
|
||||
* 床位编号
|
||||
*/
|
||||
bedCode?: string;
|
||||
|
||||
/**
|
||||
* 学生个人得分(0-100分)
|
||||
*/
|
||||
studentScore?: number;
|
||||
|
||||
/**
|
||||
* 是否在寝(1在寝 2外出 3请假 4其他)
|
||||
*/
|
||||
attendanceStatus?: string;
|
||||
|
||||
/**
|
||||
* 学生评级(A优秀 B良好 C合格 D不合格)
|
||||
*/
|
||||
studentGrade?: string;
|
||||
|
||||
/**
|
||||
* 是否为寝室长(0否 1是)
|
||||
*/
|
||||
isResponsiblePerson?: number;
|
||||
|
||||
/**
|
||||
* 评分备注
|
||||
*/
|
||||
scoreRemarks?: string;
|
||||
|
||||
/**
|
||||
* 改进意见
|
||||
*/
|
||||
improvementNotes?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Vendored
+7
@@ -5,6 +5,13 @@ declare global {
|
||||
/** vue Instance */
|
||||
declare type ComponentInternalInstance = ComponentInstance;
|
||||
|
||||
/**
|
||||
* 扩展ComponentInternalInstance以包含useDict方法
|
||||
*/
|
||||
// declare interface ComponentPublicInstance {
|
||||
// useDict?: (...args: string[]) => { [key: string]: DictDataOption[] };
|
||||
// }
|
||||
|
||||
/**
|
||||
* 界面字段隐藏属性
|
||||
*/
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,486 @@
|
||||
<template>
|
||||
<div class="dorm-hygiene-check-container">
|
||||
<!-- 搜索表单区域 -->
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="search-form-container">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检查标题" prop="checkTitle">
|
||||
<el-input v-model="queryParams.checkTitle" placeholder="请输入检查标题" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检查日期" prop="checkDate">
|
||||
<el-date-picker clearable v-model="queryParams.checkDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择检查日期" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检查类型" prop="checkType">
|
||||
<el-select v-model="queryParams.checkType" placeholder="请选择检查类型" clearable>
|
||||
<el-option v-for="dict in xg_dorm_hygiene_check_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="检查级别" prop="checkLevel">
|
||||
<el-select v-model="queryParams.checkLevel" placeholder="请选择检查级别" clearable>
|
||||
<el-option v-for="dict in xg_dorm_hygiene_check_level" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="卫生等级" prop="hygieneGrade">
|
||||
<el-select v-model="queryParams.hygieneGrade" placeholder="请选择卫生等级" clearable>
|
||||
<el-option v-for="dict in xg_dorm_hygiene_grade" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="18">
|
||||
<el-form-item class="search-buttons">
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<!-- 数据表格区域 -->
|
||||
<el-card shadow="never" class="table-container">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dormHygieneCheck:dormHygieneCheck:add']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="Edit"
|
||||
:disabled="single"
|
||||
@click="handleUpdate()"
|
||||
v-hasPermi="['dormHygieneCheck:dormHygieneCheck:edit']"
|
||||
>修改</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dormHygieneCheck:dormHygieneCheck:export']"
|
||||
>导出</el-button
|
||||
>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" border :data="dormHygieneCheckList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="主键ID" align="center" prop="id" v-if="false" />
|
||||
<el-table-column label="检查标题" align="center" prop="checkTitle" />
|
||||
<el-table-column label="检查日期" align="center" prop="checkDate" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.checkDate, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="检查类型" align="center" prop="checkType">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="xg_dorm_hygiene_check_type" :value="scope.row.checkType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="检查级别" align="center" prop="checkLevel">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="xg_dorm_hygiene_check_level" :value="scope.row.checkLevel" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="房间名称" align="center" prop="roomName" />
|
||||
<el-table-column label="宿舍楼名称" align="center" prop="buildingName" />
|
||||
<el-table-column label="宿舍区名称" align="center" prop="areaName" />
|
||||
<el-table-column label="校区名称" align="center" prop="campusName" />
|
||||
<el-table-column label="宿舍总分" align="center" prop="totalScore" />
|
||||
<el-table-column label="卫生等级" align="center" prop="hygieneGrade">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="xg_dorm_hygiene_grade" :value="scope.row.hygieneGrade" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="120">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['dormHygieneCheck:dormHygieneCheck:edit']"
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="Delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['dormHygieneCheck:dormHygieneCheck:remove']"
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
|
||||
<!-- 宿舍卫生检查弹窗组件 -->
|
||||
<DormHygieneCheckDialog
|
||||
v-model:visible="dialog.visible"
|
||||
:title="dialog.title"
|
||||
:form-data="form"
|
||||
@submit="handleDialogSubmit"
|
||||
@close="handleDialogClose"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="DormHygieneCheck" lang="ts">
|
||||
import { ref, reactive, toRefs, onMounted, getCurrentInstance, ComponentInternalInstance, watch } from 'vue';
|
||||
import ElMessage from 'element-plus/es/components/message/index';
|
||||
import ElMessageBox from 'element-plus/es/components/message-box/index';
|
||||
import ElLoading from 'element-plus/es/components/loading/index';
|
||||
import {
|
||||
listDormHygieneCheck,
|
||||
getDormHygieneCheck,
|
||||
delDormHygieneCheck,
|
||||
addDormHygieneCheck,
|
||||
updateDormHygieneCheck
|
||||
} from '@/api/xg/xgss/dormHygieneCheck/dormHygieneCheck';
|
||||
import {
|
||||
DormHygieneCheckVO,
|
||||
DormHygieneCheckQuery,
|
||||
DormHygieneCheckForm,
|
||||
DormHygieneCheckCompleteForm
|
||||
} from '@/api/xg/xgss/dormHygieneCheck/dormHygieneCheck/types';
|
||||
import DormHygieneCheckDialog from './DormHygieneCheckDialog.vue';
|
||||
|
||||
// 类型定义
|
||||
interface DialogOption {
|
||||
visible: boolean;
|
||||
title: string;
|
||||
}
|
||||
|
||||
interface PageData<T, Q> {
|
||||
form: T;
|
||||
queryParams: Q;
|
||||
rules: Record<string, any>;
|
||||
}
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { xg_dorm_hygiene_check_level, xg_dorm_hygiene_check_type, xg_dorm_hygiene_grade } = toRefs<any>(
|
||||
proxy?.useDict('xg_dorm_hygiene_check_level', 'xg_dorm_hygiene_check_type', 'xg_dorm_hygiene_grade')
|
||||
);
|
||||
|
||||
const dormHygieneCheckList = ref<DormHygieneCheckVO[]>([]);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
|
||||
const queryFormRef = ref();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: DormHygieneCheckForm = {
|
||||
id: undefined,
|
||||
deleted: undefined,
|
||||
checkTitle: undefined,
|
||||
checkDate: new Date().toISOString().slice(0, 19).replace('T', ' '),
|
||||
checkerId: undefined,
|
||||
checkerName: undefined,
|
||||
checkType: '1',
|
||||
checkLevel: '1',
|
||||
roomId: undefined,
|
||||
roomCode: undefined,
|
||||
roomName: undefined,
|
||||
buildingId: undefined,
|
||||
buildingName: undefined,
|
||||
areaId: undefined,
|
||||
areaName: undefined,
|
||||
campusId: undefined,
|
||||
campusName: undefined,
|
||||
totalScore: undefined,
|
||||
hygieneGrade: 'A',
|
||||
attachmentIds: undefined,
|
||||
checkSummary: undefined,
|
||||
improvementSuggestions: undefined,
|
||||
checkRemarks: undefined
|
||||
};
|
||||
|
||||
const data = reactive<PageData<DormHygieneCheckForm, DormHygieneCheckQuery>>({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
deleted: undefined,
|
||||
checkTitle: undefined,
|
||||
checkDate: undefined,
|
||||
checkerId: undefined,
|
||||
checkerName: undefined,
|
||||
checkType: undefined,
|
||||
checkLevel: undefined,
|
||||
roomId: undefined,
|
||||
roomCode: undefined,
|
||||
roomName: undefined,
|
||||
buildingId: undefined,
|
||||
buildingName: undefined,
|
||||
areaId: undefined,
|
||||
areaName: undefined,
|
||||
campusId: undefined,
|
||||
campusName: undefined,
|
||||
totalScore: undefined,
|
||||
hygieneGrade: undefined,
|
||||
attachmentIds: undefined,
|
||||
checkSummary: undefined,
|
||||
improvementSuggestions: undefined,
|
||||
checkRemarks: undefined,
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
checkTitle: [{ required: true, message: '检查标题不能为空', trigger: 'blur' }],
|
||||
checkDate: [{ required: true, message: '检查日期不能为空', trigger: 'blur' }],
|
||||
roomId: [{ required: true, message: '宿舍房间ID不能为空', trigger: 'blur' }],
|
||||
roomName: [{ required: true, message: '房间名称不能为空', trigger: 'blur' }],
|
||||
buildingId: [{ required: true, message: '宿舍楼ID不能为空', trigger: 'blur' }],
|
||||
buildingName: [{ required: true, message: '宿舍楼名称不能为空', trigger: 'blur' }]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询宿舍卫生检查列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
try {
|
||||
const res = await listDormHygieneCheck(queryParams.value);
|
||||
dormHygieneCheckList.value = res.rows;
|
||||
total.value = res.total;
|
||||
} catch (error) {
|
||||
console.error('查询列表失败:', error);
|
||||
ElMessage.error('查询列表失败');
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
/** 弹窗关闭事件处理 */
|
||||
const handleDialogClose = () => {
|
||||
dialog.visible = false;
|
||||
reset();
|
||||
};
|
||||
|
||||
/** 弹窗提交事件处理 */
|
||||
const handleDialogSubmit = async (formData: DormHygieneCheckCompleteForm) => {
|
||||
try {
|
||||
if (formData.id) {
|
||||
await updateDormHygieneCheck(formData);
|
||||
} else {
|
||||
await addDormHygieneCheck(formData);
|
||||
}
|
||||
ElMessage.success('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
} catch (error) {
|
||||
console.error('提交失败:', error);
|
||||
ElMessage.error('操作失败');
|
||||
}
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
const currentUser = proxy?.$store?.state?.user || {};
|
||||
const resetData = {
|
||||
...initFormData,
|
||||
checkDate: new Date().toISOString().slice(0, 19).replace('T', ' '),
|
||||
checkerId: currentUser.userId || undefined,
|
||||
checkerName: currentUser.nickName || undefined
|
||||
};
|
||||
form.value = resetData;
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: DormHygieneCheckVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '添加宿舍卫生检查';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: DormHygieneCheckVO) => {
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改宿舍卫生检查';
|
||||
|
||||
const loadingInstance = ElLoading.service({
|
||||
target: '.el-dialog__body',
|
||||
text: '正在加载数据...',
|
||||
background: 'rgba(255, 255, 255, 0.8)'
|
||||
});
|
||||
|
||||
try {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getDormHygieneCheck(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
} catch (error) {
|
||||
console.error('加载编辑数据失败:', error);
|
||||
ElMessage.error('加载数据失败,请重试');
|
||||
dialog.visible = false;
|
||||
} finally {
|
||||
loadingInstance.close();
|
||||
}
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: DormHygieneCheckVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
try {
|
||||
await ElMessageBox.confirm('是否确认删除宿舍卫生检查编号为"' + _ids + '"的数据项?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
});
|
||||
await delDormHygieneCheck(_ids);
|
||||
ElMessage.success('删除成功');
|
||||
await getList();
|
||||
} catch (error) {
|
||||
console.error('删除失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'dormHygieneCheck/dormHygieneCheck/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`dormHygieneCheck_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* 主容器样式 */
|
||||
.dorm-hygiene-check-container {
|
||||
padding: 16px;
|
||||
background-color: #f5f5f5;
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 搜索表单容器 */
|
||||
.search-form-container {
|
||||
margin-bottom: 16px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* 表格容器 */
|
||||
.table-container {
|
||||
margin-top: 16px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* 搜索按钮样式 */
|
||||
.search-buttons {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.search-buttons .el-form-item__content {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
/* 工具类 */
|
||||
.mb8 {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
/* 确保卡片间距正确 */
|
||||
.el-card {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.el-card:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* 防止重复显示的关键样式 */
|
||||
.dorm-hygiene-check-container > * {
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.dorm-hygiene-check-container > *:not(:first-child) {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
/* 确保过渡动画正常工作 */
|
||||
.search-form-container {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
/* 表格样式优化 */
|
||||
.el-table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 分页样式 */
|
||||
.pagination-container {
|
||||
margin-top: 16px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
.dorm-hygiene-check-container {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.search-form-container,
|
||||
.table-container {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,457 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="删除标志" prop="deleted">
|
||||
<el-input v-model="queryParams.deleted" placeholder="请输入删除标志" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="卫生检查ID,关联xg_dorm_hygiene_check.id" prop="hygieneCheckId">
|
||||
<el-input
|
||||
v-model="queryParams.hygieneCheckId"
|
||||
placeholder="请输入卫生检查ID,关联xg_dorm_hygiene_check.id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="学生ID,关联xg_student_msg.id" prop="studentId">
|
||||
<el-input v-model="queryParams.studentId" placeholder="请输入学生ID,关联xg_student_msg.id" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学号" prop="studentNo">
|
||||
<el-input v-model="queryParams.studentNo" placeholder="请输入学号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学生姓名" prop="studentName">
|
||||
<el-input v-model="queryParams.studentName" placeholder="请输入学生姓名" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="班级ID" prop="classId">
|
||||
<el-input v-model="queryParams.classId" placeholder="请输入班级ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="班级名称" prop="className">
|
||||
<el-input v-model="queryParams.className" placeholder="请输入班级名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="专业ID" prop="majorId">
|
||||
<el-input v-model="queryParams.majorId" placeholder="请输入专业ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="专业名称" prop="majorName">
|
||||
<el-input v-model="queryParams.majorName" placeholder="请输入专业名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学院ID" prop="collegeId">
|
||||
<el-input v-model="queryParams.collegeId" placeholder="请输入学院ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学院名称" prop="collegeName">
|
||||
<el-input v-model="queryParams.collegeName" placeholder="请输入学院名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="床位ID,关联xg_dorm_bed.id" prop="bedId">
|
||||
<el-input v-model="queryParams.bedId" placeholder="请输入床位ID,关联xg_dorm_bed.id" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="床位编号" prop="bedCode">
|
||||
<el-input v-model="queryParams.bedCode" placeholder="请输入床位编号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学生个人得分" prop="studentScore">
|
||||
<el-input v-model="queryParams.studentScore" placeholder="请输入学生个人得分" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否在寝" prop="attendanceStatus">
|
||||
<el-select v-model="queryParams.attendanceStatus" placeholder="请选择是否在寝" clearable>
|
||||
<el-option v-for="dict in xg_student_attendance_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学生评级" prop="studentGrade">
|
||||
<el-select v-model="queryParams.studentGrade" placeholder="请选择学生评级" clearable>
|
||||
<el-option v-for="dict in xg_dorm_hygiene_grade" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否为寝室长" prop="isResponsiblePerson">
|
||||
<el-select v-model="queryParams.isResponsiblePerson" placeholder="请选择是否为寝室长" clearable>
|
||||
<el-option v-for="dict in sys_yesno" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="评分备注" prop="scoreRemarks">
|
||||
<el-input v-model="queryParams.scoreRemarks" placeholder="请输入评分备注" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="改进意见" prop="improvementNotes">
|
||||
<el-input v-model="queryParams.improvementNotes" placeholder="请输入改进意见" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dormHygieneStudentScore:dormHygieneStudentScore:add']"
|
||||
>新增</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="Edit"
|
||||
:disabled="single"
|
||||
@click="handleUpdate()"
|
||||
v-hasPermi="['dormHygieneStudentScore:dormHygieneStudentScore:edit']"
|
||||
>修改</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="Delete"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete()"
|
||||
v-hasPermi="['dormHygieneStudentScore:dormHygieneStudentScore:remove']"
|
||||
>删除</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="Download"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['dormHygieneStudentScore:dormHygieneStudentScore:export']"
|
||||
>导出</el-button
|
||||
>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" border :data="dormHygieneStudentScoreList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="主键ID" align="center" prop="id" v-if="true" />
|
||||
<el-table-column label="删除标志" align="center" prop="deleted" />
|
||||
<el-table-column label="卫生检查ID,关联xg_dorm_hygiene_check.id" align="center" prop="hygieneCheckId" />
|
||||
<el-table-column label="学生ID,关联xg_student_msg.id" align="center" prop="studentId" />
|
||||
<el-table-column label="学号" align="center" prop="studentNo" />
|
||||
<el-table-column label="学生姓名" align="center" prop="studentName" />
|
||||
<el-table-column label="班级ID" align="center" prop="classId" />
|
||||
<el-table-column label="班级名称" align="center" prop="className" />
|
||||
<el-table-column label="专业ID" align="center" prop="majorId" />
|
||||
<el-table-column label="专业名称" align="center" prop="majorName" />
|
||||
<el-table-column label="学院ID" align="center" prop="collegeId" />
|
||||
<el-table-column label="学院名称" align="center" prop="collegeName" />
|
||||
<el-table-column label="床位ID,关联xg_dorm_bed.id" align="center" prop="bedId" />
|
||||
<el-table-column label="床位编号" align="center" prop="bedCode" />
|
||||
<el-table-column label="学生个人得分" align="center" prop="studentScore" />
|
||||
<el-table-column label="是否在寝" align="center" prop="attendanceStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="xg_student_attendance_status" :value="scope.row.attendanceStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="学生评级" align="center" prop="studentGrade">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="xg_dorm_hygiene_grade" :value="scope.row.studentGrade" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否为寝室长" align="center" prop="isResponsiblePerson">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="sys_yesno" :value="scope.row.isResponsiblePerson" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="评分备注" align="center" prop="scoreRemarks" />
|
||||
<el-table-column label="改进意见" align="center" prop="improvementNotes" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['dormHygieneStudentScore:dormHygieneStudentScore:edit']"
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="Delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['dormHygieneStudentScore:dormHygieneStudentScore:remove']"
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改宿舍卫生检查学生评分对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="dormHygieneStudentScoreFormRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="删除标志" prop="deleted">
|
||||
<el-input v-model="form.deleted" placeholder="请输入删除标志" />
|
||||
</el-form-item>
|
||||
<el-form-item label="卫生检查ID,关联xg_dorm_hygiene_check.id" prop="hygieneCheckId">
|
||||
<el-input v-model="form.hygieneCheckId" placeholder="请输入卫生检查ID,关联xg_dorm_hygiene_check.id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学生ID,关联xg_student_msg.id" prop="studentId">
|
||||
<el-input v-model="form.studentId" placeholder="请输入学生ID,关联xg_student_msg.id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学号" prop="studentNo">
|
||||
<el-input v-model="form.studentNo" placeholder="请输入学号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学生姓名" prop="studentName">
|
||||
<el-input v-model="form.studentName" placeholder="请输入学生姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="班级ID" prop="classId">
|
||||
<el-input v-model="form.classId" placeholder="请输入班级ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="班级名称" prop="className">
|
||||
<el-input v-model="form.className" placeholder="请输入班级名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="专业ID" prop="majorId">
|
||||
<el-input v-model="form.majorId" placeholder="请输入专业ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="专业名称" prop="majorName">
|
||||
<el-input v-model="form.majorName" placeholder="请输入专业名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学院ID" prop="collegeId">
|
||||
<el-input v-model="form.collegeId" placeholder="请输入学院ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学院名称" prop="collegeName">
|
||||
<el-input v-model="form.collegeName" placeholder="请输入学院名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="床位ID,关联xg_dorm_bed.id" prop="bedId">
|
||||
<el-input v-model="form.bedId" placeholder="请输入床位ID,关联xg_dorm_bed.id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="床位编号" prop="bedCode">
|
||||
<el-input v-model="form.bedCode" placeholder="请输入床位编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学生个人得分" prop="studentScore">
|
||||
<el-input v-model="form.studentScore" placeholder="请输入学生个人得分" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否在寝" prop="attendanceStatus">
|
||||
<el-select v-model="form.attendanceStatus" placeholder="请选择是否在寝">
|
||||
<el-option v-for="dict in xg_student_attendance_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学生评级" prop="studentGrade">
|
||||
<el-select v-model="form.studentGrade" placeholder="请选择学生评级">
|
||||
<el-option v-for="dict in xg_dorm_hygiene_grade" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否为寝室长" prop="isResponsiblePerson">
|
||||
<el-select v-model="form.isResponsiblePerson" placeholder="请选择是否为寝室长">
|
||||
<el-option v-for="dict in sys_yesno" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="评分备注" prop="scoreRemarks">
|
||||
<el-input v-model="form.scoreRemarks" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="改进意见" prop="improvementNotes">
|
||||
<el-input v-model="form.improvementNotes" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="DormHygieneStudentScore" lang="ts">
|
||||
import {
|
||||
listDormHygieneStudentScore,
|
||||
getDormHygieneStudentScore,
|
||||
delDormHygieneStudentScore,
|
||||
addDormHygieneStudentScore,
|
||||
updateDormHygieneStudentScore
|
||||
} from '@/api/xg/xgss/dormHygieneStudentScore/dormHygieneStudentScore';
|
||||
import {
|
||||
DormHygieneStudentScoreVO,
|
||||
DormHygieneStudentScoreQuery,
|
||||
DormHygieneStudentScoreForm
|
||||
} from '@/api/xg/xgss/dormHygieneStudentScore/dormHygieneStudentScore/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { xg_dorm_hygiene_grade, xg_student_attendance_status, sys_yesno } = toRefs<any>(
|
||||
proxy?.useDict('xg_dorm_hygiene_grade', 'xg_student_attendance_status', 'sys_yesno')
|
||||
);
|
||||
|
||||
const dormHygieneStudentScoreList = ref<DormHygieneStudentScoreVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const dormHygieneStudentScoreFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: DormHygieneStudentScoreForm = {
|
||||
id: undefined,
|
||||
deleted: undefined,
|
||||
hygieneCheckId: undefined,
|
||||
studentId: undefined,
|
||||
studentNo: undefined,
|
||||
studentName: undefined,
|
||||
classId: undefined,
|
||||
className: undefined,
|
||||
majorId: undefined,
|
||||
majorName: undefined,
|
||||
collegeId: undefined,
|
||||
collegeName: undefined,
|
||||
bedId: undefined,
|
||||
bedCode: undefined,
|
||||
studentScore: undefined,
|
||||
attendanceStatus: undefined,
|
||||
studentGrade: undefined,
|
||||
isResponsiblePerson: undefined,
|
||||
scoreRemarks: undefined,
|
||||
improvementNotes: undefined
|
||||
};
|
||||
const data = reactive<PageData<DormHygieneStudentScoreForm, DormHygieneStudentScoreQuery>>({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
deleted: undefined,
|
||||
hygieneCheckId: undefined,
|
||||
studentId: undefined,
|
||||
studentNo: undefined,
|
||||
studentName: undefined,
|
||||
classId: undefined,
|
||||
className: undefined,
|
||||
majorId: undefined,
|
||||
majorName: undefined,
|
||||
collegeId: undefined,
|
||||
collegeName: undefined,
|
||||
bedId: undefined,
|
||||
bedCode: undefined,
|
||||
studentScore: undefined,
|
||||
attendanceStatus: undefined,
|
||||
studentGrade: undefined,
|
||||
isResponsiblePerson: undefined,
|
||||
scoreRemarks: undefined,
|
||||
improvementNotes: undefined,
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
|
||||
hygieneCheckId: [{ required: true, message: '卫生检查ID,关联xg_dorm_hygiene_check.id不能为空', trigger: 'blur' }],
|
||||
studentId: [{ required: true, message: '学生ID,关联xg_student_msg.id不能为空', trigger: 'blur' }],
|
||||
studentNo: [{ required: true, message: '学号不能为空', trigger: 'blur' }],
|
||||
studentName: [{ required: true, message: '学生姓名不能为空', trigger: 'blur' }]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询宿舍卫生检查学生评分列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listDormHygieneStudentScore(queryParams.value);
|
||||
dormHygieneStudentScoreList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
dormHygieneStudentScoreFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: DormHygieneStudentScoreVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '添加宿舍卫生检查学生评分';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: DormHygieneStudentScoreVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getDormHygieneStudentScore(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改宿舍卫生检查学生评分';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
dormHygieneStudentScoreFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updateDormHygieneStudentScore(form.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addDormHygieneStudentScore(form.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: DormHygieneStudentScoreVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除宿舍卫生检查学生评分编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||
await delDormHygieneStudentScore(_ids);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'dormHygieneStudentScore/dormHygieneStudentScore/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`dormHygieneStudentScore_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
Reference in new issue
Block a user