/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package com.vci.ubcs.system.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.vci.ubcs.common.constant.CommonConstant; import com.vci.ubcs.system.entity.Dict; import com.vci.ubcs.system.service.IDictService; import com.vci.ubcs.system.vo.DictVO; import com.vci.ubcs.system.wrapper.DictWrapper; import io.swagger.annotations.*; import lombok.AllArgsConstructor; import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.StringPool; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; import java.util.List; import java.util.Map; import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE; /** * 控制器 * * @author Chill */ @NonDS @RestController @AllArgsConstructor @RequestMapping("/dict") @Api(value = "字典", tags = "字典") public class DictController extends BladeController { private final IDictService dictService; /** * 详情 */ @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "详情", notes = "传入dict") public R detail(Dict dict) { Dict detail = dictService.getOne(Condition.getQueryWrapper(dict)); return R.data(DictWrapper.build().entityVO(detail)); } /** * 列表 */ @GetMapping("/list") @ApiImplicitParams({ @ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string") }) @ApiOperationSupport(order = 2) @ApiOperation(value = "列表", notes = "传入dict") public R> list(@ApiIgnore @RequestParam Map dict) { List list = dictService.list(Condition.getQueryWrapper(dict, Dict.class).lambda().orderByAsc(Dict::getSort)); DictWrapper dictWrapper = new DictWrapper(); return R.data(dictWrapper.listNodeVO(list)); } /** * 顶级列表 */ @GetMapping("/parent-list") @ApiImplicitParams({ @ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string") }) @ApiOperationSupport(order = 3) @ApiOperation(value = "列表", notes = "传入dict") public R> parentList(@ApiIgnore @RequestParam Map dict, Query query) { return R.data(dictService.parentList(dict, query)); } /** * 子列表 */ @GetMapping("/child-list") @ApiImplicitParams({ @ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "parentId", value = "字典名称", paramType = "query", dataType = "string") }) @ApiOperationSupport(order = 4) @ApiOperation(value = "列表", notes = "传入dict") public R> childList(@ApiIgnore @RequestParam Map dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) { return R.data(dictService.childList(dict, parentId)); } /** * 获取字典树形结构 */ @GetMapping("/tree") @ApiOperationSupport(order = 5) @ApiOperation(value = "树形结构", notes = "树形结构") public R> tree() { List tree = dictService.tree(); return R.data(tree); } /** * 获取字典树形结构 */ @GetMapping("/parent-tree") @ApiOperationSupport(order = 5) @ApiOperation(value = "树形结构", notes = "树形结构") public R> parentTree() { List tree = dictService.parentTree(); return R.data(tree); } /** * 新增或修改 */ @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入dict") public R submit(@Valid @RequestBody Dict dict) { CacheUtil.clear(DICT_CACHE, Boolean.FALSE); return R.status(dictService.submit(dict)); } /** * 删除 */ @PostMapping("/remove") @ApiOperationSupport(order = 7) @ApiOperation(value = "删除", notes = "传入ids") public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { CacheUtil.clear(DICT_CACHE, Boolean.FALSE); return R.status(dictService.removeDict(ids)); } /** * 获取字典 */ @GetMapping("/dictionary") @ApiOperationSupport(order = 8) @ApiOperation(value = "获取字典", notes = "获取字典") public R> dictionary(String code) { List tree = dictService.getList(code); return R.data(tree); } /** * 获取字典树 */ @GetMapping("/dictionary-tree") @ApiOperationSupport(order = 9) @ApiOperation(value = "获取字典树", notes = "获取字典树") public R> dictionaryTree(String code) { List tree = dictService.getList(code); return R.data(DictWrapper.build().listNodeVO(tree)); } /** * 字典键值列表 */ @GetMapping("/select") @ApiOperationSupport(order = 10) @ApiOperation(value = "字典键值列表", notes = "字典键值列表") public R> select() { List list = dictService.list(Wrappers.query().lambda().eq(Dict::getParentId, CommonConstant.TOP_PARENT_ID)); list.forEach(dict -> dict.setDictValue(dict.getCode() + StringPool.COLON + StringPool.SPACE + dict.getDictValue())); return R.data(list); } }