private async Task InsertEventPendingConsoleAsync(Adapters.Oal.dbo_delivery_console_event_new parent, params string[] connoteNotes) { var pendingAdapter = new Adapters.Oal.dbo_event_pending_consoleAdapter(); var rows = new List <Adapters.Oal.dbo_event_pending_console>(); foreach (var connoteNo in connoteNotes) { rows.Add(GetPendingConsoleRow(parent.id, connoteNo)); foreach (var item in rows) { // verify the id, is not duplicate var pr = await Policy.Handle <SqlException>(e => e.IsTimeout()) .WaitAndRetryAsync(RetryCount, WaitInterval) .ExecuteAndCaptureAsync(() => pendingAdapter.LoadOneAsync(item.id)); var one = pr.Result; if (null != one) { continue; } // ignore insert exception await Policy.Handle <SqlException>(e => e.IsDeadlockOrTimeout()) .WaitAndRetryAsync(RetryCount, WaitInterval) .ExecuteAndCaptureAsync(() => pendingAdapter.InsertAsync(item)); } } }
private async Task <IEnumerable <Adapters.Oal.dbo_delivery_console_event_new> > GetEventRowsAsync( Adapters.Oal.dbo_delivery_console_event_new eventRow, IList <string> pendingConsoles, IList <string> consoleList, string consignmentNotes, int level = 0) { Console.Write("." + level); var list = new ConcurrentBag <Adapters.Oal.dbo_delivery_console_event_new>(); if (level > 4) { return(list); } var items = consignmentNotes.Split(new[] { ',', '\t' }, StringSplitOptions.RemoveEmptyEntries).ToArray(); foreach (var c in items) { var itemConNote = c; if (consoleList.Contains(itemConNote)) { continue; } var row = await CloneChildAsync(eventRow, itemConNote); list.Add(row); if (!IsConsole(itemConNote)) { continue; } consoleList.Add(itemConNote); var childConsignments = await GetItemConsigmentsFromConsoleDetailsAsync(itemConNote); if (null == childConsignments) { pendingConsoles.Add(itemConNote); continue; } var children = await GetEventRowsAsync(eventRow, pendingConsoles, consoleList, childConsignments.ToEmptyString().Trim(), level + 1); list.AddRange(children); } return(list); }
private async Task <Adapters.Oal.dbo_delivery_console_event_new> CloneChildAsync(Adapters.Oal.dbo_delivery_console_event_new parent, string consignmentNo) { var console = IsConsole(consignmentNo); var child = parent.Clone(); child.date_created_oal_date_field = DateTime.Now; child.id = GenerateId(34); child.consignment_no = consignmentNo; child.data_flag = "1"; child.item_type_code = console ? "02" : "01"; if (console) { child.item_consignments = await this.GetItemConsigmentsFromConsoleDetailsAsync(consignmentNo); } return(child); }