package com.xjrsoft.module.system.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.xjrsoft.common.constant.GlobalConstant; import com.xjrsoft.common.model.result.R; import com.xjrsoft.common.page.ConventPage; import com.xjrsoft.common.page.PageOutput; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.module.system.dto.AddDictionaryItemDto; import com.xjrsoft.module.system.dto.DictionaryItemDetailDto; import com.xjrsoft.module.system.dto.DictionaryItemDetailPageDto; import com.xjrsoft.module.system.dto.DictionaryItemPageDto; import com.xjrsoft.module.system.dto.UpdateDictionaryItemDto; import com.xjrsoft.module.system.entity.DictionaryDetail; import com.xjrsoft.module.system.entity.DictionaryItem; import com.xjrsoft.module.system.service.IDictionarydetailService; import com.xjrsoft.module.system.service.IDictionaryitemService; import com.xjrsoft.module.system.vo.DictionaryItemDetailVo; import com.xjrsoft.module.system.vo.DictionaryItemPageVo; import com.xjrsoft.module.system.vo.DictionaryItemVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.util.List; /** *

* 数据字典项目 前端控制器 *

* * @author tzx * @since 2022-03-17 */ @RestController @RequestMapping(GlobalConstant.SYSTEM_MODULE_PREFIX + "/dictionary-item") @Api(value = GlobalConstant.SYSTEM_MODULE_PREFIX + "/dictionary-item",tags = "数据字典项目") @AllArgsConstructor public class DictionaryitemController { private final IDictionaryitemService dictionaryitemService; private final IDictionarydetailService dictionarydetailService; @GetMapping("/list") @ApiOperation(value = "获取 数据字典项目列表(不分页)") public R list(@Valid DictionaryItemPageDto dto){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(StrUtil.isNotBlank(dto.getName()), DictionaryItem::getName,dto.getName()) .like(StrUtil.isNotBlank(dto.getCode()), DictionaryItem::getCode,dto.getCode()) .select(DictionaryItem.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryItemPageVo.class).contains(x.getProperty())); List list = dictionaryitemService.list(queryWrapper); List dictionaryItemVos = BeanUtil.copyToList(list, DictionaryItemVo.class); return R.ok(dictionaryItemVos); } @GetMapping("/page") @ApiOperation(value = "获取所有数据字典项目(分页)") public R page(@Valid DictionaryItemPageDto dto){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(StrUtil.isNotBlank(dto.getName()), DictionaryItem::getName,dto.getName()) .like(StrUtil.isNotBlank(dto.getCode()), DictionaryItem::getCode,dto.getCode()) .select(DictionaryItem.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryItemPageVo.class).contains(x.getProperty())) .orderByAsc(DictionaryItem::getSortCode); IPage page = dictionaryitemService.page(ConventPage.getPage(dto), queryWrapper); PageOutput pageOutput = ConventPage.getPageOutput(page, DictionaryItemPageVo.class); return R.ok(pageOutput); } @GetMapping("/info") @ApiOperation(value = "根据id获取项目详情") public R info(@RequestParam Long id){ DictionaryItem dictionaryItem = dictionaryitemService.getById(id); if (dictionaryItem == null){ R.error("找不到此字典项目!"); } return R.ok(BeanUtil.toBean(dictionaryItem, DictionaryItemVo.class)); } @GetMapping("/detail") @ApiOperation(value = "获取当前数据字典项目下所有字典详情") public R detail(@Valid DictionaryItemDetailDto dto){ List values = StrUtil.split(dto.getValues(), StringPool.COMMA); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DictionaryDetail::getItemId,dto.getId()) .in(CollectionUtils.isNotEmpty(values), DictionaryDetail::getValue, values) .select(DictionaryDetail.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryItemDetailVo.class).contains(x.getProperty())); List list = dictionarydetailService.list(queryWrapper); List dictionaryItemDetailVos = BeanUtil.copyToList(list, DictionaryItemDetailVo.class); return R.ok(dictionaryItemDetailVos); } @GetMapping("/detail/tree") @ApiOperation(value = "获取数据字典项目 + 详情 树结构") public R tree(){ return R.ok(dictionaryitemService.getTree()); } @GetMapping("/detail/page") @ApiOperation(value = "获取当前数据字典项目下所有字典详情(分页)") public R detail(@Valid DictionaryItemDetailPageDto dto){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DictionaryDetail::getItemId,dto.getId()) .select(DictionaryDetail.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryItemDetailVo.class).contains(x.getProperty())); IPage page = dictionarydetailService.page(ConventPage.getPage(dto), queryWrapper); PageOutput pageOutput = ConventPage.getPageOutput(page, DictionaryItemDetailVo.class); return R.ok(pageOutput); } @PostMapping @ApiOperation(value = "新增数据字典项") public R add(@Valid @RequestBody AddDictionaryItemDto dto){ long count = dictionaryitemService.count(Wrappers.query().lambda().eq(DictionaryItem::getCode, dto.getCode()).or().eq(DictionaryItem::getName,dto.getName())); if(count > 0){ return R.error("项目名或者编码已经存在!"); } DictionaryItem dictionaryItem = BeanUtil.toBean(dto, DictionaryItem.class); boolean isSuccess = dictionaryitemService.save(dictionaryItem); if (isSuccess) dictionaryitemService.loadCaches(); return R.ok(isSuccess); } @PutMapping @ApiOperation(value = "更新数据字典项") public R update(@Valid @RequestBody UpdateDictionaryItemDto dto){ long count = dictionaryitemService.count(Wrappers.query().lambda() .eq(DictionaryItem::getCode, dto.getCode()) .ne(DictionaryItem::getId,dto.getId()) .or() .eq(DictionaryItem::getName, dto.getName()) .ne(DictionaryItem::getId,dto.getId())); if(count > 0){ return R.error("项目名或者编码已经存在!"); } DictionaryItem dictionaryItem = BeanUtil.toBean(dto, DictionaryItem.class); boolean isSuccess = dictionaryitemService.updateById(dictionaryItem); if (isSuccess) dictionaryitemService.loadCaches(); return R.ok(isSuccess); } @DeleteMapping @ApiOperation(value = "删除数据字典项") @Transactional(rollbackFor = Exception.class) public R delete(@RequestBody List ids){ //删除字典详情 dictionaryitemService.removeBatchByIds(ids); //删除字典项 dictionarydetailService.remove(Wrappers.lambdaQuery(DictionaryDetail.class).in(DictionaryDetail::getItemId,ids)); return R.ok(); } }