package com.dxj.module.system.controller; import cn.hutool.core.collection.CollectionUtil; import com.dxj.annotation.Log; import com.dxj.config.DataScope; import com.dxj.exception.SkException; import com.dxj.module.system.domain.entity.Dept; import com.dxj.module.system.domain.dto.DeptDTO; import com.dxj.module.system.domain.query.DeptQuery; import com.dxj.module.system.service.DeptService; import com.dxj.util.ThrowableUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; 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.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Set; /** * @author Sinkiang * @date 2019-03-25 */ @RestController @Api(tags = "系统:部门管理") @RequestMapping("/api/dept") public class DeptController { private final DeptService deptService; private final DataScope dataScope; private static final String ENTITY_NAME = "dept"; public DeptController(DeptService deptService, DataScope dataScope) { this.deptService = deptService; this.dataScope = dataScope; } @Log("导出部门数据") @ApiOperation("导出部门数据") @GetMapping(value = "/download") @PreAuthorize("@sk.check('dept:list')") public void download(HttpServletResponse response, DeptQuery criteria) throws IOException { deptService.download(deptService.queryAll(criteria), response); } @Log("查询部门") @ApiOperation("查询部门") @GetMapping @PreAuthorize("@sk.check('user:list','dept:list')") public ResponseEntity<Object> getDepts(DeptQuery criteria){ // 数据权限 criteria.setIds(dataScope.getDeptIds()); List<DeptDTO> deptDtos = deptService.queryAll(criteria); return new ResponseEntity<>(deptService.buildTree(deptDtos),HttpStatus.OK); } @Log("新增部门") @ApiOperation("新增部门") @PostMapping @PreAuthorize("@sk.check('dept:add')") public ResponseEntity<Object> create(@Validated @RequestBody Dept resources){ if (resources.getId() != null) { throw new SkException("A new "+ ENTITY_NAME +" cannot already have an ID"); } return new ResponseEntity<>(deptService.create(resources),HttpStatus.CREATED); } @Log("修改部门") @ApiOperation("修改部门") @PutMapping @PreAuthorize("@sk.check('dept:edit')") public ResponseEntity<Object> update(@Validated(Dept.Update.class) @RequestBody Dept resources){ deptService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除部门") @ApiOperation("删除部门") @DeleteMapping @PreAuthorize("@sk.check('dept:del')") public ResponseEntity<Object> delete(@RequestBody Set<Long> ids){ Set<DeptDTO> deptDtos = new HashSet<>(); for (Long id : ids) { List<Dept> deptList = deptService.findByPid(id); deptDtos.add(deptService.findById(id)); if(CollectionUtil.isNotEmpty(deptList)){ deptDtos = deptService.getDeleteDepts(deptList, deptDtos); } } try { deptService.delete(deptDtos); }catch (Throwable e){ ThrowableUtil.throwForeignKeyException(e, "所选部门中存在岗位或者角色关联,请取消关联后再试"); } return new ResponseEntity<>(HttpStatus.OK); } }