public async Task <CreateDepartmentOutput> CreateDepartment(CreateDepartmentInput input) { var parentOrg = await _organizationRepository.SingleOrDefaultAsync(p => p.Id == input.ParentId); if (parentOrg == null) { throw new BusinessException($"不存在Id为{input.ParentId}的上级信息"); } if (input.DeptTypeKey.IsNullOrEmpty()) { throw new BusinessException("请选择部门类型"); } var exsitOrg = await _organizationRepository.SingleOrDefaultAsync(p => p.Identification == input.Identification); if (exsitOrg != null) { throw new BusinessException($"系统中已经存在标识为{input.Identification}的组织机构"); } var workbookAppServiceProxy = GetService <IWordbookAppService>(); var checkDeptTypeResult = await workbookAppServiceProxy.Check(new CheckWordbookInput { WordbookCode = SystemPresetWordbookCode.Organization.DeptType, WordbookItemKey = input.DeptTypeKey }); if (!checkDeptTypeResult) { throw new BusinessException("指定的部门类型Key不正确,请选择正确的部门类型"); } var department = input.MapTo <Department>(); var orgInfo = input.MapTo <Organization>(); var orgCode = string.Empty; var maxLevelOrg = (await _organizationRepository.GetAllAsync(p => p.ParentId == parentOrg.Id)) .OrderByDescending(p => p.Id).FirstOrDefault(); if (maxLevelOrg == null) { orgCode = "1".PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol); } else { orgCode = (Convert.ToInt32(maxLevelOrg.Code.Split(HeroConstants.CodeRuleRestrain.CodeCoverSymbol).Last() .TrimStart('0')) + 1).ToString().PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol); } orgInfo.Level = parentOrg.Level + 1; orgInfo.Code = parentOrg.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + orgCode; await UnitOfWorkAsync(async (conn, trans) => { var orgId = await _organizationRepository.InsertAndGetIdAsync(orgInfo, conn, trans); department.OrgId = orgId; var deptId = await _departmentRepository.InsertAndGetIdAsync(department, conn, trans); if (input.Positions != null && input.Positions.Any()) { if (input.Positions.Count(p => p.IsLeadingOfficial) > 1) { throw new BusinessException("部门只允许设置一个负责人岗位"); } var sort = 1; foreach (var positionInput in input.Positions) { var position = positionInput.MapTo <Position>(); position.DeptId = deptId; position.CheckDataAnnotations().CheckValidResult(); var positionCode = orgInfo.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + sort.ToString() .PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol); position.Code = positionCode; await _positionRepository.InsertAsync(position, conn, trans); sort++; } } }, Connection); return(new CreateDepartmentOutput { OrgId = orgInfo.Id, DeptId = department.Id, Tips = "新增部门信息成功" }); }