提交代码
This commit is contained in:
1 parent
2fa8df6934
commit
49a16d130e
4 files changed
+136
-2
No files matched your search
+8
@@ -82,4 +82,12 @@ public interface IXgHygieneCheckViolationService {
|
||||
*/
|
||||
List<XgHygieneCheckViolationVo> queryByHygieneCheckId(Long hygieneCheckId);
|
||||
|
||||
/**
|
||||
* 根据卫生检查ID删除违纪关联记录
|
||||
*
|
||||
* @param hygieneCheckId 卫生检查ID
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteByHygieneCheckId(Long hygieneCheckId);
|
||||
|
||||
}
|
||||
+46
-2
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+13
@@ -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
|
||||
|
||||
Reference in new issue
Block a user