|
|
@@ -10,11 +10,17 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.dromara.xg.domain.bo.XgDormHygieneCheckBo;
|
|
|
+import org.dromara.xg.domain.bo.XgDormHygieneCheckCompleteBo;
|
|
|
+import org.dromara.xg.domain.bo.XgDormHygieneStudentScoreBo;
|
|
|
import org.dromara.xg.domain.vo.XgDormHygieneCheckVo;
|
|
|
import org.dromara.xg.domain.XgDormHygieneCheck;
|
|
|
+import org.dromara.xg.domain.XgDormHygieneStudentScore;
|
|
|
import org.dromara.xg.mapper.XgDormHygieneCheckMapper;
|
|
|
+import org.dromara.xg.mapper.XgDormHygieneStudentScoreMapper;
|
|
|
import org.dromara.xg.service.IXgDormHygieneCheckService;
|
|
|
+import org.dromara.xg.service.IXgStudentMsgService;
|
|
|
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
@@ -32,6 +38,8 @@ import java.util.Collection;
|
|
|
public class XgDormHygieneCheckServiceImpl implements IXgDormHygieneCheckService {
|
|
|
|
|
|
private final XgDormHygieneCheckMapper baseMapper;
|
|
|
+ private final XgDormHygieneStudentScoreMapper studentScoreMapper;
|
|
|
+ private final IXgStudentMsgService xgStudentMsgService;
|
|
|
|
|
|
/**
|
|
|
* 查询宿舍卫生检查
|
|
|
@@ -40,7 +48,7 @@ public class XgDormHygieneCheckServiceImpl implements IXgDormHygieneCheckService
|
|
|
* @return 宿舍卫生检查
|
|
|
*/
|
|
|
@Override
|
|
|
- public XgDormHygieneCheckVo queryById(Long id){
|
|
|
+ public XgDormHygieneCheckVo queryById(Long id) {
|
|
|
return baseMapper.selectVoById(id);
|
|
|
}
|
|
|
|
|
|
@@ -85,17 +93,22 @@ public class XgDormHygieneCheckServiceImpl implements IXgDormHygieneCheckService
|
|
|
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.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());
|
|
|
+ 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;
|
|
|
}
|
|
|
|
|
|
@@ -132,8 +145,8 @@ public class XgDormHygieneCheckServiceImpl implements IXgDormHygieneCheckService
|
|
|
/**
|
|
|
* 保存前的数据校验
|
|
|
*/
|
|
|
- private void validEntityBeforeSave(XgDormHygieneCheck entity){
|
|
|
- //TODO 做一些数据校验,如唯一约束
|
|
|
+ private void validEntityBeforeSave(XgDormHygieneCheck entity) {
|
|
|
+ // TODO 做一些数据校验,如唯一约束
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -145,9 +158,187 @@ public class XgDormHygieneCheckServiceImpl implements IXgDormHygieneCheckService
|
|
|
*/
|
|
|
@Override
|
|
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
|
|
- if(isValid){
|
|
|
- //TODO 做一些业务上的校验,判断是否需要校验
|
|
|
+ if (isValid) {
|
|
|
+ // TODO 做一些业务上的校验,判断是否需要校验
|
|
|
}
|
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增宿舍卫生检查(包含学生评分数据)
|
|
|
+ *
|
|
|
+ * @param bo 完整的宿舍卫生检查数据,包含学生评分信息
|
|
|
+ * @return 是否新增成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean insertWithStudentScores(XgDormHygieneCheckCompleteBo bo) {
|
|
|
+ // 1. 转换并保存主表数据
|
|
|
+ XgDormHygieneCheck add = MapstructUtils.convert(bo, XgDormHygieneCheck.class);
|
|
|
+ validEntityBeforeSave(add);
|
|
|
+ boolean flag = baseMapper.insert(add) > 0;
|
|
|
+ log.info("add: {}", add);
|
|
|
+ log.info("bo: {}", bo);
|
|
|
+ log.info("flag: {}", flag);
|
|
|
+
|
|
|
+ if (flag && bo.getStudentScores() != null && !bo.getStudentScores().isEmpty()) {
|
|
|
+ // 2. 保存学生评分数据
|
|
|
+ for (XgDormHygieneStudentScoreBo studentScoreBo : bo.getStudentScores()) {
|
|
|
+ XgDormHygieneStudentScore studentScore = MapstructUtils.convert(studentScoreBo,
|
|
|
+ XgDormHygieneStudentScore.class);
|
|
|
+ studentScore.setHygieneCheckId(add.getId());
|
|
|
+
|
|
|
+ // 根据学生ID查询学生完整信息,补充学院、专业、班级信息
|
|
|
+ if (studentScoreBo.getStudentId() != null) {
|
|
|
+ try {
|
|
|
+ var studentInfo = xgStudentMsgService.queryById(studentScoreBo.getStudentId());
|
|
|
+ if (studentInfo != null) {
|
|
|
+ // 补充学院信息
|
|
|
+ if (studentScore.getCollegeId() == null
|
|
|
+ && StringUtils.isNotBlank(studentInfo.getCollegeId())) {
|
|
|
+ try {
|
|
|
+ studentScore.setCollegeId(Long.valueOf(studentInfo.getCollegeId()));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ log.warn("学院ID转换失败,学生ID: {}, 学院ID: {}", studentScoreBo.getStudentId(),
|
|
|
+ studentInfo.getCollegeId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(studentScore.getCollegeName())) {
|
|
|
+ studentScore.setCollegeName(studentInfo.getCollegeName());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 补充专业信息
|
|
|
+ if (studentScore.getMajorId() == null && StringUtils.isNotBlank(studentInfo.getMajorId())) {
|
|
|
+ try {
|
|
|
+ studentScore.setMajorId(Long.valueOf(studentInfo.getMajorId()));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ log.warn("专业ID转换失败,学生ID: {}, 专业ID: {}", studentScoreBo.getStudentId(),
|
|
|
+ studentInfo.getMajorId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(studentScore.getMajorName())) {
|
|
|
+ studentScore.setMajorName(studentInfo.getMajorName());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 补充班级信息
|
|
|
+ if (studentScore.getClassId() == null && StringUtils.isNotBlank(studentInfo.getClassId())) {
|
|
|
+ try {
|
|
|
+ studentScore.setClassId(Long.valueOf(studentInfo.getClassId()));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ log.warn("班级ID转换失败,学生ID: {}, 班级ID: {}", studentScoreBo.getStudentId(),
|
|
|
+ studentInfo.getClassId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(studentScore.getClassName())) {
|
|
|
+ studentScore.setClassName(studentInfo.getClassName());
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("补充学生信息 - 学生ID: {}, 学院: {}, 专业: {}, 班级: {}",
|
|
|
+ studentScoreBo.getStudentId(),
|
|
|
+ studentInfo.getCollegeName(),
|
|
|
+ studentInfo.getMajorName(),
|
|
|
+ studentInfo.getClassName());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("查询学生信息失败,学生ID: {}, 错误: {}", studentScoreBo.getStudentId(), e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("studentScore: {}", studentScore);
|
|
|
+ log.info("studentScoreBo: {}", studentScoreBo);
|
|
|
+ studentScoreMapper.insert(studentScore);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改宿舍卫生检查(包含学生评分数据)
|
|
|
+ *
|
|
|
+ * @param bo 完整的宿舍卫生检查数据,包含学生评分信息
|
|
|
+ * @return 是否修改成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean updateWithStudentScores(XgDormHygieneCheckCompleteBo bo) {
|
|
|
+ // 1. 更新主表数据
|
|
|
+ XgDormHygieneCheck update = MapstructUtils.convert(bo, XgDormHygieneCheck.class);
|
|
|
+ validEntityBeforeSave(update);
|
|
|
+ boolean flag = baseMapper.updateById(update) > 0;
|
|
|
+
|
|
|
+ if (flag && bo.getStudentScores() != null && !bo.getStudentScores().isEmpty()) {
|
|
|
+ // 2. 逻辑删除原有学生评分记录
|
|
|
+ LambdaQueryWrapper<XgDormHygieneStudentScore> deleteWrapper = Wrappers.lambdaQuery();
|
|
|
+ deleteWrapper.eq(XgDormHygieneStudentScore::getHygieneCheckId, bo.getId());
|
|
|
+ studentScoreMapper.delete(deleteWrapper);
|
|
|
+
|
|
|
+ // 3. 插入新的学生评分记录
|
|
|
+ for (XgDormHygieneStudentScoreBo studentScoreBo : bo.getStudentScores()) {
|
|
|
+ XgDormHygieneStudentScore studentScore = MapstructUtils.convert(studentScoreBo,
|
|
|
+ XgDormHygieneStudentScore.class);
|
|
|
+ studentScore.setHygieneCheckId(bo.getId());
|
|
|
+ studentScore.setId(null);
|
|
|
+ // 根据学生ID查询学生完整信息,补充学院、专业、班级信息
|
|
|
+ if (studentScoreBo.getStudentId() != null) {
|
|
|
+ try {
|
|
|
+ var studentInfo = xgStudentMsgService.queryById(studentScoreBo.getStudentId());
|
|
|
+ if (studentInfo != null) {
|
|
|
+ // 补充学院信息
|
|
|
+ if (studentScore.getCollegeId() == null
|
|
|
+ && StringUtils.isNotBlank(studentInfo.getCollegeId())) {
|
|
|
+ try {
|
|
|
+ studentScore.setCollegeId(Long.valueOf(studentInfo.getCollegeId()));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ log.warn("学院ID转换失败,学生ID: {}, 学院ID: {}", studentScoreBo.getStudentId(),
|
|
|
+ studentInfo.getCollegeId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(studentScore.getCollegeName())) {
|
|
|
+ studentScore.setCollegeName(studentInfo.getCollegeName());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 补充专业信息
|
|
|
+ if (studentScore.getMajorId() == null && StringUtils.isNotBlank(studentInfo.getMajorId())) {
|
|
|
+ try {
|
|
|
+ studentScore.setMajorId(Long.valueOf(studentInfo.getMajorId()));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ log.warn("专业ID转换失败,学生ID: {}, 专业ID: {}", studentScoreBo.getStudentId(),
|
|
|
+ studentInfo.getMajorId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(studentScore.getMajorName())) {
|
|
|
+ studentScore.setMajorName(studentInfo.getMajorName());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 补充班级信息
|
|
|
+ if (studentScore.getClassId() == null && StringUtils.isNotBlank(studentInfo.getClassId())) {
|
|
|
+ try {
|
|
|
+ studentScore.setClassId(Long.valueOf(studentInfo.getClassId()));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ log.warn("班级ID转换失败,学生ID: {}, 班级ID: {}", studentScoreBo.getStudentId(),
|
|
|
+ studentInfo.getClassId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(studentScore.getClassName())) {
|
|
|
+ studentScore.setClassName(studentInfo.getClassName());
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("更新时补充学生信息 - 学生ID: {}, 学院: {}, 专业: {}, 班级: {}",
|
|
|
+ studentScoreBo.getStudentId(),
|
|
|
+ studentInfo.getCollegeName(),
|
|
|
+ studentInfo.getMajorName(),
|
|
|
+ studentInfo.getClassName());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("查询学生信息失败,学生ID: {}, 错误: {}", studentScoreBo.getStudentId(), e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ studentScoreMapper.insert(studentScore);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
}
|