/* * Copyright 2019-2020 Zheng Jie * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package me.zhengjie.modules.system.rest; import cn.hutool.core.collection.CollectionUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import me.zhengjie.annotation.Log; import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.domain.Dept; import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.dto.DeptDto; import me.zhengjie.modules.system.service.dto.DeptQueryCriteria; import me.zhengjie.utils.PageUtil; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.data.web.SortDefault; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.*; /** * @author Zheng Jie * @date 2019-03-25 */ @RestController @RequiredArgsConstructor @Api(tags = "系统:部门管理") @RequestMapping("/api/dept") public class DeptController { private final DeptService deptService; private static final String ENTITY_NAME = "dept"; @ApiOperation("导出部门数据") @GetMapping(value = "/download") @PreAuthorize("@el.check('dept:list')") public void download(HttpServletResponse response, DeptQueryCriteria criteria) throws Exception { deptService.download(deptService.queryAll(criteria, false), response); } @ApiOperation("查询部门") @GetMapping @PreAuthorize("@el.check('user:list','dept:list')") public ResponseEntity query(DeptQueryCriteria criteria, String[] sort ) throws Exception { // List deptDtos = deptService.queryAll2(criteria, sort,true); List deptDtos = deptService.queryAll(criteria, true); return new ResponseEntity<>(PageUtil.toPage(deptDtos, deptDtos.size()),HttpStatus.OK); } @ApiOperation("查询部门:根据ID获取同级与上级数据") @PostMapping("/superior") @PreAuthorize("@el.check('user:list','dept:list')") public ResponseEntity getSuperior(@RequestBody List ids) { Set deptDtos = new LinkedHashSet<>(); for (Long id : ids) { DeptDto deptDto = deptService.findById(id); List depts = deptService.getSuperior(deptDto, new ArrayList<>()); deptDtos.addAll(depts); } return new ResponseEntity<>(deptService.buildTree(new ArrayList<>(deptDtos)),HttpStatus.OK); } @Log("新增部门") @ApiOperation("新增部门") @PostMapping @PreAuthorize("@el.check('dept:add')") public ResponseEntity create(@Validated @RequestBody Dept resources){ if (resources.getId() != null) { throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID"); } deptService.create(resources); return new ResponseEntity<>(HttpStatus.CREATED); } @Log("修改部门") @ApiOperation("修改部门") @PutMapping @PreAuthorize("@el.check('dept:edit')") public ResponseEntity update(@Validated(Dept.Update.class) @RequestBody Dept resources){ deptService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除部门") @ApiOperation("删除部门") @DeleteMapping @PreAuthorize("@el.check('dept:del')") public ResponseEntity delete(@RequestBody Set ids){ Set deptDtos = new HashSet<>(); for (Long id : ids) { List deptList = deptService.findByPid(id); deptDtos.add(deptService.findById(id)); if(CollectionUtil.isNotEmpty(deptList)){ deptDtos = deptService.getDeleteDepts(deptList, deptDtos); } } // 验证是否被角色或用户关联 deptService.verification(deptDtos); Map map = deptService.delete(deptDtos); return new ResponseEntity<>(map, HttpStatus.OK); } }