⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ca010.pas

📁 电子充值系统:全球通的充值卡通过POS机传到销售点.
💻 PAS
字号:
unit CA010;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  BaseDialog, StdCtrls, Db, DBTables, Buttons; 
type
  TfmCA010 = class(TfmBaseDialog)
    Label1: TLabel;
    Label2: TLabel;
    edFilePath: TEdit;
    OpenDialog1: TOpenDialog;
    BitBtn1: TBitBtn;
    GroupBox1: TGroupBox;
    RB1: TRadioButton;
    RB2: TRadioButton;
    Memo1: TMemo;
    Label3: TLabel;
    CB1: TComboBox;
    procedure bnOKClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function InsertIntoCardStock(sCardType,sPublishCode,sSerialNumber,sCardNo,
          sPassWord,sCardParValue,sEndDate:string):integer;
    function InsertIntoCardStockNotCommit(sCardType,sPublishCode,sSerialNumber,sCardNo,
          sPassWord,sCardParValue,sEndDate:string):integer;

    function GetCardInfoByLineStr(sLineStr :string; var sPublishCode:string; var sSerialNumber:string; var sCardNo:string;
      var sPassWord:string; var sCardParValue:string; var sEndDate:string; var sRet : string):integer;//01
   function GetCheckCode(sCardCode,sCardType,sPublishCode,sSerialNumber,sCardNo,
          sPassWord:string):string;
    procedure InsertWithoutRollback();
    procedure InsertWithRollbackAll();
    procedure PrepareDlg; override;
  end;

var
  fmCA010: TfmCA010;

implementation

uses PublicFunction, Main, DataModule,GetData;

var
  sPrevPassword : String;

{$R *.DFM}

procedure TfmCA010.PrepareDlg;
begin
  //edLoginID.Text := sLoginID;
  //edAdmName.Text := sAdmName;
end;

procedure TfmCA010.bnOKClick(Sender: TObject);
begin
  inherited;
  if RB1.Checked then
    InsertWithRollbackAll()
  else
    InsertWithoutRollback();
end;

procedure TfmCA010.InsertWithRollbackAll();
var
  strline :string;
  iRet : integer;
  sCardType,sPublishCode,sSerialNumber,sCardNo : string;
  sPassWord,sCardParValue,sEndDate,sRet : string;
  sMaxPublishCode,sMinSerialNumber,sMaxSerialNumber :string;
  fCount,fSuccess : real;
  bSuccess : boolean;
begin
  inherited;
  fCount := 0;
  fSuccess := 0;
  sCardType := CB1.Text;
  bSuccess := true;
  //读文件
  AssignFile(Input, edFilePath.text);
  Reset(Input);

  Memo1.Lines.Add( '导入数据开始。。。');

  DM.DB.StartTransaction;
  try
    while not Eof(Input) do
    begin
      Readln(Input, strline);
      fCount := fCount + 1;
      //分解字符串(返回发行编号、序号、卡号、密码、面值、截止日期,出错返回内容。)
      iRet := GetCardInfoByLineStr(strline,sPublishCode,sSerialNumber,sCardNo,
            sPassWord,sCardParValue,sEndDate,sRet);
      if fCount = 1 then sMinSerialNumber := sSerialNumber;

      if iRet = 0 then
      begin
        bSuccess := false;
        break;
      end
      else
      begin
        //插入到数据库
        iRet := InsertIntoCardStockNotCommit(sCardType,sPublishCode,sSerialNumber,sCardNo,
            sPassWord,sCardParValue,sEndDate);
        if iRet = 0 then
        begin
          bSuccess := false;
          break;
        end;
      end;
    end;
    sMaxSerialNumber := sSerialNumber;
    sMaxPublishCode := sPublishCode;
  except
    bSuccess := false;
  end;

  if bSuccess then
  begin
    DM.DB.Commit;
    WriteOperatorLog('[卡数据导入][Pwpt_CardStock]['+'总共处理'+floattostr(fCount)+
      '条。'+'发行编号['+sMaxPublishCode+']'+
      '最小序号['+sMinSerialNumber+']'+
      '最大序号'+sMaxSerialNumber+']');
    Memo1.Lines.Add( '导入数据结束。。。');
    Memo1.Lines.Add( '总共处理'+floattostr(fCount)+ '条。');
    CloseFile(Input);
  end
  else
  begin
    DM.DB.Rollback ;
    Memo1.Lines.Add( '导入数据结束。。。');
    Memo1.Lines.Add( '在第'+floattostr(fCount)+ '条导入失败!');
  end;
  CloseFile(Input);   
end;

