public async Task <IActionResult> Post([FromBody] RetailPromotionEventViewModel retailPromotionEventVm) { if (retailPromotionEventVm == null) { return(BadRequest()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } await ValidateRetailDay(retailPromotionEventVm.Date); var newItem = Mapper.Map <RetailPromotionEvent>(retailPromotionEventVm); newItem.SetCreation(UserName); _retailPromotionEventRepository.Add(newItem); if (!await UnitOfWork.SaveAsync()) { return(StatusCode(500, "保存时出错")); } var vm = Mapper.Map <RetailPromotionEventViewModel>(newItem); return(CreatedAtRoute("GetRetailPromotionEvent", new { id = vm.Id }, vm)); }
public async Task <IActionResult> Put(int id, [FromBody] RetailPromotionEventViewModel retailPromotionEventVm) { if (retailPromotionEventVm == null) { return(BadRequest()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } await ValidateRetailDay(retailPromotionEventVm.Date); var dbItem = await _retailPromotionEventRepository.GetSingleAsync(x => x.Id == id, x => x.RetailPromotionEventBonuses); if (dbItem == null) { return(NotFound()); } var bonusVms = retailPromotionEventVm.RetailPromotionEventBonuses; retailPromotionEventVm.RetailPromotionEventBonuses = null; var bonuses = dbItem.RetailPromotionEventBonuses; dbItem.RetailPromotionEventBonuses = null; Mapper.Map(retailPromotionEventVm, dbItem); dbItem.SetModification(UserName); var toAddBonusVms = bonusVms.Where(x => x.Id == 0).ToList(); var toAddBonuses = Mapper.Map <List <RetailPromotionEventBonus> >(toAddBonusVms); foreach (var addBonus in toAddBonuses) { addBonus.SetCreation(UserName); _retailPromotionEventBonusRepository.Add(addBonus); } var bonusVmIds = bonusVms.Where(x => x.Id > 0).Select(x => x.Id).ToList(); var bonusIds = bonuses.Select(x => x.Id).ToList(); var toDeleteIds = bonusIds.Except(bonusVmIds); var toDeleteBonuses = bonuses.Where(x => toDeleteIds.Contains(x.Id)); _retailPromotionEventBonusRepository.DeleteRange(toDeleteBonuses); var toUpdateIds = bonusIds.Intersect(bonusVmIds); var toUpdateBonuses = bonuses.Where(x => toUpdateIds.Contains(x.Id)).ToList(); foreach (var bonus in toUpdateBonuses) { var bonusVm = bonusVms.SingleOrDefault(x => x.Id == bonus.Id); Mapper.Map(bonusVm, bonus); bonus.SetModification(UserName); _retailPromotionEventBonusRepository.Update(bonus); } dbItem.RetailPromotionEventBonuses = toAddBonuses.Concat(toUpdateBonuses).ToList(); _retailPromotionEventRepository.Update(dbItem); if (!await UnitOfWork.SaveAsync()) { return(StatusCode(500, "保存时出错")); } return(NoContent()); }