public async Task <IHttpActionResult> ImportDailyDriverSchedule(List <PublishScheduleInputViewModel> PublishScheduleInputModel) { _logger.Information("ImportDailyDriverSchedule model: " + JsonConvert.SerializeObject(PublishScheduleInputModel)); PublishScheduleVerifyResult publishScheduleresult = new PublishScheduleVerifyResult(); try { VerityResult result = new VerityResult(); result = JudgeUserIdentifyNameToVerityResult(); if (!result.IsOk) { return(ReturnResponseMessageResult(result, HttpStatusCode.Unauthorized)); } publishScheduleresult = await _bookingService.PublishToUpdateBooking(PublishScheduleInputModel); _logger.Information("ImportDailyDriverSchedule result: " + JsonConvert.SerializeObject(publishScheduleresult)); foreach (var pushItem in publishScheduleresult.PublishScheduleResultList) { AndroidPushMessageViewModel pushMsg = new AndroidPushMessageViewModel(); pushMsg.title = "平台發佈了新班表!"; pushMsg.body = "請大家確認" + pushItem.BookingDate + "班表😎"; pushMsg.readerid = pushItem.DriverId.ToString(); List <string> RegistrationIDList = new List <string>(); RegistrationIDList.Add(pushItem.KeyNumber); await _pushService.AndroidPushMessage(RegistrationIDList, pushMsg); } return(new ResponseMessageResult( Request.CreateResponse( HttpStatusCode.OK, publishScheduleresult ))); } catch (Exception ex) { _logger.Information("ImportDailyDriverSchedule Error: " + JsonConvert.SerializeObject(ex)); publishScheduleresult.VerityResult.IsOk = false; publishScheduleresult.VerityResult.Message = ex.Message.ToString(); return(new ResponseMessageResult( Request.CreateResponse( HttpStatusCode.InternalServerError, publishScheduleresult ))); throw ex; } }
/// <summary> /// 發佈班表更新預約列表 /// </summary> /// <param name="PublishScheduleInputModelList"></param> /// <returns></returns> public async Task <PublishScheduleVerifyResult> PublishToUpdateBooking(List <PublishScheduleInputViewModel> PublishScheduleInputModelList) { PublishScheduleVerifyResult result = new PublishScheduleVerifyResult(); using (var transaction = _bookingRepository._context.Database.BeginTransaction()) { try { List <PublishScheduleResult> publishScheduleResultList = new List <PublishScheduleResult>(); List <Booking> bookingItems = new List <Booking>(); foreach (var item in PublishScheduleInputModelList) { Booking actionItem = new Booking(); var query = _bookingRepository.FindBy(x => x.BookingId == item.BookingId); if (query.Any()) { actionItem = query.First(); Taxi taxi = new Taxi(); var queryTaxi = _TMSDb.Taxi.Where(x => x.TaxiCallNo == item.TaxiCallNo); if (queryTaxi.Any()) { taxi = queryTaxi.First(); actionItem.TaxiId = taxi.TaxiId; } Driver driver = new Driver(); var queryDriver = _TMSDb.Driver.Where(x => x.DriverName == item.DriverName); if (queryDriver.Any()) { driver = queryDriver.First(); actionItem.DriverId = driver.DriverId; } actionItem.ProcessStatus = (Byte)BookingStatus.Accept; bookingItems.Add(actionItem); PublishScheduleResult scheduleResult = new PublishScheduleResult(); scheduleResult.BookingId = item.BookingId; scheduleResult.BookingDate = actionItem.BookingDate; scheduleResult.TaxiCallNo = item.TaxiCallNo; scheduleResult.LicensePlateNumber = taxi.LicensePlateNumber; scheduleResult.DriverId = driver.DriverId; scheduleResult.DriverName = driver.DriverName; var queryMobilePushKey = from main in _TMSDb.AspNetUsers.Where(x => x.NickName == driver.DriverName) join mobilePushKey in _TMSDb.MobilePushKey on main.Id equals mobilePushKey.UserId select mobilePushKey; if (queryMobilePushKey.Any()) { scheduleResult.KeyNumber = queryMobilePushKey.First().KeyNumber; } publishScheduleResultList.Add(scheduleResult); } } _bookingRepository.UpdateMultiple(bookingItems); transaction.Commit(); result.VerityResult.IsOk = true; result.VerityResult.Message = string.Format(Resource.UpdateSuccess, "PublishToUpdateBooking"); result.PublishScheduleResultList = publishScheduleResultList; } catch (Exception ex) { transaction.Rollback(); result.VerityResult.Message = ex.Message.ToString(); result.VerityResult.IsOk = false; throw ex; } } return(await Task.Run(() => result)); }