Example #1
0
        void GetTagInfo(ListViewItem item)
        {
            ItemInfo item_info = (ItemInfo)item.Tag;
            OneTag   tag       = item_info.OneTag;

            RfidChannel channel = StartRfidChannel(
                Program.MainForm.RfidCenterUrl,
                out string strError);

            if (channel == null)
            {
                strError = "StartRfidChannel() error";
                goto ERROR1;
            }
            try
            {
                GetTagInfoResult result = channel.Object.GetTagInfo("*", tag.UID);
                if (result.Value == -1)
                {
                    strError = result.ErrorInfo;
                    goto ERROR1;
                }

                tag.TagInfo = result.TagInfo;

                string hex_string = Element.GetHexString(result.TagInfo.Bytes, "4");

                item_info.LogicChipItem = LogicChipItem.FromTagInfo(result.TagInfo);
                item_info.LogicChipItem.PropertyChanged += LogicChipItem_PropertyChanged;
                this.Invoke((Action)(() =>
                {
                    string pii = item_info.LogicChipItem.PrimaryItemIdentifier;
                    // .FindElement(ElementOID.PII)?.Text;
                    ListViewUtil.ChangeItemText(item, COLUMN_PII, pii);
                    if (this.SelectedPII != null &&
                        pii == this.SelectedPII)
                    {
                        item.Font = new Font(item.Font, FontStyle.Bold);
                    }
                }));
                return;
            }
            catch (Exception ex)
            {
                strError = "ListTags() 出现异常: " + ex.Message;
                goto ERROR1;
            }
            finally
            {
                EndRfidChannel(channel);
            }
ERROR1:
            this.Invoke((Action)(() =>
            {
                ListViewUtil.ChangeItemText(item, COLUMN_PII, "error:" + strError);
                // 把 item 修改为红色背景,表示出错的状态
                SetItemColor(item, "error");
            }));
        }
Example #2
0
        // 装载芯片数据
        bool LoadChipData(string uid, ListViewItem item)
        {
            InventoryInfo info = new InventoryInfo
            {
                UID = uid,
            };
            GetTagInfoResult result = _driver.GetTagInfo(GetCurrentReaderName(), info);

            if (result.Value == -1)
            {
                this.Invoke((Action)(() =>
                {
                    SetItemColor(item, "error");
                    ListViewUtil.ChangeItemText(item, 1, $"error:{result.ErrorInfo},error_code:{result.ErrorCode}");
                }));
                return(false);
            }

            // 刷新 item 行
            ItemInfo tag_info = new ItemInfo
            {
                OldInfo   = result.TagInfo,
                LogicChip = LogicChipItem.FromTagInfo(result.TagInfo)
            };

            item.Tag = tag_info;

            tag_info.LogicChip.DSFID = tag_info.OldInfo.DSFID;
            tag_info.LogicChip.AFI   = tag_info.OldInfo.AFI;
            tag_info.LogicChip.EAS   = tag_info.OldInfo.EAS;

            tag_info.LogicChip.PropertyChanged += LogicChip_PropertyChanged;

            string pii = tag_info.LogicChip.FindElement(ElementOID.PII)?.Text;

            this.Invoke((Action)(() =>
            {
                ListViewUtil.ChangeItemText(item, 1, pii);
                ListViewUtil.ChangeItemText(item, 0, uid);
                SetItemColor(item, "normal");
            }));

            // 如果当前打开的 ChipDialog 正好是这个 UID,则更新它
            this.Invoke((Action)(() =>
            {
                SetChipDialogContent(item, uid);
            }));
            return(true);
        }