procedure TfmCA010.InsertWithoutRollback();
var
  strline :string;
  iRet : integer;
  sCardType,sPublishCode,sSerialNumber,sCardNo : string;
  sPassWord,sCardParValue,sEndDate,sRet : string;
  sMaxPublishCode,sMinSerialNumber,sMaxSerialNumber :string;
  fCount,fSuccess : real;
begin
  inherited;
  fCount := 0;
  fSuccess := 0;
  sCardType := CB1.Text;
  //读文件
  if edFilePath.text ='' then
  begin
    MyWarning('文件不存在!');
    exit;
  end;

  AssignFile(Input, edFilePath.text);
  Reset(Input);

  Memo1.Lines.Add( '导入数据开始。。。');
  while not Eof(Input) do
  begin
    Readln(Input, strline);
    fCount := fCount + 1;
    //分解字符串(返回发行编号、序号、卡号、密码、面值、截止日期,出错返回内容。)
    iRet := GetCardInfoByLineStr(strline,sPublishCode,sSerialNumber,sCardNo,
          sPassWord,sCardParValue,sEndDate,sRet);
    if iRet = 1 then
    begin
     // Memo1.Lines.Add( sPublishCode +' '+ sSerialNumber +' '+ sCardNo +' '+
      //    sPassWord  +' '+ sCardParValue +' '+ sEndDate);
      //插入到数据库(卡种、发行编号、序号、卡号、密码、面值、截止日期。)
      iRet := InsertIntoCardStock(sCardType,sPublishCode,sSerialNumber,sCardNo,
          sPassWord,sCardParValue,sEndDate);
      if iRet = 0 then
        Memo1.Lines.Add( '第'+floattostr(fCount)+'条插入数据库出错!')
      else
      begin
        if fSuccess = 1 then sMinSerialNumber := sSerialNumber;
        fSuccess := fSuccess + 1;
        sMaxSerialNumber := sSerialNumber;
        sMaxPublishCode := sPublishCode;
      end;
    end;
  end;
  CloseFile(Input);

  WriteOperatorLog('[卡数据导入][Pwpt_CardStock]['+'总共处理'+floattostr(fCount)+
    '条,其中成功'+floattostr(fSuccess)+
    '条。'+'发行编号['+sMaxPublishCode+']'+
    '最小序号['+sMinSerialNumber+']'+
    '最大序号'+sMaxSerialNumber+']');

  Memo1.Lines.Add( '导入数据结束。。。');
  Memo1.Lines.Add( '总共处理'+floattostr(fCount)+
       '条,其中成功'+floattostr(fSuccess)+
       '条,出错'+floattostr(fCount - fSuccess)+'条。');
end;

procedure TfmCA010.BitBtn1Click(Sender: TObject);
begin
  inherited;
  OpenDialog1.Title := '选择导入文件';
  if OpenDialog1.Execute then begin
     edFilePath.text := OpenDialog1.FileName;
  end;
end;

function TfmCA010.GetCardInfoByLineStr(sLineStr :string; var sPublishCode:string; var sSerialNumber:string; var sCardNo:string;
   var sPassWord:string; var sCardParValue:string; var sEndDate:string; var sRet : string) : integer;
var
  ioff : integer;
begin
  GetCardInfoByLineStr := 0;
  if trim(sLineStr) = '' then
  begin
    sRet := '本条记录为空!';
    exit;
  end;
  ioff := 1;
  sPublishCode := copy(sLineStr,ioff,18);
  ioff := ioff + 18;
  sSerialNumber  := copy(sLineStr,ioff,6);

  ioff := pos(' ',sLineStr);
  sLineStr := trim(copy(sLineStr,ioff + 1,length(sLineStr)));

  ioff := pos(' ',sLineStr);
  sCardNo  :=  trim(copy(sLineStr,1,ioff - 1));
  sLineStr := trim(copy(sLineStr,ioff + 1,length(sLineStr)));

  ioff := pos(' ',sLineStr);
  sPassWord  :=  trim(copy(sLineStr,1,ioff - 1));
  sLineStr := trim(copy(sLineStr,ioff + 1,length(sLineStr)));

  ioff := pos(' ',sLineStr);
  sCardParValue :=  trim(copy(sLineStr,1,ioff - 1));
  sLineStr := trim(copy(sLineStr,ioff + 1,length(sLineStr)));

  ioff := pos(' ',sLineStr);
  sEndDate := trim(copy(sLineStr,1,ioff - 1));
  GetCardInfoByLineStr := 1;
end;

function TfmCA010.InsertIntoCardStock(sCardType,sPublishCode,sSerialNumber,sCardNo,
          sPassWord,sCardParValue,sEndDate:string):integer;
var
  sCardCode :string;
