private async Task ResetDataAsync()
        {
            //恢复到上一步
            if (ScanedCount > 0)
            {
                if (await Application.Current.MainPage.DisplayAlert("提示", "确定要恢复至上一步吗", "确定", "取消"))
                {
                    ScanedCount = ScanedCount - 1;
                    //取最上面的一个进行恢复
                    if (App.CheckedAllocations.Count > 0)
                    {
                        var item = App.CheckedAllocations.Pop();
                        if (item.IsChecked == StateKind.Checked)
                        {
                            App.Allocations.First(p => p.MasterAwb == item.MasterAwb && p.SubAwb == item.SubAwb)
                            .IsChecked = StateKind.NoChecked;
                            Allots.First(p => p.MasterAwb == item.MasterAwb && p.SubAwb == item.SubAwb)
                            .IsChecked = StateKind.NoChecked;

                            //更新本地数据库中的数据
                            _realm.Write(() =>
                            {
                                var existedItem = _realm.All <AllocationData2>().FirstOrDefault(p => p.MasterAwb == item.MasterAwb && p.SubAwb == item.SubAwb);
                                if (existedItem != null)
                                {
                                    existedItem.IsChecked = 1;
                                }
                            });
                        }
                        else if (item.IsChecked == StateKind.OverChecked)
                        {
                            App.Allocations.Remove(item);
                            Allots.Remove(item);
                            //删除本地数据当中的数据
                            _realm.Write(() =>
                            {
                                var existedItem = _realm.All <AllocationData2>().FirstOrDefault(p => p.MasterAwb == item.MasterAwb && p.SubAwb == item.SubAwb);
                                if (existedItem != null)
                                {
                                    _realm.Remove(existedItem);
                                }
                            });
                        }
                        OnPropertyChanged(nameof(Summary));
                        await Application.Current.MainPage.DisplayAlert("提示", "已经恢复至上一步", "确定");
                    }
                }
            }
            else
            {
                await Application.Current.MainPage.DisplayAlert("提示", "已经恢复至初始状态", "确定");
            }
        }
        private void ShowAllDataAsync()
        {
            foreach (var item in App.Allocations)
            {
                if (Allots.FirstOrDefault(p => p.MasterAwb == item.MasterAwb && p.SubAwb == item.SubAwb) != null)
                {
                    continue;
                }
                Allots.Add(item);
            }

            MasterAwbs = allots.Distinct(p => p.MasterAwb).Select(p => p.MasterAwb).ToList();
            Count      = allots.Count;
        }
        private async Task SearchDataAsync()
        {
            try
            {
                if (string.IsNullOrWhiteSpace(SubNo))
                {
                    return;
                }
                if (string.IsNullOrWhiteSpace(SelectedMasterAwb))
                {
                    await Application.Current.MainPage.DisplayAlert("提示", "选择主单号", "确定");

                    return;
                }
                var rst        = App.Allocations.Where(p => p.MasterAwb == SelectedMasterAwb && p.SubAwb == SubNo.TrimEnd());
                var enumerable = rst as AllocationData[] ?? rst.ToArray();
                if (enumerable.Any())
                {
                    var firstItem = enumerable.First();
                    // 如果已经盘点过就不要再进行盘点
                    if (firstItem.IsChecked != StateKind.Checked)
                    {
                        //清理
                        Allots.Clear();
                        firstItem.IsChecked = StateKind.Checked;

                        App.Allocations.First(p => p.MasterAwb == SelectedMasterAwb && p.SubAwb == SubNo).IsChecked =
                            StateKind.Checked;
                        //更新缓存中的数据,因为需要同步到服务器上
                        //App.CheckedAllocations.First(p => p.MasterAwb == SelectedMasterAwb && p.SubAwb == SubNo).IsChecked =
                        //    StateKind.Checked;
                        if (App.CheckedAllocations.Contains(firstItem))
                        {
                            foreach (var data in App.CheckedAllocations)
                            {
                                if (data.MasterAwb == SelectedMasterAwb && data.SubAwb == SubNo)
                                {
                                    data.IsChecked = StateKind.Checked;
                                }
                            }
                        }
                        else
                        {
                            App.CheckedAllocations.Push(firstItem);
                        }
                        //这个是持久化保存,就是防止手持设备突然退出时候,数据能够备份
                        _realm.Write(() =>
                        {
                            var first = _realm.All <AllocationData2>().FirstOrDefault(p => p.MasterAwb == SelectedMasterAwb && p.SubAwb == SubNo);
                            if (first != null)
                            {
                                first.IsChecked = 2;
                            }
                            else
                            {
                                _realm.Add(new AllocationData2
                                {
                                    Amount    = firstItem.Amount,
                                    IsChecked = (int)firstItem.IsChecked,
                                    MasterAwb = firstItem.MasterAwb,
                                    SubAwb    = firstItem.SubAwb,
                                });
                            }
                        });

                        //判断是否需要查验
                        if (!string.IsNullOrWhiteSpace(firstItem.Status) && firstItem.Status.Contains("查验"))
                        {
                            chayanPlayer.Play();
                        }
                        else
                        {
                            okPlayer.Play();
                        }

                        Allots.Add(firstItem);
                        ScanedCount = ScanedCount + 1;
                        Count       = Allots.Count;
                    }
                }
                else
                {
                    //新增
                    yizhuangPlayer.Play();
                    //http://101.201.28.235:91/version/nodata.wav
                    //await CrossMediaManager.Current.Play("http://101.201.28.235:91/version/nodata.wav");
                    if (await Application.Current.MainPage.DisplayAlert("提示", "是否标记为溢装到货", "确定", "取消"))
                    {
                        Allots.Clear();
                        var newItem = new AllocationData
                        {
                            IsChecked = StateKind.OverChecked,
                            MasterAwb = SelectedMasterAwb,
                            SubAwb    = SubNo,
                            Amount    = 1
                        };
                        Allots.Add(newItem);
                        Count = allots.Count;
                        App.Allocations.Add(newItem);
                        App.CheckedAllocations.Push(newItem);
                        ScanedCount = ScanedCount + 1;
                        //添加到本地数据库
                        _realm.Write(() =>
                        {
                            _realm.Add(new AllocationData2
                            {
                                Amount    = 1,
                                IsChecked = 3,
                                MasterAwb = SelectedMasterAwb,
                                SubAwb    = SubNo,
                            });
                        });
                    }
                }
                //TODO: 需要找到扫码完成之后选中文本
                SubNo = string.Empty;
                OnPropertyChanged(nameof(Summary));
            }
            catch (Exception ex)
            {
                await Application.Current.MainPage.DisplayAlert("提示", $"盘点出错:{ex.Message}", "确定");
            }
        }