This commit is contained in:
zhangheng 2024-03-04 16:05:11 +08:00
parent 19e10ea376
commit 52de6173d1
7 changed files with 246 additions and 17 deletions

View File

@ -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));
}
}

View File

@ -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<QuestionSubject> questionSubjectList);
/**
* 查询问卷题目信息列表
*
* @param questionInfoId 问卷题目信息
* @return 问卷题目信息集合
*/
List<QuestionSubjectVO> selectQuestionSubjectBy(Long questionInfoId);
/**
* 删除问卷题目信息
*
* @param questionInfoId 问卷题目信息主键
* @return 结果
*/
int deleteSubjectByQuestionInfoId(Long questionInfoId);
}

View File

@ -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<QuestionSubjectOption> saveQuestionSubjectOptions);
/**
* 根据题目表id查询选项表信息
*
* @param questionSubjectIds 题目表id
* @return QuestionSubjectOptionVO
*/
List<QuestionSubjectOptionVO> selectQuestionSubjectOptions(@Param("questionSubjectIds") List<Long> questionSubjectIds);
/**
* 根据题目表id删除选项表信息
*
* @param questionSubjectIds 题目表id
* @return int
*/
int deleteOptionByQuestionSubjectIds(List<Long> questionSubjectIds);
}

View File

@ -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);
/**
* 批量删除问卷基本信息

View File

@ -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<QuestionSubjectVO> questionSubjects = questionSubjectMapper.selectQuestionSubjectBy(id);
List<Long> 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<QuestionSubjectOptionVO> questionSubjectOptions = questionSubjectOptionMapper.selectQuestionSubjectOptions(questionSubjectIds);
for (QuestionSubjectVO questionSubject : questionSubjects) {
List<QuestionSubjectOptionVO> 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<QuestionSubjectVO> questionSubjectList = question.getQuestionSubjectList();
List<QuestionSubject> questionSubjects = new ArrayList<>();
List<QuestionSubjectOptionVO> questionSubjectOptions = new ArrayList<>();
@ -86,7 +116,8 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService {
log.info("新增问卷题目表失败," + questionSubjects);
throw new SecurityException("新增问卷失败!请联系管理员!");
}
ArrayList<QuestionSubjectOption> saveQuestionSubjectOptions = new ArrayList<>();
//新增选项表
List<QuestionSubjectOption> 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<QuestionSubjectVO> originalSubjectList = questionSubjectMapper.selectQuestionSubjectBy(question.getId());
if (CollectionUtils.isNotEmpty(originalSubjectList)) {
List<Long> 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<QuestionSubjectVO> questionSubjectList = question.getQuestionSubjectList();
List<QuestionSubject> questionSubjects = new ArrayList<>();
List<QuestionSubjectOptionVO> 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<QuestionSubjectOption> 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<QuestionSubjectVO> originalSubjectList = questionSubjectMapper.selectQuestionSubjectBy(id);
if (CollectionUtils.isNotEmpty(originalSubjectList)) {
List<Long> 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);
}
}

View File

@ -340,4 +340,19 @@
)
</foreach>
</insert>
<select id="selectQuestionSubjectBy" resultType="com.xinelu.manage.vo.questionsubject.QuestionSubjectVO">
<include refid="selectQuestionSubjectVo"/>
<where>
<if test="questionInfoId != null ">
and question_info_id = #{id}
</if>
</where>
</select>
<delete id="deleteSubjectByQuestionInfoId">
delete
from question_subject
where question_info_id = #{questionInfoId}
</delete>
</mapper>

View File

@ -174,4 +174,63 @@
#{id}
</foreach>
</delete>
<insert id="insertQuestionSubjectOptionList">
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
<foreach item="QuestionSubjectOption" index="index" collection="list" separator=",">
(
#{QuestionSubjectOption.questionnaireSubjectId},
#{QuestionSubjectOption.questionName},
#{QuestionSubjectOption.optionName},
#{QuestionSubjectOption.optionAnswer},
#{QuestionSubjectOption.optionScore},
#{QuestionSubjectOption.optionSort},
#{QuestionSubjectOption.optionRemark},
#{QuestionSubjectOption.createBy},
#{QuestionSubjectOption.createTime}
)
</foreach>
</insert>
<select id="selectQuestionSubjectOptions"
resultType="com.xinelu.manage.vo.questionsubjectoption.QuestionSubjectOptionVO">
select id,
questionnaire_subject_id,
question_name,
option_name,
option_answer,
option_score,
option_sort,
option_remark,
create_by,
create_time,
update_by,
update_time
from question_subject_option
<where>
<if test="questionSubjectIds != null and questionSubjectIds.size() > 0">
questionnaire_subject_id in
<foreach item="questionSubjectIds" collection="questionSubjectIds" open="(" separator="," close=")">
#{questionSubjectIds}
</foreach>
</if>
</where>
</select>
<delete id="deleteOptionByQuestionSubjectIds">
delete from question_subject_option where questionnaire_subject_id in
<foreach item="id" collection="list" open="(" separator="," close=")">
#{questionSubjectIds}
</foreach>
</delete>
</mapper>