begin
  result := 0;
  DM.DB.StartTransaction;
  try
    with qyTemp do
    begin
      Close;
      SQL.Clear;
      SQL.Add('insert into Pwpt_CardStock (CardCode,CardType,  ');
      SQL.Add('CardParValue,PublishCode,SerialNumber,CardNo,  ');
      SQL.Add('PassWord,EndDate,CheckCode,CreateMan,CreateDate,bOut)  ');
      SQL.Add('values                     (:CardCode,:CardType,  ');
      SQL.Add(':CardParValue,:PublishCode,:SerialNumber,:CardNo,  ');
      SQL.Add(':PassWord,to_date(:EndDate,''yyyymmdd''),:CheckCode,:CreateMan,SysDate,''0'')  ');
      sCardCode := RightStr('0000000000' + floattostr(GetSerialID('PWPT_CARDSTOCK_ID')),10);
      ParamByName('CardCode').AsString := sCardCode;
      ParamByName('CardType').AsString := sCardType;
      ParamByName('CardParValue').AsString := sCardParValue;
      ParamByName('PublishCode').AsString := sPublishCode;
      ParamByName('SerialNumber').AsString := sSerialNumber;
      ParamByName('CardNo').AsString := sCardNo;
      ParamByName('PassWord').AsString := sPassWord;
      ParamByName('EndDate').AsString := sEndDate;
      ParamByName('CheckCode').AsString :=
         GetCheckCode(sCardCode,sCardType,sPublishCode,sSerialNumber,sCardNo,sPassWord) ;
      ParamByName('CreateMan').AsString := sAdmCode;
      ExecSQL;
    end;
    DM.DB.Commit;
    result := 1;
  except
    DM.DB.Rollback;
  end;
end;

function TfmCA010.InsertIntoCardStockNotCommit(sCardType,sPublishCode,sSerialNumber,sCardNo,
          sPassWord,sCardParValue,sEndDate:string):integer;
var
  sCardCode :string;
begin
  try
    with qyTemp do
    begin
      Close;
      SQL.Clear;
      SQL.Add('insert into Pwpt_CardStock (CardCode,CardType,  ');
      SQL.Add('CardParValue,PublishCode,SerialNumber,CardNo,  ');
      SQL.Add('PassWord,EndDate,CheckCode,CreateMan,CreateDate,bOut)  ');
      SQL.Add('values                     (:CardCode,:CardType,  ');
      SQL.Add(':CardParValue,:PublishCode,:SerialNumber,:CardNo,  ');
      SQL.Add(':PassWord,to_date(:EndDate,''yyyymmdd''),:CheckCode,:CreateMan,SysDate,''0'')  ');
      sCardCode := RightStr('0000000000' + floattostr(GetSerialID('PWPT_CARDSTOCK_ID')),10);
      ParamByName('CardCode').AsString := sCardCode;
      ParamByName('CardType').AsString := sCardType;
      ParamByName('CardParValue').AsString := sCardParValue;
      ParamByName('PublishCode').AsString := sPublishCode;
      ParamByName('SerialNumber').AsString := sSerialNumber;
      ParamByName('CardNo').AsString := sCardNo;
      ParamByName('PassWord').AsString := sPassWord;
      ParamByName('EndDate').AsString := sEndDate;
      ParamByName('CheckCode').AsString :=
        GetCheckCode(sCardCode,sCardType,sPublishCode,sSerialNumber,sCardNo,sPassWord) ;
      ParamByName('CreateMan').AsString := sAdmCode;
      ExecSQL;
    end;
    result := 1;
  except
    result := 0;
  end;
end;

function TfmCA010.GetCheckCode(sCardCode,sCardType,sPublishCode,sSerialNumber,sCardNo,
          sPassWord:string):string;
var
  i : integer;
  str :string;
  fsum : real;
begin
  fsum := 0;
  str :=  sCardCode + sCardType + sPublishCode + sSerialNumber + sCardNo + sPassWord;
  for i :=1 to length(str) do
  begin
    fsum := fsum + Ord(str[i]);
  end;
  result := RightStr('0000000000' + floattostr(fsum) + floattostr(Random(10000) * Random(10000)),10) ;
end;

procedure TfmCA010.FormCreate(Sender: TObject);
begin
  inherited;
  CB1.Clear;
  with qyTemp do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select CardType from Pwpt_CardType where bused = ''1'' ');
    SQL.Add('group by CardType order by CardType');
    Open;
  end;
  while  not qyTemp.Eof do
  begin
    CB1.Items.Add(qyTemp.fieldbyname('CardType').AsString);
    qyTemp.Next;
  end;
  if CB1.Items.Count > 0 then CB1.ItemIndex := 0;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -