package com.persagy.fm.department.controller; import com.persagy.fm.common.constant.enums.BoolEnum; import com.persagy.fm.common.response.*; import com.persagy.fm.common.utils.ResultHelper; import com.persagy.fm.department.model.ConvertDepartmentTool; import com.persagy.fm.department.model.Department; import com.persagy.fm.department.model.dto.*; import com.persagy.fm.department.model.vo.ManagerVO; import com.persagy.fm.department.model.vo.ResponseDepartmentItemVO; import com.persagy.fm.department.model.vo.ResponseDepartmentListItemVO; import com.persagy.fm.department.model.vo.ResponseDepartmentTreeItemVO; import com.persagy.fm.department.service.IDepTranslator; import com.persagy.fm.department.service.IDepTreeService; import com.persagy.fm.department.service.IDepartmentService; import com.persagy.fm.department.utils.DepDataUtil; import com.persagy.fm.depproject.model.DepProject; import com.persagy.fm.depproject.model.dto.QueryDepProjectDTO; import com.persagy.fm.depproject.service.IDepProjectService; import com.persagy.fm.mybatis.service.CreateDbService; import com.persagy.fm.person.service.IPersonService; import com.persagy.fm.saas.project.model.vo.ProjectTreeItemVO; import com.persagy.fm.translate.model.Trans; import com.persagy.fm.translate.model.TransType; import com.persagy.fm.translate.model.Transes; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.assertj.core.util.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 部门控制层 * * @author lixing * @version V1.0 2021-03-11 15:09:17 */ @Api(tags = "部门") @Validated @RestController @RequestMapping("departments") public class DepartmentController { @Autowired private IDepartmentService departmentService; @Autowired private IDepTreeService depTreeService; @Autowired private IDepProjectService depProjectService; @Autowired private IDepTranslator depTranslator; @ApiOperation(value = "创建部门") @PostMapping("/create") public CommonResult createDepartment( @Valid @RequestBody AddDepartmentDTO addDepartmentDTO) { String id = departmentService.createDepartment(addDepartmentDTO); return ResultHelper.single(new FmResponseUpsertVO(id)); } @ApiOperation(value = "部门详情") @PostMapping("/get") @Trans(type = TransType.DB, source = "department", parameter = "parentId", target = "parentShowName") public CommonResult queryDepartmentDetail( @Valid @RequestBody QueryDepartmentDetailDTO queryDepartmentDetailDTO) { Department department = departmentService.queryDepartmentDetail(queryDepartmentDetailDTO.getId()); ResponseDepartmentItemVO responseDepartmentItemVO = ConvertDepartmentTool.INSTANCE.convert2ResponseItemDTO(department); // 给部门负责人赋值 String managers = department.getManagers(); responseDepartmentItemVO.setManagers(depTranslator.getManagerVOList(managers)); // 给项目赋值 QueryDepProjectDTO queryDepProjectDTO = new QueryDepProjectDTO(); queryDepProjectDTO.setDepId(department.getId()); List depProjectList = depProjectService.queryDepProjectList(queryDepProjectDTO); List projectIds = depProjectList.stream(). map(DepProject::getProjectId).collect(Collectors.toList()); responseDepartmentItemVO.setProjects(depTranslator.getProjectVOList(projectIds)); return ResultHelper.single(responseDepartmentItemVO); } @ApiOperation(value = "更新部门") @PostMapping("/update") public CommonResult updateDepartment( @Valid @RequestBody UpdateDepartmentDTO updateDepartmentDTO) { departmentService.updateDepartment(updateDepartmentDTO); return ResultHelper.single(new FmResponseUpsertVO(updateDepartmentDTO.getId())); } @ApiOperation(value = "删除部门") @PostMapping("/delete") public CommonResult deleteDepartment( @RequestBody @Valid DeleteDepartmentDTO deleteDepartmentDTO) { departmentService.deleteDepartment(deleteDepartmentDTO.getId()); return ResultHelper.success(); } @ApiOperation(value = "部门列表") @PostMapping("/query") public CommonResult> queryDepartment( @Valid @RequestBody QueryDepartmentDTO queryDepartmentDTO) { List departmentList = departmentService.queryDepartmentList(queryDepartmentDTO); List resultList = ConvertDepartmentTool.INSTANCE.convert2List(departmentList); /* 处理返回结果中是否包含子部门的业务 */ if (CollectionUtils.isEmpty(departmentList)) { return ResultHelper.multi(resultList); } // 获取部门的子部门 List deptIds = departmentList.stream(). map(Department::getId). collect(Collectors.toList()); List sonDeps = departmentService.queryDepListByParentIds(deptIds); Map> parentIdMap = DepDataUtil.sonDeps2ParentIdMap(sonDeps); resultList.forEach(item -> { // 如果map中包含部门的id,代表部门有子部门 if (DepDataUtil.hasChildren(item.getId(), parentIdMap)) { item.setHasChildren(BoolEnum.TRUE.getType()); } else { item.setHasChildren(BoolEnum.FALSE.getType()); } }); return ResultHelper.multi(resultList); } //@ApiOperation(value = "部门列表, 分页查询") //@PostMapping("/query") //public CommonResult> queryDepartment( // @Valid @RequestBody PageQueryDepartmentDTO pageQueryDepartmentDTO) { // IPage pagedList = departmentService.pageQueryDepartment(pageQueryDepartmentDTO); // IPage pagedResultList = pagedList.convert(item -> { // try { // return ConvertDepartmentTool.INSTANCE.convert2ResponseListItemDTO(item); // } catch (Exception e) { // throw new IllegalArgumentException("分页查询,Department实体类转换为列表对象发生异常", e); // } // }); // return FmResponseUtil.successContent(pagedResultList);; //} @ApiOperation(value = "部门树") @PostMapping("/tree") public CommonResult> queryDepartmentTree( @Valid @RequestBody QueryDepartmentTreeDTO queryDepartmentTreeDTO) { List responseDepTreeItems = depTreeService.queryDepartmentTree(queryDepartmentTreeDTO); return ResultHelper.multi(responseDepTreeItems); } @ApiOperation(value = "部门项目树") @PostMapping("/projects/tree") public CommonResult> queryDepProjectTree( @Valid @RequestBody QueryDepProjectTreeDTO queryDepProjectTreeDTO) { List projectTreeItemVOList = depProjectService.queryDepProjectTree(queryDepProjectTreeDTO.getParentDepId()); return ResultHelper.multi(projectTreeItemVOList); } @ApiOperation(value = "检验部门是否可删除") @PostMapping("/deleteAvailable") public CommonResult checkDepDeletable( @RequestBody @Valid DeleteDepartmentDTO deleteDepartmentDTO) { departmentService.checkDeletable(deleteDepartmentDTO.getId()); return ResultHelper.success(); } // @Autowired // CreateDbService createDbService; // // @PostMapping("/createDb") // public CommonResult test() { // createDbService.createDb("test"); // return ResultHelper.success(); // } }