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

📄 mainform.~pas

📁 停车场收费系统停车场收费系统停车场收费系统停车场收费系统
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
                    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 + -