From 90bdf7198212521dc36cbbb101d273a9b72597ed Mon Sep 17 00:00:00 2001 From: lvxudong Date: Fri, 17 Nov 2023 18:20:03 +0800 Subject: [PATCH] up --- .../question/controller/LabelsController.java | 7 +++ .../org/dromara/question/domain/Options.java | 4 -- .../dromara/question/domain/bo/TitleResp.java | 1 + .../question/domain/vo/LabelOptionVo.java | 17 ++++++ .../question/service/ILabelsService.java | 3 ++ .../question/service/ITitleService.java | 1 - .../service/impl/LabelsServiceImpl.java | 54 ++++++++++++++----- .../service/impl/TitleServiceImpl.java | 12 ++++- 8 files changed, 79 insertions(+), 20 deletions(-) create mode 100644 ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/vo/LabelOptionVo.java diff --git a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/controller/LabelsController.java b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/controller/LabelsController.java index ce9ff4ccf..0daf9a3ff 100644 --- a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/controller/LabelsController.java +++ b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/controller/LabelsController.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.question.domain.vo.LabelOptionVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -45,6 +46,12 @@ public class LabelsController extends BaseController { return labelsService.queryPageList(bo, pageQuery); } + @SaCheckPermission("question:label:list") + @GetMapping("queryLabels") + public R> queryLabels() { + return R.ok(labelsService.queryLabels()); + } + /** * 导出题目标签列表 */ diff --git a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/Options.java b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/Options.java index e91e1bb21..73198c25d 100644 --- a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/Options.java +++ b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/Options.java @@ -2,10 +2,7 @@ package org.dromara.question.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import java.io.Serial; import java.util.Date; /** @@ -17,7 +14,6 @@ import java.util.Date; @Data @TableName("f_options") public class Options { - @Serial private static final long serialVersionUID = 1L; /** diff --git a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/bo/TitleResp.java b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/bo/TitleResp.java index 8f1493368..5637f16b2 100644 --- a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/bo/TitleResp.java +++ b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/bo/TitleResp.java @@ -27,6 +27,7 @@ public class TitleResp implements Serializable { /** * 题目标签类型 */ + private Long labelId; private String labelName; private List optionVoList; diff --git a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/vo/LabelOptionVo.java b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/vo/LabelOptionVo.java new file mode 100644 index 000000000..736016205 --- /dev/null +++ b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/domain/vo/LabelOptionVo.java @@ -0,0 +1,17 @@ +package org.dromara.question.domain.vo; + +import lombok.Data; + +/** + * @author : lvxudong + * @date : 2023/11/17 16:35 + * @className : LabelOptionsVo + * @description : + **/ +@Data +public class LabelOptionVo { + + private String value; + + private String label; +} diff --git a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/ILabelsService.java b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/ILabelsService.java index 2a6ada941..f08d1244e 100644 --- a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/ILabelsService.java +++ b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/ILabelsService.java @@ -3,6 +3,7 @@ package org.dromara.question.service; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.question.domain.bo.LabelsBo; +import org.dromara.question.domain.vo.LabelOptionVo; import org.dromara.question.domain.vo.LabelsVo; import java.util.Collection; @@ -42,6 +43,8 @@ public interface ILabelsService { Boolean updateByBo(LabelsBo bo); Boolean updateStatusByBo(LabelsBo bo); + List queryLabels(); + /** * 校验并批量删除题目标签信息 */ diff --git a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/ITitleService.java b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/ITitleService.java index 79bba058f..681771a32 100644 --- a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/ITitleService.java +++ b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/ITitleService.java @@ -1,6 +1,5 @@ package org.dromara.question.service; -import org.dromara.question.domain.Title; import org.dromara.question.domain.bo.TitleReq; import org.dromara.question.domain.bo.TitleResp; import org.dromara.question.domain.vo.TitleVo; diff --git a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/impl/LabelsServiceImpl.java b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/impl/LabelsServiceImpl.java index 3c4da4a35..d1e4f22e5 100644 --- a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/impl/LabelsServiceImpl.java +++ b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/impl/LabelsServiceImpl.java @@ -1,24 +1,28 @@ package org.dromara.question.service.impl; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.dromara.question.domain.bo.LabelsBo; -import org.dromara.question.domain.vo.LabelsVo; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.question.domain.Labels; +import org.dromara.question.domain.Title; +import org.dromara.question.domain.bo.LabelsBo; +import org.dromara.question.domain.vo.LabelOptionVo; +import org.dromara.question.domain.vo.LabelsVo; +import org.dromara.question.domain.vo.TitleVo; import org.dromara.question.mapper.LabelsMapper; +import org.dromara.question.mapper.TitleMapper; import org.dromara.question.service.ILabelsService; +import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Map; import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; /** * 题目标签Service业务层处理 @@ -32,11 +36,13 @@ public class LabelsServiceImpl implements ILabelsService { private final LabelsMapper baseMapper; + private final TitleMapper titleMapper; + /** * 查询题目标签 */ @Override - public LabelsVo queryById(Long id){ + public LabelsVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -50,6 +56,19 @@ public class LabelsServiceImpl implements ILabelsService { return TableDataInfo.build(result); } + @Override + public List queryLabels() { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(Labels::getStatus, 0); + List labelsVos = baseMapper.selectVoList(lqw); + return labelsVos.stream().map(p -> { + LabelOptionVo vo = new LabelOptionVo(); + vo.setValue(p.getId().toString()); + vo.setLabel(p.getLabel()); + return vo; + }).collect(Collectors.toList()); + } + /** * 查询题目标签列表 */ @@ -92,6 +111,13 @@ public class LabelsServiceImpl implements ILabelsService { @Override public Boolean updateStatusByBo(LabelsBo bo) { + // 禁用标签时校验标签是否正在被使用 + TitleVo titleVo = titleMapper.selectVoOne(new LambdaQueryWrapper() + .eq(Title::getLabelId, bo.getId())); + if (titleVo != null && bo.getStatus() == 1) { + throw new ServiceException("该标签已绑定题库,请先解绑再禁用"); + } + Labels update = MapstructUtils.convert(bo, Labels.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; @@ -100,7 +126,7 @@ public class LabelsServiceImpl implements ILabelsService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(Labels entity){ + private void validEntityBeforeSave(Labels entity) { //TODO 做一些数据校验,如唯一约束 } @@ -109,7 +135,7 @@ public class LabelsServiceImpl implements ILabelsService { */ @Override public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; diff --git a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/impl/TitleServiceImpl.java b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/impl/TitleServiceImpl.java index 5f4951845..fb6ab2d56 100644 --- a/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/impl/TitleServiceImpl.java +++ b/ruoyi-modules/ruoyi-question/src/main/java/org/dromara/question/service/impl/TitleServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.question.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -54,10 +55,15 @@ public class TitleServiceImpl implements ITitleService { @Override public TitleResp queryById(Long id) { TitleVo titleVo = baseMapper.selectVoById(id); + LabelsVo labelsVo = labelsMapper.selectVoById(titleVo.getLabelId()); List<OptionVo> options = optionMapper.selectVoList(new LambdaQueryWrapper<Options>() .eq(Options::getQuestionId, titleVo.getId())); TitleResp resp = new TitleResp(); + resp.setId(titleVo.getId()); + resp.setQuestion(titleVo.getQuestion()); + resp.setLabelName(labelsVo.getLabel()); + resp.setLabelId(labelsVo.getId()); resp.setOptionVoList(options); return resp; } @@ -87,6 +93,7 @@ public class TitleServiceImpl implements ITitleService { dto.setQuestion(p.getQuestion()); List<LabelsVo> labelsVos1 = labelsVoMap.get(p.getLabelId()); dto.setLabelName(labelsVos1.get(0).getLabel()); + dto.setLabelId(labelsVos1.get(0).getId()); List<OptionVo> optionVos1 = optionsMap.get(p.getId()); dto.setOptionVoList(optionVos1); return dto; @@ -123,6 +130,10 @@ public class TitleServiceImpl implements ITitleService { @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(TitleReq bo) { + List<OptionVo> optionList = bo.getOptionList(); + if (CollectionUtil.isEmpty(optionList)) { + throw new ServiceException("选项不能为空"); + } TitleBo titleBo = new TitleBo(); BeanUtils.copyProperties(bo, titleBo); Title add = MapstructUtils.convert(titleBo, Title.class); @@ -135,7 +146,6 @@ public class TitleServiceImpl implements ITitleService { bo.setId(add.getId()); } - List<OptionVo> optionList = bo.getOptionList(); optionList.forEach(option -> option.setQuestionId(bo.getId())); List<Options> options = MapstructUtils.convert(optionList, Options.class); optionMapper.insertBatch(options);