diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/questioninfo/QuestionInfoController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/questioninfo/QuestionInfoController.java index f5666912..11175699 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/questioninfo/QuestionInfoController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/questioninfo/QuestionInfoController.java @@ -59,7 +59,10 @@ public class QuestionInfoController extends BaseController { @PreAuthorize("@ss.hasPermi('system:question:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { - return AjaxResult.success(questionInfoService.selectQuestionInfoById(id)); + if (Objects.isNull(id)) { + return AjaxResult.success(); + } + return questionInfoService.selectQuestionInfoById(id); } /** @@ -81,8 +84,8 @@ public class QuestionInfoController extends BaseController { @PreAuthorize("@ss.hasPermi('system:question:edit')") @Log(title = "问卷基本信息", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody QuestionInfo questionInfo) { - return toAjax(questionInfoService.updateQuestionInfo(questionInfo)); + public AjaxResult edit(@RequestBody QuestionVO question) { + return questionInfoService.updateQuestionInfo(question); } /** @@ -91,7 +94,7 @@ public class QuestionInfoController extends BaseController { @PreAuthorize("@ss.hasPermi('system:question:remove')") @Log(title = "问卷基本信息", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(questionInfoService.deleteQuestionInfoByIds(ids)); + public AjaxResult remove(@PathVariable Long id) { + return toAjax(questionInfoService.deleteQuestionInfoById(id)); } } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubject/QuestionSubjectMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubject/QuestionSubjectMapper.java index a403b617..aec4ec82 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubject/QuestionSubjectMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubject/QuestionSubjectMapper.java @@ -1,6 +1,7 @@ package com.xinelu.manage.mapper.questionsubject; import com.xinelu.manage.domain.questionsubject.QuestionSubject; +import com.xinelu.manage.vo.questionsubject.QuestionSubjectVO; import java.util.List; @@ -61,9 +62,26 @@ public interface QuestionSubjectMapper { int deleteQuestionSubjectByIds(Long[] ids); /** + * 批量新增问卷题目信息表 * - * @param questionSubjectList - * @return + * @param questionSubjectList 问卷题目信息 + * @return 数量 */ int insertQuestionSubjectList(List questionSubjectList); + + /** + * 查询问卷题目信息列表 + * + * @param questionInfoId 问卷题目信息 + * @return 问卷题目信息集合 + */ + List selectQuestionSubjectBy(Long questionInfoId); + + /** + * 删除问卷题目信息 + * + * @param questionInfoId 问卷题目信息主键 + * @return 结果 + */ + int deleteSubjectByQuestionInfoId(Long questionInfoId); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubjectoption/QuestionSubjectOptionMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubjectoption/QuestionSubjectOptionMapper.java index 93d2d4fa..8235df48 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubjectoption/QuestionSubjectOptionMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubjectoption/QuestionSubjectOptionMapper.java @@ -1,6 +1,8 @@ package com.xinelu.manage.mapper.questionsubjectoption; import com.xinelu.manage.domain.questionsubjectoption.QuestionSubjectOption; +import com.xinelu.manage.vo.questionsubjectoption.QuestionSubjectOptionVO; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -59,4 +61,28 @@ public interface QuestionSubjectOptionMapper { * @return 结果 */ int deleteQuestionSubjectOptionByIds(Long[] ids); + + /** + * 批量新增问卷题目信息表 + * + * @param saveQuestionSubjectOptions 问卷题目信息 + * @return 数量 + */ + int insertQuestionSubjectOptionList(List saveQuestionSubjectOptions); + + /** + * 根据题目表id查询选项表信息 + * + * @param questionSubjectIds 题目表id + * @return QuestionSubjectOptionVO + */ + List selectQuestionSubjectOptions(@Param("questionSubjectIds") List questionSubjectIds); + + /** + * 根据题目表id删除选项表信息 + * + * @param questionSubjectIds 题目表id + * @return int + */ + int deleteOptionByQuestionSubjectIds(List questionSubjectIds); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/questioninfo/IQuestionInfoService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/questioninfo/IQuestionInfoService.java index 8ca51515..2c7ddca9 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/questioninfo/IQuestionInfoService.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/questioninfo/IQuestionInfoService.java @@ -20,7 +20,7 @@ public interface IQuestionInfoService { * @param id 问卷基本信息主键 * @return 问卷基本信息 */ - QuestionInfo selectQuestionInfoById(Long id); + AjaxResult selectQuestionInfoById(Long id); /** * 查询问卷基本信息列表 @@ -41,10 +41,10 @@ public interface IQuestionInfoService { /** * 修改问卷基本信息 * - * @param questionInfo 问卷基本信息 + * @param question 问卷基本信息 * @return 结果 */ - int updateQuestionInfo(QuestionInfo questionInfo); + AjaxResult updateQuestionInfo(QuestionVO question); /** * 批量删除问卷基本信息 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/questioninfo/impl/QuestionInfoServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/questioninfo/impl/QuestionInfoServiceImpl.java index d6b15438..f7362dab 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/questioninfo/impl/QuestionInfoServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/questioninfo/impl/QuestionInfoServiceImpl.java @@ -9,17 +9,21 @@ import com.xinelu.manage.domain.questionsubject.QuestionSubject; import com.xinelu.manage.domain.questionsubjectoption.QuestionSubjectOption; import com.xinelu.manage.mapper.questioninfo.QuestionInfoMapper; import com.xinelu.manage.mapper.questionsubject.QuestionSubjectMapper; +import com.xinelu.manage.mapper.questionsubjectoption.QuestionSubjectOptionMapper; import com.xinelu.manage.service.questioninfo.IQuestionInfoService; import com.xinelu.manage.vo.questionInfo.QuestionVO; import com.xinelu.manage.vo.questionsubject.QuestionSubjectVO; import com.xinelu.manage.vo.questionsubjectoption.QuestionSubjectOptionVO; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * 问卷基本信息Service业务层处理 @@ -34,11 +38,34 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService { private QuestionInfoMapper questionInfoMapper; @Resource private QuestionSubjectMapper questionSubjectMapper; + @Resource + private QuestionSubjectOptionMapper questionSubjectOptionMapper; @Override - public QuestionInfo selectQuestionInfoById(Long id) { - return questionInfoMapper.selectQuestionInfoById(id); + public AjaxResult selectQuestionInfoById(Long id) { + //查询问卷表 + QuestionInfo questionInfo = questionInfoMapper.selectQuestionInfoById(id); + if (Objects.isNull(questionInfo)) { + return AjaxResult.error("该问卷信息已不存在!"); + } + //查询题目表 + QuestionVO questionVO = new QuestionVO(); + BeanUtils.copyBeanProp(questionVO, questionInfo); + List questionSubjects = questionSubjectMapper.selectQuestionSubjectBy(id); + List questionSubjectIds = questionSubjects.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getId())).map(QuestionSubject::getId).collect(Collectors.toList()); + if (questionSubjectIds.size() == 0) { + questionVO.setQuestionSubjectList(questionSubjects); + return AjaxResult.success(questionVO); + } + //查询选项表 + List questionSubjectOptions = questionSubjectOptionMapper.selectQuestionSubjectOptions(questionSubjectIds); + for (QuestionSubjectVO questionSubject : questionSubjects) { + List collect = questionSubjectOptions.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getQuestionnaireSubjectId()) && questionSubject.getId().equals(item.getQuestionnaireSubjectId())).collect(Collectors.toList()); + questionSubject.setQuestionSubjectOptionList(collect); + } + questionVO.setQuestionSubjectList(questionSubjects); + return AjaxResult.success(questionVO); } /** @@ -58,8 +85,10 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService { * @param question 问卷基本信息 * @return 结果 */ + @Transactional(rollbackFor = Exception.class) @Override public AjaxResult insertQuestionInfo(QuestionVO question) { + //新增问卷表 QuestionInfo questionInfo = new QuestionInfo(); BeanUtils.copyBeanProp(questionInfo, question); questionInfo.setCreateTime(DateUtils.getNowDate()); @@ -69,6 +98,7 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService { log.info("新增问卷表失败," + questionInfo); throw new SecurityException("新增问卷失败!请联系管理员!"); } + //新增题目表 List questionSubjectList = question.getQuestionSubjectList(); List questionSubjects = new ArrayList<>(); List questionSubjectOptions = new ArrayList<>(); @@ -86,7 +116,8 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService { log.info("新增问卷题目表失败," + questionSubjects); throw new SecurityException("新增问卷失败!请联系管理员!"); } - ArrayList saveQuestionSubjectOptions = new ArrayList<>(); + //新增选项表 + List saveQuestionSubjectOptions = new ArrayList<>(); QuestionSubjectOption saveQuestionSubjectOption = new QuestionSubjectOption(); for (QuestionSubjectOptionVO questionSubjectOption : questionSubjectOptions) { BeanUtils.copyBeanProp(saveQuestionSubjectOption, questionSubjectOption); @@ -96,20 +127,82 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService { saveQuestionSubjectOption.setCreateBy(SecurityUtils.getUsername()); saveQuestionSubjectOptions.add(questionSubjectOption); } - + int subjectOptionCount = questionSubjectOptionMapper.insertQuestionSubjectOptionList(saveQuestionSubjectOptions); + if (subjectOptionCount <= 0) { + log.info("新增问卷答案表失败," + questionSubjects); + throw new SecurityException("新增问卷失败!请联系管理员!"); + } return AjaxResult.success(); } /** * 修改问卷基本信息 * - * @param questionInfo 问卷基本信息 + * @param question 问卷基本信息 * @return 结果 */ + @Transactional(rollbackFor = Exception.class) @Override - public int updateQuestionInfo(QuestionInfo questionInfo) { + public AjaxResult updateQuestionInfo(QuestionVO question) { + //新增问卷表 + QuestionInfo questionInfo = new QuestionInfo(); + BeanUtils.copyBeanProp(questionInfo, question); questionInfo.setUpdateTime(DateUtils.getNowDate()); - return questionInfoMapper.updateQuestionInfo(questionInfo); + questionInfo.setUpdateBy(SecurityUtils.getUsername()); + int questionCount = questionInfoMapper.updateQuestionInfo(questionInfo); + if (questionCount <= 0) { + log.info("修改问卷表失败," + questionInfo); + throw new SecurityException("修改问卷失败!请联系管理员!"); + } + //查询题目及选项表id 根据上级id删除 + List originalSubjectList = questionSubjectMapper.selectQuestionSubjectBy(question.getId()); + if (CollectionUtils.isNotEmpty(originalSubjectList)) { + List originalSubjectIds = originalSubjectList.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getId())).map(QuestionSubject::getId).collect(Collectors.toList()); + int deleteQuestionCount = questionSubjectMapper.deleteSubjectByQuestionInfoId(question.getId()); + if (deleteQuestionCount < 0) { + log.info("删除问卷题目表失败"); + throw new SecurityException("修改问卷失败!请联系管理员!"); + } + int deleteOptionIds = questionSubjectOptionMapper.deleteOptionByQuestionSubjectIds(originalSubjectIds); + if (deleteOptionIds < 0) { + log.info("删除问卷选项表失败"); + throw new SecurityException("修改问卷失败!请联系管理员!"); + } + } + //新增问卷表及题目表 + List questionSubjectList = question.getQuestionSubjectList(); + List questionSubjects = new ArrayList<>(); + List questionSubjectOptions = new ArrayList<>(); + QuestionSubject saveQuestionSubject = new QuestionSubject(); + for (QuestionSubjectVO questionSubject : questionSubjectList) { + BeanUtils.copyBeanProp(saveQuestionSubject, questionSubject); + saveQuestionSubject.setQuestionInfoId(questionInfo.getId()); + saveQuestionSubject.setCreateTime(DateUtils.getNowDate()); + saveQuestionSubject.setCreateBy(SecurityUtils.getUsername()); + questionSubjects.add(saveQuestionSubject); + questionSubjectOptions.addAll(questionSubject.getQuestionSubjectOptionList()); + } + int questionSubjectCount = questionSubjectMapper.insertQuestionSubjectList(questionSubjects); + if (questionSubjectCount <= 0) { + log.info("修改问卷题目表失败," + questionSubjects); + throw new SecurityException("修改问卷失败!请联系管理员!"); + } + List saveQuestionSubjectOptions = new ArrayList<>(); + QuestionSubjectOption saveQuestionSubjectOption = new QuestionSubjectOption(); + for (QuestionSubjectOptionVO questionSubjectOption : questionSubjectOptions) { + BeanUtils.copyBeanProp(saveQuestionSubjectOption, questionSubjectOption); + QuestionSubject questionSubject = questionSubjects.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getQuestionNumber()) && questionSubjectOption.getQuestionNumber().equals(item.getQuestionNumber())).findFirst().orElse(new QuestionSubject()); + questionSubjectOption.setQuestionnaireSubjectId(questionSubject.getId()); + saveQuestionSubjectOption.setCreateTime(DateUtils.getNowDate()); + saveQuestionSubjectOption.setCreateBy(SecurityUtils.getUsername()); + saveQuestionSubjectOptions.add(questionSubjectOption); + } + int subjectOptionCount = questionSubjectOptionMapper.insertQuestionSubjectOptionList(saveQuestionSubjectOptions); + if (subjectOptionCount <= 0) { + log.info("修改问卷答案表失败," + questionSubjects); + throw new SecurityException("修改问卷失败!请联系管理员!"); + } + return AjaxResult.success(); } /** @@ -129,8 +222,23 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService { * @param id 问卷基本信息主键 * @return 结果 */ + @Transactional(rollbackFor = Exception.class) @Override public int deleteQuestionInfoById(Long id) { + List originalSubjectList = questionSubjectMapper.selectQuestionSubjectBy(id); + if (CollectionUtils.isNotEmpty(originalSubjectList)) { + List originalSubjectIds = originalSubjectList.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getId())).map(QuestionSubject::getId).collect(Collectors.toList()); + int deleteQuestionCount = questionSubjectMapper.deleteSubjectByQuestionInfoId(id); + if (deleteQuestionCount < 0) { + log.info("删除问卷题目表失败"); + throw new SecurityException("删除问卷失败!请联系管理员!"); + } + int deleteOptionIds = questionSubjectOptionMapper.deleteOptionByQuestionSubjectIds(originalSubjectIds); + if (deleteOptionIds < 0) { + log.info("删除问卷选项表失败"); + throw new SecurityException("删除问卷失败!请联系管理员!"); + } + } return questionInfoMapper.deleteQuestionInfoById(id); } } diff --git a/postdischarge-manage/src/main/resources/mapper/manage/questionsubject/QuestionSubjectMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/questionsubject/QuestionSubjectMapper.xml index 13bd01f0..e62b1b37 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/questionsubject/QuestionSubjectMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/questionsubject/QuestionSubjectMapper.xml @@ -340,4 +340,19 @@ ) + + + + + delete + from question_subject + where question_info_id = #{questionInfoId} + \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/questionsubjectoption/QuestionSubjectOptionMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/questionsubjectoption/QuestionSubjectOptionMapper.xml index ba136161..6e90eaf1 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/questionsubjectoption/QuestionSubjectOptionMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/questionsubjectoption/QuestionSubjectOptionMapper.xml @@ -174,4 +174,63 @@ #{id} + + + insert into question_subject_option( + questionnaire_subject_id, + question_name, + option_name, + option_answer, + option_score, + option_sort, + option_remark, + create_by, + create_time + ) values + + ( + #{QuestionSubjectOption.questionnaireSubjectId}, + #{QuestionSubjectOption.questionName}, + #{QuestionSubjectOption.optionName}, + #{QuestionSubjectOption.optionAnswer}, + #{QuestionSubjectOption.optionScore}, + #{QuestionSubjectOption.optionSort}, + #{QuestionSubjectOption.optionRemark}, + #{QuestionSubjectOption.createBy}, + #{QuestionSubjectOption.createTime} + ) + + + + + + + delete from question_subject_option where questionnaire_subject_id in + + #{questionSubjectIds} + + \ No newline at end of file