BranchInfo.cpp 76 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706
  1. #include "StdAfx.h"
  2. #include "BranchInfo.h"
  3. #include "Implffsco.h"
  4. #include <shlwapi.h>
  5. #include <Dbghelp.h>
  6. #pragma comment(lib,"Dbghelp.lib")
  7. #include <strsafe.h >
  8. #include <Winbase.h>
  9. #include "CharacterConvert.h"
  10. #include "BakPhotoModel\BackupFactory.h"
  11. #include "BakPhotoModel\BackupInterface.h"
  12. #include "mysqldata.h"
  13. #define IS_USE_VER1 1
  14. TblVersion CBranchInfo::m_TblVersion;
  15. vector<TblCatalogInfo*> CBranchInfo::m_TblCatalogInfo;
  16. vector<TblNetShareInfo*> CBranchInfo::m_TblNetShareInfo;
  17. typedef HRESULT (WINAPI *GetClassBackupObject)(REFCLSID, REFIID, LPVOID*);
  18. CBranchInfo::CBranchInfo()
  19. {
  20. m_bIsOur = FALSE;
  21. memset(m_szBranchName, 0, sizeof(TCHAR)*MAX_PATH);
  22. memset(m_szBranchDoMain, 0, sizeof(TCHAR)*MAX_PATH);
  23. memset(m_szBranchIP, 0, sizeof(TCHAR)*MAX_PATH);
  24. m_strBranchId.Empty();
  25. //////////////////////////////////////////////////////////////////////////
  26. m_hIncrement = NULL;
  27. m_hIncrementCtrl = NULL;
  28. m_hIncrementWaitableTm = NULL;
  29. m_hRemove = NULL;
  30. m_hRemoveCtrl = NULL;
  31. m_hRemoveWaitableTm = NULL;
  32. }
  33. CBranchInfo::CBranchInfo(LPCTSTR lpBranchName, LPCTSTR lpBranchDoMain, LPCTSTR lpBranchIP)
  34. {
  35. m_bIsOur = FALSE;
  36. if (_tcscmp(lpBranchName, _T("")) != 0 && lpBranchName)
  37. {
  38. _tcscpy_s(m_szBranchName, lpBranchName);
  39. }
  40. if (_tcscmp(lpBranchDoMain, _T("")) != 0 && lpBranchDoMain)
  41. {
  42. _tcscpy_s(m_szBranchDoMain, lpBranchDoMain);
  43. }
  44. if (_tcscmp(lpBranchIP, _T("")) != 0 && lpBranchIP)
  45. {
  46. _tcscpy_s(m_szBranchIP, lpBranchIP);
  47. }
  48. }
  49. CBranchInfo::~CBranchInfo(void)
  50. {
  51. EndOfThread();
  52. }
  53. /************************************************************************/
  54. /*
  55. 函数:RemoveNetShareInfo
  56. 描述:清除内存资源;
  57. 参数:#
  58. 返回:#
  59. 要求:#
  60. 注意:由外部调用该函数,不放在析造函数处理.
  61. 示例:
  62. */
  63. /************************************************************************/
  64. void CBranchInfo::RemoveNetShareInfo()
  65. {
  66. TblNetShareInfo *pNetShareInfo = NULL;
  67. for ( NETSHAREINFO::iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end();)
  68. {
  69. pNetShareInfo = *it;
  70. delete pNetShareInfo;
  71. pNetShareInfo = NULL;
  72. it = m_TblNetShareInfo.erase(it);
  73. }
  74. }
  75. /************************************************************************/
  76. /*
  77. 函数:RemoveNetShareInfo
  78. 描述:清除内存资源;
  79. 参数:#
  80. 返回:#
  81. 要求:#
  82. 注意:由外部调用该函数,不放在析造函数处理
  83. 示例:
  84. */
  85. /************************************************************************/
  86. void CBranchInfo::RemvoeCatalogInfo()
  87. {
  88. TblCatalogInfo *pCatalogInfo = NULL;
  89. for ( CATALOGINFO::iterator it = m_TblCatalogInfo.begin(); it != m_TblCatalogInfo.end();)
  90. {
  91. pCatalogInfo = *it;
  92. delete pCatalogInfo;
  93. pCatalogInfo = NULL;
  94. it = m_TblCatalogInfo.erase(it);
  95. }
  96. }
  97. /************************************************************************/
  98. /*
  99. 函数:IsValidDate
  100. 描述:判断日期有效性;
  101. 参数:
  102. IN: lpDate 日期字符串,格式如:"2015-05-06 18:20:30"或"2015/05/12 21:30:22"
  103. 返回:日期有效返回TRUE,否则返回FALSE;
  104. 要求:
  105. 注意:只判断公历日期;
  106. 示例:
  107. */
  108. /************************************************************************/
  109. BOOL CBranchInfo::IsValidDate(IN LPCTSTR lpDate)
  110. {
  111. if(lpDate == NULL || _tcscmp(lpDate,_T("")) == 0)
  112. return FALSE;
  113. CString strDate = lpDate;
  114. if (strDate.IsEmpty()) return FALSE;
  115. // 判断日期合法性;
  116. static int nYear = 0;
  117. static int nMonth = 0;
  118. static int nDay = 0;
  119. nYear = nMonth = nDay = 0;
  120. nYear = _ttoi(strDate.Left(4));
  121. nMonth = _ttoi(strDate.Mid(5, 2));
  122. nDay = _ttoi(strDate.Mid(8, 2));
  123. CONST static INT nNormalMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  124. CONST static INT nLeapMonth[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  125. if ((nDay <= 0) || (nDay > 31) || (nMonth <= 0) || (nMonth > 12)) return FALSE;
  126. if ((nYear % 400 == 0) || (nYear % 4 == 0 && nYear % 100 != 0))
  127. {
  128. if (nDay > nLeapMonth[nMonth - 1]) return FALSE;
  129. }
  130. else
  131. {
  132. if (nDay > nNormalMonth[nMonth - 1]) return FALSE;
  133. }
  134. return TRUE;
  135. }
  136. /************************************************************************/
  137. /*
  138. 函数:EasyGetFileSize
  139. 描述:获取文件大小;
  140. 参数:
  141. IN:lpFolder 文件名;
  142. 返回:成功则返回文件的大小,否则返回-1;
  143. 注意:;
  144. 要求:
  145. 示例:
  146. */
  147. /************************************************************************/
  148. UINT64 CBranchInfo::EasyGetFileSize(IN LPCTSTR lpFile)
  149. {
  150. // 判断文件是否存在;
  151. //if ( !lpFile || !_tcscmp(lpFile,_T("")) || !PathFileExists(lpFile) )
  152. // return 0;
  153. // 传参前已判断,不需要再判断;
  154. WIN32_FIND_DATA fileinfo;
  155. UINT64 dwSize = 0;
  156. HANDLE hFind = FindFirstFile(lpFile,&fileinfo);
  157. if ( hFind != INVALID_HANDLE_VALUE)
  158. {
  159. dwSize = fileinfo.nFileSizeLow;
  160. FindClose(hFind);
  161. }
  162. return dwSize;
  163. }
  164. /************************************************************************/
  165. /*
  166. 函数:EasyGetFileSzie
  167. 描述:获取指定文件的大小以及文件占用磁盘的空间大小;
  168. 参数:
  169. IN: lpFile指定的文件名;
  170. IN: uFileSpaceSize 返回文件占用磁盘空间大小(字节数);
  171. 返回:成功获取文件,返回文件大小(字节数),若返回-1则文件不存在或其他错误;
  172. 注意:lpFileName可以是网络路径上的共享文件;
  173. 要求:
  174. 在vc6.0中,必须到微软下载Win32 FileID API Library
  175. 下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=22599
  176. 解压包含fileextd.h和fileextd.lib
  177. 然后才能使用GetFileInformationByHandleEx函数和结构体FILE_STANDARD_INFO;
  178. 示例:
  179. */
  180. /************************************************************************/
  181. UINT64 CBranchInfo::EasyGetFileSpacesSzie(IN LPCTSTR lpFileName)
  182. {
  183. // 文件是否存在;
  184. if ( !PathFileExists(lpFileName) )
  185. {
  186. //OutputDebugString(_T("文件不存在\n"));
  187. return -1;
  188. }
  189. // 打开文件句柄;
  190. HANDLE hFile = ::CreateFile(lpFileName, GENERIC_READ , FILE_SHARE_READ,
  191. NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  192. if (hFile == INVALID_HANDLE_VALUE)
  193. {
  194. //OutputDebugString(_T("打开文件句柄失败\n"));
  195. return -1;
  196. }
  197. #if 0
  198. // 获取文件大小;
  199. UINT64 uFileSize = 0;
  200. ::GetFileSizeEx(hFile, reinterpret_cast<PLARGE_INTEGER>(&uFileSize));
  201. #endif
  202. FILE_STANDARD_INFO fsi = {0};
  203. if (!::GetFileInformationByHandleEx(hFile, FileStandardInfo, &fsi, sizeof(FILE_STANDARD_INFO)))
  204. {
  205. CloseHandle(hFile);
  206. //OutputDebugString(_T("获取文件信息失败\n"));
  207. return -1;
  208. }
  209. UINT64 uFileSpacesSize = fsi.AllocationSize.HighPart;
  210. CloseHandle(hFile);
  211. return uFileSpacesSize;
  212. }
  213. /************************************************************************/
  214. /*
  215. 函数:EasyGetSizeOfFiles
  216. 描述:获取指定文件路径数组的全部文件大小;
  217. 参数:
  218. IN: strAryOfFile 文件名数组;
  219. OUT: dwFiles 文件夹下的文件数量;
  220. OUT: dwFolders 文件夹下的子目录数量;
  221. 返回:成功则返回文件夹占用磁盘空间的大小,否则返回-1;
  222. 注意:
  223. 要求:
  224. 示例:
  225. */
  226. /************************************************************************/
  227. UINT64 CBranchInfo::EasyGetSizeOfFiles(IN CStringArray &strAryOfFile)
  228. {
  229. UINT64 uSizeOfFiles = 0;
  230. int nSize = strAryOfFile.GetSize();
  231. for ( int i = 0; i < nSize; i++)
  232. {
  233. CString strFile = strAryOfFile.ElementAt(i);
  234. if ( PathFileExists(strFile) )
  235. {
  236. uSizeOfFiles += EasyGetFileSize(strFile);
  237. }
  238. }
  239. return uSizeOfFiles;
  240. }
  241. /************************************************************************/
  242. /*
  243. 函数:GetDiskSpaceInfo
  244. 描述:获取指定目录或盘符的容量信息;
  245. 参数:
  246. IN: lpRootPathName 根目录名称;
  247. INOUT: dTotalNum 总容量;
  248. INOUT: dFreeNum 可用容量;
  249. 返回:
  250. 注意:
  251. GetDiskFreeSpace函数不能满足当前超过2T的硬盘容量,因为里面的数据类型是UINT,最大支持32位(4G);
  252. GetDiskFreeSpaceEx支持64位(16384P=1024*16384T)
  253. 只能获取本机硬盘信息,且路径必须包含":"冒号;
  254. 调用约定:
  255. */
  256. /************************************************************************/
  257. BOOL CBranchInfo::GetDiskSpaceInfo(IN LPCTSTR lpRootPathName,IN OUT double &dTotalNum, IN OUT double &dFreeNum)
  258. {
  259. // 校验参数有效性;
  260. if(lpRootPathName == NULL || _tcscmp(lpRootPathName,_T("")) == 0)
  261. {
  262. //OutputDebugString(_T("目录为空\n"));
  263. return FALSE;
  264. }
  265. // 如果长度==1;
  266. int nlen = _tcslen(lpRootPathName);
  267. if((1 == nlen) || ( 2 == nlen && lpRootPathName[nlen-1] != _T(':')))
  268. {
  269. //OutputDebugString(_T("根目录无效\n"));
  270. return FALSE;
  271. }
  272. if ( !PathFileExists(lpRootPathName))
  273. {
  274. //OutputDebugString(_T("根目录不存在\n"));
  275. return FALSE;
  276. }
  277. BOOL fResult = FALSE;
  278. DWORD dwSectPerClust; // 每簇的扇区数;
  279. DWORD dwBytesPerSect; // 每个扇区的字节数;
  280. DWORD dwFreeClusters; // 可用簇数;
  281. DWORD dwTotalClusters; // 总簇数;
  282. typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER,PULARGE_INTEGER, PULARGE_INTEGER);
  283. P_GDFSE pGetDiskFreeSpaceEx = NULL;
  284. /*unsigned*/ __int64 i64FreeBytesToCaller;
  285. /*unsigned*/ __int64 i64TotalBytes;
  286. /*unsigned*/ __int64 i64FreeBytes;
  287. // 调用GetDiskFreeSpaceEx失败则调用GetDiskSpace;
  288. #ifdef UNICODE
  289. pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")),"GetDiskFreeSpaceExW");
  290. #else
  291. pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle("kernel32.dll"),"GetDiskFreeSpaceExA");
  292. #endif
  293. if ( pGetDiskFreeSpaceEx )
  294. {
  295. fResult = pGetDiskFreeSpaceEx(lpRootPathName,
  296. (PULARGE_INTEGER)&i64FreeBytesToCaller,
  297. (PULARGE_INTEGER)&i64TotalBytes,
  298. (PULARGE_INTEGER)&i64FreeBytes);
  299. if ( fResult )
  300. {
  301. // 将单位由byte转为G byte;
  302. dTotalNum = (double)i64TotalBytes/1024/1024/1024;
  303. dFreeNum = (double)i64FreeBytes/1024/1024/1024;
  304. }
  305. }
  306. else
  307. {
  308. fResult = GetDiskFreeSpace(lpRootPathName,
  309. &dwSectPerClust,
  310. &dwBytesPerSect,
  311. &dwFreeClusters,
  312. &dwTotalClusters);
  313. if ( fResult )
  314. {
  315. // 成功获得容量信息;
  316. i64TotalBytes = (__int64)dwTotalClusters * dwSectPerClust * dwBytesPerSect;
  317. i64FreeBytes = (__int64)dwFreeClusters * dwSectPerClust * dwBytesPerSect;
  318. // 将单位由byte转为G byte;
  319. dTotalNum = (double)i64TotalBytes/1024/1024/1024;
  320. dFreeNum = (double)i64FreeBytes/1024/1024/1024;
  321. }
  322. }
  323. return fResult;
  324. }
  325. /************************************************************************/
  326. /*
  327. 函数:GetEnableShareDirectory
  328. 描述:返回指定相片类型可用的共享目录;
  329. 参数:
  330. IN: nPhotoType 相片类型;
  331. IN: lpBranchId 分店域名;
  332. IN: lpOrderNum 订单号;
  333. OUT: lpEnableShareDirectory 可用的共享目录;
  334. 返回:成功返回TRUE;
  335. 注意:用于导入相片,最后返回的共享目录,使用MakeSuerDirectoryPathExists函数创建目录;
  336. 调用约定:#
  337. 测试:通过;
  338. */
  339. /************************************************************************/
  340. BOOL CBranchInfo::GetEnableShareDirectory(OUT double &dFreeNum, IN const int &nPhotoType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, OUT LPTSTR lpEnableShareDirectory)
  341. {
  342. if ( m_TblNetShareInfo.size() == 0)
  343. {
  344. //OutputDebugString(_T("没有可用的共享目录\n"));
  345. //LOG4C_NO_FILENUM((LOG_NOTICE,"没有可用的共享目录"));
  346. return FALSE;
  347. }
  348. double dTotalNum = 0.0;
  349. BOOL bGetEnable = FALSE;
  350. BYTE byCurPriority = 0;
  351. TCHAR szOrderPath[MAX_PATH] = {0};
  352. //TCHAR szOldOrderPath[MAX_PATH] = {0}; // 记录上一次的订单文件夹路径;
  353. for ( NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  354. {
  355. //_stprintf_s(szOldOrderPath,_T("%s"),szOrderPath);
  356. if ( _tcscmp((*it)->szBranchId,lpBranchId) == 0 )
  357. {
  358. if ( (*it)->byPhotoType == nPhotoType )
  359. {
  360. // 判断目录下是否有订单文件夹;
  361. _stprintf_s(szOrderPath,_T("%s\\%s\\"),(*it)->szShareDirectory,lpOrderNum);
  362. // 存在且目录容量仍大于mincapacity可用;
  363. if ( PathFileExists(szOrderPath) )
  364. {
  365. if ( !GetDiskSpaceInfo((*it)->szShareDirectory,dTotalNum,dFreeNum) )
  366. {
  367. // 获取硬盘大小失败;
  368. //OutputDebugString(_T("获取硬盘大小失败\n"));
  369. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取硬盘大小失败"));
  370. continue;
  371. }
  372. if ( dFreeNum > (*it)->byMinCapacity )
  373. {
  374. bGetEnable = TRUE;
  375. break;
  376. }
  377. }
  378. // 判断共享路径是否可用;
  379. if ( GetDiskSpaceInfo((*it)->szShareDirectory,dTotalNum,dFreeNum) )
  380. {
  381. if ( dFreeNum > (*it)->byMaxCapacity )
  382. {
  383. if ( byCurPriority < (*it)->byPriority )
  384. {
  385. // 最高权限且硬盘容量大小满足要求;
  386. byCurPriority = (*it)->byPriority;
  387. //_stprintf_s(szOrderPath,_T("%s\\%s\\"),(*it)->szShareDirectory, lpOrderNum);
  388. bGetEnable = TRUE;
  389. }
  390. }
  391. }
  392. }
  393. }
  394. }
  395. //////////////////////////////////////////////////////////////////////////
  396. // 返回结果;
  397. if(bGetEnable)
  398. {
  399. #ifdef UNICODE
  400. CHAR szShareDirectory[MAX_PATH] = {0};
  401. unicode2acsii(szOrderPath,szShareDirectory);
  402. MakeSureDirectoryPathExists(szShareDirectory);
  403. #else
  404. MyMakeSureDirectoryPathExists(szOrderPath);
  405. #endif
  406. _stprintf_s(lpEnableShareDirectory,_tcslen(szOrderPath)+1,_T("%s"),szOrderPath);
  407. }
  408. else
  409. {
  410. //OutputDebugString(_T("没有符合的共享目录\n"));
  411. //LOG4C_NO_FILENUM((LOG_NOTICE,"没有符合的共享目录"));
  412. }
  413. return bGetEnable;
  414. }
  415. /************************************************************************/
  416. /*
  417. 函数:EasyCopyFile
  418. 描述:将源文件拷贝到目标路径中;
  419. 参数:
  420. IN: lpOrderNum 相片所属订单号;
  421. IN: lpExistingFileName 源文件;
  422. IN: lpTargetDirectory 目标路径;
  423. IN: bFailIfExists 若目录路径存在同名,是否覆盖;
  424. 返回:成功返回TRUE;
  425. 要求:
  426. 注意:只拷贝一个文件,若要拷贝多个相同后缀的文件名,需要重新修改函数功能;
  427. 示例:
  428. 修改:增量备份的拷贝,需要在目标文件夹中创建该相片在源目录的子路径;
  429. 日期:2015-04-25
  430. */
  431. /************************************************************************/
  432. BOOL CBranchInfo::EasyCopyFile(IN LPCTSTR lpOrderNum, IN LPCTSTR lpExistingFileName, IN LPCTSTR lpTargetDirectory, IN BOOL bFailIfExists /* = TRUE */)
  433. {
  434. if ( !PathFileExists(lpTargetDirectory) )
  435. {
  436. return FALSE;
  437. }
  438. TCHAR szNewFileName[_MAX_PATH] = { 0 };
  439. TCHAR szDrive[_MAX_DRIVE] = { 0 };
  440. TCHAR szDir[_MAX_DIR] = { 0 };
  441. TCHAR szFna[_MAX_FNAME] = { 0 };
  442. TCHAR szExt[_MAX_EXT] = { 0 };
  443. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s"), lpExistingFileName);
  444. _tsplitpath_s(szNewFileName, szDrive, szDir, szFna, szExt);
  445. // 解析出订单号的子目录;
  446. int nIndex = 0;
  447. CString strDir = szDir;
  448. if ( (nIndex = strDir.Find(lpOrderNum)) != -1)
  449. {
  450. strDir = strDir.Mid(nIndex+_tcslen(lpOrderNum)+1);
  451. strDir.TrimRight(_T('\\'));
  452. if ( lpTargetDirectory[_tcslen(lpTargetDirectory) - 1] != _T('\\') )
  453. {
  454. if(!strDir.IsEmpty())
  455. {
  456. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s\\%s\\"), lpTargetDirectory, strDir);
  457. }
  458. }
  459. else
  460. {
  461. if(!strDir.IsEmpty())
  462. {
  463. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s%s\\"), lpTargetDirectory, strDir);
  464. }
  465. }
  466. CreateDirectory(szNewFileName,NULL);
  467. }
  468. else
  469. {
  470. //OutputDebugString(_T("未找到订单名,无效目录\n"));
  471. //LOG4C_NO_FILENUM((LOG_NOTICE,"未找到订单名,无效目录"));
  472. }
  473. if ( lpTargetDirectory[_tcslen(lpTargetDirectory) - 1] != _T('\\') )
  474. {
  475. if(strDir.IsEmpty())
  476. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s\\%s%s"), lpTargetDirectory, szFna, szExt);
  477. else
  478. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s\\%s\\%s%s"), lpTargetDirectory, strDir, szFna, szExt);
  479. }
  480. else
  481. {
  482. if(strDir.IsEmpty())
  483. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s%s%s"), lpTargetDirectory, szFna, szExt);
  484. else
  485. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s%s\\%s%s"), lpTargetDirectory, strDir, szFna, szExt);
  486. }
  487. return CopyFile(lpExistingFileName, szNewFileName, bFailIfExists);
  488. }
  489. /************************************************************************/
  490. /*
  491. 函数:IsValideDiretory
  492. 描述:判断一个即将要删除的目录是否为可以删除的目录,而非是共享根目录;
  493. 参数:
  494. IN: lpDirectory 目录;
  495. 返回:
  496. 要求:
  497. 注意:
  498. 示例:
  499. */
  500. /************************************************************************/
  501. BOOL CBranchInfo::IsValideDiretory(IN LPCTSTR lpDirectory)
  502. {
  503. BOOL bResult = TRUE;
  504. for ( NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  505. {
  506. if ( _tcscmp((*it)->szShareDirectory,lpDirectory) == 0)
  507. {
  508. bResult = FALSE;
  509. break;
  510. }
  511. }
  512. return bResult;
  513. }
  514. /************************************************************************/
  515. /*
  516. 函数:DeleteDirectory
  517. 描述:删除指定目录;
  518. 参数:
  519. IN: lpDirectory 要删除的目录;
  520. 返回:
  521. 要求:
  522. 注意:
  523. 示例:
  524. */
  525. /************************************************************************/
  526. BOOL CBranchInfo::DeleteDirectory(IN LPCTSTR lpDiretory)// 可删除共享路径;
  527. {
  528. // 判断参数有效性;
  529. if ( lpDiretory == NULL || _tcscmp(lpDiretory,_T("")) == 0)
  530. return FALSE;
  531. #if 1 // 判断根目录是否存在,可以放在函数外,但有时忘记写判断,只能放在这里比较适合;
  532. if( !PathFileExists(lpDiretory))
  533. return FALSE;
  534. #endif
  535. TString strPath = lpDiretory;
  536. if ( lpDiretory[_tcslen(lpDiretory)-1] != _T('\\'))
  537. strPath += _T("\\");
  538. TString strTempPath = strPath;
  539. strTempPath += _T("*");
  540. WIN32_FIND_DATA fileinfo = { 0 };
  541. HANDLE handle = FindFirstFile(strTempPath.c_str(), &fileinfo);
  542. if (NULL == handle && INVALID_HANDLE_VALUE == handle)
  543. return FALSE;
  544. do
  545. {
  546. // '.'和 '..'的系统文件去除;
  547. if (_T('.') != fileinfo.cFileName[0])
  548. {
  549. TString strTemp = strPath + fileinfo.cFileName;
  550. SetFileAttributes(strTemp.c_str(), FILE_ATTRIBUTE_NORMAL);//去掉所有属性;
  551. if ((FILE_ATTRIBUTE_DIRECTORY & fileinfo.dwFileAttributes) == FILE_ATTRIBUTE_DIRECTORY) // 目录;
  552. {
  553. DeleteDirectory(strTemp.c_str());
  554. }
  555. else
  556. {
  557. if(!DeleteFile(strTemp.c_str()))
  558. {
  559. DWORD dwError = GetLastError();
  560. //LOG4C_NO_FILENUM((LOG_NOTICE,"删除文件出错:%d",dwError));
  561. }
  562. }
  563. }
  564. } while (FindNextFile(handle, &fileinfo));
  565. FindClose(handle);
  566. if(!RemoveDirectory(strPath.c_str()))
  567. {
  568. DWORD dwError = GetLastError();
  569. //LOG4C_NO_FILENUM((LOG_NOTICE,"删除文件夹出错:%d",dwError));
  570. //OutputDebugString(_T("**************删除目录失败**************\n"));
  571. return FALSE;
  572. }
  573. return TRUE;
  574. }
  575. /************************************************************************/
  576. /*
  577. 函数:ReadOtherBranchOrderInfo
  578. 描述:读取branchdindan.dat文件中的其他分店订单取件信息:
  579. 参数:
  580. OUT: AryOtherBranchOrderInfo 返回branchdindan.dat中的订单信息;
  581. 返回:
  582. 要求:
  583. 注意:本店实例对象执行;
  584. 示例:
  585. */
  586. /************************************************************************/
  587. BOOL CBranchInfo::ReadOtherBranchOrderInfo(/*OUT CArray<CStringArray,CStringArray>& AryOtherBranchOrderInfo*/)
  588. {
  589. CString strOrderFile;
  590. strOrderFile.Format(_T("%s\\%s"),g_ModulePath,_T("branchdindan.dat"));
  591. if ( !PathFileExists(strOrderFile) )
  592. {
  593. //OutputDebugString(_T("branchdindan.dat文件不存在\n"));
  594. //LOG4C_NO_FILENUM((LOG_NOTICE,"branchdindan.dat文件不存在"));
  595. return FALSE;
  596. }
  597. CFile fOrder;
  598. if (!fOrder.Open(strOrderFile, CFile::modeRead))
  599. {
  600. //OutputDebugString(_T("读取branchdindan.bat文件失败\n"));
  601. //LOG4C_NO_FILENUM((LOG_NOTICE,"branchdindan.bat文件失败"));
  602. return FALSE;
  603. }
  604. int nMessageLen = fOrder.GetLength();
  605. BYTE *pData = new BYTE[nMessageLen];
  606. fOrder.Read(pData, nMessageLen);
  607. fOrder.Close();
  608. BYTE *szChatMessage = pData;
  609. int nSize = 0;
  610. memcpy(&nSize, szChatMessage + (nMessageLen - sizeof(int)), sizeof(int));
  611. CMemFile memfile;
  612. memfile.Attach(szChatMessage, nMessageLen);
  613. CArchive ar(&memfile, CArchive::load);
  614. CArray<CStringArray,CStringArray> AryOtherBranchOrderInfo;
  615. AryOtherBranchOrderInfo.SetSize(nSize);
  616. for (int i = 0; i < AryOtherBranchOrderInfo.GetSize(); i++)
  617. {
  618. // 三个元素:0==分店域名 + 1==订单号 + 2==订单取件完成时间(time5);
  619. AryOtherBranchOrderInfo.ElementAt(i).Serialize(ar);
  620. }
  621. ar.Close();
  622. memfile.Detach();
  623. delete[] pData;
  624. nSize = AryOtherBranchOrderInfo.GetSize();
  625. for ( int i = 0; i < nSize; i++)
  626. {
  627. CStringArray &AryOrder = AryOtherBranchOrderInfo.ElementAt(i);
  628. GetRemvoeOrderInfoAndRemove(AryOrder.ElementAt(0),AryOrder.ElementAt(1),AryOrder.ElementAt(2),1);
  629. GetRemvoeOrderInfoAndRemove(AryOrder.ElementAt(0),AryOrder.ElementAt(1),AryOrder.ElementAt(2),2);
  630. GetRemvoeOrderInfoAndRemove(AryOrder.ElementAt(0),AryOrder.ElementAt(1),AryOrder.ElementAt(2),3);
  631. GetRemvoeOrderInfoAndRemove(AryOrder.ElementAt(0),AryOrder.ElementAt(1),AryOrder.ElementAt(2),4);
  632. GetRemvoeOrderInfoAndRemove(AryOrder.ElementAt(0),AryOrder.ElementAt(1),AryOrder.ElementAt(2),5);
  633. GetRemvoeOrderInfoAndRemove(AryOrder.ElementAt(0),AryOrder.ElementAt(1),AryOrder.ElementAt(2),6);
  634. GetRemvoeOrderInfoAndRemove(AryOrder.ElementAt(0),AryOrder.ElementAt(1),AryOrder.ElementAt(2),7);
  635. GetRemvoeOrderInfoAndRemove(AryOrder.ElementAt(0),AryOrder.ElementAt(1),AryOrder.ElementAt(2),8);
  636. Sleep(0);
  637. }
  638. // 对branchdindan.dat处理完毕后,删除branchdindan.dat文件,等待下次新生成的文件;
  639. DeleteFile(strOrderFile);
  640. return TRUE;
  641. }
  642. /************************************************************************/
  643. /*
  644. 函数:InitBranchInfo
  645. 描述:初始化分店信息;
  646. 参数:
  647. IN: lpBranchDoMain 分店域名;
  648. IN: lpBranchName 分店名;
  649. IN: lpBranchIP 分店公网IP
  650. 返回:
  651. 要求:
  652. 注意:
  653. 示例:
  654. */
  655. /************************************************************************/
  656. void CBranchInfo::InitBranchInfo(IN LPCTSTR lpBranchDoMain, IN LPCTSTR lpBranchName, IN LPCTSTR lpBranchIP)
  657. {
  658. // 分店信息;
  659. if (_tcscmp(lpBranchName, _T("")) != 0 && lpBranchName)
  660. _tcscpy_s(m_szBranchName, lpBranchName);
  661. if (_tcscmp(lpBranchDoMain, _T("")) != 0 && lpBranchDoMain)
  662. _tcscpy_s(m_szBranchDoMain, lpBranchDoMain);
  663. if (_tcscmp(lpBranchIP, _T("")) != 0 && lpBranchIP)
  664. _tcscpy_s(m_szBranchIP, lpBranchIP);
  665. }
  666. /************************************************************************/
  667. /*
  668. 函数:InitCatalog
  669. 描述:初始化数据库实例对象;
  670. 参数:
  671. IN: dwCatalogPort 数据库实例映射端口;
  672. IN: lpCatalogSource 数据库实例地址;
  673. IN: lpCatalogAccount 数据库实例登陆账号;
  674. IN: lpCatalogPsw 数据库实例登陆密码;
  675. IN: lpCatalogName 数据库名称;
  676. 返回:成功连接数据库实例返回TRUE;
  677. 要求:
  678. 注意:
  679. 示例:
  680. */
  681. /************************************************************************/
  682. BOOL CBranchInfo::InitCatalog(IN CONST DWORD &dwCatalogPort, IN LPCTSTR lpCatalogSource, IN LPCTSTR lpCatalogAccount, IN LPCTSTR lpCatalogPsw, IN LPCTSTR lpCatalogName)
  683. {
  684. if ( IsOpen() )
  685. return TRUE;
  686. TCHAR szSQLConnt[MAX_PATH] = _T("");
  687. if (dwCatalogPort)
  688. {
  689. if ( _tcscmp(g_szDBAccount, _T("")) == 0 )
  690. _stprintf_s(szSQLConnt, DB_SW_CONN_WITH_PORT,lpCatalogSource, dwCatalogPort, lpCatalogName);
  691. else
  692. _stprintf_s(szSQLConnt, DB_SS_CONN_WITH_PORT,lpCatalogSource, dwCatalogPort, lpCatalogName, lpCatalogAccount, lpCatalogPsw);
  693. }
  694. else
  695. {
  696. if ( _tcscmp(g_szDBAccount, _T("")) == 0 )
  697. _stprintf_s(szSQLConnt, DB_SW_CONN_WITHOUT_PORT,lpCatalogSource, lpCatalogName);
  698. else
  699. _stprintf_s(szSQLConnt, DB_SS_CONN_WITHOUT_PORT,lpCatalogSource, lpCatalogName, lpCatalogAccount, lpCatalogPsw);
  700. }
  701. SetConn(szSQLConnt);
  702. BOOL bResult = OpenCatalog();
  703. if( !bResult )
  704. {
  705. //OutputDebugString(_T("打开数据库失败\n"));
  706. //LOG4C_NO_FILENUM((LOG_NOTICE,"打开数据库失败"));
  707. }
  708. else
  709. {
  710. if( !GetTblBranchId() )
  711. {
  712. //OutputDebugString(_T("获取域名表失败"));
  713. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取域名表失败"));
  714. }
  715. }
  716. return bResult;
  717. }
  718. /************************************************************************/
  719. /*
  720. 函数:CheckDirExistInTbl
  721. 描述:检测在数据表里是否有共享目录的记录;
  722. 参数:
  723. const int nType 共享目录类型:原片==1,初修片==2,精修片==3,设计片==4,原片备份==5,初修备份==6,精修备份==7,设计备份==8
  724. const CString& strDir 要查找的目录
  725. 返回:成功获取返回TRUE:;
  726. 要求:
  727. 注意:
  728. 示例:
  729. */
  730. /************************************************************************/
  731. BOOL CBranchInfo::CheckShareDirExistInTbl(const int nType, const CString& strDir)
  732. {
  733. if(strDir == _T(""))
  734. return FALSE;
  735. if(nType == 1 || nType == 2)
  736. {
  737. int ncount = GetSelectCount(_T("NetShareInfo"), strDir);
  738. if(ncount != 0)
  739. return TRUE;
  740. }
  741. return FALSE;
  742. }
  743. /************************************************************************/
  744. /*
  745. 函数:GetTblBranchId
  746. 描述:获取path表中的分店域名;
  747. 参数:
  748. 返回:成功获取返回TRUE:;
  749. 要求:
  750. 注意:
  751. 示例:
  752. */
  753. /************************************************************************/
  754. BOOL CBranchInfo::GetTblBranchId()
  755. {
  756. CStringArray AryOfFields;
  757. AryOfFields.Add(_T("path1"));
  758. CArray<CStringArray, CStringArray> AryOfValues;
  759. if ( !GetTableValues(_T("path"), NULL, AryOfFields, AryOfValues) || !AryOfValues.GetSize())
  760. {
  761. //OutputDebugString(_T("获取path表失败\n"));
  762. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取path表失败"));
  763. return FALSE;
  764. }
  765. StringCchPrintf(m_szBranchDoMain,MAX_PATH,_T("%s"),AryOfValues.ElementAt(0).ElementAt(0));
  766. return TRUE;
  767. }
  768. /************************************************************************/
  769. /*
  770. 函数:GetTblVersion
  771. 描述:获取Version表信息;
  772. 参数:
  773. 返回:成功获取返回TRUE:
  774. 要求:
  775. 注意:
  776. 示例:
  777. */
  778. /************************************************************************/
  779. BOOL CBranchInfo::GetTblVersion()
  780. {
  781. CStringArray AryOfFields;
  782. AryOfFields.Add(_T("version"));
  783. AryOfFields.Add(_T("check1"));
  784. AryOfFields.Add(_T("check2"));
  785. AryOfFields.Add(_T("check3"));
  786. AryOfFields.Add(_T("check4"));
  787. AryOfFields.Add(_T("edit1"));
  788. AryOfFields.Add(_T("edit2"));
  789. AryOfFields.Add(_T("edit3"));
  790. AryOfFields.Add(_T("edit4"));
  791. AryOfFields.Add(_T("bak1"));
  792. AryOfFields.Add(_T("bak2"));
  793. AryOfFields.Add(_T("bak3"));
  794. AryOfFields.Add(_T("bak4"));
  795. AryOfFields.Add(_T("bak5"));
  796. AryOfFields.Add(_T("bak6"));
  797. AryOfFields.Add(_T("bakserver1"));
  798. AryOfFields.Add(_T("bakserver2"));
  799. AryOfFields.Add(_T("bakserver3"));
  800. AryOfFields.Add(_T("bakserver4"));
  801. AryOfFields.Add(_T("bakserver5"));
  802. AryOfFields.Add(_T("baktime"));
  803. AryOfFields.Add(_T("delcheck1"));
  804. AryOfFields.Add(_T("delcheck2"));
  805. AryOfFields.Add(_T("delcheck3"));
  806. AryOfFields.Add(_T("delcheck4"));
  807. AryOfFields.Add(_T("deledit1"));
  808. AryOfFields.Add(_T("deledit2"));
  809. AryOfFields.Add(_T("deledit3"));
  810. AryOfFields.Add(_T("deledit4"));
  811. AryOfFields.Add(_T("bak11"));
  812. AryOfFields.Add(_T("bak22"));
  813. AryOfFields.Add(_T("bak33"));
  814. AryOfFields.Add(_T("bak44"));
  815. CArray<CStringArray, CStringArray> AryOfValues;
  816. if (!GetTableValues(_T("version"), NULL, AryOfFields, AryOfValues))
  817. {
  818. //OutputDebugString(_T("获取version表失败\n"));
  819. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取version表失败"));
  820. return FALSE;
  821. }
  822. // 获取version表成功;
  823. _stprintf_s(m_TblVersion.szVersion, _T("%s"), AryOfValues.ElementAt(0).ElementAt(0));
  824. m_TblVersion.bCheck1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(1));
  825. m_TblVersion.bCheck2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(2));
  826. m_TblVersion.bCheck3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(3));
  827. m_TblVersion.bCheck4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(4));
  828. m_TblVersion.nCheckMonth1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(5));
  829. m_TblVersion.nCheckMonth2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(6));
  830. m_TblVersion.nCheckMonth3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(7));
  831. m_TblVersion.nCheckMonth4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(8));
  832. m_TblVersion.bCheckbak1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(9));
  833. m_TblVersion.bCheckbak2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(10));
  834. m_TblVersion.bCheckbak3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(11));
  835. m_TblVersion.bCheckbak4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(12));
  836. //m_TblVersion.bCheckbak5 = _ttoi(AryOfValues.ElementAt(0).ElementAt(13));
  837. //m_TblVersion.bCheckbak6 = _ttoi(AryOfValues.ElementAt(0).ElementAt(14));
  838. _stprintf_s(m_TblVersion.szbakServer1, _T("%s"), AryOfValues.ElementAt(0).ElementAt(15));
  839. _stprintf_s(m_TblVersion.szbakServer2, _T("%s"), AryOfValues.ElementAt(0).ElementAt(16));
  840. _stprintf_s(m_TblVersion.szbakServer3, _T("%s"), AryOfValues.ElementAt(0).ElementAt(17));
  841. _stprintf_s(m_TblVersion.szbakServer4, _T("%s"), AryOfValues.ElementAt(0).ElementAt(18));
  842. //_stprintf_s(m_TblVersion.szbakServer5, _T("%s"), AryOfValues.ElementAt(0).ElementAt(19));
  843. //m_TblVersion.nbakTime = _ttoi(AryOfValues.ElementAt(0).ElementAt(20));
  844. m_TblVersion.bCheckbakdel1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(21));
  845. m_TblVersion.bCheckbakdel2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(22));
  846. m_TblVersion.bCheckbakdel3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(23));
  847. m_TblVersion.bCheckbakdel4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(24));
  848. m_TblVersion.nCheckbdMonth1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(25));
  849. m_TblVersion.nCheckbdMonth2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(26));
  850. m_TblVersion.nCheckbdMonth3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(27));
  851. m_TblVersion.nCheckbdMonth4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(28));
  852. m_TblVersion.bSubCheck1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(29));
  853. m_TblVersion.bSubCheck2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(30));
  854. m_TblVersion.bSubCheck3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(31));
  855. m_TblVersion.bSubCheck4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(32));
  856. #if !IS_USE_VER1
  857. // 同时把本地的原始共享目录添加到m_TblNetShareInfo中;
  858. AddLocalShareDirectory();
  859. #endif
  860. return TRUE;
  861. }
  862. /************************************************************************/
  863. /*
  864. 函数:GetTblCatalogInfo
  865. 描述:获取分店数据库实例信息;
  866. 参数:
  867. 返回:
  868. 要求:
  869. 注意:
  870. 示例:
  871. */
  872. /************************************************************************/
  873. BOOL CBranchInfo::GetTblCatalogInfo()
  874. {
  875. CStringArray AryOfFields;
  876. AryOfFields.Add(_T("enable"));
  877. AryOfFields.Add(_T("branch"));
  878. AryOfFields.Add(_T("branchid"));
  879. AryOfFields.Add(_T("clgname"));
  880. AryOfFields.Add(_T("clgport"));
  881. AryOfFields.Add(_T("clgsource"));
  882. AryOfFields.Add(_T("clgaccount"));
  883. AryOfFields.Add(_T("clgpassword"));
  884. CArray<CStringArray, CStringArray> AryOfValues;
  885. if (!GetTableValues(_T("CatalogInfo"), NULL, AryOfFields, AryOfValues))
  886. {
  887. //OutputDebugString(_T("获取CatalogInfo表失败\n"));
  888. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取CatalogInfo表失败"));
  889. return FALSE;
  890. }
  891. // 获取version表成功;
  892. for (int i = 0; i < AryOfValues.GetSize(); i++)
  893. {
  894. if( IsCatalogInfoExists(AryOfValues.ElementAt(i).ElementAt(2)) )
  895. continue;
  896. TblCatalogInfo *pCatalogInfo = new TblCatalogInfo;
  897. pCatalogInfo->bEnable = _ttoi(AryOfValues.ElementAt(i).ElementAt(0));
  898. _stprintf_s(pCatalogInfo->szBranch, _T("%s"), AryOfValues.ElementAt(i).ElementAt(1));
  899. _stprintf_s(pCatalogInfo->szBranchId, _T("%s"), AryOfValues.ElementAt(i).ElementAt(2));
  900. _stprintf_s(pCatalogInfo->szCatalogName, _T("%s"), AryOfValues.ElementAt(i).ElementAt(3));
  901. pCatalogInfo->dwCatalogPort = _ttoi(AryOfValues.ElementAt(i).ElementAt(4));
  902. _stprintf_s(pCatalogInfo->szCatalogSource, _T("%s"), AryOfValues.ElementAt(i).ElementAt(5));
  903. _stprintf_s(pCatalogInfo->szCatalogAccount, _T("%s"), AryOfValues.ElementAt(i).ElementAt(6));
  904. _stprintf_s(pCatalogInfo->szCatalogPassWord, _T("%s"), AryOfValues.ElementAt(i).ElementAt(7));
  905. m_TblCatalogInfo.push_back(pCatalogInfo);
  906. }
  907. return TRUE;
  908. }
  909. /************************************************************************/
  910. /*
  911. 函数:GetTblNetShareInfo
  912. 描述:获取共享表的共享目录信息;
  913. 参数:
  914. 返回:
  915. 要求:
  916. 注意:如果当前连接的数据库是外网的(其他分店),则不读取这个共享表;
  917. 示例:
  918. */
  919. /************************************************************************/
  920. BOOL CBranchInfo::GetTblNetShareInfo()
  921. {
  922. // 清除容器;
  923. RemoveNetShareInfo();
  924. AddLocalShareDirectory();
  925. CStringArray AryOfFields;
  926. AryOfFields.Add(_T("enable"));
  927. AryOfFields.Add(_T("branchid"));
  928. AryOfFields.Add(_T("sharePath"));
  929. AryOfFields.Add(_T("mincapacity"));
  930. AryOfFields.Add(_T("maxcapacity"));
  931. AryOfFields.Add(_T("photoType"));
  932. AryOfFields.Add(_T("priority"));
  933. CArray<CStringArray, CStringArray> AryOfValues;
  934. if (!GetTableValues(_T("NetShareInfo"), NULL, AryOfFields, AryOfValues))
  935. {
  936. //OutputDebugString(_T("获取NetShareInfo表失败\n"));
  937. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取NetShareInfo表失败"));
  938. return FALSE;
  939. }
  940. // 获取version表成功;
  941. for (int i = 0; i < AryOfValues.GetSize(); i++)
  942. {
  943. if( IsNetShareInfoExists(AryOfValues.ElementAt(i).ElementAt(1),AryOfValues.ElementAt(i).ElementAt(2)) )
  944. continue;
  945. TblNetShareInfo *pNetShareInfo = new TblNetShareInfo;
  946. pNetShareInfo->bEnable = _ttoi(AryOfValues.ElementAt(i).ElementAt(0));
  947. _stprintf_s(pNetShareInfo->szBranchId, _T("%s"), AryOfValues.ElementAt(i).ElementAt(1));
  948. _stprintf_s(pNetShareInfo->szShareDirectory, _T("%s"), AryOfValues.ElementAt(i).ElementAt(2));
  949. pNetShareInfo->byMinCapacity = _ttoi(AryOfValues.ElementAt(i).ElementAt(3));
  950. pNetShareInfo->byMaxCapacity = _ttoi(AryOfValues.ElementAt(i).ElementAt(4));
  951. pNetShareInfo->byPhotoType = _ttoi(AryOfValues.ElementAt(i).ElementAt(5));
  952. pNetShareInfo->byPriority = _ttoi(AryOfValues.ElementAt(i).ElementAt(6));
  953. m_TblNetShareInfo.push_back(pNetShareInfo);
  954. }
  955. return TRUE;
  956. }
  957. /************************************************************************/
  958. /*
  959. 函数:IsNetShareInfoExists
  960. 描述:域名共享信息是否已存在;
  961. 参数:
  962. IN: lpBranchId 共享目录应用的域名;
  963. IN: lpShareDirectory 共享目录;
  964. 返回:存在返回TRUE;
  965. 要求:
  966. 注意:
  967. 示例:
  968. */
  969. /************************************************************************/
  970. BOOL CBranchInfo::IsNetShareInfoExists(IN LPCTSTR lpBranchId, IN LPCTSTR lpShareDirectory)
  971. {
  972. BOOL bExists = FALSE;
  973. for ( NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  974. {
  975. if ( _tcscmp((*it)->szBranchId,lpBranchId) == 0 && _tcscmp((*it)->szShareDirectory,lpShareDirectory) == 0)
  976. {
  977. bExists = TRUE;
  978. break;
  979. }
  980. }
  981. return bExists;
  982. }
  983. /************************************************************************/
  984. /*
  985. 函数:IsCatalogInfoExists
  986. 描述:分店数据库实例是否存在;
  987. 参数:
  988. IN: lpBranchId 分店域名;
  989. 返回:存在返回TRUE;
  990. 要求:
  991. 注意:
  992. 示例:
  993. */
  994. /************************************************************************/
  995. BOOL CBranchInfo::IsCatalogInfoExists(IN LPCTSTR lpBranchId)
  996. {
  997. BOOL bExists = FALSE;
  998. for ( CATALOGINFO::const_iterator it = m_TblCatalogInfo.begin(); it != m_TblCatalogInfo.end(); it++)
  999. {
  1000. if ( _tcscmp((*it)->szBranchId,lpBranchId) == 0 )
  1001. {
  1002. bExists = TRUE;
  1003. break;
  1004. }
  1005. }
  1006. return bExists;
  1007. }
  1008. /************************************************************************/
  1009. /*
  1010. 函数:GetTblIncrementBackup
  1011. 描述:获取增量备份的订单信息;
  1012. 参数:
  1013. OUT: AryOfValues
  1014. 返回:成功获取且大于0返回TRUE;
  1015. 要求:
  1016. 注意:
  1017. 示例:
  1018. */
  1019. /************************************************************************/
  1020. BOOL CBranchInfo::GetTblIncrementBackup(OUT CArray<CStringArray, CStringArray> &AryOfValues, IN BOOL bIsBackup /* = FALSE */)
  1021. {
  1022. CStringArray AryOfFields;
  1023. AryOfFields.Add(_T("isbackup"));
  1024. AryOfFields.Add(_T("branchid"));
  1025. AryOfFields.Add(_T("opttime"));
  1026. AryOfFields.Add(_T("[order]"));
  1027. AryOfFields.Add(_T("photoType"));
  1028. AryOfFields.Add(_T("[content]"));
  1029. AryOfFields.Add(_T("userid"));
  1030. AryOfFields.Add(_T("username"));
  1031. AryOfFields.Add(_T("baktime"));
  1032. if (!GetTableValues(_T("IncrementalBackup"), bIsBackup ? _T("isbackup = 1") : _T("isbackup = 0"), AryOfFields, AryOfValues))
  1033. {
  1034. //OutputDebugString(_T("获取IncrementalBackup表失败\n"));
  1035. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取IncrementalBackup表失败"));
  1036. return FALSE;
  1037. }
  1038. return TRUE;
  1039. }
  1040. #if TEST_CREATE_DIRECTORY // 用于创建订单目录;
  1041. /************************************************************************/
  1042. /*
  1043. 函数:GetTblPhotoManager
  1044. 描述:测试使用,获取PhotoManager表中的订单号;
  1045. 参数:
  1046. 返回:
  1047. 要求:
  1048. 注意:
  1049. 示例:
  1050. */
  1051. /************************************************************************/
  1052. BOOL CBranchInfo::GetTblPhotoManager(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1053. {
  1054. CStringArray AryOfFields;
  1055. AryOfFields.Add(_T("[order]"));
  1056. if (!GetTableValues(_T("PhotoManager"),NULL, AryOfFields, AryOfValues))
  1057. {
  1058. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1059. return FALSE;
  1060. }
  1061. return TRUE;
  1062. }
  1063. /************************************************************************/
  1064. /*
  1065. 函数:CreateOrderDirectory
  1066. 描述:创建PhotoManager表中的订单目录;
  1067. 参数:
  1068. 返回:
  1069. 要求:
  1070. 注意:
  1071. 示例:
  1072. */
  1073. /************************************************************************/
  1074. void CBranchInfo::CreateOrderDirectory(IN LPCTSTR lpOrderNum)
  1075. {
  1076. for (vector<TblNetShareInfo*>::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  1077. {
  1078. if ( _tcscmp(m_szBranchDoMain,(*it)->szBranchId) == 0 )
  1079. {
  1080. CString strOrderPath = _T("");
  1081. strOrderPath.Format(_T("%s\\%s"),(*it)->szShareDirectory,lpOrderNum);
  1082. // 测试,先为测试删除创建所有的订单目录;
  1083. if(!PathFileExists((*it)->szShareDirectory))continue;
  1084. strOrderPath += _T("\\");
  1085. //OutputDebugString(strOrderPath);
  1086. //OutputDebugString(_T("\n"));
  1087. #ifdef UNICODE
  1088. CHAR szShareDirectory[MAX_PATH] = {0};
  1089. unicode2acsii(strOrderPath,szShareDirectory);
  1090. MakeSureDirectoryPathExists(szShareDirectory);
  1091. #else
  1092. MyMakeSureDirectoryPathExists(strOrderPath);
  1093. #endif
  1094. LOG4C_NO_FILENUM((LOG_NOTICE,"创建目录[%s]成功",CW2A(strOrderPath)));
  1095. }
  1096. }
  1097. }
  1098. #endif
  1099. /************************************************************************/
  1100. /*
  1101. 函数:GetTblAllPhotoManager
  1102. 描述:获取要删除的所有订单号;
  1103. 参数:
  1104. OUT: AryOfValues
  1105. 返回:成功获取且大于0返回TRUE;
  1106. 要求:
  1107. 注意:
  1108. 示例:
  1109. */
  1110. /************************************************************************/
  1111. BOOL CBranchInfo::GetTblAllPhotoManager(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1112. {
  1113. CStringArray AryOfFields;
  1114. AryOfFields.Add(_T("branchid"));
  1115. AryOfFields.Add(_T("[order]"));
  1116. AryOfFields.Add(_T("takestatus"));
  1117. AryOfFields.Add(_T("taketime"));
  1118. AryOfFields.Add(_T("opdel"));
  1119. AryOfFields.Add(_T("epdel"));
  1120. AryOfFields.Add(_T("fpdel"));
  1121. AryOfFields.Add(_T("dpdel"));
  1122. AryOfFields.Add(_T("opbdel"));
  1123. AryOfFields.Add(_T("epbdel"));
  1124. AryOfFields.Add(_T("fpbdel"));
  1125. AryOfFields.Add(_T("dpbdel"));
  1126. AryOfFields.Add(_T("opdeltm"));
  1127. AryOfFields.Add(_T("epdeltm"));
  1128. AryOfFields.Add(_T("fpdeltm"));
  1129. AryOfFields.Add(_T("dpdeltm"));
  1130. AryOfFields.Add(_T("opbdeltm"));
  1131. AryOfFields.Add(_T("epbdeltm"));
  1132. AryOfFields.Add(_T("fpbdeltm"));
  1133. AryOfFields.Add(_T("dpbdeltm"));
  1134. if (!GetTableValues(_T("PhotoManager"), NULL, AryOfFields, AryOfValues))
  1135. {
  1136. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1137. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取PhotoManager表 all失败 "));
  1138. return FALSE;
  1139. }
  1140. return TRUE;
  1141. }
  1142. /************************************************************************/
  1143. /*
  1144. 函数:GetTblPhotoManager1
  1145. 描述:获取要删除的原片订单号;
  1146. 参数:
  1147. OUT: AryOfValues
  1148. 返回:成功获取且大于0返回TRUE;
  1149. 要求:
  1150. 注意:
  1151. 示例:
  1152. */
  1153. /************************************************************************/
  1154. BOOL CBranchInfo::GetTblPhotoManager1(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1155. {
  1156. CStringArray AryOfFields;
  1157. AryOfFields.Add(_T("[branchid]"));
  1158. AryOfFields.Add(_T("[order]"));
  1159. AryOfFields.Add(_T("takestatus"));
  1160. AryOfFields.Add(_T("taketime"));
  1161. AryOfFields.Add(_T("opdel"));
  1162. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and opdel = 0"), AryOfFields, AryOfValues))
  1163. {
  1164. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1165. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取PhotoManager表1失败"));
  1166. return FALSE;
  1167. }
  1168. return TRUE;
  1169. }
  1170. /************************************************************************/
  1171. /*
  1172. 函数:GetTblPhotoManager2
  1173. 描述:获取要删除的初修片订单号;
  1174. 参数:
  1175. OUT: AryOfValues
  1176. 返回:成功获取且大于0返回TRUE;
  1177. 要求:
  1178. 注意:
  1179. 示例:
  1180. */
  1181. /************************************************************************/
  1182. BOOL CBranchInfo::GetTblPhotoManager2(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1183. {
  1184. CStringArray AryOfFields;
  1185. AryOfFields.Add(_T("[branchid]"));
  1186. AryOfFields.Add(_T("[order]"));
  1187. AryOfFields.Add(_T("takestatus"));
  1188. AryOfFields.Add(_T("taketime"));
  1189. AryOfFields.Add(_T("epdel"));
  1190. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and epdel = 0"), AryOfFields, AryOfValues))
  1191. {
  1192. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1193. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取PhotoManager表2失败"));
  1194. return FALSE;
  1195. }
  1196. return TRUE;
  1197. }
  1198. /************************************************************************/
  1199. /*
  1200. 函数:GetTblPhotoManager3
  1201. 描述:获取要删除的精修片订单号;
  1202. 参数:
  1203. OUT: AryOfValues
  1204. 返回:成功获取且大于0返回TRUE;
  1205. 要求:
  1206. 注意:
  1207. 示例:
  1208. */
  1209. /************************************************************************/
  1210. BOOL CBranchInfo::GetTblPhotoManager3(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1211. {
  1212. CStringArray AryOfFields;
  1213. AryOfFields.Add(_T("[branchid]"));
  1214. AryOfFields.Add(_T("[order]"));
  1215. AryOfFields.Add(_T("takestatus"));
  1216. AryOfFields.Add(_T("taketime"));
  1217. AryOfFields.Add(_T("fpdel"));
  1218. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and fpdel = 0"), AryOfFields, AryOfValues))
  1219. {
  1220. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1221. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取PhotoManager表3失败"));
  1222. return FALSE;
  1223. }
  1224. return TRUE;
  1225. }
  1226. /************************************************************************/
  1227. /*
  1228. 函数:GetTblPhotoManager4
  1229. 描述:获取要删除的设计片订单号;
  1230. 参数:
  1231. OUT: AryOfValues
  1232. 返回:成功获取且大于0返回TRUE;
  1233. 要求:
  1234. 注意:
  1235. 示例:
  1236. */
  1237. /************************************************************************/
  1238. BOOL CBranchInfo::GetTblPhotoManager4(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1239. {
  1240. CStringArray AryOfFields;
  1241. AryOfFields.Add(_T("[branchid]"));
  1242. AryOfFields.Add(_T("[order]"));
  1243. AryOfFields.Add(_T("takestatus"));
  1244. AryOfFields.Add(_T("taketime"));
  1245. AryOfFields.Add(_T("dpdel"));
  1246. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and dpdel = 0"), AryOfFields, AryOfValues))
  1247. {
  1248. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1249. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取PhotoManager表4失败"));
  1250. return FALSE;
  1251. }
  1252. return TRUE;
  1253. }
  1254. /************************************************************************/
  1255. /*
  1256. 函数:GetTblPhotoManager5
  1257. 描述:获取要删除的备份原片订单号;
  1258. 参数:
  1259. OUT: AryOfValues
  1260. 返回:成功获取且大于0返回TRUE;
  1261. 要求:
  1262. 注意:
  1263. */
  1264. /************************************************************************/
  1265. BOOL CBranchInfo::GetTblPhotoManager5(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1266. {
  1267. CStringArray AryOfFields;
  1268. AryOfFields.Add(_T("[branchid]"));
  1269. AryOfFields.Add(_T("[order]"));
  1270. AryOfFields.Add(_T("takestatus"));
  1271. AryOfFields.Add(_T("taketime"));
  1272. AryOfFields.Add(_T("opbdel"));
  1273. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and opbdel = 0"), AryOfFields, AryOfValues))
  1274. {
  1275. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1276. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取PhotoManager表5失败"));
  1277. return FALSE;
  1278. }
  1279. return TRUE;
  1280. }
  1281. /************************************************************************/
  1282. /*
  1283. 函数:GetTblPhotoManager6
  1284. 描述:获取要删除的备份初修片订单号;
  1285. 参数:
  1286. OUT: AryOfValues
  1287. 返回:成功获取且大于0返回TRUE;
  1288. 要求:
  1289. 注意:
  1290. */
  1291. /************************************************************************/
  1292. BOOL CBranchInfo::GetTblPhotoManager6(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1293. {
  1294. CStringArray AryOfFields;
  1295. AryOfFields.Add(_T("[branchid]"));
  1296. AryOfFields.Add(_T("[order]"));
  1297. AryOfFields.Add(_T("takestatus"));
  1298. AryOfFields.Add(_T("taketime"));
  1299. AryOfFields.Add(_T("epbdel"));
  1300. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and epbdel = 0"), AryOfFields, AryOfValues))
  1301. {
  1302. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1303. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取PhotoManager表6失败"));
  1304. return FALSE;
  1305. }
  1306. return TRUE;
  1307. }
  1308. /************************************************************************/
  1309. /*
  1310. 函数:GetTblPhotoManager7
  1311. 描述:获取要删除的备份精修片订单号;
  1312. 参数:
  1313. OUT: AryOfValues
  1314. 返回:成功获取且大于0返回TRUE;
  1315. 要求:
  1316. 注意:
  1317. */
  1318. /************************************************************************/
  1319. BOOL CBranchInfo::GetTblPhotoManager7(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1320. {
  1321. CStringArray AryOfFields;
  1322. AryOfFields.Add(_T("[branchid]"));
  1323. AryOfFields.Add(_T("[order]"));
  1324. AryOfFields.Add(_T("takestatus"));
  1325. AryOfFields.Add(_T("taketime"));
  1326. AryOfFields.Add(_T("fpbdel"));
  1327. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and fpbdel = 0"), AryOfFields, AryOfValues))
  1328. {
  1329. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1330. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取PhotoManager表7失败"));
  1331. return FALSE;
  1332. }
  1333. return TRUE;
  1334. }
  1335. /************************************************************************/
  1336. /*
  1337. 函数:GetTblPhotoManager8
  1338. 描述:获取要删除的备份设计片订单号;
  1339. 参数:
  1340. OUT: AryOfValues
  1341. 返回:成功获取且大于0返回TRUE;
  1342. 要求:
  1343. 注意:
  1344. */
  1345. /************************************************************************/
  1346. BOOL CBranchInfo::GetTblPhotoManager8(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1347. {
  1348. CStringArray AryOfFields;
  1349. AryOfFields.Add(_T("[branchid]"));
  1350. AryOfFields.Add(_T("[order]"));
  1351. AryOfFields.Add(_T("takestatus"));
  1352. AryOfFields.Add(_T("taketime"));
  1353. AryOfFields.Add(_T("dpbdel"));
  1354. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and dpbdel = 0"), AryOfFields, AryOfValues))
  1355. {
  1356. //OutputDebugString(_T("获取PhotoManager表失败\n"));
  1357. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取PhotoManager表8失败"));
  1358. return FALSE;
  1359. }
  1360. return TRUE;
  1361. }
  1362. /************************************************************************/
  1363. /*
  1364. 函数:AddLocalShareDirectory
  1365. 描述:添加本地固定名称的共享目录(早期版本软件使用);
  1366. 参数:#
  1367. 返回:#
  1368. 要求:
  1369. 注意:
  1370. */
  1371. /************************************************************************/
  1372. void CBranchInfo::AddLocalShareDirectory()
  1373. {
  1374. // 1.获取本机计算机名;
  1375. DWORD dwLeng = 0;
  1376. TCHAR szHost[MAX_PATH] = _T("");
  1377. GetComputerName(NULL, &dwLeng);
  1378. GetComputerName(szHost, &dwLeng);
  1379. // 2.本机共享目录;
  1380. TCHAR szShareDirectory[MAX_PATH] = { 0 };
  1381. #if 1
  1382. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), szHost, ORIGINAL);
  1383. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 1, 255);
  1384. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), szHost, EARLY);
  1385. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 2, 255);
  1386. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), szHost, FUTHER);
  1387. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 3, 255);
  1388. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), szHost, DESIGN);
  1389. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 4, 255);
  1390. #endif
  1391. #ifdef CHILD_VERSION
  1392. // 3.其他备份目录;
  1393. // 儿童版本;
  1394. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer1, _T("客户原片备份(儿童管理软件)$"));
  1395. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 5, 255);
  1396. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer2, _T("修好的片备份(儿童管理软件)$"));
  1397. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 6, 255);
  1398. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer3, _T("精修好的片备份(儿童管理软件)$"));
  1399. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 7, 255);
  1400. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer4, _T("设计好的片备份(儿童管理软件)$"));
  1401. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 8, 255);
  1402. #else
  1403. // 婚纱版本;
  1404. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer1, _T("客户原片备份(管理软件)$"));
  1405. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 5, 255);
  1406. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer2, _T("修好的片备份(管理软件)$"));
  1407. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 6, 255);
  1408. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer3, _T("精修好的片备份(管理软件)$"));
  1409. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 7, 255);
  1410. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer4, _T("设计好的片备份(管理软件)$"));
  1411. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 35, 8, 255);
  1412. #endif
  1413. }
  1414. /************************************************************************/
  1415. /*
  1416. 函数:InsertNetShareInfo
  1417. 描述:添加新的共享目录信息;
  1418. 参数:
  1419. IN: lpShareDirectory
  1420. IN: lpBranchId
  1421. IN: nMinCapacity
  1422. IN: nMaxCapacity
  1423. IN: nPhotoType
  1424. IN: nPriority
  1425. 返回:成功添加返回TRUE;
  1426. 要求:
  1427. 注意:
  1428. */
  1429. /************************************************************************/
  1430. BOOL CBranchInfo::InsertNetShareInfo(IN LPCTSTR lpShareDirectory, IN LPCTSTR lpBranchId, IN CONST BYTE &nMinCapacity, IN CONST BYTE &nMaxCapacity, IN CONST BYTE &nPhotoType, IN CONST BYTE &nPriority)
  1431. {
  1432. if (PathFileExists(lpShareDirectory))
  1433. {
  1434. TblNetShareInfo *pNetShareInfo = new TblNetShareInfo;
  1435. pNetShareInfo->bEnable = TRUE;
  1436. _stprintf_s(pNetShareInfo->szBranchId, _T("%s"), m_szBranchDoMain);
  1437. _stprintf_s(pNetShareInfo->szShareDirectory, _T("%s"), lpShareDirectory);
  1438. pNetShareInfo->byMinCapacity = nMinCapacity;
  1439. pNetShareInfo->byMaxCapacity = nMaxCapacity;
  1440. pNetShareInfo->byPhotoType = nPhotoType;
  1441. pNetShareInfo->byPriority = nPriority;
  1442. m_TblNetShareInfo.push_back(pNetShareInfo);
  1443. return TRUE;
  1444. }
  1445. return FALSE;
  1446. }
  1447. //////////////////////////////////////////////////////////////////////////
  1448. /************************************************************************/
  1449. /*
  1450. 函数:StartThread
  1451. 描述:启动工作者线程;
  1452. 参数:
  1453. 返回:
  1454. 要求:
  1455. 注意:
  1456. */
  1457. /************************************************************************/
  1458. BOOL CBranchInfo::StartThread()
  1459. {
  1460. //获取备份目录
  1461. m_bakDirArr.RemoveAll();
  1462. GetBackupOfSaveDir(m_bakDirArr);
  1463. //////////////////////////////////////////////////////////////////////////
  1464. // 增量备份线程;
  1465. if ( m_hIncrementCtrl == NULL )
  1466. {
  1467. m_hIncrementCtrl = CreateEvent(NULL, TRUE, FALSE, NULL);
  1468. if ( m_hIncrementCtrl == NULL )
  1469. {
  1470. // 创建事件失败;
  1471. //OutputDebugString(_T("创建增量备份线程事件失败\n"));
  1472. //LOG4C_NO_FILENUM((LOG_NOTICE,"创建增量备份线程事件失败"));
  1473. return FALSE;
  1474. }
  1475. }
  1476. if ( m_hIncrement == NULL )
  1477. {
  1478. m_hIncrement = CreateThread(NULL, 0, ThreadOfIncrement, this, 0, NULL);
  1479. if ( m_hIncrement == NULL )
  1480. {
  1481. // 创建线程失败;
  1482. //OutputDebugString(_T("创建增量备份线程失败\n"));
  1483. //LOG4C_NO_FILENUM((LOG_NOTICE,"创建增量备份线程失败"));
  1484. return FALSE;
  1485. }
  1486. }
  1487. /*
  1488. //////////////////////////////////////////////////////////////////////////
  1489. // 订单相片删除线程;
  1490. if (m_hRemoveCtrl == NULL)
  1491. {
  1492. m_hRemoveCtrl = CreateEvent(NULL, TRUE, FALSE, NULL);
  1493. if (m_hRemoveCtrl == NULL)
  1494. {
  1495. // 创建事件失败;
  1496. //OutputDebugString(_T("创建订单删除线程事件失败\n"));
  1497. //LOG4C_NO_FILENUM((LOG_NOTICE,"创建订单删除线程事件失败"));
  1498. return FALSE;
  1499. }
  1500. }
  1501. if (m_hRemove == NULL)
  1502. {
  1503. m_hRemove = CreateThread(NULL, 0, ThreadRemove, this, 0, NULL);
  1504. if (m_hRemove == NULL)
  1505. {
  1506. // 创建线程失败;
  1507. //OutputDebugString(_T("创建订单删除线程失败\n"));
  1508. //LOG4C_NO_FILENUM((LOG_NOTICE,"创建订单删除线程失败"));
  1509. return FALSE;
  1510. }
  1511. }
  1512. */
  1513. return TRUE;
  1514. }
  1515. /************************************************************************/
  1516. /*
  1517. 函数:StartThread_Tm
  1518. 描述:启动工作线程(计时器线程)
  1519. 参数:
  1520. 返回:
  1521. 要求:
  1522. 注意:
  1523. */
  1524. /************************************************************************/
  1525. BOOL CBranchInfo::StartThread_Tm()
  1526. {
  1527. // 计时器;
  1528. SYSTEMTIME st;
  1529. FILETIME ftLocal, ftUTC;
  1530. LARGE_INTEGER liUTC;
  1531. st.wYear = 2015; // Year
  1532. st.wMonth = 4; // January
  1533. st.wDayOfWeek = 0; // Ignored
  1534. st.wDay = 1; // The first of the month
  1535. st.wHour = 23; // 1PM
  1536. st.wMinute = 0; // 0 minutes into the hour
  1537. st.wSecond = 0; // 0 seconds into the minute
  1538. st.wMilliseconds = 0; // 0 milliseconds into the second
  1539. SystemTimeToFileTime(&st, &ftLocal);
  1540. // Convert local time to UTC time.
  1541. LocalFileTimeToFileTime(&ftLocal, &ftUTC);
  1542. // Convert FILETIME to LARGE_INTEGER because of different alignment.
  1543. liUTC.LowPart = ftUTC.dwLowDateTime;
  1544. liUTC.HighPart = ftUTC.dwHighDateTime;
  1545. liUTC.QuadPart = -(2 * 10000000);
  1546. const int nTimerUnitsPerSecond = 10000000;
  1547. //////////////////////////////////////////////////////////////////////////
  1548. // 增量备份线程;
  1549. m_bIncrementTm = FALSE;
  1550. m_hIncrementWaitableTm = CreateWaitableTimer(NULL, FALSE, NULL);
  1551. #if _DEBUG
  1552. SetWaitableTimer(m_hIncrementWaitableTm, &liUTC, 3 * 1000, NULL, NULL, FALSE); // 3秒执行一次;
  1553. #else
  1554. SetWaitableTimer(m_hIncrementWaitableTm, &liUTC, 3 * 60 * 60 * 1000, NULL, NULL, FALSE); // 3小时执行一次;
  1555. #endif
  1556. m_hIncrement = CreateThread(NULL, 0, ThreadOfIncrement_Tm, this, 0, NULL);
  1557. if (m_hIncrement == NULL)
  1558. {
  1559. //OutputDebugString(_T("创建增量备份线程失败\n"));
  1560. //LOG4C_NO_FILENUM((LOG_NOTICE,"创建增量备份线程失败"));
  1561. return FALSE;
  1562. }
  1563. /*
  1564. //////////////////////////////////////////////////////////////////////////
  1565. // 订单相片删除线程;
  1566. m_bRemoveTm = FALSE;
  1567. m_hRemoveWaitableTm = CreateWaitableTimer(NULL, FALSE, NULL);
  1568. #if _DEBUG
  1569. SetWaitableTimer(m_hRemoveWaitableTm, &liUTC, 3 * 1000, NULL, NULL, FALSE); // 3秒执行一次;
  1570. #else
  1571. SetWaitableTimer(m_hRemoveWaitableTm, &liUTC, 3 * 60 * 60 * 1000, NULL, NULL, FALSE); // 3小时执行一次;
  1572. #endif
  1573. m_hRemove = CreateThread(NULL, 0, ThreadRemove_Tm, this, 0, NULL);
  1574. if (m_hRemove == NULL)
  1575. {
  1576. //OutputDebugString(_T("创建订单删除线程失败\n"));
  1577. //LOG4C_NO_FILENUM((LOG_NOTICE,"创建订单删除线程失败"));
  1578. return FALSE;
  1579. }
  1580. */
  1581. return TRUE;
  1582. }
  1583. /************************************************************************/
  1584. /*
  1585. 函数:EndOfThread
  1586. 描述:结束线程
  1587. 参数:
  1588. 返回:
  1589. 要求:
  1590. 注意:
  1591. */
  1592. /************************************************************************/
  1593. VOID CBranchInfo::EndOfThread()
  1594. {
  1595. //////////////////////////////////////////////////////////////////////////
  1596. // 停止增量备份线程;
  1597. if ( m_hIncrementCtrl )
  1598. SetEvent(m_hIncrementCtrl);
  1599. if ( m_hIncrement )
  1600. {
  1601. WaitForSingleObject(m_hIncrement, INFINITE);
  1602. CloseHandle(m_hIncrement);
  1603. m_hIncrement = NULL;
  1604. }
  1605. if ( m_hIncrementCtrl )
  1606. {
  1607. CloseHandle(m_hIncrementCtrl);
  1608. m_hIncrementCtrl = NULL;
  1609. }
  1610. /*
  1611. //////////////////////////////////////////////////////////////////////////
  1612. // 停止订单删除线程;
  1613. if ( m_hRemoveCtrl )
  1614. {
  1615. SetEvent(m_hRemoveCtrl);
  1616. }
  1617. if (m_hRemove)
  1618. {
  1619. WaitForSingleObject(m_hRemove, INFINITE);
  1620. CloseHandle(m_hRemove);
  1621. m_hRemove = NULL;
  1622. }
  1623. if (m_hRemoveCtrl)
  1624. {
  1625. CloseHandle(m_hRemoveCtrl);
  1626. m_hRemoveCtrl = NULL;
  1627. }
  1628. */
  1629. }
  1630. /************************************************************************/
  1631. /*
  1632. 函数:EndOfThread_Tm
  1633. 描述:结束线程(计时器线程)
  1634. 参数:
  1635. 返回:
  1636. 要求:
  1637. 注意:
  1638. */
  1639. /************************************************************************/
  1640. VOID CBranchInfo::EndOfThread_Tm()
  1641. {
  1642. // 重置等待时间,立即返回;
  1643. LARGE_INTEGER li;
  1644. const int nTimerUnitsPerSecond = 10000000;
  1645. li.QuadPart = 1 * nTimerUnitsPerSecond;
  1646. //////////////////////////////////////////////////////////////////////////
  1647. // 停止增量备份线程;
  1648. m_bIncrementTm = TRUE;
  1649. SetWaitableTimer(m_hIncrementWaitableTm, &li, NULL, NULL, NULL, FALSE);
  1650. if (m_hIncrement)
  1651. {
  1652. WaitForSingleObject(m_hIncrement, INFINITE);
  1653. CloseHandle(m_hIncrement);
  1654. m_hIncrement = NULL;
  1655. }
  1656. if (m_hIncrementWaitableTm)
  1657. {
  1658. CloseHandle(m_hIncrementWaitableTm);
  1659. m_hIncrementWaitableTm = NULL;
  1660. }
  1661. /*
  1662. //////////////////////////////////////////////////////////////////////////
  1663. // 停止订单删除线程;
  1664. m_bRemoveTm = TRUE;
  1665. SetWaitableTimer(m_hRemoveWaitableTm, &li, NULL, NULL, NULL, FALSE);
  1666. if (m_hRemove)
  1667. {
  1668. WaitForSingleObject(m_hRemove, INFINITE);
  1669. CloseHandle(m_hRemove);
  1670. m_hRemove = NULL;
  1671. }
  1672. if (m_hRemoveWaitableTm)
  1673. {
  1674. CloseHandle(m_hRemoveWaitableTm);
  1675. m_hRemoveWaitableTm = NULL;
  1676. }
  1677. */
  1678. }
  1679. /************************************************************************/
  1680. /*
  1681. 函数:ThreadOfIncrement
  1682. 描述:增量备份线程;
  1683. 参数:
  1684. 返回:
  1685. 要求:
  1686. 注意:
  1687. */
  1688. /************************************************************************/
  1689. DWORD CBranchInfo::ThreadOfIncrement(LPVOID lpParameter)
  1690. {
  1691. //OutputDebugString(_T("增量备份线程启动\n"));
  1692. /*
  1693. CBranchInfo *pInstance = (CBranchInfo*)lpParameter;
  1694. do
  1695. {
  1696. pInstance->IncrementWork();
  1697. } while (WAIT_TIMEOUT == WaitForSingleObject(pInstance->m_hIncrementCtrl, 15000) );
  1698. */
  1699. //OutputDebugString(_T("增量备份线程退出\n"));
  1700. return 0L;
  1701. }
  1702. /************************************************************************/
  1703. /*
  1704. 函数:ThreadRemove
  1705. 描述:自动删除线程
  1706. 参数:
  1707. 返回:
  1708. 要求:
  1709. 注意:
  1710. */
  1711. /************************************************************************/
  1712. DWORD CBranchInfo::ThreadRemove(LPVOID lpParameter)
  1713. {
  1714. //OutputDebugString(_T("删除订单线程启动\n"));
  1715. int nSize = 0;
  1716. CBranchInfo *pInstance = (CBranchInfo*)lpParameter;
  1717. do
  1718. {
  1719. // 读取PhotoManager表信息;
  1720. CArray<CStringArray, CStringArray> AryOfRemvoeOrder;
  1721. #if TEST_CREATE_DIRECTORY
  1722. pInstance->GetTblPhotoManager(AryOfRemvoeOrder);
  1723. nSize = AryOfRemvoeOrder.GetSize();
  1724. for ( int i = 0; i < nSize; i++)
  1725. {
  1726. pInstance->CreateOrderDirectory(AryOfRemvoeOrder.ElementAt(i).ElementAt(0));
  1727. Sleep(0);
  1728. }
  1729. SetEvent(pInstance->m_hRemoveCtrl);
  1730. LOG4C_NO_FILENUM((LOG_NOTICE,"创建目录结束,线程退出~~"));
  1731. #else
  1732. AryOfRemvoeOrder.RemoveAll();
  1733. pInstance->GetTblPhotoManager1(AryOfRemvoeOrder);
  1734. nSize = AryOfRemvoeOrder.GetSize();
  1735. for ( int i = 0; i < nSize; i++)
  1736. {
  1737. pInstance->GetRemvoeOrderInfoAndRemove(AryOfRemvoeOrder.ElementAt(i).ElementAt(0),AryOfRemvoeOrder.ElementAt(i).ElementAt(1),AryOfRemvoeOrder.ElementAt(i).ElementAt(3),1);
  1738. Sleep(0);
  1739. }
  1740. AryOfRemvoeOrder.RemoveAll();
  1741. pInstance->GetTblPhotoManager2(AryOfRemvoeOrder);
  1742. nSize = AryOfRemvoeOrder.GetSize();
  1743. for ( int i = 0; i < nSize; i++)
  1744. {
  1745. pInstance->GetRemvoeOrderInfoAndRemove(AryOfRemvoeOrder.ElementAt(i).ElementAt(0),AryOfRemvoeOrder.ElementAt(i).ElementAt(1),AryOfRemvoeOrder.ElementAt(i).ElementAt(3),2);
  1746. Sleep(0);
  1747. }
  1748. AryOfRemvoeOrder.RemoveAll();
  1749. pInstance->GetTblPhotoManager3(AryOfRemvoeOrder);
  1750. nSize = AryOfRemvoeOrder.GetSize();
  1751. for ( int i = 0; i < nSize; i++)
  1752. {
  1753. pInstance->GetRemvoeOrderInfoAndRemove(AryOfRemvoeOrder.ElementAt(i).ElementAt(0),AryOfRemvoeOrder.ElementAt(i).ElementAt(1),AryOfRemvoeOrder.ElementAt(i).ElementAt(3),3);
  1754. Sleep(0);
  1755. }
  1756. AryOfRemvoeOrder.RemoveAll();
  1757. pInstance->GetTblPhotoManager4(AryOfRemvoeOrder);
  1758. nSize = AryOfRemvoeOrder.GetSize();
  1759. for ( int i = 0; i < nSize; i++)
  1760. {
  1761. pInstance->GetRemvoeOrderInfoAndRemove(AryOfRemvoeOrder.ElementAt(i).ElementAt(0),AryOfRemvoeOrder.ElementAt(i).ElementAt(1),AryOfRemvoeOrder.ElementAt(i).ElementAt(3),4);
  1762. Sleep(0);
  1763. }
  1764. AryOfRemvoeOrder.RemoveAll();
  1765. pInstance->GetTblPhotoManager5(AryOfRemvoeOrder);
  1766. nSize = AryOfRemvoeOrder.GetSize();
  1767. for ( int i = 0; i < nSize; i++)
  1768. {
  1769. pInstance->GetRemvoeOrderInfoAndRemove(AryOfRemvoeOrder.ElementAt(i).ElementAt(0),AryOfRemvoeOrder.ElementAt(i).ElementAt(1),AryOfRemvoeOrder.ElementAt(i).ElementAt(3),5);
  1770. Sleep(0);
  1771. }
  1772. AryOfRemvoeOrder.RemoveAll();
  1773. pInstance->GetTblPhotoManager6(AryOfRemvoeOrder);
  1774. nSize = AryOfRemvoeOrder.GetSize();
  1775. for ( int i = 0; i < nSize; i++)
  1776. {
  1777. pInstance->GetRemvoeOrderInfoAndRemove(AryOfRemvoeOrder.ElementAt(i).ElementAt(0),AryOfRemvoeOrder.ElementAt(i).ElementAt(1),AryOfRemvoeOrder.ElementAt(i).ElementAt(3),6);
  1778. Sleep(0);
  1779. }
  1780. AryOfRemvoeOrder.RemoveAll();
  1781. pInstance->GetTblPhotoManager7(AryOfRemvoeOrder);
  1782. nSize = AryOfRemvoeOrder.GetSize();
  1783. for ( int i = 0; i < nSize; i++)
  1784. {
  1785. pInstance->GetRemvoeOrderInfoAndRemove(AryOfRemvoeOrder.ElementAt(i).ElementAt(0),AryOfRemvoeOrder.ElementAt(i).ElementAt(1),AryOfRemvoeOrder.ElementAt(i).ElementAt(3),7);
  1786. Sleep(0);
  1787. }
  1788. AryOfRemvoeOrder.RemoveAll();
  1789. pInstance->GetTblPhotoManager8(AryOfRemvoeOrder);
  1790. nSize = AryOfRemvoeOrder.GetSize();
  1791. for ( int i = 0; i < nSize; i++)
  1792. {
  1793. pInstance->GetRemvoeOrderInfoAndRemove(AryOfRemvoeOrder.ElementAt(i).ElementAt(0),AryOfRemvoeOrder.ElementAt(i).ElementAt(1),AryOfRemvoeOrder.ElementAt(i).ElementAt(3),8);
  1794. Sleep(0);
  1795. }
  1796. #endif
  1797. } while (WAIT_TIMEOUT == WaitForSingleObject(pInstance->m_hRemoveCtrl, 15000) );
  1798. //OutputDebugString(_T("删除订单线程退出\n"));
  1799. return 0L;
  1800. }
  1801. /************************************************************************/
  1802. /*
  1803. 函数:ThreadOfIncrement_Tm
  1804. 描述:增量备份线程(计时器线程)
  1805. 参数:
  1806. 返回:
  1807. 要求:
  1808. 注意:
  1809. */
  1810. /************************************************************************/
  1811. DWORD CBranchInfo::ThreadOfIncrement_Tm(LPVOID lpParameter)
  1812. {
  1813. CBranchInfo *pInstance = (CBranchInfo*)lpParameter;
  1814. while (!pInstance->m_bIncrementTm)
  1815. {
  1816. WaitForSingleObject(pInstance->m_hIncrementWaitableTm, INFINITE);
  1817. }
  1818. return 0L;
  1819. }
  1820. /************************************************************************/
  1821. /*
  1822. 函数:ThreadRemove_Tm
  1823. 描述:自动删除线程(计时器线程)
  1824. 参数:
  1825. 返回:
  1826. 要求:
  1827. 注意:
  1828. */
  1829. /************************************************************************/
  1830. DWORD CBranchInfo::ThreadRemove_Tm(LPVOID lpParameter)
  1831. {
  1832. CBranchInfo *pInstance = (CBranchInfo*)lpParameter;
  1833. while (!pInstance->m_bRemoveTm)
  1834. {
  1835. WaitForSingleObject(pInstance->m_hRemoveWaitableTm, INFINITE);
  1836. }
  1837. return 0L;
  1838. }
  1839. /************************************************************************/
  1840. /*
  1841. 函数:Separator
  1842. 描述:根据分隔符解析出目标字符串;
  1843. 参数:
  1844. IN: lpSeparator 源字符串的分隔符;
  1845. IN: lpString 源字符串;
  1846. OUT: ResultArray 解析出的字符串数组;
  1847. 返回:
  1848. 要求:
  1849. 注意:
  1850. */
  1851. /************************************************************************/
  1852. void CBranchInfo::Separator(IN LPCTSTR lpSeparator, IN LPCTSTR lpString, OUT CStringArray &ResultArray)
  1853. {
  1854. CString strSrc = lpString;
  1855. strSrc.TrimLeft(lpSeparator);
  1856. strSrc.TrimRight(lpSeparator);
  1857. strSrc += lpSeparator;
  1858. int nIndex = 0;
  1859. do
  1860. {
  1861. nIndex = strSrc.Find(lpSeparator);
  1862. if ( -1 != nIndex )
  1863. {
  1864. CString strImage = strSrc.Left(nIndex);
  1865. strSrc = strSrc.Mid(nIndex+1);
  1866. if ( PathFileExists(strImage) )
  1867. {
  1868. ResultArray.Add(strImage);
  1869. }
  1870. }
  1871. } while ( -1 != nIndex );
  1872. }
  1873. /************************************************************************/
  1874. /*
  1875. 函数:FindImageShareDirectory
  1876. 描述:根据相片名称,订单号,相片类型在共享目录数组中查找出相片的实现路径;
  1877. 参数:
  1878. IN; lpBranchId 相片所属分店;
  1879. IN: byPhotoType 相片类型;
  1880. IN: lpImage 相片名称,带护展名;
  1881. IN: lpOrderNum 相片所在的订单号;
  1882. OUT: lpShareDirectory 若相片存在,这里为相片的实际路径;
  1883. 返回:相片存在返回TRUE,否则FALSE;
  1884. 要求:
  1885. 注意:
  1886. */
  1887. /************************************************************************/
  1888. BOOL CBranchInfo::FindImageShareDirectory(IN LPCTSTR lpBranchId, IN const BYTE &byPhotoType, IN LPCTSTR lpImage, IN LPCTSTR lpOrderNum, OUT LPTSTR lpShareDirectory)
  1889. {
  1890. BOOL bExists = FALSE;
  1891. TblNetShareInfo *pNetShareInfo = NULL;
  1892. for (NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  1893. {
  1894. pNetShareInfo = *it;
  1895. if ( _tcscmp(pNetShareInfo->szBranchId,lpBranchId) == 0 )
  1896. {
  1897. if ( pNetShareInfo->byPhotoType == byPhotoType )
  1898. {
  1899. CString strImagePath = _T("");
  1900. strImagePath.Format(_T("%s\\%s"),pNetShareInfo->szShareDirectory,lpOrderNum);
  1901. TCHAR szDirectory[MAX_PATH] = {0};
  1902. if( FindFileNameFromSpecialDirectory(strImagePath,lpImage,szDirectory) ) // 返回第一个找到的文件名的路径;
  1903. {
  1904. // 同一文件名,可能同时存在多种后缀的相片,只要存在其中一种格式即可;
  1905. strImagePath.Format(_T("%s\\%s"),szDirectory,lpImage);
  1906. if ( PathFileExists(strImagePath + _T(".jpg")) )
  1907. {
  1908. bExists = TRUE;
  1909. _stprintf_s(lpShareDirectory, MAX_PATH, _T("%s.jpg"), strImagePath);
  1910. }
  1911. else if ( PathFileExists(strImagePath + _T(".raw")) )
  1912. {
  1913. bExists = TRUE;
  1914. _stprintf_s(lpShareDirectory, MAX_PATH, _T("%s.raw"), strImagePath);
  1915. }
  1916. else if ( PathFileExists(strImagePath + _T(".cr2")) )
  1917. {
  1918. bExists = TRUE;
  1919. _stprintf_s(lpShareDirectory, MAX_PATH, _T("%s.cr2"), strImagePath);
  1920. }
  1921. else if ( PathFileExists(strImagePath + _T(".nef")) )
  1922. {
  1923. bExists = TRUE;
  1924. _stprintf_s(lpShareDirectory, MAX_PATH, _T("%s.nef"), strImagePath);
  1925. }
  1926. if ( bExists )
  1927. {
  1928. break;
  1929. }
  1930. }
  1931. }
  1932. }
  1933. }
  1934. return bExists;
  1935. }
  1936. /************************************************************************/
  1937. /*
  1938. 函数:FindImageShareDirectory
  1939. 描述:根据相片名称,订单号,相片类型在共享目录数组中查找出相片的实现路径;
  1940. 参数:
  1941. IN: byPhotoType 相片类型;
  1942. IN: lpImage 相片名称,不带后缀;
  1943. IN: lpOrderNum 相片所在的订单号;
  1944. OUT: AryOfShareDirectory 若相片存在,这里为相片(多种格式)的实际路径数组;
  1945. 返回:相片存在返回TRUE,否则FALSE;
  1946. 要求:
  1947. 注意:
  1948. */
  1949. /************************************************************************/
  1950. BOOL CBranchInfo::FindImageShareDirectory(IN const BYTE &byPhotoType, IN LPCTSTR lpImage, IN LPCTSTR lpOrderNum, OUT CStringArray &AryOfShareDirectory)
  1951. {
  1952. // lpImage只是文件名,无后缀;
  1953. BOOL bExists = FALSE;
  1954. TblNetShareInfo *pNetShareInfo = NULL;
  1955. for (NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  1956. {
  1957. pNetShareInfo = *it;
  1958. if ( _tcscmp(pNetShareInfo->szBranchId,m_szBranchDoMain) == 0 )
  1959. {
  1960. if ( pNetShareInfo->byPhotoType == byPhotoType )
  1961. {
  1962. CString strImagePaht = _T("");
  1963. strImagePaht.Format(_T("%s\\%s\\%s"),pNetShareInfo->szShareDirectory,lpOrderNum,lpImage);
  1964. if ( PathFileExists(strImagePaht + _T(".jpg")) )
  1965. {
  1966. bExists = TRUE;
  1967. AryOfShareDirectory.Add(CString(strImagePaht + _T(".jpg")));
  1968. }
  1969. if ( PathFileExists(strImagePaht + _T(".raw")) )
  1970. {
  1971. bExists = TRUE;
  1972. AryOfShareDirectory.Add(CString(strImagePaht + _T(".raw")));
  1973. }
  1974. if ( PathFileExists(strImagePaht + _T(".cr2")) )
  1975. {
  1976. bExists = TRUE;
  1977. AryOfShareDirectory.Add(CString(strImagePaht + _T(".cr2")));
  1978. }
  1979. if ( PathFileExists(strImagePaht + _T(".nef")) )
  1980. {
  1981. bExists = TRUE;
  1982. AryOfShareDirectory.Add(CString(strImagePaht + _T(".nef")));
  1983. }
  1984. if(bExists) break;
  1985. }
  1986. }
  1987. }
  1988. return bExists;
  1989. }
  1990. /************************************************************************/
  1991. /*
  1992. 函数:GetIncrementContentAndBackup
  1993. 描述:解析出增量表里的content字段保存的相片路径,并增量备份;
  1994. 参数:
  1995. IN: lpBranchId 分店id;
  1996. IN: lpOpTm 操作时间;
  1997. IN: lpOrder 订单号;
  1998. IN: byPhotoType 相片类型;
  1999. IN: lpIncrementContent content字段的相片信息;
  2000. 返回:
  2001. 要求:
  2002. 注意:
  2003. */
  2004. /************************************************************************/
  2005. BOOL CBranchInfo::GetIncrementContentAndBackup(IN LPCTSTR lpBranchId, IN LPCTSTR lpOpTm, IN LPCTSTR lpOrder, IN CONST BYTE &byPhotoType, IN LPCTSTR lpIncrementContent)
  2006. {
  2007. if ( byPhotoType > 8) return FALSE;
  2008. if ( lpOrder == NULL || lpOrder[0] == '\0')
  2009. {
  2010. // 订单为空时,造成函数运行缓慢;
  2011. return FALSE;
  2012. }
  2013. // 1.解析出增量相片的路径;
  2014. CStringArray AryOfImagePath;
  2015. CString strIncrementContent;
  2016. strIncrementContent.Format(_T("%s"), lpIncrementContent);
  2017. #if 1
  2018. // content里的内容只是相片名称;
  2019. // 首先实现的是有后缀名的相片;
  2020. strIncrementContent.TrimLeft(_T("|"));
  2021. strIncrementContent.TrimRight(_T("|"));
  2022. strIncrementContent += _T("|");
  2023. int nIndex = 0;
  2024. do
  2025. {
  2026. nIndex = strIncrementContent.Find(_T('|'));
  2027. if ( nIndex != -1 )
  2028. {
  2029. CString strImage = strIncrementContent.Left(nIndex);
  2030. strIncrementContent = strIncrementContent.Mid(nIndex+1);
  2031. // 在所有共享目录下查找该相片路径;
  2032. #if 1
  2033. TCHAR szShareDirectory[MAX_PATH] = {0};
  2034. // 根据文件名到订单目录下查找相片,返回相片的路径;
  2035. // 若两个子目录下都有相片文件名的,只会返回第一个找到的文件的完整路径;
  2036. if (FindImageShareDirectory(lpBranchId,byPhotoType,strImage,lpOrder,szShareDirectory))
  2037. {
  2038. AryOfImagePath.Add(szShareDirectory);
  2039. }
  2040. #else
  2041. FindImageShareDirectory(byPhotoType,strImage,lpOrder,AryOfImagePath);
  2042. #endif
  2043. }
  2044. } while ( nIndex != -1);
  2045. #endif
  2046. #if 0// content里的内容:"\\lyfz-pc\共享1\001.jpg|\\lyfz-pc\共享1\002.jpg"
  2047. strIncrementContent.TrimLeft(_T("|"));
  2048. strIncrementContent.TrimRight(_T("|"));
  2049. strIncrementContent += _T("|");
  2050. int nIndex = 0;
  2051. do
  2052. {
  2053. nIndex = strIncrementContent.Find(_T('|'));
  2054. if ( nIndex != -1 )
  2055. {
  2056. CString strImage = strIncrementContent.Left(nIndex);
  2057. strIncrementContent = strIncrementContent.Mid(nIndex+1);
  2058. if (PathFileExists(strImage))
  2059. {
  2060. AryOfImagePath.Add(strImage);
  2061. }
  2062. }
  2063. } while ( nIndex != -1);
  2064. #endif
  2065. #if 0
  2066. // 另一种形式:"?\\lyf\共享1\:001.jpg|002.jpg|003.jpg?\\lyfz-server\共享1:001.jpg|002.jpg?"
  2067. strIncrementContent.TrimLeft(_T("?"));
  2068. strIncrementContent.TrimRight(_T("?"));
  2069. strIncrementContent += _T("?");
  2070. int nIndex = 0;
  2071. do
  2072. {
  2073. nIndex = strIncrementContent.Find(_T('?'));
  2074. if ( -1 != nIndex )
  2075. {
  2076. CString strSubIncrement = strIncrementContent.Left(nIndex);
  2077. strIncrementContent = strSubIncrement.Mid(nIndex+1);
  2078. CString strShareDirectory;
  2079. nIndex = strSubIncrement.Find(_T(':'));
  2080. if ( -1 != nIndex )
  2081. {
  2082. strShareDirectory = strSubIncrement.Left(nIndex);
  2083. strShareDirectory.TrimRight(_T('\\'));
  2084. strShareDirectory += _T("\\");
  2085. strShareDirectory += lpOrder;
  2086. strShareDirectory += _T("\\");
  2087. strSubIncrement = strSubIncrement.Mid(nIndex+1);
  2088. strSubIncrement.TrimRight(_T('|'));
  2089. strSubIncrement += _T("|");
  2090. do
  2091. {
  2092. nIndex = strSubIncrement.Find(_T('|'));
  2093. if ( -1 != nIndex)
  2094. {
  2095. CString strImage = strSubIncrement.Left(nIndex);
  2096. strSubIncrement = strSubIncrement.Mid(nIndex+1);
  2097. if ( PathFileExists(strShareDirectory+strImage) )
  2098. {
  2099. AryOfImagePath.Add(strShareDirectory+strImage);
  2100. }
  2101. }
  2102. } while ( -1 != nIndex );
  2103. }
  2104. }
  2105. } while (-1 != nIndex);
  2106. #endif
  2107. if ( AryOfImagePath.GetSize() == 0)
  2108. return FALSE;
  2109. // 获取增量相片的总大小;
  2110. UINT64 uFilesSize = EasyGetSizeOfFiles(AryOfImagePath);
  2111. UINT64 nCapacity = uFilesSize/(1024*1024*1024);
  2112. // 开始备份;
  2113. double dFreeNum;
  2114. TCHAR szEnableShareDirectory[MAX_PATH] = {0};
  2115. if ( !GetEnableShareDirectory(dFreeNum,byPhotoType+4,lpBranchId,lpOrder,szEnableShareDirectory) ) // byPhotoType要增加4,移动到备份类型;
  2116. {
  2117. //OutputDebugString(_T("无可用共享目录\n"));
  2118. //LOG4C_NO_FILENUM((LOG_NOTICE,"无可用共享目录"));
  2119. return FALSE;
  2120. }
  2121. if ( dFreeNum > nCapacity ) // 一般增量备份的相片大小,不会超过5g,一般可以不判断;
  2122. {
  2123. // 判断是否存在当天日期文件;
  2124. CString strDate = lpOpTm;
  2125. strDate = strDate.Left(10);
  2126. CString strDatePath = szEnableShareDirectory;
  2127. strDatePath += strDate;
  2128. strDatePath += _T("\\");
  2129. #ifdef UNICODE
  2130. CHAR szShareDirectory[MAX_PATH] = {0};
  2131. unicode2acsii(strDatePath,szShareDirectory);
  2132. MakeSureDirectoryPathExists(szShareDirectory);
  2133. #else
  2134. MyMakeSureDirectoryPathExists(strDatePath);
  2135. #endif
  2136. for ( int i = 0; i < AryOfImagePath.GetSize(); i++)
  2137. {
  2138. // 存储的目录,需要提取出订单号以下出现的各种子目录名;
  2139. EasyCopyFile(lpOrder, AryOfImagePath.ElementAt(i), strDatePath);
  2140. }
  2141. // 更新数据库;
  2142. // --产生个问题,因为如果是多店的话,连接的不是本店的数据库,但是备份的时候把分店的相片备份了;
  2143. if ( m_bIsOur )
  2144. {
  2145. strDate.Format(_T("update [IncrementalBackup] set [isbackup] = 1,[baktime] = getdate() where [branchid] = '%s' and [order] = '%s' and photoType = %d and content = '%s|'"),lpBranchId,lpOrder,byPhotoType,lpIncrementContent);
  2146. Execute(strDate);
  2147. }
  2148. }
  2149. return TRUE;
  2150. }
  2151. /************************************************************************/
  2152. /*
  2153. 函数:GetRemvoeOrderInfoAndRemove
  2154. 描述:获取取件OK,且未删除过的相片的订单路径,并删除达到要求时间的订单相片;
  2155. 参数:
  2156. IN: lpOrderNum 要删除的订单号;
  2157. IN: lpOpTm 要删除的订单号的取件时间;
  2158. IN: byPhotoType 要删除的订单号的相片类型;
  2159. 返回:
  2160. 要求:
  2161. 注意:
  2162. 1.如果要删除存储在本店中的分店订单相片,必须在NetShareInfo表中添加分店路径,且用到的域名是本店的域名;
  2163. */
  2164. /************************************************************************/
  2165. BOOL CBranchInfo::GetRemvoeOrderInfoAndRemove(IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, IN LPCTSTR lpOpTm, IN const BYTE &byPhotoType)
  2166. {
  2167. // 1.订单号不能为空,否则会删除根目录全部文件;
  2168. if ( lpOrderNum == NULL || _tcscmp(lpOrderNum,_T("")) == 0)
  2169. {
  2170. //OutputDebugString(_T("订单不能为空!\n"));
  2171. //LOG4C_NO_FILENUM((LOG_NOTICE,"订单不能为空"));
  2172. return FALSE;
  2173. }
  2174. // 2.判断时间的有效性;
  2175. if (!IsValidDate(lpOpTm))
  2176. {
  2177. //OutputDebugString(_T("日期无效!\n"));
  2178. //LOG4C_NO_FILENUM((LOG_NOTICE,"分店[%s]订单[%s] 日期无效",CW2A(lpBranchId),CW2A(lpOrderNum)));
  2179. return FALSE;
  2180. }
  2181. // 3.是否达到删除时间;
  2182. int nMonths = 0;
  2183. switch ( byPhotoType )
  2184. {
  2185. case 1:
  2186. nMonths = m_TblVersion.nCheckMonth1;
  2187. if ( !m_TblVersion.bCheck1 )return FALSE;
  2188. break;
  2189. case 2:
  2190. nMonths = m_TblVersion.nCheckMonth2;
  2191. if ( !m_TblVersion.bCheck2 )return FALSE;
  2192. break;
  2193. case 3:
  2194. nMonths = m_TblVersion.nCheckMonth3;
  2195. if ( !m_TblVersion.bCheck3 )return FALSE;
  2196. break;
  2197. case 4:
  2198. nMonths = m_TblVersion.nCheckMonth4;
  2199. if ( !m_TblVersion.bCheck4 )return FALSE;
  2200. break;
  2201. //////////////////////////////////////////////////////////////////////////
  2202. case 5:
  2203. nMonths = m_TblVersion.nCheckbdMonth1;
  2204. if ( !m_TblVersion.bCheckbak1 )return FALSE;
  2205. break;
  2206. case 6:
  2207. nMonths = m_TblVersion.nCheckbdMonth2;
  2208. if ( !m_TblVersion.bCheckbak2 )return FALSE;
  2209. break;
  2210. case 7:
  2211. nMonths = m_TblVersion.nCheckbdMonth3;
  2212. if ( !m_TblVersion.bCheckbak3 )return FALSE;
  2213. break;
  2214. case 8:
  2215. nMonths = m_TblVersion.nCheckbdMonth4;
  2216. if ( !m_TblVersion.bCheckbak4 )return FALSE;
  2217. break;
  2218. default:
  2219. break;
  2220. }
  2221. if ( nMonths <= 0)
  2222. {
  2223. return FALSE;
  2224. }
  2225. CString strTakeTime = lpOpTm;
  2226. COleDateTime reachtm(_ttoi(strTakeTime.Left(4)), _ttoi(strTakeTime.Mid(5,2)),_ttoi(strTakeTime.Mid(8,2)),0,0,0);
  2227. COleDateTimeSpan sp(nMonths * 30, 0, 0, 0);
  2228. reachtm += sp;
  2229. COleDateTime curtm = COleDateTime::GetCurrentTime();
  2230. // 取件日期+天数 的日期 < 今天;
  2231. if (reachtm > curtm )
  2232. {
  2233. //OutputDebugString(lpOrderNum);
  2234. //OutputDebugString(_T("未达到删除日期----------------\n"));
  2235. //LOG4C_NO_FILENUM((LOG_NOTICE,"%s:未达到删除日期",CW2A(lpOrderNum)));
  2236. return FALSE;
  2237. }
  2238. //OutputDebugString(lpOrderNum);
  2239. //OutputDebugString(_T("已达到删除日期------------------\n"));
  2240. //LOG4C_NO_FILENUM((LOG_NOTICE,"%s:已达到删除日期",CW2A(lpOrderNum)));
  2241. // 4.获取订单路径并删除;
  2242. //CStringArray AryOfRemoveDirectory;
  2243. BOOL bRemove = TRUE;
  2244. for (NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  2245. {
  2246. //if ( _tcscmp(m_szBranchDoMain,(*it)->szBranchId) == 0 )
  2247. if ( _tcscmp(lpBranchId,(*it)->szBranchId) == 0 )
  2248. {
  2249. if ( (*it)->byPhotoType != byPhotoType)continue;
  2250. CString strOrderPath = _T("");
  2251. strOrderPath.Format(_T("%s\\%s"),(*it)->szShareDirectory,lpOrderNum);
  2252. if ( PathFileExists(strOrderPath) )
  2253. {
  2254. if( DeleteDirectory(strOrderPath) )
  2255. {
  2256. bRemove = FALSE;
  2257. }
  2258. #if 0 // 删除不了网络路径;
  2259. strOrderPath += _T("\0\0");
  2260. SHFILEOPSTRUCT lpsh;
  2261. ZeroMemory(&lpsh, sizeof(lpsh));
  2262. lpsh.hwnd = HWND_DESKTOP;
  2263. lpsh.fFlags = FOF_NOCONFIRMATION | FOF_SIMPLEPROGRESS;
  2264. lpsh.wFunc = FO_DELETE;
  2265. lpsh.pFrom = strOrderPath;
  2266. //AryOfRemoveDirectory.Add(strOrderPath);
  2267. int nResult = SHFileOperation(&lpsh);
  2268. //if (0 == SHFileOperation(&lpsh))
  2269. if ( nResult == 0)
  2270. {
  2271. OutputDebugString(_T("删除订单目录成功\n"));
  2272. }
  2273. else
  2274. {
  2275. DWORD dw = GetLastError();
  2276. bRemove = FALSE;
  2277. }
  2278. #endif
  2279. }
  2280. else
  2281. {
  2282. //OutputDebugString(_T("没有该订单路径"));
  2283. //OutputDebugString(strOrderPath);
  2284. //OutputDebugString(_T("#\n"));
  2285. //LOG4C_NO_FILENUM((LOG_NOTICE,"%s:没有该订单路径",CW2A(strOrderPath)));
  2286. }
  2287. }
  2288. }
  2289. // 5.再次检查是否删除完;
  2290. if ( !bRemove && m_bIsOur )
  2291. {
  2292. switch ( byPhotoType )
  2293. {
  2294. case 1:
  2295. strTakeTime.Format(_T("update [PhotoManager] set [opdel] = 1,[opdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  2296. break;
  2297. case 2:
  2298. strTakeTime.Format(_T("update [PhotoManager] set [epdel] = 1,[epdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  2299. break;
  2300. case 3:
  2301. strTakeTime.Format(_T("update [PhotoManager] set [fpdel] = 1,[fpdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  2302. break;
  2303. case 4:
  2304. strTakeTime.Format(_T("update [PhotoManager] set [dpdel] = 1,[dpdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  2305. break;
  2306. //////////////////////////////////////////////////////////////////////////
  2307. case 5:
  2308. strTakeTime.Format(_T("update [PhotoManager] set [opbdel] = 1,[opbdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  2309. break;
  2310. case 6:
  2311. strTakeTime.Format(_T("update [PhotoManager] set [epbdel] = 1,[epbdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  2312. break;
  2313. case 7:
  2314. strTakeTime.Format(_T("update [PhotoManager] set [fpbdel] = 1,[fpbdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  2315. break;
  2316. case 8:
  2317. strTakeTime.Format(_T("update [PhotoManager] set [dpbdel] = 1,[dpbdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  2318. break;
  2319. default:
  2320. break;
  2321. }
  2322. Execute(strTakeTime);
  2323. }
  2324. return TRUE;
  2325. }
  2326. /************************************************************************/
  2327. /*
  2328. 函数:FindFileNameFromSpecialDirectory
  2329. 描述:查找指定目录下的文件名是否存在(无文件后缀名),并返回结果路径;
  2330. 参数:
  2331. IN: lpSpecialDirectory 指定要查找的目录;
  2332. IN: lpFileName文件名(无后缀扩展名);
  2333. OUT: lpResult 返回结果路径;
  2334. 返回:
  2335. 注意:
  2336. 要求:
  2337. 示例:
  2338. */
  2339. /************************************************************************/
  2340. BOOL CBranchInfo::FindFileNameFromSpecialDirectory(IN LPCTSTR lpSpecialDirectory, IN LPCTSTR lpFileName, OUT LPTSTR lpResult)
  2341. {
  2342. if ( lpSpecialDirectory == NULL || _tcscmp(lpSpecialDirectory,_T("")) == 0 ){
  2343. return FALSE;
  2344. }
  2345. CString strPath = lpSpecialDirectory;
  2346. if ( !PathFileExists(strPath) ){
  2347. return FALSE;
  2348. }
  2349. strPath.TrimRight(_T("\\"));
  2350. strPath += _T("\\*");
  2351. WIN32_FIND_DATA fileInfo = {0};
  2352. HANDLE handle = FindFirstFile(strPath,&fileInfo);
  2353. BOOL bFind = FALSE;
  2354. if ( NULL != handle && INVALID_HANDLE_VALUE != handle )
  2355. {
  2356. do
  2357. {
  2358. // '.'和 '..'的系统文件去除;
  2359. if (_T('.') != fileInfo.cFileName[0])
  2360. {
  2361. if ((FILE_ATTRIBUTE_DIRECTORY & fileInfo.dwFileAttributes) != FILE_ATTRIBUTE_DIRECTORY)
  2362. {
  2363. strPath.Format(_T("%s"),fileInfo.cFileName);
  2364. strPath = strPath.Left(strPath.ReverseFind(_T('.')));
  2365. if ( strPath.CompareNoCase(lpFileName) == 0 )
  2366. {
  2367. _stprintf_s(lpResult,MAX_PATH,_T("%s"),lpSpecialDirectory);
  2368. bFind = TRUE;
  2369. break;
  2370. }
  2371. }
  2372. else // 非目录;
  2373. {
  2374. strPath.Format(_T("%s\\%s"),lpSpecialDirectory,fileInfo.cFileName);
  2375. if( FindFileNameFromSpecialDirectory(strPath,lpFileName,lpResult) )
  2376. {
  2377. bFind = TRUE;
  2378. break;
  2379. }
  2380. }
  2381. }
  2382. } while ( FindNextFile(handle,&fileInfo) );
  2383. FindClose(handle);
  2384. }
  2385. return bFind;
  2386. }
  2387. //获取备份的保存目录
  2388. BOOL CBranchInfo::GetBackupOfSaveDir(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  2389. {
  2390. //select bak1,bak2,bak3,bak4,bakserver1,bakserver2,bakserver3,bakserver4 from version
  2391. CStringArray AryOfFields;
  2392. AryOfFields.Add(_T("bakserver1"));
  2393. AryOfFields.Add(_T("bakserver2"));
  2394. AryOfFields.Add(_T("bakserver3"));
  2395. AryOfFields.Add(_T("bakserver4"));
  2396. if (!GetTableValues(_T("[version]"), NULL, AryOfFields, AryOfValues))
  2397. {
  2398. //LOG4C_NO_FILENUM((LOG_NOTICE,"获取version表失败"));
  2399. return FALSE;
  2400. }
  2401. return TRUE;
  2402. }