コード例 #1
0
        public virtual int AddDept(DeptInputDto deptInputDto)
        {
            // 判断名称是否重复
            if (_defaultDbContext.MbpDepts.Where(d => d.DeptName == deptInputDto.DeptName).Any())
            {
                throw new Exception("部门名称重复");
            }

            var parentDept = _defaultDbContext.MbpDepts.Where(m => m.Id == deptInputDto.ParentId).FirstOrDefault();

            deptInputDto.ParentDeptCode = parentDept.DeptCode;
            deptInputDto.FullDeptName   = parentDept.FullDeptName + "/" + deptInputDto.DeptName;
            deptInputDto.ParentDeptName = parentDept.DeptName;

            var dept = _mapper.Map <MbpDept>(deptInputDto);

            dept.SystemCode = "Mbp";
            dept.Level      = parentDept.Level + 1;

            _defaultDbContext.MbpDepts.Add(dept);

            return(_defaultDbContext.SaveChanges());
        }
コード例 #2
0
        public virtual int UpdateDept(DeptInputDto deptInputDto)
        {
            var dept = _mapper.Map <MbpDept>(deptInputDto);

            // 重新继承父级信息, todo优化 可以将此逻辑放到实体里面,当作领域逻辑
            var parentDept = _defaultDbContext.MbpDepts.Where(m => m.Id == deptInputDto.ParentId).FirstOrDefault();

            // 判断选择的上级是不是自己的下级部门,这种选择是不合理的
            if (parentDept.FullDeptName.StartsWith(dept.FullDeptName))
            {
                throw new Exception("不能使用当前下级部门作为父级部门");
            }

            // 刷新节点信息
            {
                // 刷新当前节点
                dept.SystemCode     = parentDept.SystemCode;
                dept.FullDeptName   = string.Concat(parentDept.FullDeptName, "/", dept.DeptName);
                dept.Level          = parentDept.Level + 1;
                dept.ParentDeptCode = parentDept.DeptCode;
                dept.ParentDeptName = parentDept.DeptName;

                _defaultDbContext.Attach(dept);

                // 刷新下级节点
                var current = _defaultDbContext.MbpDepts.Include("ChildrenDept.ChildrenDept.ChildrenDept.ChildrenDept.ChildrenDept")
                              .First(m => m.Id == dept.Id);
                RefreshChildrenInfo(dept, current.ChildrenDept);

                _defaultDbContext.Attach(current);
            }

            _defaultDbContext.Update(dept);
            // 提交所有修改
            return(_defaultDbContext.SaveChanges());
        }