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()); }
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()); }