Example #3
0
        // 装入以前的标签信息
        // 如果读卡器上有多个标签,则出现对话框让从中选择一个。列表中和右侧 PII 相同的,优先被选定
        // parameters:
        //      strStyle    操作方式
        //                  auto_close_dialog  是否要自动关闭选择对话框。条件是选中了 auto_select_pii 事项
        //                  adjust_right    是否自动调整右侧元素。即,把左侧的锁定状态元素覆盖到右侧。调整前要询问。如果不同意调整,可以放弃,然后改为放一个空白标签并装载保存
        //                  saving  是否为了保存而装载?如果是,有些提示要改变
        // return:
        //      -1  出错
        //      0   放弃装载
        //      1   成功装载
        int LoadOldChip(
            string auto_select_pii,
            string strStyle,
            out string strError)
        {
            strError = "";

            bool auto_close_dialog = StringUtil.IsInList("auto_close_dialog", strStyle);
            bool adjust_right      = StringUtil.IsInList("adjust_right", strStyle);
            bool saving            = StringUtil.IsInList("saving", strStyle);

            try
            {
REDO:
                // 出现对话框让选择一个
                // SelectTagDialog dialog = new SelectTagDialog();
                using (RfidToolForm dialog = new RfidToolForm())
                {
                    dialog.Text                = "选择 RFID 读者卡";
                    dialog.OkCancelVisible     = true;
                    dialog.LayoutVertical      = false;
                    dialog.AutoCloseDialog     = auto_close_dialog;
                    dialog.SelectedPII         = auto_select_pii;
                    dialog.AutoSelectCondition = "auto_or_blankPII";    // 2019/1/30
                    dialog.ProtocolFilter      = InventoryInfo.ISO15693;
                    Program.MainForm.AppInfo.LinkFormState(dialog, "selectTagDialog_formstate");
                    dialog.ShowDialog(this);

                    if (dialog.DialogResult == DialogResult.Cancel)
                    {
                        strError = "放弃装载 RFID 读者卡内容";
                        return(0);
                    }

                    {
                        var old_chip = LogicChipItem.FromTagInfo(dialog.SelectedTag.TagInfo);

                        // 首先检查 typeOfUsage 是否为 8X
                        if (old_chip.IsBlank() == false && IsPatronUsage(old_chip) == false)
                        {
                            strError = "当前 RFID 标签是图书类型,不是读者卡类型。请小心不要弄混这两种类型";
                            string message = $"您所选择的 RFID 标签是图书类型,不是读者卡类型。请小心不要弄混这两种类型。\r\n\r\n是否重新选择?\r\n\r\n[是]重新选择 RFID 读者卡;\r\n[否]将这一种不吻合的 RFID 标签装载进来\r\n[取消]放弃装载";
                            if (saving)
                            {
                                message = $"您所选择的 RFID 标签是图书类型,不是读者卡类型。请小心不要弄混这两种类型。\r\n\r\n是否重新选择?\r\n\r\n[是]重新选择 RFID 读者卡;\r\n[否]将信息覆盖保存到这一种不吻合的 RFID 标签中(危险)\r\n[取消]放弃保存";
                            }

                            DialogResult temp_result = MessageBox.Show(this,
                                                                       message,
                                                                       "RfidPatronCardDialog",
                                                                       MessageBoxButtons.YesNoCancel,
                                                                       MessageBoxIcon.Question,
                                                                       MessageBoxDefaultButton.Button1);
                            if (temp_result == DialogResult.Yes)
                            {
                                goto REDO;
                            }
                            if (temp_result == DialogResult.Cancel)
                            {
                                strError = "放弃装载 RFID 读者卡内容";
                                return(0);
                            }
                            if (saving == false)
                            {
                                MessageBox.Show(this, "警告:您刚装入了一个可疑的读者卡,极有可能不是读者卡而是图书 RFID 标签。待会儿保存读者卡内容的时候,有可能会张冠李戴覆盖了它。保存读者卡内容前,请务必反复仔细检查");
                            }
                        }
                    }

                    if (auto_close_dialog == false
                        // && string.IsNullOrEmpty(auto_select_pii) == false
                        && dialog.SelectedPII != auto_select_pii &&
                        string.IsNullOrEmpty(dialog.SelectedPII) == false
                        )
                    {
                        string message = $"您所选择的读者卡其 PII 为 '{dialog.SelectedPII}',和期待的 '{auto_select_pii}' 不吻合。请小心检查是否正确。\r\n\r\n是否重新选择?\r\n\r\n[是]重新选择 RFID 读者卡;\r\n[否]将这一种不吻合的 RFID 读者卡装载进来\r\n[取消]放弃装载";
                        if (saving)
                        {
                            message = $"您所选择的读者卡其 PII 为 '{dialog.SelectedPII}',和期待的 '{auto_select_pii}' 不吻合。请小心检查是否正确。\r\n\r\n是否重新选择?\r\n\r\n[是]重新选择 RFID 读者卡;\r\n[否]将信息覆盖保存到这一种不吻合的 RFID 读者卡中(危险)\r\n[取消]放弃保存";
                        }

                        DialogResult temp_result = MessageBox.Show(this,
                                                                   message,
                                                                   "RfidPatronCardDialog",
                                                                   MessageBoxButtons.YesNoCancel,
                                                                   MessageBoxIcon.Question,
                                                                   MessageBoxDefaultButton.Button1);
                        if (temp_result == DialogResult.Yes)
                        {
                            goto REDO;
                        }
                        if (temp_result == DialogResult.Cancel)
                        {
                            strError = "放弃装载 RFID 读者卡内容";
                            return(0);
                        }
                        if (saving == false)
                        {
                            MessageBox.Show(this, "警告:您刚装入了一个可疑的读者卡,极有可能不是当前读者记录对应的读者卡。待会儿保存读者卡内容的时候,有可能会张冠李戴覆盖了它。保存读者卡内容前,请务必反复仔细检查");
                        }
                    }

                    var tag_info = dialog.SelectedTag.TagInfo;
                    _tagExisting = dialog.SelectedTag;

                    var chip = LogicChipItem.FromTagInfo(tag_info);
                    this.chipEditor_existing.LogicChipItem = chip;

                    if (adjust_right)
                    {
                        int nRet = Merge(this.chipEditor_existing.LogicChipItem,
                                         this.chipEditor_editing.LogicChipItem,
                                         out strError);
                        if (nRet == -1)
                        {
                            return(-1);
                        }

                        // 让右侧编辑器感受到 readonly 和 text 的变化
                        var save = this.chipEditor_editing.LogicChipItem;
                        this.chipEditor_editing.LogicChipItem = null;
                        this.chipEditor_editing.LogicChipItem = save;
                    }

                    return(1);
                }
            }
            catch (Exception ex)
            {
                strError = "出现异常: " + ex.Message;
                return(-1);
            }
        }
