📄 mainform.~pas
字号:
FeeStationState := STATE_CARD_READY ;
//用户卡的类型
CardUserType := USER_FIX;
//call DoReadCard
if DoReadCard() < 0 then
begin
end;
end
else begin //图象功能对比无效
end;
//向数据库中写入记录
end;
end //进出记录库有内容
else if mBMsg.IsPosBitOn(10,0) then
begin
//读取当前的进出记录
//gControl.ReadInOutRecords(4,0,mCardUse);
end
else begin
//如果没有卡进入
PreCardNum := 'FFFFFFFFFFFF';
CardNum := 'FFFFFFFFFFFF';
end;
//其他
end; // end mod 10 = 0
if ((MainTimerCounter+5) mod 10) = 0 then //每1000秒钟
begin
//读临时卡
try
mReader := TCardReader.Create(gConfig.ReaderPort);
//读物理卡号,判断有无卡
if mReader.ReadCard(mUse) < 0 then
begin
PhyCardNum := 'FFFFFFFFFFFF';
CardNum := 'FFFFFFFFFFFF';
goto lblNoCard;
end
else if mUse.Card = Copy(PhyCardNum,5,12) then
begin
goto lblDupCard;
end
else begin
PhyCardNum := 'FFFF' + mUse.Card;
end;
if mReader.ReadComplexCard(mCardUse) < 0 then
begin
CardNum := 'FFFFFFFFFFFF';
PhyCardNum := 'FFFFFFFFFFFF';
end
else begin //有临时卡
//既不是一卡通又不是停车卡
if (mCardUse.MainClass <> '01') and (mCardUse.MainClass <> '21') then
begin
gErrorRecord.Append(1,'不能识别的卡类型');
gErrorRecord.ToListView(lvError);
goto lblError;
end;
if mCardUse.SlaveClass <> '11' then
begin
gErrorRecord.Append(2,'本卡不是临时卡');
gErrorRecord.ToListView(lvError);
goto lblError;
end;
mFullCardNum := mCardUse.EnterAddr1 + mCardUse.EnterAddr2 + mCardUse.Card;
if CardNum <> mFullCardNum then
begin
Self.EnterAddr1 := mCardUse.EnterAddr1;
Self.EnterAddr2 := mCardUse.EnterAddr2;
CardNum := mFullCardNum;//带地址的卡号
LeaveTime := GetNow();
//没有瘦果任何费用
if (mCardUse.LeaveAddr1 = 'FF') and (mCardUse.LeaveAddr2 = 'FF') then
begin
EnterTime := mCardUse.EnterTime;
IsPayed := False;
end
//已经收过一次费用了
else begin
gErrorRecord.Append(2,'已经收过一次费用了');
gErrorRecord.ToListView(lvError);
EnterTime := mCardUse.LeaveTime;
IsPayed := True;
end;
//用户卡的类型
CardUserType := USER_CASUAL;
FeeStationState := STATE_CARD_READY ;
//call DoReadCard
if DoReadCard() < 0 then
begin
end;
end;
lblError:
end;//end 有临时卡
lblDupCard: //卡重复
lblNoCard: //没有卡
except
CardNum := 'FFFFFFFFFFFF';
EnterTime := StrToDateTime('1998-1-1');
end;
mReader.Free;
end;
if (MainTimerCounter mod 1000) = 0 then //每1000秒钟
begin
MainTimerCounter := 0; //清零,防止溢出
end;
end;
//结帐
function TfrmMain.BuyBill_remote(AMaintain: double): integer;
var
mConnection : TADOConnection;
begin
//fee_station-结帐次数加1,维护费用加AMaintain
mConnection := GetRemoteConnection();
if mConnection = nil then
begin
end;
with DM.tblFeeStation do
begin
Active := False;
Connection := mConnection ;
TableName := 'fee_station';
Filter := 'fee_station_id = ' + IntToStr(gStationId);
Filtered := True;
Active := True;
if RecordCount > 0 then
begin
Edit;
FieldByName('maintain_num').AsInteger := FieldByName('maintain_num').AsInteger + 1;
//FieldByName('').AsFloat := FieldByName('').AsFloat - AMaintain;
FieldByName('maintain_fee').AsFloat := FieldByName('maintain_fee').AsFloat + AMaintain;
Post;
end;
end;
//fee_maintain-增加结帐记录
//
Result := 1;
end;
//总结帐
function TfrmMain.BuyTotalBill_remote(AMaintain: double): integer;
var
mConnection : TADOConnection ;
mGetFee,mMaintainFee,mStartFee : double;
begin
//开始事务
//fee_station-结帐次数加1,维护费用AMaintain=0 ,start_fee增加
mConnection := GetRemoteConnection();
if mConnection = nil then
begin
end;
with DM.tblFeeStation do
begin
Active := False;
Connection := mConnection ;
TableName := 'fee_station';
Filter := 'fee_station_id = ' + IntToStr(gStationId);
Filtered := True;
Active := True;
if RecordCount > 0 then
begin
Edit;
FieldByName('maintain_num').AsInteger := FieldByName('maintain_num').AsInteger + 1;
mStartFee := FieldByName('start_fee').AsFloat;
mMaintainFee := FieldByName('maintain_fee').AsFloat;
mGetFee := FieldByName('leave_casual_money').AsFloat;
mStartFee := mStartFee + mGetFee - mMaintainFee - AMaintain;
FieldByName('start_fee').AsFloat := mStartFee;
FieldByName('maintain_fee').AsFloat := 0;
FieldByName('leave_casual_money').AsFloat := 0;
FieldByName('leave_casual_num').AsInteger := 0;
Post;
end;
end;
//fee_maintain-增加结帐记录
//
Result := 1;
end;
procedure TfrmMain.mmiDownLoadCardListClick(Sender: TObject);
var
mStr : string;
mAddr: string;
mPort : integer;
mDateTime : TDateTime;
mGroupId : integer;
mNow : TDateTime;
mConnection : TADOConnection;
begin
mNow := GetNow();
with DM.tblFeeStation do
begin
mConnection := GetRemoteConnection();
if mConnection = nil then mConnection := GetLocalConnection();
if mConnection = nil then
begin
//
end;
Active := False;
Connection := mConnection ;
Filter := 'fee_station_id = ' + IntToStr(gStationId);
Filtered := True;
TableName := 'fee_station';
Active := True;
if RecordCount > 0 then
begin
mAddr := FieldByName('control_addr').AsString;
mPort := FieldByName('control_port').AsInteger;
mDateTime := FieldByName('download_time').AsDateTime;
mGroupId := FieldByName('park_group_id').AsInteger;
end;
Active := False;
end;
try
frmConnect := TfrmConnect.Create(nil);
with frmConnect do
begin
Show();
ShowInformation('开始下载名单库数据...');
//下载所有的名单库
if DownLoadCard(mAddr,mPort,0,mGroupId) < 0 then
begin
ShowMessage('通讯故障,下载名单库数据失败!');
end
else begin
with DM.tblFeeStation do
begin
mConnection := GetRemoteConnection();
if mConnection = nil then mConnection := GetLocalConnection();
if mConnection = nil then
begin
//
end;
Active := False;
Connection := mConnection ;
Filter := 'fee_station_id = ' + IntToStr(gStationId);
Filtered := True;
TableName := 'fee_station';
Active := True;
//修改库表
if RecordCount > 0 then
begin
Edit;
FieldByName('download_time').AsDateTime := mNow;
Post;
end;
Active := False;
end;
ShowMessage('下载名单库数据-命令成功完成!');
end;
end;
finally
frmConnect.Free; //
end;
end;
procedure TfrmMain.tbnFloodOnClick(Sender: TObject);
begin
if gControl.OnOffCommand(ONOFF_FLOOD_LIGHT_ON) >= 0 then
begin
gErrorRecord.Append(5,'照明打开成功!');
gErrorRecord.ToListView(lvError);
ShowMessage('照明打开成功!');
end
else begin
gErrorRecord.Append(1,'通讯故障,照明灯打开失败!');
gErrorRecord.ToListView(lvError);
ShowMessage('通讯故障,照明灯打开失败!');
end;
end;
procedure TfrmMain.tbnFloodOffClick(Sender: TObject);
begin
if gControl.OnOffCommand(ONOFF_FLOOD_LIGHT_OFF) >= 0 then
begin
gErrorRecord.Append(4,'照明关闭成功!');
gErrorRecord.ToListView(lvError);
ShowMessage('照明关闭成功!')
end
else begin
gErrorRecord.Append(1,'通讯故障,照明灯关闭失败!');
gErrorRecord.ToListView(lvError);
ShowMessage('通讯故障,照明灯关闭失败!');
end;
end;
procedure TfrmMain.mmiLoseTicketClick(Sender: TObject);
var
mDateTime : TDateTime ;
begin
//处理票损坏
FeeStationState := STATE_CARD_READY ;
//用户卡的类型
CardUserType := USER_LOSE;
//========模拟相关的数据======
CardNum := '000000000000';
PhyCardNum := '000000000000';
mDateTime := GetNow();
EnterTime := mDateTime;
LeaveTime := mDateTime;
if DoReadCard() < 0 then
begin
end;
end;
procedure TfrmMain.mmiCheckTicketClick(Sender: TObject);
var
mReader :TCardReader;
mUse : TComplexCardUse;
mCounter : integer;
mForm : TfrmCheckCard;
begin
//
tmrMain.Enabled := False;
try
mReader := TCardReader.Create(gConfig.ReaderPort);
mCounter := 0;
while mCounter < 3 do
begin
if mReader.ReadComplexCard(mUse) >=0 then
begin
Break;
end;
mCounter := mCounter + 1;
end;
finally
mReader.Free;
end;
if mCounter >= 3 then
begin
ShowMessage('不能读卡,请将卡放到正确位置!');
end
else begin
try
mForm := TfrmCheckCard.Create(Self);
mForm.edtCardNum.Text := mUse.Card;
if mUse.MainClass = '01' then mForm.edtCardType.Text :='一卡通'
else if mUse.MainClass = '21' then mForm.edtCardType.Text :='停车场';
if mForm.edtCardType.Text = '' then mForm.edtCardType.Text := '非法卡'
else if mUse.SlaveClass = '11' then mForm.edtCardType.Text := mForm.edtCardType.Text + '临时卡'
else mForm.edtCardType.Text := mForm.edtCardType.Text + '固定卡';
mForm.edtEnterTime.Text := DateTimeToStr(mUse.EnterTime);
mForm.edtLeaveTime.Text := DateTimeToStr(mUse.LeaveTime);
mForm.edtEnterAddr.Text := mUse.EnterAddr1 + mUse.EnterAddr2 ;
mForm.edtLeaveAddr.Text := mUse.LeaveAddr1 + mUse.LeaveAddr2 ;
mForm.ShowModal();
finally
mForm.Free;
end;
end;
tmrMain.Enabled := True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -