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.ResponseDepartmentItemVO; import com.persagy.fm.department.model.vo.ResponseDepartmentListItemVO; import com.persagy.fm.department.model.vo.ResponseDepartmentTreeItemVO; 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.service.IDepProjectService; import com.persagy.fm.saas.project.model.vo.ProjectTreeItemVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; 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; @ApiOperation(value = "创建部门") @PostMapping("/create") public CommonResult createDepartment( @Valid @RequestBody AddDepartmentDTO addDepartmentDTO) { Long id = departmentService.createDepartment(addDepartmentDTO); return ResultHelper.single(new FmResponseUpsertVO(id)); } @ApiOperation(value = "部门详情") @PostMapping("/get") // TODO: 2021/3/24 使用翻译器 // @Transes({ // @Trans(source = "com.persagy.fm.person.service.IPersonTransBatchHandler", // type = TransType.SERVICE, result = "name", batch = true, // condition = "id", parameter = "managers", target = "managersShowName"), // @Trans(source = "com.persagy.fm.person.service.IPersonTransBatchHandler", // type = TransType.SERVICE, result = "name", batch = true, // condition = "id", parameter = "projectIds", target = "projectsShowName") // }) public CommonResult queryDepartmentDetail( @Valid @RequestBody QueryDepartmentDetailDTO queryDepartmentDetailDTO) { Department department = departmentService.queryDepartmentDetail(queryDepartmentDetailDTO.getId()); ResponseDepartmentItemVO responseDepartmentItemVO = ConvertDepartmentTool.INSTANCE.convert2ResponseItemDTO(department); // 部门负责人转换为列表 String managers = department.getManagers(); List managerIdList = change2ManagerIdList(managers); responseDepartmentItemVO.setManagers(managerIdList); return ResultHelper.single(responseDepartmentItemVO); } /** * 将部门负责人转换为负责人id列表 * * @param managers 负责人id字符串:id,id,id * @return 负责人id列表 * @author lixing * @version V1.0 2021/3/24 11:09 上午 */ private List change2ManagerIdList(String managers) { if (StringUtils.isNotBlank(managers)) { String[] managersArray = managers.split(","); List managerStrList = Arrays.asList(managersArray); return managerStrList.stream().map(Long::valueOf).collect(Collectors.toList()); } return null; } @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 DeleteDepartmentDTO deleteDepartmentDTO) { List projectTreeItemVOList = depProjectService.queryDepProjectTree(deleteDepartmentDTO.getId()); return ResultHelper.multi(projectTreeItemVOList); } }