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); }
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); }