コード例 #1
0
        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));
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }