提交代码

This commit is contained in:
zlwu committed 2025-09-06 21:47:34 +08:00
1 parent 2fa8df6934
commit 49a16d130e
4 files changed
+136 -2

No files matched your search

@@ -82,4 +82,12 @@ public interface IXgHygieneCheckViolationService {
*/
List<XgHygieneCheckViolationVo> queryByHygieneCheckId(Long hygieneCheckId);
/**
* 根据卫生检查ID删除违纪关联记录
*
* @param hygieneCheckId 卫生检查ID
* @return 是否删除成功
*/
Boolean deleteByHygieneCheckId(Long hygieneCheckId);
}
@@ -25,6 +25,7 @@ import org.dromara.xg.mapper.XgDormHygieneStudentScoreMapper;
import org.dromara.xg.service.IXgDormHygieneCheckService;
import org.dromara.xg.service.IXgStudentMsgService;
import org.dromara.xg.service.IXgHygieneCheckViolationService;
import org.dromara.xg.service.IXgDormHygieneStudentScoreService;
import org.dromara.xg.mapper.XgHygieneCheckViolationMapper;
import org.dromara.system.service.ISysDictDataService;
import org.springframework.context.ApplicationContext;
@@ -57,6 +58,7 @@ public class XgDormHygieneCheckServiceImpl implements IXgDormHygieneCheckService
private final IXgStudentMsgService xgStudentMsgService;
private final ISysDictDataService sysDictDataService;
private final IXgHygieneCheckViolationService violationService;
private final IXgDormHygieneStudentScoreService studentScoreService;
private final XgHygieneCheckViolationMapper violationMapper;
private final ApplicationContext applicationContext;
@@ -170,18 +172,60 @@ public class XgDormHygieneCheckServiceImpl implements IXgDormHygieneCheckService
}
/**
* 校验并批量删除宿舍卫生检查信息
* 校验并批量删除宿舍卫生检查信息(级联删除四个表)
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
// TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
try {
// 逐个处理每个卫生检查记录的级联删除
for (Long checkId : ids) {
log.info("开始级联删除宿舍卫生检查记录,检查ID: {}", checkId);
// 1. 查询并删除关联的违纪记录
List<XgHygieneCheckViolationVo> violations = violationService.queryByHygieneCheckId(checkId);
if (!violations.isEmpty()) {
log.info("发现 {} 条违纪关联记录需要删除,检查ID: {}", violations.size(), checkId);
// 1.1 删除统一违纪记录 (xskh_discipline_record)
for (XgHygieneCheckViolationVo violation : violations) {
if (violation.getDisciplineRecordId() != null) {
deleteDisciplineRecord(violation.getDisciplineRecordId());
}
}
// 1.2 删除违纪关联记录 (xg_hygiene_check_violation)
violationService.deleteByHygieneCheckId(checkId);
log.info("删除违纪关联记录完成,检查ID: {}", checkId);
}
// 2. 删除学生评分记录 (xg_dorm_hygiene_student_score)
Boolean studentScoreDeleted = studentScoreService.deleteByHygieneCheckId(checkId);
if (studentScoreDeleted) {
log.info("删除学生评分记录完成,检查ID: {}", checkId);
}
}
// 3. 删除主检查记录 (xg_dorm_hygiene_check)
Boolean mainDeleted = baseMapper.deleteByIds(ids) > 0;
if (mainDeleted) {
log.info("删除宿舍卫生检查主记录完成,删除数量: {}", ids.size());
}
return mainDeleted;
} catch (Exception e) {
log.error("级联删除宿舍卫生检查记录失败,检查IDs: {}, 错误: {}", ids, e.getMessage(), e);
throw new RuntimeException("删除宿舍卫生检查记录失败: " + e.getMessage(), e);
}
}
/**
@@ -177,4 +177,17 @@ public class XgHygieneCheckViolationServiceImpl implements IXgHygieneCheckViolat
lqw.eq(XgHygieneCheckViolation::getHygieneCheckId, hygieneCheckId);
return baseMapper.selectVoList(lqw);
}
/**
* 根据卫生检查ID删除违纪关联记录
*
* @param hygieneCheckId 卫生检查ID
* @return 是否删除成功
*/
@Override
public Boolean deleteByHygieneCheckId(Long hygieneCheckId) {
LambdaQueryWrapper<XgHygieneCheckViolation> lqw = Wrappers.lambdaQuery();
lqw.eq(XgHygieneCheckViolation::getHygieneCheckId, hygieneCheckId);
return baseMapper.delete(lqw) > 0;
}
}
@@ -329,6 +329,75 @@ public interface DormHygieneStudentScoreMapper extends BaseMapperPlus<DormHygien
3. 学生数据变更:测试学生数据的增删改
4. 历史数据:验证历史数据保留
### 3. 删除宿舍卫生检查(四表级联删除)
**接口地址:** `DELETE /dormHygieneCheck/dormHygieneCheck/{ids}`
**接口描述:** 删除宿舍卫生检查记录,自动级联删除四个相关表的数据
**涉及表结构:**
1. `xg_dorm_hygiene_check` - 宿舍卫生检查主表
2. `xg_dorm_hygiene_student_score` - 学生卫生评分表
3. `xg_hygiene_check_violation` - 卫生检查违纪关联表
4. `xskh_discipline_record` - 学生违纪处分记录表(统一违纪表)
**请求参数:**
- `ids`: 待删除的检查记录ID,支持单个或多个,用逗号分隔
**请求示例:**
```http
DELETE /dormHygieneCheck/dormHygieneCheck/1
DELETE /dormHygieneCheck/dormHygieneCheck/1,2,3
```
**删除逻辑顺序:**
1. **查询关联违纪记录** - 根据检查ID查询 `xg_hygiene_check_violation` 表
2. **删除统一违纪记录** - 逻辑删除 `xskh_discipline_record` 表中的违纪处分记录
3. **删除违纪关联记录** - 逻辑删除 `xg_hygiene_check_violation` 表中的关联记录
4. **删除学生评分记录** - 逻辑删除 `xg_dorm_hygiene_student_score` 表中的评分记录
5. **删除主检查记录** - 逻辑删除 `xg_dorm_hygiene_check` 主表记录
**技术实现要点:**
- ✅ **事务管理**: 使用 `@Transactional` 确保四表删除的原子性
- ✅ **逻辑删除**: 所有表都使用逻辑删除(`deleted = 1`),不物理删除数据
- ✅ **跨模块调用**: 通过反射动态调用学生考核管理模块的删除方法
- ✅ **异常处理**: 优雅处理学生考核管理模块未启用的情况
- ✅ **日志记录**: 详细记录每个步骤的删除过程和结果
**响应格式:**
```json
{
"code": 200,
"msg": "删除成功",
"data": null
}
```
**错误响应:**
```json
{
"code": 500,
"msg": "删除宿舍卫生检查记录失败: 具体错误信息",
"data": null
}
```
**权限要求:**
- 需要 `dormHygieneCheck:dormHygieneCheck:remove` 权限
**注意事项:**
1. **数据完整性**: 删除操作会级联删除所有相关数据,请谨慎操作
2. **跨模块依赖**: 需要确保学生考核管理模块(xskh)正常运行
3. **事务回滚**: 任何一个表删除失败都会导致整个操作回滚
4. **日志追踪**: 所有删除操作都有详细日志记录,便于问题排查
### 删除测试
1. **正常删除**: 删除存在关联数据的检查记录
2. **级联验证**: 验证四个表的数据都已正确删除
3. **事务测试**: 测试删除过程中的异常回滚
4. **权限测试**: 测试不同用户的删除权限
5. **跨模块测试**: 测试学生考核管理模块未启用时的降级处理
---
**文档版本:** v1.0