package com.ruoyi.study.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.study.domain.*;
import com.ruoyi.study.dto.CategoryQuery;
import com.ruoyi.study.dto.SubjectDTO;
import com.ruoyi.study.dto.SubjectQuery;
import com.ruoyi.study.service.*;
import com.ruoyi.study.vo.CategoryVO;
import com.ruoyi.study.vo.SubjectVO;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 2.0新增-题目分类管理 前端控制器
*
*
* @author 无关风月
* @since 2024-04-26
*/
@RestController
@RequestMapping("/base/tCategory")
public class TCategoryController {
@Autowired
private ITSubjectService subjectService;
@Autowired
private ICategoryService categoryService;
@PostMapping("/categoryList")
@ApiOperation(value = "列表查询", tags = {"2.0新增-题目分类管理"})
public R> subjectList(@RequestBody CategoryQuery query) {
query.setState(1);
List integers = new ArrayList<>();
if (StringUtils.hasLength(query.getSecondName())){
List collect = categoryService.lambdaQuery()
.eq(TCategory::getType, 2)
.eq(TCategory::getState, query.getState())
.like(TCategory::getName, query.getSecondName())
.list().stream().map(TCategory::getParentId).collect(Collectors.toList());
integers.addAll(collect);
}
if (StringUtils.hasLength(query.getFirstName())){
List collect = categoryService.lambdaQuery()
.eq(TCategory::getType, 1)
.eq(TCategory::getState, query.getState())
.like(TCategory::getName, query.getFirstName())
.list().stream().map(TCategory::getId).collect(Collectors.toList());
integers.addAll(collect);
}
if (StringUtils.hasLength(query.getSecondName())&&StringUtils.hasLength(query.getFirstName())){
if (integers.isEmpty()){
integers.add(-1);
}
}
query.setFirstIds(integers);
PageInfo res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
List list = categoryService.listAll(query,res);
for (CategoryVO categoryVO : list) {
List list1 = categoryService.lambdaQuery()
.eq(TCategory::getParentId, categoryVO.getId())
.eq(TCategory::getState,query.getState()).list();
categoryVO.setSecondList(list1);
}
res.setRecords(list);
res.setTotal(list.size());
return R.ok(res);
}
@GetMapping("/list")
@ApiOperation(value = "根据类型查询所有一级分类 state=1 题目 state=2 故事", tags = {"2.0新增-题目分类管理"})
public R> list(Integer state) {
List list = categoryService.lambdaQuery().eq(TCategory::getState, state).eq(TCategory::getType, 1).list();
return R.ok(list);
}
@GetMapping("/listById")
@ApiOperation(value = "根据一级分类id 查询二级分类列表", tags = {"2.0新增-题目分类管理"})
public R> listById(Integer id) {
List list = categoryService.lambdaQuery().eq(TCategory::getParentId, id).list();
return R.ok(list);
}
@PostMapping("/add")
@ApiOperation(value = "添加", tags = {"2.0新增-题目分类管理"})
public R add(@RequestBody TCategory dto) {
dto.setState(1);
categoryService.save(dto);
return R.ok("添加成功");
}
@PostMapping("/update")
@ApiOperation(value = "编辑", tags = {"2.0新增-题目分类管理"})
public R update(@RequestBody TCategory dto) {
dto.setState(1);
categoryService.updateById(dto);
return R.ok("编辑成功");
}
@PostMapping("/delete")
@ApiOperation(value = "删除", tags = {"2.0新增-题目分类管理"})
public R delete(@RequestParam("id") Integer id) {
TCategory byId = categoryService.getById(id);
switch (byId.getType()){
case 1:
// 一级分类
List list = subjectService.lambdaQuery().eq(TSubject::getFirstCategory, id).list();
if (!list.isEmpty()){
// 操作失败,当前分类正在被使用
return R.fail("当前分类正在被使用");
}
break;
case 2:
// 二级分类
List list2 = subjectService.lambdaQuery().eq(TSubject::getSecondCategory, id).list();
if (!list2.isEmpty()){
// 操作失败,当前分类正在被使用
return R.fail("当前分类正在被使用");
}
break;
}
categoryService.removeById(id);
return R.ok();
}
}