You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

373 lines
25 KiB
C++

#ifndef PARAMMANAGER_H
#define PARAMMANAGER_H
#include <QObject>
#include <QString>
#include "libdbf.h"
#include <QLibrary>
#include <QSqlDatabase>
#include <QStringList>
#include "Defines.h"
#include <QMutex>
#include <QDateTime>
#include <vector>
#ifdef PARAMMANAGER_LANE
#include <QSplashScreen>
#include "libFee.h"
#include "OBUCardTypes.h"
#include "RSUFrameTypes.h"
#include "CPCCardTypes.h"
#include "OBUCardInfoHelper.h"
#include "TransQueue.h"
#endif
using namespace Qt;
using namespace std;
#ifndef INVALID_HANDLE_VALUE
#define INVALID_HANDLE_VALUE ((HANDLE)-1)
#endif
#define PFILE_INIT_COUNT 29
#define PFILE_ID_STATION 1 //站名编码
#define PFILE_ID_SQUAD 2 //工班
#define PFILE_ID_OPERATOR 3 //操作人员
#define PFILE_ID_LANE 4 //车道参数
#define PFILE_ID_BASICINFO 5 //基础信息hex-->id
//#define PFILE_ID_BASICINFOID 6 //基础信息id--hex
#define PFILE_ID_ROADPRICE 7 //费率表
#define PFILE_ID_OPENPRICE 8 //开放费率表
#define PFILE_ID_MINPATHFEE 9 //最小费额表
#define PFILE_ID_HOLIDAY 10 //节假日
#define PFILE_ID_HIGHWAY 11 //HIGHWAY.INI
#define PFILE_ID_ISSUER_LIST 12 //发行方
#define PFILE_ID_ADMIN 13 //行政车
#define PFILE_ID_ADMIN_OPEN 14 //行政车
#define PFILE_ID_GAPPOINTALL 15 //绿通预约全量
#define PFILE_ID_GAPPOINTINC 16 //绿通预约增量
#define PFILE_ID_BIGAPPOINT 17 //大件车全量
#define PFILE_ID_BIGBLACK 18 //大件车增量
#define PFILE_ID_SNBLACKLIST 19 //信用名单全量
#define PFILE_ID_SNBLACKLISTINC 20 //信用名单增量
#define PFILE_ID_CARDBLACKLIST 21 //ETC卡黑名单全量
#define PFILE_ID_CARDBLACKLISTINC 22 //ETC卡黑名单增量
#define PFILE_ID_OBUBLACK 23 //OBU黑名单全量
#define PFILE_ID_OBUBLACKINC 24 //OBU黑名单增量
#define PFILE_ID_VEHICLEBLACK 25 //车辆黑名单全量
#define PFILE_ID_VEHICLEBLACKINC 26 //车辆黑名单增量
#define PFILE_ID_VEHICLEGRAY 27 //车辆灰名单全量
#define PFILE_ID_VEHICLEGRAYINC 28 //车辆灰名单全量
//#define PFILE_ID_CPCGRAY 29 //CPC灰名单全量
//#define PFILE_ID_CPCGRAYINC 30 //CPC灰名单增量
#define PFILE_ID_DISCOUNT 31 //折扣表
#define PFILE_ID_EMERCARALL 32 //抢险救灾全量
#define PFILE_ID_EMERCARINC 33 //抢险救灾增量
#define PFILE_TYPE_DBF 1
#define PFILE_TYPE_SQB 2
#define PFILE_TYPE_INI 3
#define PFILE_LOADTYPE_DBF 1 //dbf加载
#define PFILE_LOADTYPE_HASH 2 //DBFHASH
#define PFILE_LOADTYPE_SQB 3 //SQLLITE
#define PFILE_LOADTYPE_INI 4 //INI
#define PFILE_LOADTYPE_FEE 5 //最小费额额,动态库加载
#ifdef PARAMMANAGER_LANE
#define CHECKLOADMODE(A,B) gLaneApp->CheckLoadMode(A)
#define SHOWINFO(A,B) gLaneApp->ShowInfo(A,B)
#define STEP_TIME gLaneApp->m_cfg.m_FuncParam.StepTime
#else
#define CHECKLOADMODE(A,B) CheckLoadMode(A,B)
#define SHOWINFO(A,B)
#define ERROR_CODE_BASE_CARD 0x0500
#define ERROR_CODE_BASE_CALCFEE 0x0A00
#define STEP_TIME 30
#endif
typedef struct PFileInfo
{
int PFileId; //参数文件ID,有PFILE_ID定义
QString PFileCode; //参数缩写编码
QString PFileName; //参数文件名
QString PFileCName; //参数文件中文名称
qint64 PFileGenTime; //参数文件生成时间 //toMSecsSinceEpoch
int RoadNo; //参数所属路段编码(最小费额)
int StaNo; //参数所属收费站编码(最小费额)
int FileType; //文件类型 1=DBF,2-SQB,3-INI
int LoadType; //加载方式 1-DBF加载 2-DBFhash加载 3SQB加载,4INI加载
int LoadMode; //加载模式
bool IsPrivateParam; //是否私有参数
bool IsRealUpdate; //是否实时加载
bool IsCheckStation; //是否检测收费站
bool IsCheckStartDate; //是否检测启用日期
QString StartDateFieldName; //启用日期字段名称
QString RoadNoFieldName;
QString StaNoFieldName;
QString VersionFieldName; //参数版本字段名
bool IsNeedUpdate; //需要进行参数更新标识
bool Loading; //是否正在加载
QString HashKeyFieldName; //hash key字段
QString HashValueFieldName; //hash value字段
LibDBF *pDBF; //DBF文件指针
HANDLE hHash; //hashdbf句柄
QLibrary *pLib; //dll对象指针
QStringList *pIniList; //base目录highway.ini
QSqlDatabase *pDBSQLite;
QSqlQuery *pQrySQLite;
}CPFileInfo;
typedef struct LaneOption
{
int bLoaded = 0;
int MinETCRate;
int MaxETCRate;
int MinCPCRate;
int MaxCPCRate;
int MaxHCRate;
int MaxOnLineRate;
int MaxHCOnLineRate;
}CLaneOption;
typedef struct tagBlackItem
{
qint64 CreateTime; //毫秒
int Status; //
int State; //1--进入黑名单 2--解除黑名单
}CBlackItem;
class CParamMan : public QObject
{
Q_OBJECT
private:
QMutex m_Mutex;
CPFileInfo m_PFileInitInfo[PFILE_INIT_COUNT] = {
{PFILE_ID_STATION,QString("ROADCODE"),QString("ROADCODE.DBF"),QString("站名编码表"), 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_DBF,LOAD_MODE_ANY, false,false,false,true,QString("BEGDATE"),QString(""),QString(""), QString("BEGDATE"),false,false,QString(""), QString(""), NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_SQUAD,QString("SQUAD"),QString("SQUAD.DBF"),QString("工班表"), 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_DBF, LOAD_MODE_ANY,false,false,false,true,QString("BEGDATE"),QString(""),QString(""), QString("BEGDATE"),false,false,QString(""),QString(""), NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_OPERATOR,QString("OPERATOR"),QString("OPERATOR.DBF"),"操作员表", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_DBF,LOAD_MODE_ANY, false,false,true,true,"BEGDATE","ROADNO","STANO","BEGDATE",false,false,"","", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_LANE,QString("LANE"),QString("LANE.DBF"),"车道参数表", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_DBF,LOAD_MODE_HIGHWAY, false,false,false,true,"BEGDATE","","","BAK1",false,false,"","", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_BASICINFO,QString("BASICINFO"),QString("BASICINFO.SQB"),"基础信息", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_HIGHWAY, false,false,false,true,"BEGDATE","","","VERNO",false,false,"HEX","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
//{PFILE_ID_BASICINFOID,QString("BASICINFOID"),QString("BASICINFO.DBF"),"基础信息ID", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_HIGHWAY, false,false,false,true,"BEGDATE","","","VERNO",false,false,"ID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_ROADPRICE,QString("PRICELIB"),QString("PRICELIB.SQB"),"费率表SQB", 0, 0, 0, PFILE_TYPE_SQB, PFILE_LOADTYPE_FEE,LOAD_MODE_OUT, false,false,false,true,"BEGDATE","","","IDX",false,false,"","", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_OPENPRICE,QString("PRICELIB"),QString("PRICEOPEN.DBF"),"费率表DBF", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_DBF,LOAD_MODE_OPEN, false,false,false,true,"BEGDATE","","","IDX",false,false,"","", NULL, 0, NULL, NULL, NULL,NULL}, //
//{PFILE_ID_MINPATHFEE,QString("ALLROADMINFEE"),QString("ALLROADMINFEE.SQB"),"最小费额", 0, 0, 0, PFILE_TYPE_SQB, PFILE_LOADTYPE_SQB,LOAD_MODE_HIGHWAYOUT, false,false,true,true,"VALIDTIME","exID","exID","SUBSTR(VERSION,3,9)",false,false,"ALLROADMINFEE_TABLE","", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_HOLIDAY,QString("HOLIDAY"),QString("HOLIDAY.DBF"),"节假日表", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_DBF,LOAD_MODE_ANY, false,false,false,true,"BEGDATE","","","VERNO",false,false, "","",NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_HIGHWAY,QString("HIGHWAY"),QString("HIGHWAY.INI"),"车道配置", 0, 0, 0, PFILE_TYPE_INI, PFILE_LOADTYPE_INI,LOAD_MODE_ANY, false,false,false,true,"BEGDATE","","","",false,false, "","",NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_ISSUER_LIST,QString("PARTICIPANT"),QString("PARTICIPANT.DBF"),"发行方表", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_DBF,LOAD_MODE_ANY, false,false,false,true,"BEGDATE","","","VERNO",false,false, "","",NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_ADMIN,QString("ADMIN"),QString("ADMIN.DBF"),"行政车表DBF", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_DBF,LOAD_MODE_HIGHWAYOUT, false,false,false,true,"BEGDATE","","","VERNO",false,false, "","",NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_ADMIN_OPEN,QString("ADMIN"),QString("CARNOTABLE.SQB"),"行政车表SQB", 0, 0, 0, PFILE_TYPE_SQB, PFILE_LOADTYPE_SQB,LOAD_MODE_OPEN, false,false,false,true,"BEGDATE","","","VERNO",false,false,"","", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_GAPPOINTALL,QString("GAPPOINTALL"),QString("GREENAPPOINTALL.SQB"),"绿通全量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_HIGHWAYOUT, false,true,false,false,"","","","VERNO",false,false,"VEHID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_GAPPOINTINC,QString("GAPPOINTINC"),QString("GREENAPPOINTINC.SQB"),"绿通增量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_HIGHWAYOUT, false,true,false,false,"","","","VERNO",false,false,"VEHID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_BIGAPPOINT,QString("BIGAPPOINT"),QString("BIGAPPOINT.SQB"),"大件车表", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_HIGHWAY, false,true,false,false,"","","","VERNO",false,false,"TRACTVEHID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_BIGBLACK,QString("BIGBLACK"),QString("BIGBLACK.SQB"),"大件车黑名单表", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_IN, false,true,false,false,"","","","VERNO",false,false, "VEHID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_SNBLACKLIST,QString("SNBLACK"),QString("SNBLACKLISTALL.SQB"),"追缴全量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_HIGHWAY, false,true,false,false,"","","","BACKUP2",false,false,"VEHICLEID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_SNBLACKLISTINC,QString("SNBLACKINC"),QString("SNBLACKLISTINC.SQB"),"追缴增量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_HIGHWAY, false,true,false,false,"","","","BACKUP2",false,false,"VEHICLEID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_CARDBLACKLIST,QString("CPUBLACK"),QString("CARDBLACKLISTALL.SQB"),"ETC卡全量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false,"CARDID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_CARDBLACKLISTINC,QString("CPUBLACKINC"),QString("CARDBLACKLISTINC.SQB"),"ETC卡增量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false,"CARDID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_OBUBLACK,QString("OBUBLACK"),QString("OBUBLACKLISTALL.SQB"),"OBU全量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false, "OBUID","STATUS",NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_OBUBLACKINC,QString("OBUBLACKINC"),QString("OBUBLACKLISTINC.SQB"),"OBU增量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false,"OBUID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_VEHICLEBLACK,QString("VEHICLEBLACK"),QString("VEHICLEBLACKLISTALL.SQB"),"车辆黑名单", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH, LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false,"VEHICLEID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_VEHICLEBLACKINC,QString("VEHICLEBLACKINC"),QString("VEHICLEBLACKLISTINC.SQB"),"车辆黑名单增量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH, LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false,"VEHICLEID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_VEHICLEGRAY,QString("VEHICLEGRAY"),QString("VEHICLEGRAYLISTALL.SQB"),"车辆灰名单", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false,"VEHICLEID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_VEHICLEGRAYINC,QString("VEHICLEGRAYINC"),QString("VEHICLEGRAYLISTINC.SQB"),"车辆灰名单增量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false,"VEHICLEID","STATUS", NULL, 0, NULL, NULL, NULL,NULL},
//{PFILE_ID_CPCGRAY,QString("CPCGRAY"),QString("CPCGRAYALL.SQB"),"CPC灰名单", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false,"CARDID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
//{PFILE_ID_CPCGRAYINC,QString("CPCGRAYINC"),QString("CPCGRAYINC.SQB"),"CPC灰名单增量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_ANY, false,true,false,false,"","","","BACKUP2",false,false,"CARDID","STATUS", NULL, 0, NULL, NULL, NULL,NULL},
{PFILE_ID_DISCOUNT,QString("DISCOUNTINFO"),QString("DISCOUNTINFO.DBF"),"折扣率", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_DBF,LOAD_MODE_OUT, false,true,false,false,"","","","VERNO",false,false,"","", NULL, 0, NULL, NULL, NULL,NULL},
{PFILE_ID_EMERCARALL,QString("EMERCARALL"),QString("EMERCARALL.SQB"),"抢险救灾名单", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_HIGHWAYOUT, false,true,false,false,"","","","BACKUP2",false,false,"VEHICLEID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}, //
{PFILE_ID_EMERCARINC,QString("EMERCARINC"),QString("EMERCARINC.SQB"),"抢险救灾名单增量", 0, 0, 0, PFILE_TYPE_DBF, PFILE_LOADTYPE_HASH,LOAD_MODE_HIGHWAYOUT, false,true,false,false,"","","","BACKUP2",false,false,"VEHICLEID","STATUS", NULL, 0, NULL, NULL, NULL,NULL}
};
CPFileInfo m_PFileMinFeeInfo = {PFILE_ID_MINPATHFEE,QString("ALLROADMINFEE"),QString("ALLROADMINFEE.SQB"),"最小费额", 0, 0, 0, PFILE_TYPE_SQB, PFILE_LOADTYPE_SQB,LOAD_MODE_HIGHWAYOUT, false,false,false,true,"VALIDTIME","exID","exID","SUBSTR(VERSION,3,9)",false,false,"ALLROADMINFEE_TABLE","", NULL, 0, NULL, NULL, NULL,NULL};
vector<CPFileInfo> m_PFileInfo;
///////////////////////////////////////
//费率模块动态库
#ifdef PARAMMANAGER_LANE
FUNC_getPath getPath;
FUNC_init init;
FUNC_deInit deInit;
FUNC_getLibVersion getLibVersion;
FUNC_getFeeDataVersion getFeeDataVersion;
FUNC_getFee getFee;
FUNC_getStaFee getStaFee;
#endif
//璐圭巼妯″潡浣跨敤鍑芥暟锛屽姩鎬佸姞杞///////////////
///////////////////////////////////////
CLaneOption m_LaneOpt; //缓存
QString m_LibBasePath; //缓存
QString m_LibTempPath; //缓存
int m_LocalAreaNo; //本车道
int m_LocalRoadNo; //本车道
int m_LocalStaNo; //本车道
//QString m_LocalStationId; //本站
bool InitPFileInfo(const int LocalAreaNo, const int LocalRoadNo, const int LocalStaNo, const QString &InitStaInfo);
int GetIndex(const int PFileId, const int roadNo = 0, const int staNo = 0);
bool LoadDBF(CPFileInfo &PFileInfo);
bool LoadHash(CPFileInfo &PFileInfo, QString &LoadFileName);
bool LoadSQB(CPFileInfo &PFileInfo);
bool LoadIni(CPFileInfo &PFileInfo);
#ifdef PARAMMANAGER_LANE
bool LoadFee(CPFileInfo &PFileInfo);
#endif
bool UnLoadDBF(CPFileInfo &PFileInfo);
bool UnLoadHash(CPFileInfo &PFileInfo);
bool UnLoadSQB(CPFileInfo &PFileInfo);
bool UnLoadIni(CPFileInfo &PFileInfo);
#ifdef PARAMMANAGER_LANE
bool UnLoadFee(CPFileInfo &PFileInfo);
#endif
#ifndef PARAMMANAGER_LANE
bool CheckLoadMode(const int &LoadMode, const int PFileId);
#endif
QString GetBaseInfo(const int PFileId, const int roadNo, const int staNo, int InfoType);
qint64 GetFileGenTime(const QString &PFileName);
bool UnLoadParam(CPFileInfo &fileInfo); //卸载参数表
bool LoadParam(CPFileInfo &fileInfo); //加载参数表
bool UpdateParam(CPFileInfo &fileInfo,const QString &FileCName, const QString &dstFileName, const QString &srcFileName);
bool LoadParamBackground(CPFileInfo &fileInfo, const QString &srcFileName, const QString &dstFileName); //后台加载
int CheckTempParamValid(const CPFileInfo &fileInfo, const QString &srcFileName, const QString &dstFileName, const bool bShowInfo);
int GetRecordCount(const int PFileId, const int roadNo, const int staNo);
bool GetBigAppointInfo(const QString resultStr, QString &CertNo, QString &Roads, QString &Goods, QString &StartDate, QString &EndDate);
bool GetEmerCarInfo(const QString resultStr, QString &Id, int &VehSign, QString &DiscountInfo, QString &StartDate, QString &EndDate);
bool GetGreenCarInfo(const QString resultStr, QString &Id, QString &StartDate, QString &AppTime);
int GetBlackAllStatus(const QString &resultStr, const QString &statusFieldName); //全量黑名单状态
int GetBlackIncStatus(const qint64 &dtAllVer, const QString &resultStr, const QString &fnCreateTime, const QString &fnStatus, const QString &fnState, vector<CBlackItem> &v);
int GetBlackStatus(int statusAll, const qint64 &dtAllVer, const QString &resultInc); //全量增量黑名单合并状态
int GetBlackAllInc(const int PFileIdAll, const int PFileIdInc,const QString &Id); //获取全量增量状态
QString GtSNAllReason(const QString &resultStr, const QString &fnReason);
int GtSNIncReason(const QString &resultStr, const QString &fnCreateTime, const QString &fnReason, const QString &fnState, const QString &fnOWEFee, QString &ErrorInfo);
bool GetSNAllInc(const int PFileIdAll, const int PFileIdInc,const QString &VehicleId, QString &ErrorInfo);
void OnParamLoadBackComplete(const uint FileId,const QString &NewBaseFileName, const int iLoadResult);
void UpdateParamInfo(const uint PFileId, const int roadNo, const int staNo,const int ErrorCode,const QString &FileCName, const QString &NewBaseFileName, const QString &TempFileName);
public:
CParamMan();
~CParamMan();
bool OpenParam(void *pSplash, QString &failFileName, const int LocalAreaNo, const int LocalRoadNo, const int LocalStaNo, const QString &InitStaInfo, const QString &libBasePath, const QString &libTempPath);
void CloseParam();
QString GetVersion(const int PFileId,const int InfoType);
QDateTime GetGenTime(const int pFileId);
QString GetParamCName(const int PFileId);
QString GetParamPFName(const int PFileId);
QString GetParamsStatus();
QString GetVerInfo();
//节假日表
bool IsHoliday();
//RoadCode
int GetStaInfo(const int RoadNo,const int StaNo, int &SubAreaNo, QString &iGantryId, QString &iGantryHex, QString &OGantryId, QString &OGantryHex, QString &RoadName, QString &StationName); //小片区编号
QString GetStaName(const int RoadNo,const int StaNo,const bool bIncludeRoadName);
QString GetRoadName(const int RoadNo);
//基础信息表
bool BasicInfoIdFind(const QString &keyValue, QString &Hex, QString &Name);
bool BasicInfoHexFind(const QString &hex,QString &Id, QString &Name);
//bool StationIdFind(const int AreaNo, const int RoadNo, const int StaNo, QString &Id, QString &Name);
QString LaneIdFind(const QString &enStationId, const int AreaNo, const int RoadNo, const int StaNo,const int LaneNo);
//发行方表
bool IssuerCheck(const QString &Issuer, const QString &IssuerCode4);
bool CardValid(const QString &cardIssuer,const QString &cardIssuerCode4, const QString &startTime, const QString &endTime,
const int cardType, const int cardVehType, int &ErrorCode, QString &ErrorInf);
//黑名单
bool doFindBlack(const uint PFileId, const QString &SearchStr, QString &ResultStr);
QString GetOBUReasonText(const int iStatus);
QString GetCardReasonText(const int iStatus);
QString GetVehBlackReasonText(const int iStatus);
QString GetVehGrayReasonText(const int iStatus);
QString GetSNReasonText(const QString &Status);
bool IsOBUBlack(const QString &OBUContractSerialNumber, QString &ErrorInfo); //OBU黑名单
bool IsCardBlack(const QString &CardNo, QString &ErrorInfo); //CPU卡黑名单
bool IsVehicleInProvBlack(const QString &VehPlate, QString &ErrorInfo); //省内车牌黑名单
bool IsVehicleBlack(const QString &VehPlateAll, QString &ErrorInfo); //车牌黑名单
bool IsBigBlack(const QString &VehPlate, QString &ErrorInfo); //大件车黑名单
bool IsSNBlack(const QString &VehPlateAll, QString &ErrorInfo); //追缴黑名单
bool IsBigAppoint(const QString &VehPlateAll, QString &CertNo, QString &Roads, QString &Goods, QString &StartDate, QString &EndDate); //是否大件运输
bool IsEmerCar(const QString &VehPlateAll, QString &Id, int &VehSign, QString &DiscountInfo, QString &StartDate, QString &EndDate); //是否抢险救灾
bool IsGreenCar(const QString &VehPlateAll, QString &Id, QString &StartDate, QString &AppTime);
//班次表
int GetAutoClassInfo(QDateTime &LastClassDate, int &LastClassNo); //获取新的班次号
int GetOptionalClassInfo(const QDateTime &dt, QDateTime *pClassDate, int *pClassNo, QString *pClassName);
QString GetClassCName(const int ClassNo);
//费率表
#ifdef PARAMMANAGER_LANE
QString GetIDX();
QString GetRateVersion();
int GetOBUFee(const int VehicleClassGB, const int OBUVehType, const int OBUAxisCount, const COBUFileEF04 *pEF04, CFeeCalcInfo &fee);
bool GetOBUCardFee(OBUCardInfoHelper &infoHelper, CFeeCalcInfo &fee);
int GetOBUCardFeeInfo(OBUCardInfoHelper &infoHelper,const QString &enStationId, CFeeCalcInfo &obuFee, int &VehSign, int &ErrorCode, QString &ErrorInfo);
int GetCPCFee(const int VehType,const int AxisCount, const CCPCDFEF01 &DF_EF01, const CCPCDFEF02 &DF_EF02, CFeeCalcInfo &fee);
bool GetCPCCardFee(CardDataInfoHelper &infoHelper, const int FeeVehType, const int AxisCount, CFeeCalcInfo &fee);
int GetCPCCardFeeInfo(const QString &VehPlate, const int VehPlateColor, const int FeeVehType, const int AxisCount, const int Weight,
const QString &enStationId, const QString &enLaneId, CardDataInfoHelper &infoHelper, const int ExitFeeType, const int ProvCount, CFeeCalcInfo &fee, QString &ErrorInfo);
bool GetOBUOnLineFeeInfo(OBUCardInfoHelper &infoHelper,const QString &enStationId , const QString &enStationName, const QString &enLaneId, const int FeeVehType, const int AxisCount, const int Weight, CFeeCalcInfo &fee, QString &ErrorInfo);
int GetNoCardOnLineFeeInfo(const QString &VehPlate, const int VehPlateColor, const int FeeVehType, const int AxisCount, const int Weight,
const CEnStationInfo &enStation, const int CardType, CFeeCalcInfo &fee, QString &ErrorInfo);
static void InitFeeCalcInfo(CFeeCalcInfo &feeCalcInfo, const int ExitFeeType = EXIT_FEE_TYPE_UNKNOW, const int FeeVehType = VEH_TYPE_UNKNOWN);
#endif
//最小费额
bool ReadLaneParam();
#ifdef PARAMMANAGER_LANE
bool GetMinFee(const QString &enID, const QString &exID, const int roadNo, const int staNo,const int CardType,const int VehType, CFeeCalcInfo &fee);
int MinFeeCompare(const CFeeCalcInfo &minFee,const int CardType, CFeeCalcInfo &Fee, QString &ErrorInfo);
#endif
bool GetMinFee(const QString &enID, const QString &exID, const int roadNo, const int staNo,const int CardType,const int VehType,int &MinFee, int &MinFee95, int &MinFeeMileAge, QString &MinFeeVer, QString &provFeeInfo,
int &ProvCount,int &OutProvCashTotal,int &OutProvInCashTotal,int &InProvCashTotal,int &InProvInCashTotal,int &InProvMileAge);
bool CheckMinFee(const int Cash,const int MinFee,const int ExitFeeType,const int VehType, const int CardType, int &ErrorCode, QString &ErrorInfo); //给李建业调用
//折扣表
int GetDiscount(const QString &CardIssuer,const int CardUType,const int CardType);
//操作人员名单
bool CheckPassword(const QString &Password,const QString &EncPassword);
bool CheckUser(const QString &UserNo,const QString &Password,const int ManId1,int &ManId2, QString &UserName, int &GroupNo, const int RoadNo = 0, const int StaNo = 0); //用工号密码验证
bool CheckUser(const QString &UserNo,const uint CardId, const int ManId1, int &ManId2, QString &UserName, int &GroupNo, const int RoadNo = 0, const int StaNo = 0); //用卡验证
//行政车牌号表
int GetAdminInfo(const QString &VehPlate, QString &info, QString &begDT, QString &endDT);
//更新参数
void CopyParam();
bool OnParamDownLoadComplete(const uint FileId,const QString &ParamFileName, const int iDownResult, const bool bUpdateAll);
protected:
#ifdef PARAMMANAGER_LANE
void customEvent(QEvent *e);
#endif
};
#endif // PARAMMANAGER_H