///************************************************************************/
/*  Copyright (C), 2016-2020, [home], 保留所有权利;
/*  模 块 名：;
/*  描    述：;
/*
/*  版    本：[V];	
/*  作    者：[home];
/*  日    期：[4/23/2016];
/*
/*
/*  注    意：;
/*
/*  修改记录：[home];
/*  修改日期：;
/*  修改版本：;
/*  修改内容：;
/************************************************************************/

#ifndef __HOME_GLOBAL__
#define __HOME_GLOBAL__

#pragma once

#include <string>
#include <vector>
using namespace std;

#ifndef _UNICODE
typedef string TString;
#else
typedef wstring TString;
#endif

namespace Global
{
	#define DB_SS_CONN_WITH_PORT		_T("driver={SQL Server};Server=%s,%d;database=%s;uid=%s;pwd=%s")
	#define DB_SS_CONN_WITHOUT_PORT		_T("driver={SQL Server};Server=%s;database=%s;uid=%s;pwd=%s")
	#define DB_SS_CONN_WITHOUT_PORT2	_T("driver={SQL Server};Server=%s;database=%d;uid=%s;pwd=%s")
	#define DB_SW_CONN_WITH_PORT		_T("Driver={SQL Server};Server=%s,%d;Database=%s;Trusted_Connection=yes;")
	#define DB_SW_CONN_WITHOUT_PORT		_T("Driver={SQL Server};Server=%s;Database=%s;Trusted_Connection=yes;")
	#define DB_SW_CONN_WITHOUT_PORT2	_T("Driver={SQL Server};Server=%s;Database=%d;Trusted_Connection=yes;")
	//////////////////////////////////////////////////////////////////////////
	// 全局变量;
	//////////////////////////////////////////////////////////////////////////
	extern TCHAR g_szIniFile[MAX_PATH];
	extern TCHAR g_szHostName[MAX_PATH];			// 主机计算机名;
	extern TCHAR g_szModulePath[MAX_PATH];			// 软件目录;
	extern TCHAR g_szModuleFileName[MAX_PATH];		// 软件名称;
	extern TCHAR g_szConnectString[MAX_PATH];		// DB连接串;
	extern TCHAR g_szBranchId[MAX_PATH];			// 分店域名;

	// 服务器信息;
	extern TCHAR g_szDBSource[MAX_PATH];			// 数据库源(服务所在IP或计算机名);
	extern TCHAR g_szDBSourcePort[MAX_PATH];		// 数据库源端口;
	extern DWORD g_dwDBServerPort;					// 数据库源端口;
	extern TCHAR g_szDBAccount[MAX_PATH];			// 数据库登录用户;
	extern TCHAR g_szDBPassWord[MAX_PATH];			// 数据库登录密码;
	extern TCHAR g_szDBName[MAX_PATH];				// 数据库名称;	
	extern TCHAR g_szDBType[MAX_PATH];				// 数据库类型：mysql、mssql、psql、sqlite3
	extern DWORD g_dwDBPoolMaxCount;				// 数据库连接池最大对象数;
	extern DWORD g_dwDBPoolDef;						// 数据库连接池默认对象数;

	//////////////////////////////////////////////////////////////////////////
	// 全局函数;
	// 判断公历是否有效;
	extern BOOL IsValidDate(IN LPCTSTR lpDate);
	// 判断农历是否有效;
	extern BOOL IsValidLunanrDate(IN LPCTSTR lpDate);
	// 获取配置文件函数;
	extern int GetIniInfo(IN const TCHAR *szPath = NULL, const TCHAR *szIniName = NULL);

	//////////////////////////////////////////////////////////////////////////
	// 字符串系列全局函数;
	extern BOOL CompareNoCase(IN TString& str1, IN TString& str2);
	extern BOOL IsStringExist(IN CString& str, IN CStringArray &tagAry);
	extern BOOL IsStringExist(IN TString& str, IN vector<TString> &tagVt);
	extern BOOL IsStringExistNoCase(IN CString& str, IN CStringArray &tagAry);
	extern BOOL IsStringExistNoCase(IN CONST TString& str, IN CStringArray &tagAry);
	extern BOOL IsStringExistNoCase(IN CONST TString& str, IN vector<TString> &tagVt);
	extern TString lowercase(IN const TString &Str);
	extern TString uppercase(IN const TString &Str);
	extern int match(IN CONST TString &sExt, IN CONST TString &sFile);
	extern TString getfilename(IN CONST TString &file);
	extern CString getfilename(IN CONST CString &file);

	//////////////////////////////////////////////////////////////////////////
	// 进程相关函数;
	extern BOOL FindAppProcessID(IN CString path, OUT DWORD &dwProcessID);
	extern DWORD FindProcess(IN CString strProName);
	extern DWORD FindProcessCount(IN LPCTSTR lpExeName);
	extern int FindAndCloseProcess(IN CString strProName);

	// 文件函数;
	extern  BOOL GetDiskSpaceInfo(IN LPCTSTR lpRootPathName,IN OUT double &dTotalNum, IN OUT double &dFreeNum);

	extern BOOL GetFileVersion( IN HMODULE hModule, IN DWORD (&dwArray)[4]);
	extern BOOL GetFileVersionEx( IN LPCTSTR lpFileName, IN DWORD (&dwArray)[4] );
	extern BOOL GetProductVersion( IN HMODULE hModule, IN DWORD (&dwArray)[4]);
	extern BOOL GetProductVersionEx( IN LPCTSTR lpFileName, IN DWORD (&dwArray)[4] );

	// 获取文件夹的修改时间;
	extern BOOL GetDirLastWriteTime(IN LPCTSTR lpDirName, OUT LPTSTR lpszString, IN CONST DWORD& dwSize);
	// 设置文件夹的修改时间;
	extern BOOL SetDirLastWriteTime();
	// 获取指定文件句柄的修改时间;
	extern BOOL GetLastWriteTime(IN HANDLE hFile, OUT LPTSTR lpszString, IN CONST DWORD& dwSize);
	// 设置指定文件夹的修改时间;
	extern BOOL SetFileLastWirteTime(IN LPCTSTR lpDirName, IN SYSTEMTIME &st);
	// 删除指定的目录所有文件;
	extern void DeleteDirectory(CString strDir);
	//
	extern void GetHostName();

};

#endif