Example #4
0
        private void toolStripButton_saveRfid_Click(object sender, EventArgs e)
        {
            // 写入以前,装载标签内容到左侧,然后调整右侧(中间可能会警告)。然后再保存
            string strError = "";

            string pii = this._barcode;   // 从修改前的

            // 看左侧是否装载过。如果没有装载过则自动装载
            if (_leftLoaded == false)
            {
                // return:
                //      -1  出错
                //      0   放弃装载
                //      1   成功装载
                int nRet = LoadOldChip(pii,
                                       "adjust_right,saving",
                                       out strError);
                if (nRet == -1)
                {
                    goto ERROR1;
                }
                if (nRet == 0)
                {
                    strError = "已放弃保存 RFID 读者卡内容";
                    goto ERROR1;
                }
            }

            // 然后保存
            {
                int nRet = SaveNewChip(out strError);
                if (nRet == -1)
                {
                    goto ERROR1;
                }
            }

            MessageBox.Show(this, "保存成功");

            // 刷新左侧显示
            {
                // 用保存后的确定了的 UID 重新装载
                int nRet = LoadChipByUID(
                    _tagExisting.ReaderName,
                    _tagExisting.TagInfo.UID,
                    out TagInfo tag_info,
                    out strError);
                if (nRet == -1)
                {
                    _leftLoaded = false;
                    strError    = "保存 RFID 读者卡内容已经成功。但刷新左侧显示时候出错: " + strError;
                    goto ERROR1;
                }
                _tagExisting.TagInfo = tag_info;
                var chip = LogicChipItem.FromTagInfo(tag_info);
                this.chipEditor_existing.LogicChipItem = chip;
            }
            return;

ERROR1:
            MessageBox.Show(this, strError);
        }
