public async Task <Result> AddProvince(int countryId, [FromBody] ProvinceCreateParam model) { var anyCountry = _countryRepository.Query().Any(c => c.Id == countryId); if (!anyCountry) { throw new Exception("国家不存在"); } var level = await GetLevelByParent(model.ParentId); var any = _provinceRepository.Query().Any(c => c.Name == model.Name && c.CountryId == countryId && c.ParentId == model.ParentId); if (any) { throw new Exception("单据已存在"); } var province = new StateOrProvince() { CountryId = countryId, ParentId = model.ParentId, DisplayOrder = model.DisplayOrder, Name = model.Name, IsPublished = model.IsPublished, Level = level, Code = model.Code }; _provinceRepository.Add(province); await _provinceRepository.SaveChangesAsync(); await _countryService.ClearProvinceCache(countryId); return(Result.Ok()); }
public async Task <Result> EditProvince(int id, [FromBody] ProvinceCreateParam model) { var province = await _provinceRepository.FirstOrDefaultAsync(id); if (province == null) { throw new Exception("单据不存在"); } var anyCountry = _countryRepository.Query().Any(c => c.Id == province.CountryId); if (!anyCountry) { throw new Exception("国家不存在"); } var any = _provinceRepository.Query().Any(c => c.Name == model.Name && c.CountryId == province.CountryId && c.ParentId == model.ParentId && c.Id != id); if (any) { throw new Exception("单据已存在"); } if (model.ParentId == province.Id) { throw new Exception("不能设置自身作为父级"); } //高层级或低层级 升高或降低控制 //如果当前单据存在子集,则不允许调整层级 var level = await GetLevelByParent(model.ParentId); if (level != province.Level) { var anyChild = _provinceRepository.Query().Any(c => c.ParentId == province.Id); if (anyChild) { throw new Exception("当前单据存在子级,不允许调整层级"); } } //province.CountryId = model.CountryId; province.ParentId = model.ParentId; province.DisplayOrder = model.DisplayOrder; province.Name = model.Name; province.IsPublished = model.IsPublished; province.Level = level; province.Code = model.Code; province.UpdatedOn = DateTime.Now; await _provinceRepository.SaveChangesAsync(); await _countryService.ClearProvinceCache(province.CountryId); return(Result.Ok()); }