提交代码
This commit is contained in:
1 parent
ac1c2e69be
commit
bee68f318d
14 files changed
+3761
No files matched your search
+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.XgDormViolationVo;
|
||||||
|
import org.dromara.xg.domain.bo.XgDormViolationBo;
|
||||||
|
import org.dromara.xg.service.IXgDormViolationService;
|
||||||
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍违纪记录
|
||||||
|
*
|
||||||
|
* @author zlwu
|
||||||
|
* @date 2025-08-16
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/dormViolation/dormViolation")
|
||||||
|
public class XgDormViolationController extends BaseController {
|
||||||
|
|
||||||
|
private final IXgDormViolationService xgDormViolationService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询宿舍违纪记录列表
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("dormViolation:dormViolation:list")
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<XgDormViolationVo> list(XgDormViolationBo bo, PageQuery pageQuery) {
|
||||||
|
return xgDormViolationService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出宿舍违纪记录列表
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("dormViolation:dormViolation:export")
|
||||||
|
@Log(title = "宿舍违纪记录", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(XgDormViolationBo bo, HttpServletResponse response) {
|
||||||
|
List<XgDormViolationVo> list = xgDormViolationService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "宿舍违纪记录", XgDormViolationVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取宿舍违纪记录详细信息
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("dormViolation:dormViolation:query")
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public R<XgDormViolationVo> getInfo(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable Long id) {
|
||||||
|
return R.ok(xgDormViolationService.queryById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增宿舍违纪记录
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("dormViolation:dormViolation:add")
|
||||||
|
@Log(title = "宿舍违纪记录", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody XgDormViolationBo bo) {
|
||||||
|
return toAjax(xgDormViolationService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改宿舍违纪记录
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("dormViolation:dormViolation:edit")
|
||||||
|
@Log(title = "宿舍违纪记录", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XgDormViolationBo bo) {
|
||||||
|
return toAjax(xgDormViolationService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除宿舍违纪记录
|
||||||
|
*
|
||||||
|
* @param ids 主键串
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("dormViolation:dormViolation:remove")
|
||||||
|
@Log(title = "宿舍违纪记录", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{ids}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] ids) {
|
||||||
|
return toAjax(xgDormViolationService.deleteWithValidByIds(List.of(ids), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
+168
@@ -0,0 +1,168 @@
|
|||||||
|
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_violation
|
||||||
|
*
|
||||||
|
* @author zlwu
|
||||||
|
* @date 2025-08-16
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("xg_dorm_violation")
|
||||||
|
public class XgDormViolation extends TenantEntity {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪记录ID(主键)
|
||||||
|
*/
|
||||||
|
@TableId(value = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生ID
|
||||||
|
*/
|
||||||
|
private Long studentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生姓名
|
||||||
|
*/
|
||||||
|
private String studentName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学号
|
||||||
|
*/
|
||||||
|
private String studentNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院ID
|
||||||
|
*/
|
||||||
|
private Long collegeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院名称
|
||||||
|
*/
|
||||||
|
private String collegeName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业ID
|
||||||
|
*/
|
||||||
|
private Long majorId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业名称
|
||||||
|
*/
|
||||||
|
private String majorName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级ID
|
||||||
|
*/
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级名称
|
||||||
|
*/
|
||||||
|
private String className;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区ID
|
||||||
|
*/
|
||||||
|
private Long campusId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区名称
|
||||||
|
*/
|
||||||
|
private String campusName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域ID
|
||||||
|
*/
|
||||||
|
private Long areaId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域名称
|
||||||
|
*/
|
||||||
|
private String areaName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼ID
|
||||||
|
*/
|
||||||
|
private Long buildingId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼名称
|
||||||
|
*/
|
||||||
|
private String buildingName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍房间ID
|
||||||
|
*/
|
||||||
|
private Long roomId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间名称
|
||||||
|
*/
|
||||||
|
private String roomName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位ID
|
||||||
|
*/
|
||||||
|
private Long bedId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位名称
|
||||||
|
*/
|
||||||
|
private String bedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪类型
|
||||||
|
*/
|
||||||
|
private String violationType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪等级:1轻微 2一般 3严重 4特别严重
|
||||||
|
*/
|
||||||
|
private String violationLevel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪发生时间
|
||||||
|
*/
|
||||||
|
private Date violationTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪行为描述
|
||||||
|
*/
|
||||||
|
private String violationDescription;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉及其他学生id(逗号分隔)
|
||||||
|
*/
|
||||||
|
private String involvedStudents;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件OSS ID列表(逗号分隔)
|
||||||
|
*/
|
||||||
|
private String attachmentOssIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0代表存在 1代表删除)
|
||||||
|
*/
|
||||||
|
private String deleted;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
+178
@@ -0,0 +1,178 @@
|
|||||||
|
package org.dromara.xg.domain.bo;
|
||||||
|
|
||||||
|
import org.dromara.xg.domain.XgDormViolation;
|
||||||
|
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_violation
|
||||||
|
*
|
||||||
|
* @author zlwu
|
||||||
|
* @date 2025-08-16
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@AutoMapper(target = XgDormViolation.class, reverseConvertGenerate = false)
|
||||||
|
public class XgDormViolationBo extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪记录ID(主键)
|
||||||
|
*/
|
||||||
|
@NotNull(message = "违纪记录ID(主键)不能为空", groups = { EditGroup.class })
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生ID
|
||||||
|
*/
|
||||||
|
@NotNull(message = "学生ID不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private Long studentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生姓名
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "学生姓名不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private String studentName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学号
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "学号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private String studentNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院ID
|
||||||
|
*/
|
||||||
|
private Long collegeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院名称
|
||||||
|
*/
|
||||||
|
private String collegeName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业ID
|
||||||
|
*/
|
||||||
|
private Long majorId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业名称
|
||||||
|
*/
|
||||||
|
private String majorName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级ID
|
||||||
|
*/
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级名称
|
||||||
|
*/
|
||||||
|
private String className;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区ID
|
||||||
|
*/
|
||||||
|
private Long campusId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区名称
|
||||||
|
*/
|
||||||
|
private String campusName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域ID
|
||||||
|
*/
|
||||||
|
private Long areaId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域名称
|
||||||
|
*/
|
||||||
|
private String areaName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼ID
|
||||||
|
*/
|
||||||
|
@NotNull(message = "宿舍楼ID不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private Long buildingId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼名称
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "宿舍楼名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private String buildingName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍房间ID
|
||||||
|
*/
|
||||||
|
@NotNull(message = "宿舍房间ID不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private Long roomId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间名称
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "房间名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private String roomName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位ID
|
||||||
|
*/
|
||||||
|
private Long bedId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位名称
|
||||||
|
*/
|
||||||
|
private String bedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪类型
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "违纪类型不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private String violationType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪等级:1轻微 2一般 3严重 4特别严重
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "违纪等级:1轻微 2一般 3严重 4特别严重不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private String violationLevel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪发生时间
|
||||||
|
*/
|
||||||
|
@NotNull(message = "违纪发生时间不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private Date violationTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪行为描述
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "违纪行为描述不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
|
private String violationDescription;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉及其他学生id(逗号分隔)
|
||||||
|
*/
|
||||||
|
private String involvedStudents;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件OSS ID列表(逗号分隔)
|
||||||
|
*/
|
||||||
|
private String attachmentOssIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0代表存在 1代表删除)
|
||||||
|
*/
|
||||||
|
private String deleted;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
+208
@@ -0,0 +1,208 @@
|
|||||||
|
package org.dromara.xg.domain.vo;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import org.dromara.xg.domain.XgDormViolation;
|
||||||
|
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_violation
|
||||||
|
*
|
||||||
|
* @author zlwu
|
||||||
|
* @date 2025-08-16
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
@AutoMapper(target = XgDormViolation.class)
|
||||||
|
public class XgDormViolationVo implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪记录ID(主键)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "违纪记录ID", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(readConverterExp = "主=键")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "学生ID")
|
||||||
|
private Long studentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生姓名
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "学生姓名")
|
||||||
|
private String studentName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学号
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "学号")
|
||||||
|
private String studentNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "学院ID")
|
||||||
|
private Long collegeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "学院名称")
|
||||||
|
private String collegeName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "专业ID")
|
||||||
|
private Long majorId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "专业名称")
|
||||||
|
private String majorName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "班级ID")
|
||||||
|
private Long classId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "班级名称")
|
||||||
|
private String className;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "校区ID")
|
||||||
|
private Long campusId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "校区名称")
|
||||||
|
private String campusName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "宿舍区域ID")
|
||||||
|
private Long areaId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "宿舍区域名称")
|
||||||
|
private String areaName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "宿舍楼ID")
|
||||||
|
private Long buildingId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "宿舍楼名称")
|
||||||
|
private String buildingName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍房间ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "宿舍房间ID")
|
||||||
|
private Long roomId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "房间名称")
|
||||||
|
private String roomName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位ID
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "床位ID")
|
||||||
|
private Long bedId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "床位名称")
|
||||||
|
private String bedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪类型
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "违纪类型", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(dictType = "dorm_violation_type")
|
||||||
|
private String violationType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪等级:1轻微 2一般 3严重 4特别严重
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "违纪等级:1轻微 2一般 3严重 4特别严重", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(dictType = "dorm_violation_level")
|
||||||
|
private String violationLevel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪发生时间
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "违纪发生时间")
|
||||||
|
private Date violationTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪行为描述
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "违纪行为描述")
|
||||||
|
private String violationDescription;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉及其他学生id(逗号分隔)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "涉及其他学生id", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(readConverterExp = "逗=号分隔")
|
||||||
|
private String involvedStudents;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件OSS ID列表(逗号分隔)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "附件OSS ID列表", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(readConverterExp = "逗=号分隔")
|
||||||
|
private String attachmentOssIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0代表存在 1代表删除)
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "删除标志", converter = ExcelDictConvert.class)
|
||||||
|
@ExcelDictFormat(readConverterExp = "0=代表存在,1=代表删除")
|
||||||
|
private String deleted;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
package org.dromara.xg.mapper;
|
||||||
|
|
||||||
|
import org.dromara.xg.domain.XgDormViolation;
|
||||||
|
import org.dromara.xg.domain.vo.XgDormViolationVo;
|
||||||
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍违纪记录Mapper接口
|
||||||
|
*
|
||||||
|
* @author zlwu
|
||||||
|
* @date 2025-08-16
|
||||||
|
*/
|
||||||
|
public interface XgDormViolationMapper extends BaseMapperPlus<XgDormViolation, XgDormViolationVo> {
|
||||||
|
|
||||||
|
}
|
||||||
+68
@@ -0,0 +1,68 @@
|
|||||||
|
package org.dromara.xg.service;
|
||||||
|
|
||||||
|
import org.dromara.xg.domain.vo.XgDormViolationVo;
|
||||||
|
import org.dromara.xg.domain.bo.XgDormViolationBo;
|
||||||
|
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 IXgDormViolationService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询宿舍违纪记录
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return 宿舍违纪记录
|
||||||
|
*/
|
||||||
|
XgDormViolationVo queryById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询宿舍违纪记录列表
|
||||||
|
*
|
||||||
|
* @param bo 查询条件
|
||||||
|
* @param pageQuery 分页参数
|
||||||
|
* @return 宿舍违纪记录分页列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<XgDormViolationVo> queryPageList(XgDormViolationBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询符合条件的宿舍违纪记录列表
|
||||||
|
*
|
||||||
|
* @param bo 查询条件
|
||||||
|
* @return 宿舍违纪记录列表
|
||||||
|
*/
|
||||||
|
List<XgDormViolationVo> queryList(XgDormViolationBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增宿舍违纪记录
|
||||||
|
*
|
||||||
|
* @param bo 宿舍违纪记录
|
||||||
|
* @return 是否新增成功
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(XgDormViolationBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改宿舍违纪记录
|
||||||
|
*
|
||||||
|
* @param bo 宿舍违纪记录
|
||||||
|
* @return 是否修改成功
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(XgDormViolationBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并批量删除宿舍违纪记录信息
|
||||||
|
*
|
||||||
|
* @param ids 待删除的主键集合
|
||||||
|
* @param isValid 是否进行有效性校验
|
||||||
|
* @return 是否删除成功
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
+157
@@ -0,0 +1,157 @@
|
|||||||
|
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.XgDormViolationBo;
|
||||||
|
import org.dromara.xg.domain.vo.XgDormViolationVo;
|
||||||
|
import org.dromara.xg.domain.XgDormViolation;
|
||||||
|
import org.dromara.xg.mapper.XgDormViolationMapper;
|
||||||
|
import org.dromara.xg.service.IXgDormViolationService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍违纪记录Service业务层处理
|
||||||
|
*
|
||||||
|
* @author zlwu
|
||||||
|
* @date 2025-08-16
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class XgDormViolationServiceImpl implements IXgDormViolationService {
|
||||||
|
|
||||||
|
private final XgDormViolationMapper baseMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询宿舍违纪记录
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return 宿舍违纪记录
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public XgDormViolationVo queryById(Long id){
|
||||||
|
return baseMapper.selectVoById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询宿舍违纪记录列表
|
||||||
|
*
|
||||||
|
* @param bo 查询条件
|
||||||
|
* @param pageQuery 分页参数
|
||||||
|
* @return 宿舍违纪记录分页列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<XgDormViolationVo> queryPageList(XgDormViolationBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<XgDormViolation> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<XgDormViolationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询符合条件的宿舍违纪记录列表
|
||||||
|
*
|
||||||
|
* @param bo 查询条件
|
||||||
|
* @return 宿舍违纪记录列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<XgDormViolationVo> queryList(XgDormViolationBo bo) {
|
||||||
|
LambdaQueryWrapper<XgDormViolation> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<XgDormViolation> buildQueryWrapper(XgDormViolationBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<XgDormViolation> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.orderByAsc(XgDormViolation::getId);
|
||||||
|
lqw.eq(bo.getStudentId() != null, XgDormViolation::getStudentId, bo.getStudentId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getStudentName()), XgDormViolation::getStudentName, bo.getStudentName());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getStudentNo()), XgDormViolation::getStudentNo, bo.getStudentNo());
|
||||||
|
lqw.eq(bo.getCollegeId() != null, XgDormViolation::getCollegeId, bo.getCollegeId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getCollegeName()), XgDormViolation::getCollegeName, bo.getCollegeName());
|
||||||
|
lqw.eq(bo.getMajorId() != null, XgDormViolation::getMajorId, bo.getMajorId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getMajorName()), XgDormViolation::getMajorName, bo.getMajorName());
|
||||||
|
lqw.eq(bo.getClassId() != null, XgDormViolation::getClassId, bo.getClassId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getClassName()), XgDormViolation::getClassName, bo.getClassName());
|
||||||
|
lqw.eq(bo.getCampusId() != null, XgDormViolation::getCampusId, bo.getCampusId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getCampusName()), XgDormViolation::getCampusName, bo.getCampusName());
|
||||||
|
lqw.eq(bo.getAreaId() != null, XgDormViolation::getAreaId, bo.getAreaId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getAreaName()), XgDormViolation::getAreaName, bo.getAreaName());
|
||||||
|
lqw.eq(bo.getBuildingId() != null, XgDormViolation::getBuildingId, bo.getBuildingId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getBuildingName()), XgDormViolation::getBuildingName, bo.getBuildingName());
|
||||||
|
lqw.eq(bo.getRoomId() != null, XgDormViolation::getRoomId, bo.getRoomId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getRoomName()), XgDormViolation::getRoomName, bo.getRoomName());
|
||||||
|
lqw.eq(bo.getBedId() != null, XgDormViolation::getBedId, bo.getBedId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getBedName()), XgDormViolation::getBedName, bo.getBedName());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getViolationType()), XgDormViolation::getViolationType, bo.getViolationType());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getViolationLevel()), XgDormViolation::getViolationLevel, bo.getViolationLevel());
|
||||||
|
lqw.eq(bo.getViolationTime() != null, XgDormViolation::getViolationTime, bo.getViolationTime());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getViolationDescription()), XgDormViolation::getViolationDescription, bo.getViolationDescription());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getInvolvedStudents()), XgDormViolation::getInvolvedStudents, bo.getInvolvedStudents());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getAttachmentOssIds()), XgDormViolation::getAttachmentOssIds, bo.getAttachmentOssIds());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getDeleted()), XgDormViolation::getDeleted, bo.getDeleted());
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增宿舍违纪记录
|
||||||
|
*
|
||||||
|
* @param bo 宿舍违纪记录
|
||||||
|
* @return 是否新增成功
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(XgDormViolationBo bo) {
|
||||||
|
XgDormViolation add = MapstructUtils.convert(bo, XgDormViolation.class);
|
||||||
|
validEntityBeforeSave(add);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setId(add.getId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改宿舍违纪记录
|
||||||
|
*
|
||||||
|
* @param bo 宿舍违纪记录
|
||||||
|
* @return 是否修改成功
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(XgDormViolationBo bo) {
|
||||||
|
XgDormViolation update = MapstructUtils.convert(bo, XgDormViolation.class);
|
||||||
|
validEntityBeforeSave(update);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存前的数据校验
|
||||||
|
*/
|
||||||
|
private void validEntityBeforeSave(XgDormViolation 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.XgDormViolationMapper">
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
-- 宿舍违纪记录管理数据字典配置脚本(超简化版)
|
||||||
|
-- 来源:宿舍违纪记录数据模型设计
|
||||||
|
-- 用途:配置宿舍违纪记录模块所需的数据字典项(仅主表相关字典)
|
||||||
|
-- 维护人:数据库设计团队
|
||||||
|
-- 日期:2025-01-28
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- 1. 违纪类型字典
|
||||||
|
-- =============================================================================
|
||||||
|
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||||
|
VALUES (NEXT VALUE FOR sys_dict_type_seq, '000000', '宿舍违纪类型', 'dorm_violation_type', 103, 1, NOW(), 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, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||||
|
VALUES
|
||||||
|
-- 卫生违纪类
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 1, '垃圾乱扔', 'WS001001', 'dorm_violation_type', '', 'warning', 'N', 103, 1, NOW(), 1, NOW(), '在宿舍内外乱扔垃圾'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 2, '床铺不整', 'WS001002', 'dorm_violation_type', '', 'warning', 'N', 103, 1, NOW(), 1, NOW(), '床铺整理不规范'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 3, '物品摆放混乱', 'WS001003', 'dorm_violation_type', '', 'warning', 'N', 103, 1, NOW(), 1, NOW(), '个人物品摆放不规范'),
|
||||||
|
|
||||||
|
-- 纪律违纪类
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 11, '晚归违纪', 'JL001001', 'dorm_violation_type', '', 'info', 'N', 103, 1, NOW(), 1, NOW(), '超过规定时间归宿'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 12, '噪音扰民', 'JL001002', 'dorm_violation_type', '', 'info', 'N', 103, 1, NOW(), 1, NOW(), '在休息时间制造噪音'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 13, '夜不归宿', 'JL001003', 'dorm_violation_type', '', 'danger', 'N', 103, 1, NOW(), 1, NOW(), '整夜未在宿舍住宿'),
|
||||||
|
|
||||||
|
-- 安全违纪类
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 21, '违规用电', 'AQ001001', 'dorm_violation_type', '', 'danger', 'N', 103, 1, NOW(), 1, NOW(), '使用违规电器或私拉电线'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 22, '吸烟违纪', 'AQ001002', 'dorm_violation_type', '', 'danger', 'N', 103, 1, NOW(), 1, NOW(), '在宿舍内吸烟'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 23, '明火使用', 'AQ001003', 'dorm_violation_type', '', 'danger', 'N', 103, 1, NOW(), 1, NOW(), '在宿舍内使用明火'),
|
||||||
|
|
||||||
|
-- 物品违纪类
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 31, '损坏公物', 'WP001001', 'dorm_violation_type', '', 'primary', 'N', 103, 1, NOW(), 1, NOW(), '故意或过失损坏公共物品'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 32, '私改设施', 'WP001002', 'dorm_violation_type', '', 'primary', 'N', 103, 1, NOW(), 1, NOW(), '私自改动宿舍设施'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 33, '盗用他人物品', 'WP001003', 'dorm_violation_type', '', 'danger', 'N', 103, 1, NOW(), 1, NOW(), '盗用或损坏他人物品');
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- 2. 违纪等级字典
|
||||||
|
-- =============================================================================
|
||||||
|
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||||
|
VALUES (NEXT VALUE FOR sys_dict_type_seq, '000000', '违纪等级', 'dorm_violation_level', 103, 1, NOW(), 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, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||||
|
VALUES
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 1, '轻微', '1', 'dorm_violation_level', '', 'success', 'Y', 103, 1, NOW(), 1, NOW(), '轻微违纪'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 2, '一般', '2', 'dorm_violation_level', '', 'warning', 'N', 103, 1, NOW(), 1, NOW(), '一般违纪'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 3, '严重', '3', 'dorm_violation_level', '', 'danger', 'N', 103, 1, NOW(), 1, NOW(), '严重违纪'),
|
||||||
|
(NEXT VALUE FOR sys_dict_data_seq, '000000', 4, '特别严重', '4', 'dorm_violation_level', '', 'danger', 'N', 103, 1, NOW(), 1, NOW(), '特别严重违纪');
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- 数据字典配置完成提示
|
||||||
|
-- =============================================================================
|
||||||
|
-- 宿舍违纪记录管理数据字典配置脚本执行完成(超简化版)
|
||||||
|
-- 包含字典类型:
|
||||||
|
-- 1. dorm_violation_type - 宿舍违纪类型(12个违纪类型)
|
||||||
|
-- 2. dorm_violation_level - 违纪等级(4个等级)
|
||||||
|
--
|
||||||
|
-- 功能特点:
|
||||||
|
-- 1. 超级简化设计,仅保留核心字典
|
||||||
|
-- 2. 违纪类型使用字典管理,无需单独表
|
||||||
|
-- 3. 附件使用OSS ID存储,无需附件类型字典
|
||||||
|
-- 4. 移除了处罚、审核、累计等复杂字典
|
||||||
|
--
|
||||||
|
-- 注意事项:
|
||||||
|
-- 1. 违纪类型编码采用分类前缀(WS卫生、JL纪律、AQ安全、WP物品)
|
||||||
|
-- 2. 所有字典数据采用项目统一规范
|
||||||
|
-- 3. 专注于记录功能,大幅简化了数据字典结构
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
-- 宿舍违纪记录管理数据库建表脚本(超简化版)
|
||||||
|
-- 来源:宿舍违纪记录数据模型设计
|
||||||
|
-- 用途:创建宿舍违纪记录管理所需的数据库表(仅主表)
|
||||||
|
-- 维护人:数据库设计团队
|
||||||
|
-- 日期:2025-01-28
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- 1. 宿舍违纪记录表 (xg_dorm_violation) - 唯一核心表
|
||||||
|
-- =============================================================================
|
||||||
|
DROP TABLE IF EXISTS `xg_dorm_violation`;
|
||||||
|
CREATE TABLE `xg_dorm_violation` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '违纪记录ID(主键)',
|
||||||
|
|
||||||
|
-- 学生信息(冗余存储,提高查询性能)
|
||||||
|
`student_id` bigint(20) NOT NULL COMMENT '学生ID',
|
||||||
|
`student_name` varchar(100) NOT NULL COMMENT '学生姓名',
|
||||||
|
`student_no` varchar(50) NOT NULL COMMENT '学号',
|
||||||
|
`college_id` bigint(20) DEFAULT NULL COMMENT '学院ID',
|
||||||
|
`college_name` varchar(100) DEFAULT NULL COMMENT '学院名称',
|
||||||
|
`major_id` bigint(20) DEFAULT NULL COMMENT '专业ID',
|
||||||
|
`major_name` varchar(100) DEFAULT NULL COMMENT '专业名称',
|
||||||
|
`class_id` bigint(20) DEFAULT NULL COMMENT '班级ID',
|
||||||
|
`class_name` varchar(100) DEFAULT NULL COMMENT '班级名称',
|
||||||
|
|
||||||
|
-- 宿舍位置信息(复用现有宿舍管理结构)
|
||||||
|
`campus_id` bigint(20) DEFAULT NULL COMMENT '校区ID',
|
||||||
|
`campus_name` varchar(100) DEFAULT NULL COMMENT '校区名称',
|
||||||
|
`area_id` bigint(20) DEFAULT NULL COMMENT '宿舍区域ID',
|
||||||
|
`area_name` varchar(100) DEFAULT NULL COMMENT '宿舍区域名称',
|
||||||
|
`building_id` bigint(20) NOT NULL COMMENT '宿舍楼ID',
|
||||||
|
`building_name` varchar(100) NOT NULL COMMENT '宿舍楼名称',
|
||||||
|
`room_id` bigint(20) NOT NULL COMMENT '宿舍房间ID',
|
||||||
|
`room_name` varchar(50) NOT NULL COMMENT '房间名称',
|
||||||
|
`bed_id` bigint(20) DEFAULT NULL COMMENT '床位ID',
|
||||||
|
`bed_name` varchar(20) DEFAULT NULL COMMENT '床位名称',
|
||||||
|
|
||||||
|
-- 违纪基本信息
|
||||||
|
`violation_type` varchar(50) NOT NULL COMMENT '违纪类型',
|
||||||
|
`violation_level` char(1) NOT NULL COMMENT '违纪等级:1轻微 2一般 3严重 4特别严重',
|
||||||
|
`violation_time` datetime NOT NULL COMMENT '违纪发生时间',
|
||||||
|
`violation_description` text NOT NULL COMMENT '违纪行为描述',
|
||||||
|
|
||||||
|
-- 附加信息
|
||||||
|
`involved_students` text DEFAULT NULL COMMENT '涉及其他学生信息(JSON格式)',
|
||||||
|
-- 附件信息(OSS存储)
|
||||||
|
`attachment_oss_ids` text DEFAULT NULL COMMENT '附件OSS ID列表(逗号分隔)',
|
||||||
|
|
||||||
|
-- 系统字段
|
||||||
|
`deleted` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
|
||||||
|
`tenant_id` varchar(20) 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 '更新时间',
|
||||||
|
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||||
|
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `idx_student_id` (`student_id`),
|
||||||
|
KEY `idx_student_no` (`student_no`),
|
||||||
|
KEY `idx_college_id` (`college_id`),
|
||||||
|
KEY `idx_building_id` (`building_id`),
|
||||||
|
KEY `idx_room_id` (`room_id`),
|
||||||
|
KEY `idx_violation_type` (`violation_type`),
|
||||||
|
KEY `idx_violation_time` (`violation_time`),
|
||||||
|
KEY `idx_violation_level` (`violation_level`),
|
||||||
|
KEY `idx_tenant_id` (`tenant_id`),
|
||||||
|
KEY `idx_deleted` (`deleted`),
|
||||||
|
|
||||||
|
-- 复合索引(统计查询优化)
|
||||||
|
KEY `idx_college_time` (`college_id`, `violation_time`),
|
||||||
|
KEY `idx_building_level` (`building_id`, `violation_level`),
|
||||||
|
KEY `idx_student_time` (`student_id`, `violation_time`),
|
||||||
|
KEY `idx_type_level` (`violation_type`, `violation_level`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='宿舍违纪记录表';
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- 数据库建表脚本执行完成提示
|
||||||
|
-- =============================================================================
|
||||||
|
-- 宿舍违纪记录管理数据库建表脚本执行完成(超简化版)
|
||||||
|
--
|
||||||
|
-- 创建表:
|
||||||
|
-- 1. xg_dorm_violation - 宿舍违纪记录主表(包含所有核心功能)
|
||||||
|
--
|
||||||
|
-- 设计特点:
|
||||||
|
-- 1. 单表设计,降低复杂度
|
||||||
|
-- 2. 违纪类型使用字典管理
|
||||||
|
-- 3. 附件使用OSS ID存储
|
||||||
|
-- 4. 冗余存储关键信息,提高查询性能
|
||||||
|
-- 5. 完整的索引设计,支持高效查询和统计
|
||||||
|
--
|
||||||
|
-- 注意事项:
|
||||||
|
-- 1. 违纪类型使用sys_dict_data表管理
|
||||||
|
-- 2. 附件OSS ID使用逗号分隔存储
|
||||||
|
-- 3. 所有字段遵循项目统一规范
|
||||||
|
-- 4. 支持多租户和逻辑删除
|
||||||
@@ -0,0 +1,363 @@
|
|||||||
|
# 宿舍违纪记录管理数据模型设计文档(超简化版)
|
||||||
|
|
||||||
|
## 📋 文档信息
|
||||||
|
|
||||||
|
| 项目 | 信息 |
|
||||||
|
|------|------|
|
||||||
|
| **项目名称** | 校园管理系统 - 宿舍违纪记录管理模块 |
|
||||||
|
| **数据库版本** | MySQL 8.0+ |
|
||||||
|
| **文档版本** | V2.0.0(超简化版) |
|
||||||
|
| **创建时间** | 2025-01-28 |
|
||||||
|
| **创建人员** | 数据库设计团队 |
|
||||||
|
| **审核状态** | 待审核 |
|
||||||
|
|
||||||
|
## 🎯 设计目标
|
||||||
|
|
||||||
|
### 核心目标
|
||||||
|
- 建立最简化的宿舍违纪记录管理系统
|
||||||
|
- 使用单表存储所有核心数据,降低系统复杂度
|
||||||
|
- 违纪类型通过字典管理,便于维护和扩展
|
||||||
|
- 附件通过OSS ID字符串存储,简化文件管理
|
||||||
|
|
||||||
|
### 设计原则
|
||||||
|
- **极简设计**:单表设计,减少表关联复杂度
|
||||||
|
- **字典驱动**:违纪类型使用系统字典管理
|
||||||
|
- **OSS存储**:附件使用阿里云OSS,表中仅存储ID
|
||||||
|
- **查询优化**:通过索引设计支持高效查询和统计
|
||||||
|
- **性能第一**:冗余存储关键信息,避免复杂JOIN
|
||||||
|
|
||||||
|
## 🗄️ 数据库表设计
|
||||||
|
|
||||||
|
### 唯一核心表
|
||||||
|
|
||||||
|
#### 宿舍违纪记录表 (xg_dorm_violation)
|
||||||
|
**表说明**:违纪记录管理的唯一核心表,包含所有功能
|
||||||
|
|
||||||
|
**核心字段组**:
|
||||||
|
|
||||||
|
##### 📊 学生信息(冗余存储)
|
||||||
|
- **student_id**, **student_name**, **student_no**:学生基本信息
|
||||||
|
- **college_id**, **college_name**:学院信息
|
||||||
|
- **class_id**, **class_name**:班级信息
|
||||||
|
|
||||||
|
##### 🏠 宿舍位置信息(充分复用现有结构)
|
||||||
|
- **campus_id**, **campus_name**:校区信息
|
||||||
|
- **area_id**, **area_name**:宿舍区域信息
|
||||||
|
- **building_id**, **building_name**:宿舍楼信息(必填)
|
||||||
|
- **room_id**, **room_no**:房间信息(必填)
|
||||||
|
- **bed_id**, **bed_no**:床位信息
|
||||||
|
|
||||||
|
##### 🚨 违纪基本信息
|
||||||
|
- **violation_type_dict**:违纪类型(字典值,如WS001001)
|
||||||
|
- **violation_level**:违纪等级(1轻微 2一般 3严重 4特别严重)
|
||||||
|
- **violation_time**:违纪发生时间
|
||||||
|
- **violation_description**:违纪行为描述
|
||||||
|
- **violation_location**:违纪具体位置
|
||||||
|
|
||||||
|
##### 🔍 发现信息
|
||||||
|
- **discoverer_type**:发现人类型(1宿管员 2学生 3巡查员 4其他)
|
||||||
|
- **discoverer_id**, **discoverer_name**:发现人信息
|
||||||
|
- **discovery_method**:发现方式(1日常检查 2举报 3巡查 4其他)
|
||||||
|
- **discovery_time**:发现时间
|
||||||
|
|
||||||
|
##### 📋 记录状态和评分
|
||||||
|
- **record_status**:记录状态(1已记录 2已确认 3已归档)
|
||||||
|
- **severity_score**:严重程度评分(0-100)
|
||||||
|
- **is_repeat**, **repeat_count**:重复违纪信息
|
||||||
|
|
||||||
|
##### 📎 附件信息(OSS存储)
|
||||||
|
- **attachment_oss_ids**:附件OSS ID列表(逗号分隔字符串)
|
||||||
|
- **attachment_count**:附件数量
|
||||||
|
|
||||||
|
**设计特点**:
|
||||||
|
- **单表设计**:所有功能集中在一张表,减少复杂度
|
||||||
|
- **冗余存储**:关键信息冗余存储,避免复杂JOIN查询
|
||||||
|
- **字典管理**:违纪类型使用系统字典,便于维护
|
||||||
|
- **OSS集成**:附件使用阿里云OSS存储,表中仅存ID
|
||||||
|
- **索引优化**:完整的索引设计,支持高效查询
|
||||||
|
|
||||||
|
### 🔗 与现有系统的关系
|
||||||
|
|
||||||
|
#### 宿舍管理系统集成
|
||||||
|
违纪记录管理充分复用现有宿舍管理数据结构:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 关联关系(查询时关联,表结构独立)
|
||||||
|
xg_dorm_violation.campus_id -> xg_dorm_campus.id
|
||||||
|
xg_dorm_violation.area_id -> xg_dorm_area.id
|
||||||
|
xg_dorm_violation.building_id -> xg_dorm_building.id
|
||||||
|
xg_dorm_violation.room_id -> xg_dorm_room.id
|
||||||
|
xg_dorm_violation.bed_id -> xg_dorm_bed.id
|
||||||
|
xg_dorm_violation.student_id -> xg_dorm_bed_student.student_id
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 系统字典集成
|
||||||
|
违纪类型通过系统字典管理:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 字典关联
|
||||||
|
xg_dorm_violation.violation_type_dict -> sys_dict_data.dict_value
|
||||||
|
-- 其中 dict_type = 'dorm_violation_type'
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 用户系统集成
|
||||||
|
发现人和处理人信息关联:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 关联关系
|
||||||
|
xg_dorm_violation.discoverer_id -> sys_user.user_id
|
||||||
|
xg_dorm_violation.handler_id -> sys_user.user_id
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 索引设计
|
||||||
|
|
||||||
|
### 1. 基础查询索引
|
||||||
|
```sql
|
||||||
|
-- 核心查询索引
|
||||||
|
KEY `idx_student_id` (`student_id`) -- 按学生查询
|
||||||
|
KEY `idx_student_no` (`student_no`) -- 按学号查询
|
||||||
|
KEY `idx_college_id` (`college_id`) -- 按学院查询
|
||||||
|
KEY `idx_building_id` (`building_id`) -- 按宿舍楼查询
|
||||||
|
KEY `idx_room_id` (`room_id`) -- 按房间查询
|
||||||
|
KEY `idx_violation_type` (`violation_type_dict`) -- 按违纪类型查询
|
||||||
|
KEY `idx_violation_time` (`violation_time`) -- 按违纪时间查询
|
||||||
|
KEY `idx_record_status` (`record_status`) -- 按记录状态查询
|
||||||
|
KEY `idx_violation_level` (`violation_level`) -- 按违纪等级查询
|
||||||
|
KEY `idx_is_repeat` (`is_repeat`) -- 按重复违纪查询
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 复合索引(统计优化)
|
||||||
|
```sql
|
||||||
|
-- 统计分析优化索引
|
||||||
|
KEY `idx_college_time` (`college_id`, `violation_time`)
|
||||||
|
KEY `idx_building_level` (`building_id`, `violation_level`)
|
||||||
|
KEY `idx_student_time` (`student_id`, `violation_time`)
|
||||||
|
KEY `idx_type_level` (`violation_type_dict`, `violation_level`)
|
||||||
|
KEY `idx_status_time` (`record_status`, `create_time`)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📈 业务逻辑设计
|
||||||
|
|
||||||
|
### 1. 违纪类型字典管理
|
||||||
|
```sql
|
||||||
|
-- 违纪类型编码规则
|
||||||
|
WS001001 - 垃圾乱扔(卫生类)
|
||||||
|
JL001001 - 晚归违纪(纪律类)
|
||||||
|
AQ001001 - 违规用电(安全类)
|
||||||
|
WP001001 - 损坏公物(物品类)
|
||||||
|
|
||||||
|
-- 编码格式:分类前缀 + 6位数字
|
||||||
|
-- WS: 卫生违纪, JL: 纪律违纪, AQ: 安全违纪, WP: 物品违纪
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 附件OSS存储
|
||||||
|
```sql
|
||||||
|
-- 附件ID存储格式
|
||||||
|
attachment_oss_ids = "oss_id_1,oss_id_2,oss_id_3"
|
||||||
|
|
||||||
|
-- 解析方式
|
||||||
|
String[] ossIds = attachmentOssIds.split(",");
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 违纪等级评分机制
|
||||||
|
```sql
|
||||||
|
-- 违纪等级与评分对应
|
||||||
|
'1' (轻微): 0-20分
|
||||||
|
'2' (一般): 21-40分
|
||||||
|
'3' (严重): 41-70分
|
||||||
|
'4' (特别严重): 71-100分
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 记录状态流转
|
||||||
|
```sql
|
||||||
|
-- 简化状态流转
|
||||||
|
'1' (已记录) -> '2' (已确认) -> '3' (已归档)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 重复违纪检测
|
||||||
|
```sql
|
||||||
|
-- 检测逻辑
|
||||||
|
同一学生 + 相同违纪类型 + 时间窗口内 = 重复违纪
|
||||||
|
时间窗口: 当前学期或最近6个月
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📋 数据字典
|
||||||
|
|
||||||
|
### 核心字典类型(5个)
|
||||||
|
|
||||||
|
| 字典类型 | 字典名称 | 说明 |
|
||||||
|
|---------|---------|------|
|
||||||
|
| dorm_violation_type | 宿舍违纪类型 | 12种违纪类型,按分类前缀编码 |
|
||||||
|
| dorm_violation_level | 违纪等级 | 轻微、一般、严重、特别严重 |
|
||||||
|
| dorm_discoverer_type | 发现人类型 | 宿管员、学生、巡查员、其他 |
|
||||||
|
| dorm_discovery_method | 发现方式 | 日常检查、举报、巡查、其他 |
|
||||||
|
| dorm_record_status | 违纪记录状态 | 已记录、已确认、已归档 |
|
||||||
|
|
||||||
|
### 违纪类型详细清单
|
||||||
|
|
||||||
|
#### 🧹 卫生违纪类(WS)
|
||||||
|
- **WS001001** - 垃圾乱扔:在宿舍内外乱扔垃圾
|
||||||
|
- **WS001002** - 床铺不整:床铺整理不规范
|
||||||
|
- **WS001003** - 物品摆放混乱:个人物品摆放不规范
|
||||||
|
|
||||||
|
#### ⏰ 纪律违纪类(JL)
|
||||||
|
- **JL001001** - 晚归违纪:超过规定时间归宿
|
||||||
|
- **JL001002** - 噪音扰民:在休息时间制造噪音
|
||||||
|
- **JL001003** - 夜不归宿:整夜未在宿舍住宿
|
||||||
|
|
||||||
|
#### ⚠️ 安全违纪类(AQ)
|
||||||
|
- **AQ001001** - 违规用电:使用违规电器或私拉电线
|
||||||
|
- **AQ001002** - 吸烟违纪:在宿舍内吸烟
|
||||||
|
- **AQ001003** - 明火使用:在宿舍内使用明火
|
||||||
|
|
||||||
|
#### 🛠️ 物品违纪类(WP)
|
||||||
|
- **WP001001** - 损坏公物:故意或过失损坏公共物品
|
||||||
|
- **WP001002** - 私改设施:私自改动宿舍设施
|
||||||
|
- **WP001003** - 盗用他人物品:盗用或损坏他人物品
|
||||||
|
|
||||||
|
## 🚀 性能优化
|
||||||
|
|
||||||
|
### 1. 查询优化策略
|
||||||
|
- **索引覆盖**:主要查询字段都有对应索引
|
||||||
|
- **复合索引**:统计查询使用复合索引优化
|
||||||
|
- **冗余字段**:避免复杂JOIN,直接查询单表
|
||||||
|
- **分页优化**:使用limit offset优化大数据量查询
|
||||||
|
|
||||||
|
### 2. 存储优化策略
|
||||||
|
- **OSS集成**:附件文件外部存储,减轻数据库压力
|
||||||
|
- **字符串存储**:附件ID使用逗号分隔,简化存储结构
|
||||||
|
- **数据压缩**:JSON格式存储复杂字段(如涉及其他学生信息)
|
||||||
|
|
||||||
|
### 3. 缓存策略
|
||||||
|
- **字典缓存**:违纪类型等字典数据Redis缓存
|
||||||
|
- **热点数据**:常用查询结果缓存
|
||||||
|
- **统计缓存**:定时更新统计数据缓存
|
||||||
|
|
||||||
|
## 📊 统计分析功能
|
||||||
|
|
||||||
|
### 1. 基础统计
|
||||||
|
- 按时间段的违纪记录统计
|
||||||
|
- 按学院、宿舍楼的违纪分布
|
||||||
|
- 按违纪类型的频次统计
|
||||||
|
- 违纪等级分布分析
|
||||||
|
|
||||||
|
### 2. 趋势分析
|
||||||
|
- 违纪记录的时间趋势
|
||||||
|
- 重复违纪学生识别
|
||||||
|
- 违纪热点区域分析
|
||||||
|
- 违纪类型变化趋势
|
||||||
|
|
||||||
|
### 3. 对比分析
|
||||||
|
- 不同学院违纪情况对比
|
||||||
|
- 不同宿舍楼违纪率对比
|
||||||
|
- 不同时间段违纪情况对比
|
||||||
|
|
||||||
|
## 🔒 数据安全设计
|
||||||
|
|
||||||
|
### 1. 敏感信息保护
|
||||||
|
- 学生身份信息的访问权限控制
|
||||||
|
- 违纪记录的查看权限分级
|
||||||
|
- OSS附件的安全访问控制
|
||||||
|
|
||||||
|
### 2. 审计追踪
|
||||||
|
- 完整的操作日志记录
|
||||||
|
- 数据变更的版本追踪
|
||||||
|
|
||||||
|
### 3. 数据备份
|
||||||
|
- 违纪记录的定期备份
|
||||||
|
- OSS附件的安全存储
|
||||||
|
- 历史数据的归档管理
|
||||||
|
|
||||||
|
## 📝 变更记录
|
||||||
|
|
||||||
|
| 版本 | 日期 | 变更内容 | 变更人 |
|
||||||
|
|------|------|----------|--------|
|
||||||
|
| V2.0.0 | 2025-01-28 | 超简化版设计:单表设计,违纪类型使用字典,附件使用OSS ID | 数据库设计团队 |
|
||||||
|
| V1.0.0 | 2025-01-28 | 简化版初始创建,专注违纪记录功能,移除处罚和审核模块 | 数据库设计团队 |
|
||||||
|
|
||||||
|
## 📄 相关文档
|
||||||
|
|
||||||
|
| 文档名称 | 文档路径 | 说明 |
|
||||||
|
|---------|---------|------|
|
||||||
|
| 建表脚本 | `宿舍违纪管理数据库建表脚本.sql` | 超简化版数据库建表SQL(仅1张表) |
|
||||||
|
| 数据字典 | `宿舍违纪管理数据字典配置.sql` | 超简化版字典配置(5个字典类型) |
|
||||||
|
| 宿舍管理设计 | `宿舍管理数据库设计.md` | 现有宿舍管理数据模型 |
|
||||||
|
| 数据库规范 | `../mysql-database-standard.md` | 项目数据库设计规范 |
|
||||||
|
|
||||||
|
## 🎯 功能特点
|
||||||
|
|
||||||
|
### 1. 超简化设计理念
|
||||||
|
- **单表设计**:所有功能集中在一张表,极大降低复杂度
|
||||||
|
- **字典驱动**:违纪类型通过系统字典管理,便于维护和扩展
|
||||||
|
- **OSS集成**:附件使用云存储,表中仅存储ID,简化文件管理
|
||||||
|
- **性能优先**:通过冗余存储避免复杂关联查询
|
||||||
|
|
||||||
|
### 2. 核心功能
|
||||||
|
- 违纪记录的增删改查
|
||||||
|
- 违纪类型的字典化管理
|
||||||
|
- 重复违纪的自动检测
|
||||||
|
- 附件文件的OSS存储管理
|
||||||
|
- 多维度的统计分析
|
||||||
|
|
||||||
|
### 3. 系统集成
|
||||||
|
- 充分复用现有宿舍管理数据结构
|
||||||
|
- 与用户管理系统无缝集成
|
||||||
|
- 与系统字典管理完美融合
|
||||||
|
- 遵循项目统一的数据库设计规范
|
||||||
|
|
||||||
|
## 🎯 技术优势
|
||||||
|
|
||||||
|
### 1. 开发效率
|
||||||
|
- **单表操作**:减少复杂的多表关联查询
|
||||||
|
- **字典管理**:违纪类型维护简单,无需修改表结构
|
||||||
|
- **OSS集成**:文件管理交给专业云服务,简化开发
|
||||||
|
|
||||||
|
### 2. 运维效率
|
||||||
|
- **部署简单**:只需创建一张表和几个字典
|
||||||
|
- **维护容易**:数据结构简单,问题排查快速
|
||||||
|
- **扩展灵活**:新增违纪类型只需添加字典项
|
||||||
|
|
||||||
|
### 3. 性能优势
|
||||||
|
- **查询高效**:单表查询,避免复杂JOIN
|
||||||
|
- **索引优化**:针对性的索引设计,支持高效统计
|
||||||
|
- **存储优化**:大文件外部存储,减轻数据库压力
|
||||||
|
|
||||||
|
## 🎯 后续扩展
|
||||||
|
|
||||||
|
### 1. 功能扩展方向
|
||||||
|
- 违纪预警和风险评估
|
||||||
|
- 违纪数据的智能分析
|
||||||
|
- 与学生综合评价系统的集成
|
||||||
|
- 移动端违纪上报功能
|
||||||
|
|
||||||
|
### 2. 性能扩展方向
|
||||||
|
- 大数据量的分表策略
|
||||||
|
- 实时统计和报表功能
|
||||||
|
- 违纪图片的AI识别功能
|
||||||
|
- 多校区数据的同步机制
|
||||||
|
|
||||||
|
### 3. 管理扩展方向
|
||||||
|
- 违纪数据的导出功能
|
||||||
|
- 与家长通知系统的对接(如需要)
|
||||||
|
- 违纪数据的开放API接口
|
||||||
|
- 历史数据的分析报告生成
|
||||||
|
|
||||||
|
## 💡 使用建议
|
||||||
|
|
||||||
|
### 1. 开发建议
|
||||||
|
- 使用单表DAO模式,简化数据访问层
|
||||||
|
- 违纪类型从字典缓存中获取,提高性能
|
||||||
|
- 附件上传直接到OSS,异步更新记录表
|
||||||
|
- 统计查询优先使用复合索引
|
||||||
|
|
||||||
|
### 2. 维护建议
|
||||||
|
- 定期清理OSS中的孤立文件
|
||||||
|
- 监控单表数据量,适时进行数据归档
|
||||||
|
- 定期更新字典缓存,保持数据一致性
|
||||||
|
- 建立完善的数据备份和恢复机制
|
||||||
|
|
||||||
|
### 3. 扩展建议
|
||||||
|
- 如需处罚功能,可单独增加处罚表关联违纪记录
|
||||||
|
- 如需工作流,可集成Warm-Flow框架
|
||||||
|
- 如需复杂统计,可考虑数据仓库方案
|
||||||
|
- 如需移动端,优先考虑API接口设计
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import {
|
||||||
|
DormViolationVO,
|
||||||
|
DormViolationForm,
|
||||||
|
DormViolationQuery,
|
||||||
|
StudentOptionVO,
|
||||||
|
StudentOptionQuery,
|
||||||
|
CampusOptionVO,
|
||||||
|
AreaOptionVO,
|
||||||
|
BuildingOptionVO,
|
||||||
|
RoomOptionVO,
|
||||||
|
BedOptionVO
|
||||||
|
} from '@/api/xg/xgss/dormViolation/dormViolation/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询宿舍违纪记录列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listDormViolation = (query?: DormViolationQuery): AxiosPromise<DormViolationVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/dormViolation/dormViolation/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询宿舍违纪记录详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getDormViolation = (id: string | number): AxiosPromise<DormViolationVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/dormViolation/dormViolation/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增宿舍违纪记录
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addDormViolation = (data: DormViolationForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/dormViolation/dormViolation',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改宿舍违纪记录
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateDormViolation = (data: DormViolationForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/dormViolation/dormViolation',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除宿舍违纪记录
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delDormViolation = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/dormViolation/dormViolation/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取学生选择器选项列表(支持按学号、姓名检索)
|
||||||
|
* @param query 查询参数
|
||||||
|
* @returns 学生选项列表
|
||||||
|
*/
|
||||||
|
export const getStudentOptions = (query?: StudentOptionQuery): AxiosPromise<{
|
||||||
|
total: number;
|
||||||
|
rows: StudentOptionVO[];
|
||||||
|
}> => {
|
||||||
|
return request({
|
||||||
|
url: '/holidayStay/holidayStay/studentOptions',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取校区选项列表
|
||||||
|
* @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
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定房间的床位选项列表
|
||||||
|
* @param roomId 房间ID
|
||||||
|
* @returns 床位选项列表
|
||||||
|
*/
|
||||||
|
export const getBedOptions = (roomId?: string | number): AxiosPromise<any[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/dormbed/dormBed/list',
|
||||||
|
method: 'get',
|
||||||
|
params: roomId ? { roomId } : undefined
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -0,0 +1,483 @@
|
|||||||
|
export interface DormViolationVO {
|
||||||
|
/**
|
||||||
|
* 违纪记录ID(主键)
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生ID
|
||||||
|
*/
|
||||||
|
studentId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生姓名
|
||||||
|
*/
|
||||||
|
studentName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学号
|
||||||
|
*/
|
||||||
|
studentNo: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院ID
|
||||||
|
*/
|
||||||
|
collegeId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院名称
|
||||||
|
*/
|
||||||
|
collegeName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业ID
|
||||||
|
*/
|
||||||
|
majorId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业名称
|
||||||
|
*/
|
||||||
|
majorName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级ID
|
||||||
|
*/
|
||||||
|
classId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级名称
|
||||||
|
*/
|
||||||
|
className: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区ID
|
||||||
|
*/
|
||||||
|
campusId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区名称
|
||||||
|
*/
|
||||||
|
campusName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域ID
|
||||||
|
*/
|
||||||
|
areaId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域名称
|
||||||
|
*/
|
||||||
|
areaName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼ID
|
||||||
|
*/
|
||||||
|
buildingId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼名称
|
||||||
|
*/
|
||||||
|
buildingName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍房间ID
|
||||||
|
*/
|
||||||
|
roomId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间名称
|
||||||
|
*/
|
||||||
|
roomName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位ID
|
||||||
|
*/
|
||||||
|
bedId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位名称
|
||||||
|
*/
|
||||||
|
bedName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪类型
|
||||||
|
*/
|
||||||
|
violationType: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪等级:1轻微 2一般 3严重 4特别严重
|
||||||
|
*/
|
||||||
|
violationLevel: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪发生时间
|
||||||
|
*/
|
||||||
|
violationTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪行为描述
|
||||||
|
*/
|
||||||
|
violationDescription: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉及其他学生id(逗号分隔)
|
||||||
|
*/
|
||||||
|
involvedStudents: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件OSS ID列表(逗号分隔)
|
||||||
|
*/
|
||||||
|
attachmentOssIds: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0代表存在 1代表删除)
|
||||||
|
*/
|
||||||
|
deleted: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DormViolationForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 违纪记录ID(主键)
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生ID
|
||||||
|
*/
|
||||||
|
studentId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生姓名
|
||||||
|
*/
|
||||||
|
studentName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学号
|
||||||
|
*/
|
||||||
|
studentNo?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院ID
|
||||||
|
*/
|
||||||
|
collegeId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院名称
|
||||||
|
*/
|
||||||
|
collegeName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业ID
|
||||||
|
*/
|
||||||
|
majorId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业名称
|
||||||
|
*/
|
||||||
|
majorName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级ID
|
||||||
|
*/
|
||||||
|
classId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级名称
|
||||||
|
*/
|
||||||
|
className?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区ID
|
||||||
|
*/
|
||||||
|
campusId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区名称
|
||||||
|
*/
|
||||||
|
campusName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域ID
|
||||||
|
*/
|
||||||
|
areaId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域名称
|
||||||
|
*/
|
||||||
|
areaName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼ID
|
||||||
|
*/
|
||||||
|
buildingId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼名称
|
||||||
|
*/
|
||||||
|
buildingName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍房间ID
|
||||||
|
*/
|
||||||
|
roomId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间名称
|
||||||
|
*/
|
||||||
|
roomName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位ID
|
||||||
|
*/
|
||||||
|
bedId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位名称
|
||||||
|
*/
|
||||||
|
bedName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪类型
|
||||||
|
*/
|
||||||
|
violationType?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪等级:1轻微 2一般 3严重 4特别严重
|
||||||
|
*/
|
||||||
|
violationLevel?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪发生时间
|
||||||
|
*/
|
||||||
|
violationTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪行为描述
|
||||||
|
*/
|
||||||
|
violationDescription?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉及其他学生id(逗号分隔)
|
||||||
|
*/
|
||||||
|
involvedStudents?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件OSS ID列表(逗号分隔)
|
||||||
|
*/
|
||||||
|
attachmentOssIds?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0代表存在 1代表删除)
|
||||||
|
*/
|
||||||
|
deleted?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DormViolationQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生ID
|
||||||
|
*/
|
||||||
|
studentId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学生姓名
|
||||||
|
*/
|
||||||
|
studentName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学号
|
||||||
|
*/
|
||||||
|
studentNo?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院ID
|
||||||
|
*/
|
||||||
|
collegeId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 学院名称
|
||||||
|
*/
|
||||||
|
collegeName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业ID
|
||||||
|
*/
|
||||||
|
majorId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专业名称
|
||||||
|
*/
|
||||||
|
majorName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级ID
|
||||||
|
*/
|
||||||
|
classId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班级名称
|
||||||
|
*/
|
||||||
|
className?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区ID
|
||||||
|
*/
|
||||||
|
campusId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校区名称
|
||||||
|
*/
|
||||||
|
campusName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域ID
|
||||||
|
*/
|
||||||
|
areaId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍区域名称
|
||||||
|
*/
|
||||||
|
areaName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼ID
|
||||||
|
*/
|
||||||
|
buildingId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍楼名称
|
||||||
|
*/
|
||||||
|
buildingName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宿舍房间ID
|
||||||
|
*/
|
||||||
|
roomId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 房间名称
|
||||||
|
*/
|
||||||
|
roomName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位ID
|
||||||
|
*/
|
||||||
|
bedId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 床位名称
|
||||||
|
*/
|
||||||
|
bedName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪类型
|
||||||
|
*/
|
||||||
|
violationType?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪等级:1轻微 2一般 3严重 4特别严重
|
||||||
|
*/
|
||||||
|
violationLevel?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪发生时间
|
||||||
|
*/
|
||||||
|
violationTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 违纪行为描述
|
||||||
|
*/
|
||||||
|
violationDescription?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉及其他学生id(逗号分隔)
|
||||||
|
*/
|
||||||
|
involvedStudents?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件OSS ID列表(逗号分隔)
|
||||||
|
*/
|
||||||
|
attachmentOssIds?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志(0代表存在 1代表删除)
|
||||||
|
*/
|
||||||
|
deleted?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 学生选择相关类型
|
||||||
|
export interface StudentOptionVO {
|
||||||
|
id: string | number;
|
||||||
|
name: string;
|
||||||
|
studentNo: string;
|
||||||
|
gender: string;
|
||||||
|
collegeId?: string | number;
|
||||||
|
collegeName?: string;
|
||||||
|
majorId?: string | number;
|
||||||
|
majorName?: string;
|
||||||
|
classId?: string | number;
|
||||||
|
className?: string;
|
||||||
|
phone?: string;
|
||||||
|
dormInfo?: {
|
||||||
|
campusId?: string | number;
|
||||||
|
campusName?: string;
|
||||||
|
areaId?: string | number;
|
||||||
|
areaName?: string;
|
||||||
|
buildingId?: string | number;
|
||||||
|
buildingName?: string;
|
||||||
|
roomId?: string | number;
|
||||||
|
roomName?: string;
|
||||||
|
bedId?: string | number;
|
||||||
|
bedName?: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StudentOptionQuery extends PageQuery {
|
||||||
|
keyword?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 宿舍级联选择相关类型
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface BedOptionVO {
|
||||||
|
id: string | number;
|
||||||
|
bedName: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user