📄 mainform.~pas
字号:
Filtered := true;
Open;
if RecordCount < 1 then
begin
Close;
Result := -1;
Exit;
end;
Edit;
FieldByName('leave_time').AsDateTime := GetFeeTime; //
FieldByName('fee_station_id').AsInteger := gStationId;
FieldByName('description').AsString := ' ';
//写入费用信息
FieldByName('fee').AsFloat := 0;
Post;
except
Close;
Result := -2;
Exit;
end; //end try
//execute well.
Close;
Result := 1;
end;
end;
//插入远程临时用户使用表
function TfrmMain.InsertTempCardUse_Remote(): integer;
var
mField : TField;
begin
with DM.tblTempCardUse do
begin
try
//
Close;
Connection := GetRemoteConnection();
TableName := 'temp_card_use';
Open;
Append; //插入一条记录
FieldByName('card_num').AsString := CardNum;
FieldByName('leave_time').AsDateTime := GetFeeTime; //
FieldByName('leave_station_id').AsInteger := gStationId;
FieldByName('description').AsString := ' ';
//写入费用信息
FieldByName('fee').AsFloat := 0;
Post;
except
Close;
Result := -1;
Exit;
end; //end try
//execute well.
Close;
Result := 1;
end;
end;
//收费记录表
function TfrmMain.InsertGetFee_remote(): integer;
begin
with DM.tblGetFee do
begin
try
//
Close;
Connection := GetRemoteConnection();
TableName := 'get_fee';
Open;
Append;
FieldByName('fee_station_id').AsInteger := gStationId;
FieldByName('employee_id').AsInteger := gEmployeeId;
FieldByName('get_fee_time').AsDateTime := GetFeeTime;
//应付费用
FieldByName('fee_ought').AsFloat := FeeOughtPay;
//实付费用
FieldByName('fee_pay').AsFloat := FeePayed;
FieldByName('card_type').AsInteger := CardUserType;
Post;
except
Close;
Result := -1;
Exit;
end; //end try
//execute well.
Close;
Result := 1;
end;
end;
function TfrmMain.InsertFeeStation_remote(): integer;
begin
with DM.tblFeeStation do
begin
try
//
Close;
Connection := GetRemoteConnection();
TableName := 'fee_station';
Filter := 'fee_station_id = ' + IntToStr(gStationId);
Filtered := True;
Open;
if RecordCount <> 1 then
begin
Close;
Result := -1;
Exit;
end;
Edit;
if CardUserType = USER_FIX then //固定用户
begin
FieldByName('leave_fix_num').AsInteger := FieldByName('leave_fix_num').AsInteger + 1;
end
else begin //临时用户
FieldByName('leave_casual_num').AsInteger := FieldByName('leave_casual_num').AsInteger + 1;
FieldByName('leave_casual_money').AsFloat := FieldByName('leave_casual_money').AsFloat + FeeOughtPay;
end;
Post;
except
Close;
Result := -1;
Exit;
end; //end try
//execute well.
Close;
Result := 1;
end;
end;
function TfrmMain.InsertShiftRecord_remote(): integer;
begin
with DM.tblShiftRecord do
begin
try
//
Close;
Connection := GetRemoteConnection();
TableName := 'shift_record';
Open;
Post;
except
Close;
Result := -1;
Exit;
end; //end try
//execute well.
Close;
Result := 1;
end;
end;
//==============================================
//======================高层函数===============
//==============================================
function TfrmMain.DoGetFee(ACardNum: string;
AEnterTime: TDateTime): integer;
begin
Self.CardNum := ACardNum;
Self.EnterTime := AEnterTime;
//call anther function
Result := DoGetFee();
end;
{
返回值
-1 //不能连接本地数据库
}
function TfrmMain.DoGetFee: integer;
var
mConn : TAdoConnection;
mSuccess: boolean;
mRet: integer;
label
lblError;
begin
mSuccess := false; //远程操作不成功
mConn := GetRemoteConnection();
if mConn <> nil then //能够连接远程的服务器
begin
//开始事务
mConn.BeginTrans;
//============================================
//----卡使用表--
//=============================================
if (CardUserType = USER_CASUAL) or (CardUserType = USER_LOSE) then //临时用户
begin
mRet := SaveTempCardUse_remote();
if mRet > 0 then //和远程的数据记录匹配成功
begin
end
else if mRet = -1 then //匹配不成功.
begin
//插入新的卡使用记录
mRet := InsertTempCardUse_remote();
if mRet < 0 then //插入不成功
begin
mConn.RollbackTrans;
goto lblError;
end;
end
else if mRet = -2 then //数据库错误
begin
mConn.RollbackTrans ;
goto lblError;//
end;
end
else begin //固定用户
mRet := SaveFixCardUse_remote();
if mRet > 0 then //和远程的数据记录匹配成功
begin
end
else if mRet = -1 then //匹配不成功.
begin
//插入新的卡使用记录
mRet := InsertFixCardUse_remote();
if mRet < 0 then
begin
mConn.RollbackTrans;
goto lblError;
end;
end
else if mRet = -2 then //数据库错误
begin
mConn.RollbackTrans;
goto lblError;//
end;
end;
//======处理表Get_Fee=========
if InsertGetFee_remote() < 0 then
begin
mConn.RollbackTrans ;
goto lblError;
end;
//======处理表Fee_station=====
if InsertFeeStation_remote()< 0 then
begin
mConn.RollbackTrans ;
goto lblError;
end;
//提交事务,置
mConn.CommitTrans;
mSuccess := true;
Exit;
end;
lblError:
Result := -1;
end;
//执行刷卡后的操作
function TfrmMain.DoReadCard: integer;
var
mScreen:TUserScreen;
begin
//for debug
pnlReadCard.Caption := CardNum;
//显示停车费用
if CardUserType = USER_FIX then
begin
FeeOughtPay := 0.0;
edtOughtPay.Text := FloatToStr(FeeOughtPay);
lblCard.Caption := '月卡用户';
//清除找零显示
edtPayed.Text := '';
edtChange.Text := '';
end
else if CardUserType = USER_CASUAL then
begin
FeeOughtPay := GetFeeNormal();
edtOughtPay.Text := FloatToStr(FeeOughtPay);
lblCard.Caption := '临时用户';
//清除找零显示
edtPayed.Text := '';
edtPayed.SetFocus();
edtChange.Text := '';
//在客户显示屏上显示
if CardUserType = USER_CASUAL then
begin
mScreen := TUserScreen.Create(gConfig.ScreenPort);
try
mScreen.DisplayTotal(FeeOughtPay);
finally
mScreen.Free;
end;
end;
end
else if CardUserType = USER_LOSE then
begin
FeeOughtPay := 10.0;
edtOughtPay.Text := FloatToStr(FeeOughtPay);
lblCard.Caption := '票丢失';
//清除找零显示
edtPayed.Text := '';
edtPayed.SetFocus();
edtChange.Text := '';
//在客户显示屏上显示
if CardUserType = USER_CASUAL then
begin
mScreen := TUserScreen.Create(gConfig.ScreenPort);
try
mScreen.DisplayTotal(FeeOughtPay);
finally
mScreen.Free;
end;
end;
end;
Result := 1;
end;
procedure TfrmMain.edtPayedKeyPress(Sender: TObject; var Key: Char);
var
mFee: double ;
mPter : TPter;
mScreen: TUserScreen;
mReader : TCardReader;
mRet : integer;
begin
//===============固定用户不用交停车费========
if CardUserType = USER_FIX then
begin
Key := #0;
Exit;
end;
if Key <> #13 then Exit;
if FeeStationState = STATE_WAIT_CARD then //没有刷卡
begin
//
end;
//数据转换处理
try
mFee := StrToFloat(edtPayed.Text);
except
ShowMessage('费用输入错误!');
Exit;
end;
if mFee < FeeOughtPay then //所付金额小于应付金额
begin
ShowMessage('费用不足!');
Exit;
end;
FeePayed := mFee;
//显示找零
edtChange.Text := FloatToStr(FeePayed - FeeOughtPay);
edtChange.Repaint();
//=========向卡中写入离开时间和离开地址====
if CardUserType = USER_CASUAL then
begin
mReader := TCardReader.Create(gConfig.ReaderPort);
mRet := mReader.WriteAddr(EnterAddr1,EnterAddr2,
Copy(gConfig.ControlAddr,1,2),Copy(gConfig.ControlAddr,3,2) );
if mRet < 0 then
begin
gErrorRecord.Append(1,'写入离开地址错误!');
gErrorRecord.ToListView(lvError);
end;
mRet := mReader.WriteLeaveTime(Self.LeaveTime);
if mRet < 0 then
begin
gErrorRecord.Append(1,'写入离开时间错误!');
gErrorRecord.ToListView(lvError);
end;
mReader.Free;
end;
//**************在客户显示屏中显示*************
mScreen := TUserScreen.Create(gConfig.ScreenPort);
try
mScreen.DisplayChange(FeePayed - FeeOughtPay);
finally
mScreen.Free;
end;
//****************打印时间和费用***************
mPter := TPter.CreateParented(Handle);
mPter.EnterTime := EnterTime;
mPter.LeaveTime := LeaveTime;
mPter.TotalFee := FeeOughtPay;
mPter.PrintMoney;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -