Ejemplo n.º 1
0
        void FillEntity(BaseChannel <IRfid> channel,
                        Entity entity,
                        delegate_speakLocation func_speakLocation)
        {
            var info = entity.Tag as ProcessInfo;

            // 是否强迫获取标签内容
            bool force = info.GetTagInfoError == "errorGetTagInfo" ||
                         StringUtil.IsInList("verifyEAS", ActionMode);

            // bool force = info.GetTagInfoError == "errorGetTagInfo"; // testing

            // 2020/10/7
            // 尝试获取 PII
            if (string.IsNullOrEmpty(entity.PII) ||
                force)
            {
                if (InventoryData.UidExsits(entity.UID, out string pii) &&
                    force == false)
                {
                    entity.PII = pii;
                    var set_result = SetTargetCurrentLocation(info);
                    if (set_result.Value == -1 && set_result.ErrorCode == "noCurrentShelfNo")
                    {
                        // 删除这个事项,以便后面可以重新处理
                        RemoveEntity(entity);
                    }
                }
                else
                {
                    string error = null;
                    if (channel.Started == false)
                    {
                        error = "22 RFID 通道尚未启动";
                    }
                    else
                    {
                        var get_result = channel.Object.GetTagInfo(entity.ReaderName, entity.UID, Convert.ToUInt32(entity.Antenna), "quick");

                        /*
                         * // testing
                         * get_result.Value = -1;
                         * get_result.ErrorInfo = "GetTagInfo() error error 1234 error 1345";
                         */

                        if (get_result.Value == -1)
                        {
                            SoundMaker.ErrorSound();

                            // 朗读出错 entity 数量
                            var count = InventoryData.AddErrorEntity(entity, out bool changed);
                            if (changed == true)
                            {
                                App.CurrentApp.SpeakSequence(count.ToString());
                            }

                            info.GetTagInfoError = "errorGetTagInfo";
                            info.ErrorCount++;
                            error = get_result.ErrorInfo;

                            // TODO: 当有一行以上 GetTagInfo() 出错时,要不断发出响声警告。
                            entity.Error = error;

                            if (info.ErrorCount > 5)
                            {
                                if (func_speakLocation?.Invoke(entity) == true)
                                {
                                    info.ErrorCount = 0;
                                }
                            }
                        }
                        else
                        {
                            entity.Error = null;

                            // 把 PII 显示出来
                            InventoryData.UpdateEntity(entity,
                                                       get_result.TagInfo,
                                                       out string type);
                            info.GetTagInfoError = "";

                            // 层架标
                            if (type == "location")
                            {
                                info.IsLocation = true;
                                if (string.IsNullOrEmpty(entity.PII) == false)
                                {
                                    // 设置当前层架标
                                    SwitchCurrentShelfNo(entity);
                                }
                            }
                            else
                            {
                                var set_result = SetTargetCurrentLocation(info);
                                if (set_result.Value == -1 && set_result.ErrorCode == "noCurrentShelfNo")
                                {
                                    // 删除这个事项,以便后面可以重新处理
                                    RemoveEntity(entity);
                                }
                            }

                            // 朗读出错 entity 数量
                            var count = InventoryData.RemoveErrorEntity(entity, out bool changed);
                            if (changed == true)
                            {
                                App.CurrentApp.SpeakSequence(count.ToString());
                            }

                            if (StringUtil.IsInList("blankTag", entity.ErrorCode))
                            {
                                App.CurrentApp.SpeakSequence(entity.Error);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        void FillEntity(BaseChannel <IRfid> channel,
                        Entity entity,
                        delegate_speakLocation func_speakLocation)
        {
            var info = entity.Tag as ProcessInfo;

            // 2020/10/7
            // 尝试获取 PII
            if (string.IsNullOrEmpty(entity.PII))
            {
                if (InventoryData.UidExsits(entity.UID, out string pii))
                {
                    entity.PII = pii;
                }
                else
                {
                    string error = null;
                    if (channel.Started == false)
                    {
                        error = "RFID 通道尚未启动";
                    }
                    else
                    {
                        var get_result = channel.Object.GetTagInfo(entity.ReaderName, entity.UID, Convert.ToUInt32(entity.Antenna), "quick");

                        /*
                         * // testing
                         * get_result.Value = -1;
                         * get_result.ErrorInfo = "GetTagInfo() error error 1234 error 1345";
                         */

                        if (get_result.Value == -1)
                        {
                            SoundMaker.ErrorSound();

                            // 朗读出错 entity 数量
                            var count = InventoryData.AddErrorEntity(entity, out bool changed);
                            if (changed == true)
                            {
                                App.CurrentApp.SpeakSequence(count.ToString());
                            }

                            info.State = "errorGetTagInfo";
                            info.ErrorCount++;
                            error = get_result.ErrorInfo;

                            // TODO: 当有一行以上 GetTagInfo() 出错时,要不断发出响声警告。
                            entity.Error = error;

                            if (info.ErrorCount > 5)
                            {
                                if (func_speakLocation?.Invoke(entity) == true)
                                {
                                    info.ErrorCount = 0;
                                }
                            }
                        }
                        else
                        {
                            entity.Error = null;

                            // 把 PII 显示出来
                            InventoryData.UpdateEntity(entity, get_result.TagInfo);
                            info.State = "";

                            // 朗读出错 entity 数量
                            var count = InventoryData.RemoveErrorEntity(entity, out bool changed);
                            if (changed == true)
                            {
                                App.CurrentApp.SpeakSequence(count.ToString());
                            }

                            if (StringUtil.IsInList("blankTag", entity.ErrorCode))
                            {
                                App.CurrentApp.SpeakSequence(entity.Error);
                            }
                        }
                    }
                }
            }

            if (string.IsNullOrEmpty(entity.PII) == false &&
                string.IsNullOrEmpty(info.State))
            {
                info.State = "processing";  // 正在获取册信息
                InventoryData.AppendList(entity);
                InventoryData.ActivateInventory();
            }
        }