Exemple #1
0
        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 = "新增部门信息成功"
            });
        }