Example #5
0
        // 写入右侧的信息到标签
        private void toolStripButton_saveRfid_Click(object sender, EventArgs e)
        {
            {
                BookItem item = this.Item.Clone();
                item.RecordDom = this._editing.DataDom;
                EnsureCreateAccessNo(item);
            }

            // 写入以前,装载标签内容到左侧,然后调整右侧(中间可能会警告)。然后再保存
            string strError = "";

            // string pii = this.chipEditor_editing.LogicChipItem.FindElement(ElementOID.PII).Text;
            string pii = GetPII(this.Item.OldRecord);   // 从修改前的册记录中获得册条码号

            // 看左侧是否装载过。如果没有装载过则自动装载
            if (_leftLoaded == false)
            {
                // return:
                //      -1  出错
                //      0   放弃装载
                //      1   成功装载
                int nRet = LoadOldChip(pii,
                                       "adjust_right,saving",
                                       // false, true,
                                       out strError);
                if (nRet == -1)
                {
                    goto ERROR1;
                }
                if (nRet == 0)
                {
                    strError = "已放弃保存 RFID 标签内容";
                    goto ERROR1;
                }
            }

            // 然后保存
            {
                int nRet = SaveNewChip(out strError);
                if (nRet == -1)
                {
                    goto ERROR1;
                }
            }

            // TODO: 改成类似 ShowMessage() 效果
            MessageBox.Show(this, "保存成功");

            // 刷新左侧显示
            {
                Debug.Assert(_tagExisting != null, "");

                Debug.WriteLine("222 " + (_tagExisting.TagInfo != null ? "!=null" : "==null"));

                Debug.Assert(_tagExisting.TagInfo != null, "");
                // 2019/9/30
                Debug.Assert(_tagExisting.AntennaID == _tagExisting.TagInfo.AntennaID, $"1 _tagExisting.AntennaID({_tagExisting.AntennaID}) 应该 == _tagExisting.TagInfo.AntennaID({_tagExisting.TagInfo.AntennaID})");

                // 用保存后的确定了的 UID 重新装载
                int nRet = LoadChipByUID(
                    _tagExisting.ReaderName,
                    _tagExisting.TagInfo.UID,
                    _tagExisting.AntennaID,
                    out TagInfo tag_info,
                    out strError);
                if (nRet == -1)
                {
                    _leftLoaded = false;
                    strError    = "保存 RFID 标签内容已经成功。但刷新左侧显示时候出错: " + strError;
                    goto ERROR1;
                }

                Debug.Assert(tag_info != null, "");

                _tagExisting.TagInfo   = tag_info;
                _tagExisting.AntennaID = tag_info.AntennaID;    // 2019/9/30

                Debug.WriteLine("set taginfo");
                var chip = LogicChipItem.FromTagInfo(tag_info);
                this.chipEditor_existing.LogicChipItem = chip;

#if NO
                string new_pii = this.chipEditor_editing.LogicChipItem.FindElement(ElementOID.PII)?.Text;

                // return:
                //      -1  出错
                //      0   放弃装载
                //      1   成功装载
                int nRet = LoadOldChip(new_pii,
                                       "auto_close_dialog",
                                       // true, false,
                                       out strError);
                if (nRet != 1)
                {
                    // this.chipEditor_existing.LogicChipItem = null;
                    _leftLoaded = false;
                    strError    = "保存 RFID 标签内容已经成功。但刷新左侧显示时候出错: " + strError;
                    goto ERROR1;
                }
#endif
            }
            return;

ERROR1:
            MessageBox.Show(this, strError);
        }
