示例#1
0
        private void button_writeCard_Click(object sender, EventArgs e)
        {
            string strError = "";

            // 防止重入
            if (this.m_nIn > 0)
            {
                strError = "发生冲突。稍后重试";
                goto ERROR1;
            }

            bool bSucceed = false;
            int  nRet     = 0;

            this.m_nIn++;
            this.button_writeCard.Enabled = false;
            try
            {
                // 先完成数据库操作
                nRet = this.AmerceForm.Submit(
                    this.AmerceItems,
                    this.OverdueInfos,
                    false,
                    out strError);
                if (nRet == -1)
                {
                    goto ERROR1;
                }


                if (this.m_bBegined == false)
                {
                    obj.DisableSendKey();
                    this.m_bBegined = true;
                }

                string strUsedCardNumber = "";
                string strNewPrice       = "";
                int    nErrorCode        = 0;
                string strPassword       = "";


                int nRedoCount = 0;
REDO:
                // 扣款
                // parameters:
                //      strCardNumber   要求的卡号。如果为空,则表示不要求卡号,直接从当前卡上扣款
                //      strSubMoney 要扣的款额。例如:"0.01"
                //      strUsedCardNumber   实际扣款的卡号
                //      strPrice    扣款后的余额
                //      nErrorCode 原始错误码
                //          -1:连接串口错误;
                //          -2:没有发现卡片;
                //          -3:无法读取卡的唯一序列号;
                //          -4:装入密钥错误;
                //          -5:读卡错误;
                //          -6:卡已过有有效期;
                //          -7:密码错误
                //          -8:输入的金额太大;
                //          -9:写卡失败;
                // return:
                //      -1  出错
                //      0   没有卡
                //      1   成功扣款和获得信息
                //      2   虽然扣款成功,但是上传流水失败
                nRet = obj.SubCardMoney(this.CardNumber,
                                        this.SubmitPrice,
                                        strPassword,
                                        out strUsedCardNumber,
                                        out strNewPrice,
                                        out nErrorCode,
                                        out strError);
                if (nRet == 0)
                {
                    strError = "请放上IC卡,否则无法扣款";
                    goto ERROR1;
                }

                if (nRet == -1)
                {
                    if (nErrorCode == -7)
                    {
                        CardPasswordDialog dlg = new CardPasswordDialog();
                        MainForm.SetControlFont(dlg, this.Font, false);

                        if (nRedoCount == 0)
                        {
                            dlg.MessageText = "请(持卡者)输入IC卡密码";
                        }
                        else
                        {
                            dlg.MessageText = strError;
                        }

                        dlg.CardNumber    = this.CardNumber;
                        dlg.StartPosition = FormStartPosition.CenterScreen;
                        dlg.ShowDialog(this);

                        if (dlg.DialogResult != DialogResult.OK)
                        {
                            return; // 放弃扣款
                        }
                        strPassword = dlg.Password;
                        nRedoCount++;
                        goto REDO;
                    }

                    strError = "扣款错误:" + strError;
                    goto ERROR1;
                }

                // this.label_cardInfo.Text = "卡号: " + strCardNumber + "\r\n" + "卡上金额: " + strNewPrice;

                this.m_bDone = true;
                this.button_writeCard.Enabled = false;  // 避免再次扣款
                bSucceed = true;
                MessageBox.Show(this, "扣款 " + this.SubmitPrice + " 成功,新余额 " + strNewPrice);

                if (nRet == 2)
                {
                    MessageBox.Show(this, strError);
                }
            }
            catch (Exception ex)
            {
                strError = "错误:" + ex.Message;
                goto ERROR1;
            }
            finally
            {
                if (bSucceed == false)
                {
                    string strError_1 = "";
                    nRet = this.AmerceForm.RollBack(out strError_1);
                    if (nRet == -1)
                    {
                        strError_1 = "针对交费操作的Rollback失败: " + strError_1 + "\r\n请系统管理员进行手动清理";
                        MessageBox.Show(this, strError_1);
                    }
                }

                this.m_nIn--;

                if (this.m_bDone == false)
                {
                    this.button_writeCard.Enabled = true;
                }
            }

            this.DialogResult = DialogResult.OK;
            this.Close();
            return;

ERROR1:
            MessageBox.Show(this, strError);
        }
