This commit is contained in:
lvxudong 2023-11-17 18:20:03 +08:00
parent f4ab05bd74
commit 90bdf71982
8 changed files with 79 additions and 20 deletions

View File

@ -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<List<LabelOptionVo>> queryLabels() {
return R.ok(labelsService.queryLabels());
}
/**
* 导出题目标签列表
*/

View File

@ -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;
/**

View File

@ -27,6 +27,7 @@ public class TitleResp implements Serializable {
/**
* 题目标签类型
*/
private Long labelId;
private String labelName;
private List<OptionVo> optionVoList;

View File

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

View File

@ -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<LabelOptionVo> queryLabels();
/**
* 校验并批量删除题目标签信息
*/

View File

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

View File

@ -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<LabelOptionVo> queryLabels() {
LambdaQueryWrapper<Labels> lqw = Wrappers.lambdaQuery();
lqw.eq(Labels::getStatus, 0);
List<LabelsVo> 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<Title>()
.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;

View File

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