Example #6
0
        // 装入以前的标签信息
        // 如果读卡器上有多个标签,则出现对话框让从中选择一个。列表中和右侧 PII 相同的,优先被选定
        // parameters:
        //      strStyle    操作方式
        //                  auto_close_dialog  是否要自动关闭选择对话框。条件是选中了 auto_select_pii 事项
        //                  adjust_right    是否自动调整右侧元素。即,把左侧的锁定状态元素覆盖到右侧。调整前要询问。如果不同意调整,可以放弃,然后改为放一个空白标签并装载保存
        //                  saving  是否为了保存而装载?如果是,有些提示要改变
        // return:
        //      -1  出错
        //      0   放弃装载
        //      1   成功装载
        int LoadOldChip(
            string auto_select_pii,
            string strStyle,
#if NO
            bool auto_close_dialog,
            bool adjust_right,
#endif
            out string strError)
        {
            strError = "";

            bool auto_close_dialog = StringUtil.IsInList("auto_close_dialog", strStyle);
            bool adjust_right      = StringUtil.IsInList("adjust_right", strStyle);
            bool saving            = StringUtil.IsInList("saving", strStyle);

            try
            {
REDO:
                // 出现对话框让选择一个
                // SelectTagDialog dialog = new SelectTagDialog();
                RfidToolForm dialog        = new RfidToolForm();
                dialog.Text                = "选择 RFID 标签";
                dialog.OkCancelVisible     = true;
                dialog.LayoutVertical      = false;
                dialog.AutoCloseDialog     = auto_close_dialog;
                dialog.SelectedPII         = auto_select_pii;
                dialog.AutoSelectCondition = "auto_or_blankPII";    // 2019/1/30
                Program.MainForm.AppInfo.LinkFormState(dialog, "selectTagDialog_formstate");
                dialog.ShowDialog(this);

                if (dialog.DialogResult == DialogResult.Cancel)
                {
                    strError = "放弃装载 RFID 标签内容";
                    return(0);
                }

                if (auto_close_dialog == false
                    // && string.IsNullOrEmpty(auto_select_pii) == false
                    && dialog.SelectedPII != auto_select_pii &&
                    string.IsNullOrEmpty(dialog.SelectedPII) == false
                    )
                {
                    string message = $"您所选择的标签其 PII 为 '{dialog.SelectedPII}',和期待的 '{auto_select_pii}' 不吻合。请小心检查是否正确。\r\n\r\n是否重新选择?\r\n\r\n[是]重新选择 RFID 标签;\r\n[否]将这一种不吻合的 RFID 标签装载进来\r\n[取消]放弃装载";
                    if (saving)
                    {
                        message = $"您所选择的标签其 PII 为 '{dialog.SelectedPII}',和期待的 '{auto_select_pii}' 不吻合。请小心检查是否正确。\r\n\r\n是否重新选择?\r\n\r\n[是]重新选择 RFID 标签;\r\n[否]将信息覆盖保存到这一种不吻合的 RFID 标签中(危险)\r\n[取消]放弃保存";
                    }

                    DialogResult temp_result = MessageBox.Show(this,
                                                               message,
                                                               "EntityEditForm",
                                                               MessageBoxButtons.YesNoCancel,
                                                               MessageBoxIcon.Question,
                                                               MessageBoxDefaultButton.Button1);
                    if (temp_result == DialogResult.Yes)
                    {
                        goto REDO;
                    }
                    if (temp_result == DialogResult.Cancel)
                    {
                        strError = "放弃装载 RFID 标签内容";
                        return(0);
                    }
                    if (saving == false)
                    {
                        MessageBox.Show(this, "警告:您刚装入了一个可疑的标签,极有可能不是当前册对应的标签。待会儿保存标签内容的时候,有可能会张冠李戴覆盖了它。保存标签内容前,请务必反复仔细检查");
                    }
                }

                var tag_info = dialog.SelectedTag.TagInfo;
                _tagExisting = dialog.SelectedTag;

                var chip = LogicChipItem.FromTagInfo(tag_info);
                this.chipEditor_existing.LogicChipItem = chip;

                if (adjust_right)
                {
                    int nRet = Merge(this.chipEditor_existing.LogicChipItem,
                                     this.chipEditor_editing.LogicChipItem,
                                     out strError);
                    if (nRet == -1)
                    {
                        return(-1);
                    }

                    // 让右侧编辑器感受到 readonly 和 text 的变化
                    var save = this.chipEditor_editing.LogicChipItem;
                    this.chipEditor_editing.LogicChipItem = null;
                    this.chipEditor_editing.LogicChipItem = save;
                }

                return(1);
            }
            catch (Exception ex)
            {
                strError = "出现异常: " + ex.Message;
                return(-1);
            }
        }