示例#2
0
        private void button_writeCard_Click(object sender, EventArgs e)
        {
            string strError = "";
            // 防止重入
            if (this.m_nIn > 0)
            {
                strError = "发生冲突。稍后重试";
                goto ERROR1;
            }

            bool bSucceed = false;
            int nRet = 0;

            this.m_nIn++;
            this.button_writeCard.Enabled = false;
            try
            {

                // 先完成数据库操作
                nRet = this.AmerceForm.Submit(
                    this.AmerceItems,
                    this.OverdueInfos,
                    false,
                    out strError);
                if (nRet == -1)
                    goto ERROR1;


                if (this.m_bBegined == false)
                {
                    obj.DisableSendKey();
                    this.m_bBegined = true;
                }

                string strUsedCardNumber = "";
                string strNewPrice = "";
                int nErrorCode = 0;
                string strPassword = "";


                int nRedoCount = 0;
                REDO:
                // 扣款
                // parameters:
                //      strCardNumber   要求的卡号。如果为空,则表示不要求卡号,直接从当前卡上扣款
                //      strSubMoney 要扣的款额。例如:"0.01"
                //      strUsedCardNumber   实际扣款的卡号
                //      strPrice    扣款后的余额
                //      nErrorCode 原始错误码
                //          -1:连接串口错误;
                //          -2:没有发现卡片;
                //          -3:无法读取卡的唯一序列号; 
                //          -4:装入密钥错误;
                //          -5:读卡错误;
                //          -6:卡已过有有效期;
                //          -7:密码错误
                //          -8:输入的金额太大;
                //          -9:写卡失败;
                // return:
                //      -1  出错
                //      0   没有卡
                //      1   成功扣款和获得信息
                //      2   虽然扣款成功,但是上传流水失败
                nRet = obj.SubCardMoney(this.CardNumber,
                    this.SubmitPrice,
                    strPassword,
                    out strUsedCardNumber,
                    out strNewPrice,
                    out nErrorCode,
                    out strError);
                if (nRet == 0)
                {
                    strError = "请放上IC卡,否则无法扣款";
                    goto ERROR1;
                }

                if (nRet == -1)
                {
                    if (nErrorCode == -7)
                    {
                        CardPasswordDialog dlg = new CardPasswordDialog();
                        MainForm.SetControlFont(dlg, this.Font, false);

                        if (nRedoCount == 0)
                            dlg.MessageText = "请(持卡者)输入IC卡密码";
                        else
                            dlg.MessageText = strError;

                        dlg.CardNumber = this.CardNumber;
                        dlg.StartPosition = FormStartPosition.CenterScreen;
                        dlg.ShowDialog(this);

                        if (dlg.DialogResult != DialogResult.OK)
                            return; // 放弃扣款

                        strPassword = dlg.Password;
                        nRedoCount++;
                        goto REDO;
                    }

                    strError = "扣款错误:" + strError;
                    goto ERROR1;
                }

                // this.label_cardInfo.Text = "卡号: " + strCardNumber + "\r\n" + "卡上金额: " + strNewPrice;

                this.m_bDone = true;
                this.button_writeCard.Enabled = false;  // 避免再次扣款
                bSucceed = true;
                MessageBox.Show(this, "扣款 " + this.SubmitPrice + " 成功,新余额 " + strNewPrice);

                if (nRet == 2)
                {
                    MessageBox.Show(this, strError);
                }
            }
            catch (Exception ex)
            {
                strError = "错误:" + ex.Message;
                goto ERROR1;
            }
            finally
            {
                if (bSucceed == false)
                {
                    string strError_1 = "";
                    nRet = this.AmerceForm.RollBack(out strError_1);
                    if (nRet == -1)
                    {
                        strError_1 = "针对交费操作的Rollback失败: " + strError_1 + "\r\n请系统管理员进行手动清理";
                        MessageBox.Show(this, strError_1);
                    }
                }

                this.m_nIn--;

                if (this.m_bDone == false)
                    this.button_writeCard.Enabled = true;
            }

            this.DialogResult = DialogResult.OK;
            this.Close();
            return;
        ERROR1:
            MessageBox.Show(this, strError);
        }