BranchInfo.cpp 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923
  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. #define IS_USE_VER1 0
  11. TblVersion CBranchInfo::m_TblVersion;
  12. vector<TblCatalogInfo*> CBranchInfo::m_TblCatalogInfo;
  13. vector<TblNetShareInfo*> CBranchInfo::m_TblNetShareInfo;
  14. CBranchInfo::CBranchInfo()
  15. {
  16. memset(m_szBranchName, 0, sizeof(TCHAR)*MAX_PATH);
  17. memset(m_szBranchDoMain, 0, sizeof(TCHAR)*MAX_PATH);
  18. memset(m_szBranchIP, 0, sizeof(TCHAR)*MAX_PATH);
  19. m_strBranchId.Empty();
  20. //////////////////////////////////////////////////////////////////////////
  21. }
  22. CBranchInfo::~CBranchInfo(void)
  23. {
  24. }
  25. /************************************************************************/
  26. /*
  27. 函数:RemoveNetShareInfo
  28. 描述:清除内存资源;
  29. 参数:#
  30. 返回:#
  31. 要求:#
  32. 注意:由外部调用该函数,不放在析造函数处理.
  33. 示例:
  34. */
  35. /************************************************************************/
  36. void CBranchInfo::RemoveNetShareInfo()
  37. {
  38. TblNetShareInfo *pNetShareInfo = NULL;
  39. for ( NETSHAREINFO::iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end();)
  40. {
  41. pNetShareInfo = *it;
  42. delete pNetShareInfo;
  43. pNetShareInfo = NULL;
  44. it = m_TblNetShareInfo.erase(it);
  45. }
  46. }
  47. /************************************************************************/
  48. /*
  49. 函数:RemoveNetShareInfo
  50. 描述:清除内存资源;
  51. 参数:#
  52. 返回:#
  53. 要求:#
  54. 注意:由外部调用该函数,不放在析造函数处理
  55. 示例:
  56. */
  57. /************************************************************************/
  58. void CBranchInfo::RemvoeCatalogInfo()
  59. {
  60. TblCatalogInfo *pCatalogInfo = NULL;
  61. for ( CATALOGINFO::iterator it = m_TblCatalogInfo.begin(); it != m_TblCatalogInfo.end();)
  62. {
  63. pCatalogInfo = *it;
  64. delete pCatalogInfo;
  65. pCatalogInfo = NULL;
  66. it = m_TblCatalogInfo.erase(it);
  67. }
  68. }
  69. /************************************************************************/
  70. /*
  71. 函数:IsValidDate
  72. 描述:判断日期有效性;
  73. 参数:
  74. IN: lpDate 日期字符串,格式如:"2015-05-06 18:20:30"或"2015/05/12 21:30:22"
  75. 返回:日期有效返回TRUE,否则返回FALSE;
  76. 要求:
  77. 注意:只判断公历日期;
  78. 示例:
  79. */
  80. /************************************************************************/
  81. BOOL CBranchInfo::IsValidDate(LPCTSTR lpDate)
  82. {
  83. if(lpDate == NULL || _tcscmp(lpDate,_T("")) == 0)
  84. return FALSE;
  85. CString strDate = lpDate;
  86. if (strDate.IsEmpty()) return FALSE;
  87. // 判断日期合法性;
  88. static int nYear = 0;
  89. static int nMonth = 0;
  90. static int nDay = 0;
  91. nYear = nMonth = nDay = 0;
  92. nYear = _ttoi(strDate.Left(4));
  93. nMonth = _ttoi(strDate.Mid(5, 2));
  94. nDay = _ttoi(strDate.Mid(8, 2));
  95. CONST static INT nNormalMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  96. CONST static INT nLeapMonth[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  97. if ((nDay <= 0) || (nDay > 31) || (nMonth <= 0) || (nMonth > 12)) return FALSE;
  98. if ((nYear % 400 == 0) || (nYear % 4 == 0 && nYear % 100 != 0))
  99. {
  100. if (nDay > nLeapMonth[nMonth - 1]) return FALSE;
  101. }
  102. else
  103. {
  104. if (nDay > nNormalMonth[nMonth - 1]) return FALSE;
  105. }
  106. return TRUE;
  107. }
  108. /************************************************************************/
  109. /*
  110. 函数:EasyGetFileSize
  111. 描述:获取文件大小;
  112. 参数:
  113. IN:lpFolder 文件名;
  114. 返回:成功则返回文件的大小,否则返回-1;
  115. 注意:;
  116. 要求:
  117. 示例:
  118. */
  119. /************************************************************************/
  120. UINT64 CBranchInfo::EasyGetFileSize(IN LPCTSTR lpFile)
  121. {
  122. // 判断文件是否存在;
  123. //if ( !lpFile || !_tcscmp(lpFile,_T("")) || !PathFileExists(lpFile) )
  124. // return 0;
  125. // 传参前已判断,不需要再判断;
  126. WIN32_FIND_DATA fileinfo;
  127. UINT64 dwSize = 0;
  128. HANDLE hFind = FindFirstFile(lpFile,&fileinfo);
  129. if ( hFind != INVALID_HANDLE_VALUE)
  130. {
  131. dwSize = fileinfo.nFileSizeLow;
  132. FindClose(hFind);
  133. }
  134. return dwSize;
  135. }
  136. /************************************************************************/
  137. /*
  138. 函数:EasyGetFileSzie
  139. 描述:获取指定文件的大小以及文件占用磁盘的空间大小;
  140. 参数:
  141. IN: lpFile指定的文件名;
  142. IN: uFileSpaceSize 返回文件占用磁盘空间大小(字节数);
  143. 返回:成功获取文件,返回文件大小(字节数),若返回-1则文件不存在或其他错误;
  144. 注意:lpFileName可以是网络路径上的共享文件;
  145. 要求:
  146. 在vc6.0中,必须到微软下载Win32 FileID API Library
  147. 下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=22599
  148. 解压包含fileextd.h和fileextd.lib
  149. 然后才能使用GetFileInformationByHandleEx函数和结构体FILE_STANDARD_INFO;
  150. 示例:
  151. */
  152. /************************************************************************/
  153. UINT64 CBranchInfo::EasyGetFileSpacesSzie(IN LPCTSTR lpFileName)
  154. {
  155. // 文件是否存在;
  156. if ( !PathFileExists(lpFileName) )
  157. {
  158. OutputDebugString(_T("文件不存在\n"));
  159. return -1;
  160. }
  161. // 打开文件句柄;
  162. HANDLE hFile = ::CreateFile(lpFileName, GENERIC_READ , FILE_SHARE_READ,
  163. NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  164. if (hFile == INVALID_HANDLE_VALUE)
  165. {
  166. OutputDebugString(_T("打开文件句柄失败\n"));
  167. return -1;
  168. }
  169. #if 0
  170. // 获取文件大小;
  171. UINT64 uFileSize = 0;
  172. ::GetFileSizeEx(hFile, reinterpret_cast<PLARGE_INTEGER>(&uFileSize));
  173. #endif
  174. FILE_STANDARD_INFO fsi = {0};
  175. if (!::GetFileInformationByHandleEx(hFile, FileStandardInfo, &fsi, sizeof(FILE_STANDARD_INFO)))
  176. {
  177. CloseHandle(hFile);
  178. OutputDebugString(_T("获取文件信息失败\n"));
  179. return -1;
  180. }
  181. UINT64 uFileSpacesSize = fsi.AllocationSize.HighPart;
  182. CloseHandle(hFile);
  183. return uFileSpacesSize;
  184. }
  185. /************************************************************************/
  186. /*
  187. 函数:EasyGetSizeOfFiles
  188. 描述:获取指定文件路径数组的全部文件大小;
  189. 参数:
  190. IN: strAryOfFile 文件名数组;
  191. OUT: dwFiles 文件夹下的文件数量;
  192. OUT: dwFolders 文件夹下的子目录数量;
  193. 返回:成功则返回文件夹占用磁盘空间的大小,否则返回-1;
  194. 注意:
  195. 要求:
  196. 示例:
  197. */
  198. /************************************************************************/
  199. UINT64 CBranchInfo::EasyGetSizeOfFiles(IN CStringArray &strAryOfFile)
  200. {
  201. UINT64 uSizeOfFiles = 0;
  202. int nSize = strAryOfFile.GetSize();
  203. for ( int i = 0; i < nSize; i++)
  204. {
  205. CString strFile = strAryOfFile.ElementAt(i);
  206. if ( PathFileExists(strFile) )
  207. {
  208. uSizeOfFiles += EasyGetFileSize(strFile);
  209. }
  210. }
  211. return uSizeOfFiles;
  212. }
  213. /************************************************************************/
  214. /*
  215. 函数:GetDiskSpaceInfo
  216. 描述:获取指定目录或盘符的容量信息;
  217. 参数:
  218. IN: lpRootPathName 根目录名称;
  219. INOUT: dTotalNum 总容量;
  220. INOUT: dFreeNum 可用容量;
  221. 返回:
  222. 注意:
  223. GetDiskFreeSpace函数不能满足当前超过2T的硬盘容量,因为里面的数据类型是UINT,最大支持32位(4G);
  224. GetDiskFreeSpaceEx支持64位(16384P=1024*16384T)
  225. 只能获取本机硬盘信息,且路径必须包含":"冒号;
  226. 调用约定:
  227. */
  228. /************************************************************************/
  229. BOOL CBranchInfo::GetDiskSpaceInfo(IN LPCTSTR lpRootPathName,IN OUT double &dTotalNum, IN OUT double &dFreeNum)
  230. {
  231. // 校验参数有效性;
  232. if(lpRootPathName == NULL || _tcscmp(lpRootPathName,_T("")) == 0)
  233. {
  234. OutputDebugString(_T("目录为空\n"));
  235. return FALSE;
  236. }
  237. // 如果长度==1;
  238. int nlen = _tcslen(lpRootPathName);
  239. if((1 == nlen) || ( 2 == nlen && lpRootPathName[nlen-1] != _T(':')))
  240. {
  241. OutputDebugString(_T("根目录无效\n"));
  242. return FALSE;
  243. }
  244. if ( !PathFileExists(lpRootPathName))
  245. {
  246. OutputDebugString(_T("根目录不存在\n"));
  247. return FALSE;
  248. }
  249. BOOL fResult = FALSE;
  250. DWORD dwSectPerClust; // 每簇的扇区数;
  251. DWORD dwBytesPerSect; // 每个扇区的字节数;
  252. DWORD dwFreeClusters; // 可用簇数;
  253. DWORD dwTotalClusters; // 总簇数;
  254. typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER,PULARGE_INTEGER, PULARGE_INTEGER);
  255. P_GDFSE pGetDiskFreeSpaceEx = NULL;
  256. /*unsigned*/ __int64 i64FreeBytesToCaller;
  257. /*unsigned*/ __int64 i64TotalBytes;
  258. /*unsigned*/ __int64 i64FreeBytes;
  259. // 调用GetDiskFreeSpaceEx失败则调用GetDiskSpace;
  260. #ifdef UNICODE
  261. pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")),"GetDiskFreeSpaceExW");
  262. #else
  263. pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle("kernel32.dll"),"GetDiskFreeSpaceExA");
  264. #endif
  265. if ( pGetDiskFreeSpaceEx )
  266. {
  267. fResult = pGetDiskFreeSpaceEx(lpRootPathName,
  268. (PULARGE_INTEGER)&i64FreeBytesToCaller,
  269. (PULARGE_INTEGER)&i64TotalBytes,
  270. (PULARGE_INTEGER)&i64FreeBytes);
  271. if ( fResult )
  272. {
  273. // 将单位由byte转为G byte;
  274. dTotalNum = (double)i64TotalBytes/1024/1024/1024;
  275. dFreeNum = (double)i64FreeBytes/1024/1024/1024;
  276. }
  277. }
  278. else
  279. {
  280. fResult = GetDiskFreeSpace(lpRootPathName,
  281. &dwSectPerClust,
  282. &dwBytesPerSect,
  283. &dwFreeClusters,
  284. &dwTotalClusters);
  285. if ( fResult )
  286. {
  287. // 成功获得容量信息;
  288. i64TotalBytes = (__int64)dwTotalClusters * dwSectPerClust * dwBytesPerSect;
  289. i64FreeBytes = (__int64)dwFreeClusters * dwSectPerClust * dwBytesPerSect;
  290. // 将单位由byte转为G byte;
  291. dTotalNum = (double)i64TotalBytes/1024/1024/1024;
  292. dFreeNum = (double)i64FreeBytes/1024/1024/1024;
  293. }
  294. }
  295. return fResult;
  296. }
  297. /************************************************************************/
  298. /*
  299. 函数:GetEnableShareDirectory
  300. 描述:返回指定相片类型可用的共享目录;
  301. 参数:
  302. IN: nPhotoType 相片类型;
  303. IN: lpBranchId 分店域名;
  304. IN: lpOrderNum 订单号;
  305. OUT: lpEnableShareDirectory 可用的共享目录;
  306. 返回:成功返回TRUE;
  307. 注意:用于导入相片,最后返回的共享目录,使用MakeSuerDirectoryPathExists函数创建目录;
  308. 调用约定:#
  309. 测试:通过;
  310. */
  311. /************************************************************************/
  312. BOOL CBranchInfo::GetEnableShareDirectory(OUT double &dFreeNum, IN const int &nPhotoType,IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, OUT LPTSTR lpEnableShareDirectory)
  313. {
  314. if ( m_TblNetShareInfo.size() == 0)
  315. {
  316. OutputDebugString(_T("没有可用的共享目录\n"));
  317. return FALSE;
  318. }
  319. double dTotalNum = 0.0;
  320. BOOL bGetEnable = FALSE;
  321. BYTE byCurPriority = 0;
  322. TCHAR szOrderPath[MAX_PATH] = {0};
  323. //TCHAR szOldOrderPath[MAX_PATH] = {0}; // 记录上一次的订单文件夹路径;
  324. for ( NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  325. {
  326. //_stprintf_s(szOldOrderPath,_T("%s"),szOrderPath);
  327. if ( _tcscmp((*it)->szBranchId,lpBranchId) == 0 )
  328. {
  329. if ( (*it)->byPhotoType == nPhotoType )
  330. {
  331. // 判断目录下是否有订单文件夹;
  332. _stprintf_s(szOrderPath,_T("%s\\%s\\"),(*it)->szShareDirectory,lpOrderNum);
  333. // 存在且目录容量仍大于mincapacity可用;
  334. if ( PathFileExists(szOrderPath) )
  335. {
  336. if ( !GetDiskSpaceInfo((*it)->szShareDirectory,dTotalNum,dFreeNum) )
  337. {
  338. // 获取硬盘大小失败;
  339. OutputDebugString(_T("获取硬盘大小失败\n"));
  340. continue;
  341. }
  342. if ( dFreeNum > (*it)->byMinCapacity )
  343. {
  344. bGetEnable = TRUE;
  345. break;
  346. }
  347. }
  348. // 判断共享路径是否可用;
  349. if ( GetDiskSpaceInfo((*it)->szShareDirectory,dTotalNum,dFreeNum) )
  350. {
  351. if ( dFreeNum > (*it)->byMaxCapacity )
  352. {
  353. if ( byCurPriority < (*it)->byPriority )
  354. {
  355. // 最高权限且硬盘容量大小满足要求;
  356. byCurPriority = (*it)->byPriority;
  357. //_stprintf_s(szOrderPath,_T("%s\\%s\\"),(*it)->szShareDirectory, lpOrderNum);
  358. bGetEnable = TRUE;
  359. }
  360. }
  361. }
  362. }
  363. }
  364. }
  365. //////////////////////////////////////////////////////////////////////////
  366. // 返回结果;
  367. if(bGetEnable)
  368. {
  369. MakeSureDirectoryPathExists(szOrderPath);
  370. _stprintf_s(lpEnableShareDirectory,_tcslen(szOrderPath)+1,_T("%s"),szOrderPath);
  371. }
  372. else
  373. {
  374. OutputDebugString(_T("没有符合的共享目录\n"));
  375. }
  376. return bGetEnable;
  377. }
  378. /************************************************************************/
  379. /*
  380. 函数:EasyCopyFile
  381. 描述:将源文件拷贝到目标路径中;
  382. 参数:
  383. IN: lpOrderNum 相片所属订单号;
  384. IN: lpExistingFileName 源文件;
  385. IN: lpTargetDirectory 目标路径;
  386. IN: bFailIfExists 若目录路径存在同名,是否覆盖;
  387. 返回:成功返回TRUE;
  388. 要求:
  389. 注意:
  390. 示例:
  391. 修改:增量备份的拷贝,需要在目标文件夹中创建该相片在源目录的子路径;
  392. 日期:2015-04-25
  393. */
  394. /************************************************************************/
  395. BOOL CBranchInfo::EasyCopyFile(IN LPCTSTR lpOrderNum, IN LPCTSTR lpExistingFileName, IN LPCTSTR lpTargetDirectory, IN BOOL bFailIfExists /* = TRUE */)
  396. {
  397. if ( !PathFileExists(lpTargetDirectory) )
  398. {
  399. return FALSE;
  400. }
  401. TCHAR szNewFileName[_MAX_PATH] = { 0 };
  402. TCHAR szDrive[_MAX_DRIVE] = { 0 };
  403. TCHAR szDir[_MAX_DIR] = { 0 };
  404. TCHAR szFna[_MAX_FNAME] = { 0 };
  405. TCHAR szExt[_MAX_EXT] = { 0 };
  406. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s"), lpExistingFileName);
  407. _tsplitpath_s(szNewFileName, szDrive, szDir, szFna, szExt);
  408. // 解析出订单号的子目录;
  409. int nIndex = 0;
  410. CString strDir = szDir;
  411. if ( (nIndex = strDir.Find(lpOrderNum)) != -1)
  412. {
  413. strDir = strDir.Mid(nIndex+_tcslen(lpOrderNum)+1);
  414. strDir.TrimRight(_T('\\'));
  415. if ( lpTargetDirectory[_tcslen(lpTargetDirectory) - 1] != _T('\\') )
  416. {
  417. if(!strDir.IsEmpty())
  418. {
  419. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s\\%s\\"), lpTargetDirectory, strDir);
  420. }
  421. }
  422. else
  423. {
  424. if(!strDir.IsEmpty())
  425. {
  426. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s%s\\"), lpTargetDirectory, strDir);
  427. }
  428. }
  429. CreateDirectory(szNewFileName,NULL);
  430. }
  431. else
  432. {
  433. OutputDebugString(_T("未找到订单名,无效目录\n"));
  434. }
  435. if ( lpTargetDirectory[_tcslen(lpTargetDirectory) - 1] != _T('\\') )
  436. {
  437. if(strDir.IsEmpty())
  438. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s\\%s%s"), lpTargetDirectory, szFna, szExt);
  439. else
  440. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s\\%s\\%s%s"), lpTargetDirectory, strDir, szFna, szExt);
  441. }
  442. else
  443. {
  444. if(strDir.IsEmpty())
  445. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s%s%s"), lpTargetDirectory, szFna, szExt);
  446. else
  447. StringCchPrintf(szNewFileName, _MAX_PATH, _T("%s%s\\%s%s"), lpTargetDirectory, strDir, szFna, szExt);
  448. }
  449. return CopyFile(lpExistingFileName, szNewFileName, bFailIfExists);
  450. }
  451. /************************************************************************/
  452. /*
  453. 函数:IsValideDiretory
  454. 描述:判断一个即将要删除的目录是否为可以删除的目录,而非是共享根目录;
  455. 参数:
  456. IN: lpDirectory 目录;
  457. 返回:
  458. 要求:
  459. 注意:
  460. 示例:
  461. */
  462. /************************************************************************/
  463. BOOL CBranchInfo::IsValideDiretory(IN LPCTSTR lpDirectory)
  464. {
  465. BOOL bResult = TRUE;
  466. for ( NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  467. {
  468. if ( _tcscmp((*it)->szShareDirectory,lpDirectory) == 0)
  469. {
  470. bResult = FALSE;
  471. break;
  472. }
  473. }
  474. return bResult;
  475. }
  476. /************************************************************************/
  477. /*
  478. 函数:DeleteDirectory
  479. 描述:删除指定目录;
  480. 参数:
  481. IN: lpDirectory 要删除的目录;
  482. 返回:
  483. 要求:
  484. 注意:
  485. 示例:
  486. */
  487. /************************************************************************/
  488. BOOL CBranchInfo::DeleteDirectory(IN LPCTSTR lpDiretory)// 可删除共享路径;
  489. {
  490. // 判断参数有效性;
  491. if ( lpDiretory == NULL || _tcscmp(lpDiretory,_T("")) == 0)
  492. return FALSE;
  493. #if 1 // 判断根目录是否存在,可以放在函数外,但有时忘记写判断,只能放在这里比较适合;
  494. if( !PathFileExists(lpDiretory))
  495. return FALSE;
  496. #endif
  497. TString strPath = lpDiretory;
  498. if ( lpDiretory[_tcslen(lpDiretory)-1] != _T('\\'))
  499. strPath += _T("\\");
  500. TString strTempPath = strPath;
  501. strTempPath += _T("*");
  502. WIN32_FIND_DATA fileinfo = { 0 };
  503. HANDLE handle = FindFirstFile(strTempPath.c_str(), &fileinfo);
  504. if (NULL == handle && INVALID_HANDLE_VALUE == handle)
  505. return FALSE;
  506. do
  507. {
  508. // '.'和 '..'的系统文件去除;
  509. if (_T('.') != fileinfo.cFileName[0])
  510. {
  511. TString strTemp = strPath + fileinfo.cFileName;
  512. SetFileAttributes(strTemp.c_str(), FILE_ATTRIBUTE_NORMAL);//去掉所有属性;
  513. if ((FILE_ATTRIBUTE_DIRECTORY & fileinfo.dwFileAttributes) == FILE_ATTRIBUTE_DIRECTORY) // 目录;
  514. {
  515. DeleteDirectory(strTemp.c_str());
  516. }
  517. else
  518. {
  519. if(!DeleteFile(strTemp.c_str()))
  520. {
  521. DWORD dwError = GetLastError();
  522. //LOG4C_NO_FILENUM((LOG_NOTICE,"删除文件出错:%d",dwError));
  523. }
  524. }
  525. }
  526. } while (FindNextFile(handle, &fileinfo));
  527. FindClose(handle);
  528. if(!RemoveDirectory(strPath.c_str()))
  529. {
  530. //DWORD dwError = GetLastError();
  531. //LOG4C_NO_FILENUM((LOG_NOTICE,"删除文件夹出错:%d",dwError));
  532. OutputDebugString(_T("**************删除目录失败**************\n"));
  533. return FALSE;
  534. }
  535. return TRUE;
  536. }
  537. /************************************************************************/
  538. /*
  539. 函数:InitCatalog
  540. 描述:初始化数据库实例对象;
  541. 参数:
  542. IN: dwCatalogPort 数据库实例映射端口;
  543. IN: lpCatalogSource 数据库实例地址;
  544. IN: lpCatalogAccount 数据库实例登陆账号;
  545. IN: lpCatalogPsw 数据库实例登陆密码;
  546. IN: lpCatalogName 数据库名称;
  547. 返回:成功连接数据库实例返回TRUE;
  548. 要求:
  549. 注意:
  550. 示例:
  551. */
  552. /************************************************************************/
  553. BOOL CBranchInfo::InitCatalog(IN CONST DWORD &dwCatalogPort, IN LPCTSTR lpCatalogSource, IN LPCTSTR lpCatalogAccount, IN LPCTSTR lpCatalogPsw, IN LPCTSTR lpCatalogName)
  554. {
  555. TCHAR szSQLConnt[MAX_PATH] = _T("");
  556. if (dwCatalogPort)
  557. {
  558. _stprintf_s(szSQLConnt, _T("driver={SQL Server};Server=%s,%d;database=%s;uid=%s;pwd=%s"),
  559. lpCatalogSource, dwCatalogPort, lpCatalogName, lpCatalogAccount, lpCatalogPsw);
  560. }
  561. else
  562. {
  563. _stprintf_s(szSQLConnt, _T("driver={SQL Server};Server=%s;database=%s;uid=%s;pwd=%s"),
  564. lpCatalogSource, lpCatalogName, lpCatalogAccount, lpCatalogPsw);
  565. }
  566. SetConn(szSQLConnt);
  567. BOOL bResult = OpenCatalog();
  568. if( !bResult )
  569. {
  570. OutputDebugString(_T("打开数据库失败\n"));
  571. }
  572. else
  573. {
  574. if( !GetTblBranchId() )
  575. {
  576. OutputDebugString(_T("获取域名表失败"));
  577. }
  578. }
  579. return bResult;
  580. }
  581. /************************************************************************/
  582. /*
  583. 函数:GetTblBranchId
  584. 描述:获取path表中的分店域名;
  585. 参数:
  586. 返回:成功获取返回TRUE:;
  587. 要求:
  588. 注意:
  589. 示例:
  590. */
  591. /************************************************************************/
  592. BOOL CBranchInfo::GetTblBranchId()
  593. {
  594. CStringArray AryOfFields;
  595. AryOfFields.Add(_T("path1"));
  596. CArray<CStringArray, CStringArray> AryOfValues;
  597. if (!GetTableValues(_T("path"), NULL, AryOfFields, AryOfValues))
  598. {
  599. OutputDebugString(_T("获取path表失败\n"));
  600. return FALSE;
  601. }
  602. StringCchPrintf(m_szBranchDoMain,MAX_PATH,_T("%s"),AryOfValues.ElementAt(0).ElementAt(0));
  603. return TRUE;
  604. }
  605. /************************************************************************/
  606. /*
  607. 函数:GetTblVersion
  608. 描述:获取Version表信息;
  609. 参数:
  610. 返回:成功获取返回TRUE:
  611. 要求:
  612. 注意:
  613. 示例:
  614. */
  615. /************************************************************************/
  616. BOOL CBranchInfo::GetTblVersion()
  617. {
  618. CStringArray AryOfFields;
  619. AryOfFields.Add(_T("version"));
  620. AryOfFields.Add(_T("check1"));
  621. AryOfFields.Add(_T("check2"));
  622. AryOfFields.Add(_T("check3"));
  623. AryOfFields.Add(_T("check4"));
  624. AryOfFields.Add(_T("edit1"));
  625. AryOfFields.Add(_T("edit2"));
  626. AryOfFields.Add(_T("edit3"));
  627. AryOfFields.Add(_T("edit4"));
  628. AryOfFields.Add(_T("bak1"));
  629. AryOfFields.Add(_T("bak2"));
  630. AryOfFields.Add(_T("bak3"));
  631. AryOfFields.Add(_T("bak4"));
  632. AryOfFields.Add(_T("bak5"));
  633. AryOfFields.Add(_T("bak6"));
  634. AryOfFields.Add(_T("bakserver1"));
  635. AryOfFields.Add(_T("bakserver2"));
  636. AryOfFields.Add(_T("bakserver3"));
  637. AryOfFields.Add(_T("bakserver4"));
  638. AryOfFields.Add(_T("bakserver5"));
  639. AryOfFields.Add(_T("baktime"));
  640. AryOfFields.Add(_T("delcheck1"));
  641. AryOfFields.Add(_T("delcheck2"));
  642. AryOfFields.Add(_T("delcheck3"));
  643. AryOfFields.Add(_T("delcheck4"));
  644. AryOfFields.Add(_T("deledit1"));
  645. AryOfFields.Add(_T("deledit2"));
  646. AryOfFields.Add(_T("deledit3"));
  647. AryOfFields.Add(_T("deledit4"));
  648. AryOfFields.Add(_T("bak11"));
  649. AryOfFields.Add(_T("bak22"));
  650. AryOfFields.Add(_T("bak33"));
  651. AryOfFields.Add(_T("bak44"));
  652. CArray<CStringArray, CStringArray> AryOfValues;
  653. if (!GetTableValues(_T("version"), NULL, AryOfFields, AryOfValues))
  654. {
  655. OutputDebugString(_T("获取version表失败\n"));
  656. return FALSE;
  657. }
  658. // 获取version表成功;
  659. _stprintf_s(m_TblVersion.szVersion, _T("%s"), AryOfValues.ElementAt(0).ElementAt(0));
  660. m_TblVersion.bCheck1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(1));
  661. m_TblVersion.bCheck2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(2));
  662. m_TblVersion.bCheck3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(3));
  663. m_TblVersion.bCheck4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(4));
  664. m_TblVersion.nCheckMonth1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(5));
  665. m_TblVersion.nCheckMonth2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(6));
  666. m_TblVersion.nCheckMonth3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(7));
  667. m_TblVersion.nCheckMonth4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(8));
  668. m_TblVersion.bCheckbak1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(9));
  669. m_TblVersion.bCheckbak2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(10));
  670. m_TblVersion.bCheckbak3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(11));
  671. m_TblVersion.bCheckbak4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(12));
  672. //m_TblVersion.bCheckbak5 = _ttoi(AryOfValues.ElementAt(0).ElementAt(13));
  673. //m_TblVersion.bCheckbak6 = _ttoi(AryOfValues.ElementAt(0).ElementAt(14));
  674. _stprintf_s(m_TblVersion.szbakServer1, _T("%s"), AryOfValues.ElementAt(0).ElementAt(15));
  675. _stprintf_s(m_TblVersion.szbakServer2, _T("%s"), AryOfValues.ElementAt(0).ElementAt(16));
  676. _stprintf_s(m_TblVersion.szbakServer3, _T("%s"), AryOfValues.ElementAt(0).ElementAt(17));
  677. _stprintf_s(m_TblVersion.szbakServer4, _T("%s"), AryOfValues.ElementAt(0).ElementAt(18));
  678. //_stprintf_s(m_TblVersion.szbakServer5, _T("%s"), AryOfValues.ElementAt(0).ElementAt(19));
  679. //m_TblVersion.nbakTime = _ttoi(AryOfValues.ElementAt(0).ElementAt(20));
  680. m_TblVersion.bCheckbakdel1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(21));
  681. m_TblVersion.bCheckbakdel2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(22));
  682. m_TblVersion.bCheckbakdel3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(23));
  683. m_TblVersion.bCheckbakdel4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(24));
  684. m_TblVersion.nCheckbdMonth1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(25));
  685. m_TblVersion.nCheckbdMonth2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(26));
  686. m_TblVersion.nCheckbdMonth3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(27));
  687. m_TblVersion.nCheckbdMonth4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(28));
  688. m_TblVersion.bSubCheck1 = _ttoi(AryOfValues.ElementAt(0).ElementAt(29));
  689. m_TblVersion.bSubCheck2 = _ttoi(AryOfValues.ElementAt(0).ElementAt(30));
  690. m_TblVersion.bSubCheck3 = _ttoi(AryOfValues.ElementAt(0).ElementAt(31));
  691. m_TblVersion.bSubCheck4 = _ttoi(AryOfValues.ElementAt(0).ElementAt(32));
  692. #if IS_USE_VER1
  693. // 同时把本地的原始共享目录添加到m_TblNetShareInfo中;
  694. AddLocalShareDirectory();
  695. #endif
  696. return TRUE;
  697. }
  698. /************************************************************************/
  699. /*
  700. 函数:GetTblCatalogInfo
  701. 描述:获取分店数据库实例信息;
  702. 参数:
  703. 返回:
  704. 要求:
  705. 注意:
  706. 示例:
  707. [enable]
  708. [branch]
  709. [branchid]
  710. [clgname]
  711. [clgport]
  712. [clgsource]
  713. [clgaccount]
  714. [clgpassword]
  715. */
  716. /************************************************************************/
  717. BOOL CBranchInfo::GetTblCatalogInfo()
  718. {
  719. CStringArray AryOfFields;
  720. AryOfFields.Add(_T("enable"));
  721. AryOfFields.Add(_T("branch"));
  722. AryOfFields.Add(_T("branchid"));
  723. AryOfFields.Add(_T("clgname"));
  724. AryOfFields.Add(_T("clgport"));
  725. AryOfFields.Add(_T("clgsource"));
  726. AryOfFields.Add(_T("clgaccount"));
  727. AryOfFields.Add(_T("clgpassword"));
  728. CArray<CStringArray, CStringArray> AryOfValues;
  729. if (!GetTableValues(_T("CatalogInfo"), NULL, AryOfFields, AryOfValues))
  730. {
  731. OutputDebugString(_T("获取CatalogInfo表失败\n"));
  732. return FALSE;
  733. }
  734. // 获取version表成功;
  735. for (int i = 0; i < AryOfValues.GetSize(); i++)
  736. {
  737. if( IsCatalogInfoExists(AryOfValues.ElementAt(i).ElementAt(2)) )
  738. continue;
  739. TblCatalogInfo *pCatalogInfo = new TblCatalogInfo;
  740. pCatalogInfo->bEnable = _ttoi(AryOfValues.ElementAt(i).ElementAt(0));
  741. _stprintf_s(pCatalogInfo->szBranch, _T("%s"), AryOfValues.ElementAt(i).ElementAt(1));
  742. _stprintf_s(pCatalogInfo->szBranchId, _T("%s"), AryOfValues.ElementAt(i).ElementAt(2));
  743. _stprintf_s(pCatalogInfo->szCatalogName, _T("%s"), AryOfValues.ElementAt(i).ElementAt(3));
  744. pCatalogInfo->dwCatalogPort = _ttoi(AryOfValues.ElementAt(i).ElementAt(4));
  745. _stprintf_s(pCatalogInfo->szCatalogSource, _T("%s"), AryOfValues.ElementAt(i).ElementAt(5));
  746. _stprintf_s(pCatalogInfo->szCatalogAccount, _T("%s"), AryOfValues.ElementAt(i).ElementAt(6));
  747. _stprintf_s(pCatalogInfo->szCatalogPassWord, _T("%s"), AryOfValues.ElementAt(i).ElementAt(7));
  748. m_TblCatalogInfo.push_back(pCatalogInfo);
  749. }
  750. return TRUE;
  751. }
  752. /************************************************************************/
  753. /*
  754. 函数:GetTblNetShareInfo
  755. 描述:获取共享表的共享目录信息;
  756. 参数:
  757. 返回:
  758. 要求:
  759. 注意:如果当前连接的数据库是外网的(其他分店),则不读取这个共享表;
  760. 示例:
  761. */
  762. /************************************************************************/
  763. BOOL CBranchInfo::GetTblNetShareInfo()
  764. {
  765. CStringArray AryOfFields;
  766. AryOfFields.Add(_T("enable"));
  767. AryOfFields.Add(_T("branchid"));
  768. AryOfFields.Add(_T("sharePath"));
  769. AryOfFields.Add(_T("mincapacity"));
  770. AryOfFields.Add(_T("maxcapacity"));
  771. AryOfFields.Add(_T("photoType"));
  772. AryOfFields.Add(_T("priority"));
  773. CArray<CStringArray, CStringArray> AryOfValues;
  774. if (!GetTableValues(_T("NetShareInfo"), NULL, AryOfFields, AryOfValues))
  775. {
  776. OutputDebugString(_T("获取NetShareInfo表失败\n"));
  777. return FALSE;
  778. }
  779. // 获取version表成功;
  780. for (int i = 0; i < AryOfValues.GetSize(); i++)
  781. {
  782. if( IsNetShareInfoExists(AryOfValues.ElementAt(i).ElementAt(1),AryOfValues.ElementAt(i).ElementAt(2)) )
  783. continue;
  784. TblNetShareInfo *pNetShareInfo = new TblNetShareInfo;
  785. pNetShareInfo->bEnable = _ttoi(AryOfValues.ElementAt(i).ElementAt(0));
  786. _stprintf_s(pNetShareInfo->szBranchId, _T("%s"), AryOfValues.ElementAt(i).ElementAt(1));
  787. _stprintf_s(pNetShareInfo->szShareDirectory, _T("%s"), AryOfValues.ElementAt(i).ElementAt(2));
  788. pNetShareInfo->byMinCapacity = _ttoi(AryOfValues.ElementAt(i).ElementAt(3));
  789. pNetShareInfo->byMaxCapacity = _ttoi(AryOfValues.ElementAt(i).ElementAt(4));
  790. pNetShareInfo->byPhotoType = _ttoi(AryOfValues.ElementAt(i).ElementAt(5));
  791. pNetShareInfo->byPriority = _ttoi(AryOfValues.ElementAt(i).ElementAt(6));
  792. m_TblNetShareInfo.push_back(pNetShareInfo);
  793. }
  794. return TRUE;
  795. }
  796. /************************************************************************/
  797. /*
  798. 函数:IsNetShareInfoExists
  799. 描述:域名共享信息是否已存在;
  800. 参数:
  801. IN: lpBranchId 共享目录应用的域名;
  802. IN: lpShareDirectory 共享目录;
  803. 返回:存在返回TRUE;
  804. 要求:
  805. 注意:
  806. 示例:
  807. */
  808. /************************************************************************/
  809. BOOL CBranchInfo::IsNetShareInfoExists(IN LPCTSTR lpBranchId, IN LPCTSTR lpShareDirectory)
  810. {
  811. BOOL bExists = FALSE;
  812. for ( NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  813. {
  814. if ( _tcscmp((*it)->szBranchId,lpBranchId) == 0 && _tcscmp((*it)->szShareDirectory,lpShareDirectory) == 0)
  815. {
  816. bExists = TRUE;
  817. break;
  818. }
  819. }
  820. return bExists;
  821. }
  822. /************************************************************************/
  823. /*
  824. 函数:IsCatalogInfoExists
  825. 描述:分店数据库实例是否存在;
  826. 参数:
  827. IN: lpBranchId 分店域名;
  828. 返回:存在返回TRUE;
  829. 要求:
  830. 注意:
  831. 示例:
  832. */
  833. /************************************************************************/
  834. BOOL CBranchInfo::IsCatalogInfoExists(IN LPCTSTR lpBranchId)
  835. {
  836. BOOL bExists = FALSE;
  837. for ( CATALOGINFO::const_iterator it = m_TblCatalogInfo.begin(); it != m_TblCatalogInfo.end(); it++)
  838. {
  839. if ( _tcscmp((*it)->szBranchId,lpBranchId) == 0 )
  840. {
  841. bExists = TRUE;
  842. break;
  843. }
  844. }
  845. return bExists;
  846. }
  847. /************************************************************************/
  848. /*
  849. 函数:GetTblIncrementBackup
  850. 描述:获取增量备份的订单信息;
  851. 参数:
  852. OUT: AryOfValues
  853. 返回:成功获取且大于0返回TRUE;
  854. 要求:
  855. 注意:
  856. 示例:
  857. */
  858. /************************************************************************/
  859. BOOL CBranchInfo::GetTblIncrementBackup(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  860. {
  861. CStringArray AryOfFields;
  862. AryOfFields.Add(_T("isbackup"));
  863. AryOfFields.Add(_T("branchid"));
  864. AryOfFields.Add(_T("opttime"));
  865. AryOfFields.Add(_T("[order]"));
  866. AryOfFields.Add(_T("photoType"));
  867. AryOfFields.Add(_T("content"));
  868. AryOfFields.Add(_T("userid"));
  869. AryOfFields.Add(_T("username"));
  870. AryOfFields.Add(_T("baktime"));
  871. if (!GetTableValues(_T("IncrementalBackup"), _T("isbackup = 0"), AryOfFields, AryOfValues))
  872. {
  873. OutputDebugString(_T("获取IncrementalBackup表失败\n"));
  874. return FALSE;
  875. }
  876. return TRUE;
  877. }
  878. #if TEST_CREATE_DIRECTORY // 用于创建订单目录;
  879. /************************************************************************/
  880. /*
  881. 函数:GetTblPhotoManager
  882. 描述:测试使用,获取PhotoManager表中的订单号;
  883. 参数:
  884. 返回:
  885. 要求:
  886. 注意:
  887. 示例:
  888. */
  889. /************************************************************************/
  890. BOOL CBranchInfo::GetTblPhotoManager(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  891. {
  892. CStringArray AryOfFields;
  893. AryOfFields.Add(_T("[order]"));
  894. if (!GetTableValues(_T("PhotoManager"),NULL, AryOfFields, AryOfValues))
  895. {
  896. OutputDebugString(_T("获取PhotoManager表失败\n"));
  897. return FALSE;
  898. }
  899. return TRUE;
  900. }
  901. /************************************************************************/
  902. /*
  903. 函数:CreateOrderDirectory
  904. 描述:创建PhotoManager表中的订单目录;
  905. 参数:
  906. 返回:
  907. 要求:
  908. 注意:
  909. 示例:
  910. */
  911. /************************************************************************/
  912. void CBranchInfo::CreateOrderDirectory(IN LPCTSTR lpOrderNum)
  913. {
  914. for (vector<TblNetShareInfo*>::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  915. {
  916. if ( _tcscmp(m_szBranchDoMain,(*it)->szBranchId) == 0 )
  917. {
  918. CString strOrderPath = _T("");
  919. strOrderPath.Format(_T("%s\\%s"),(*it)->szShareDirectory,lpOrderNum);
  920. // 测试,先为测试删除创建所有的订单目录;
  921. if(!PathFileExists((*it)->szShareDirectory))continue;
  922. strOrderPath += _T("\\");
  923. OutputDebugString(strOrderPath);
  924. OutputDebugString(_T("\n"));
  925. MakeSureDirectoryPathExists(strOrderPath);
  926. }
  927. }
  928. }
  929. #endif
  930. /************************************************************************/
  931. /*
  932. 函数:GetTblAllPhotoManager
  933. 描述:获取要删除的所有订单号;
  934. 参数:
  935. OUT: AryOfValues
  936. 返回:成功获取且大于0返回TRUE;
  937. 要求:
  938. 注意:
  939. 示例:
  940. */
  941. /************************************************************************/
  942. BOOL CBranchInfo::GetTblAllPhotoManager(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  943. {
  944. CStringArray AryOfFields;
  945. AryOfFields.Add(_T("branchid"));
  946. AryOfFields.Add(_T("[order]"));
  947. AryOfFields.Add(_T("takestatus"));
  948. AryOfFields.Add(_T("taketime"));
  949. AryOfFields.Add(_T("opdel"));
  950. AryOfFields.Add(_T("epdel"));
  951. AryOfFields.Add(_T("fpdel"));
  952. AryOfFields.Add(_T("dpdel"));
  953. AryOfFields.Add(_T("opbdel"));
  954. AryOfFields.Add(_T("epbdel"));
  955. AryOfFields.Add(_T("fpbdel"));
  956. AryOfFields.Add(_T("dpbdel"));
  957. AryOfFields.Add(_T("opdeltm"));
  958. AryOfFields.Add(_T("epdeltm"));
  959. AryOfFields.Add(_T("fpdeltm"));
  960. AryOfFields.Add(_T("dpdeltm"));
  961. AryOfFields.Add(_T("opbdeltm"));
  962. AryOfFields.Add(_T("epbdeltm"));
  963. AryOfFields.Add(_T("fpbdeltm"));
  964. AryOfFields.Add(_T("dpbdeltm"));
  965. if (!GetTableValues(_T("PhotoManager"), NULL, AryOfFields, AryOfValues))
  966. {
  967. OutputDebugString(_T("获取PhotoManager表失败\n"));
  968. return FALSE;
  969. }
  970. return TRUE;
  971. }
  972. /************************************************************************/
  973. /*
  974. 函数:GetTblPhotoManager1
  975. 描述:获取要删除的原片订单号;
  976. 参数:
  977. OUT: AryOfValues
  978. 返回:成功获取且大于0返回TRUE;
  979. 要求:
  980. 注意:
  981. 示例:
  982. */
  983. /************************************************************************/
  984. BOOL CBranchInfo::GetTblPhotoManager1(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  985. {
  986. CStringArray AryOfFields;
  987. AryOfFields.Add(_T("[branchid]"));
  988. AryOfFields.Add(_T("[order]"));
  989. AryOfFields.Add(_T("takestatus"));
  990. AryOfFields.Add(_T("taketime"));
  991. AryOfFields.Add(_T("opdel"));
  992. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and opdel = 0"), AryOfFields, AryOfValues))
  993. {
  994. OutputDebugString(_T("获取PhotoManager表失败\n"));
  995. return FALSE;
  996. }
  997. return TRUE;
  998. }
  999. /************************************************************************/
  1000. /*
  1001. 函数:GetTblPhotoManager2
  1002. 描述:获取要删除的初修片订单号;
  1003. 参数:
  1004. OUT: AryOfValues
  1005. 返回:成功获取且大于0返回TRUE;
  1006. 要求:
  1007. 注意:
  1008. 示例:
  1009. */
  1010. /************************************************************************/
  1011. BOOL CBranchInfo::GetTblPhotoManager2(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1012. {
  1013. CStringArray AryOfFields;
  1014. AryOfFields.Add(_T("[branchid]"));
  1015. AryOfFields.Add(_T("[order]"));
  1016. AryOfFields.Add(_T("takestatus"));
  1017. AryOfFields.Add(_T("taketime"));
  1018. AryOfFields.Add(_T("epdel"));
  1019. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and epdel = 0"), AryOfFields, AryOfValues))
  1020. {
  1021. OutputDebugString(_T("获取PhotoManager表失败\n"));
  1022. return FALSE;
  1023. }
  1024. return TRUE;
  1025. }
  1026. /************************************************************************/
  1027. /*
  1028. 函数:GetTblPhotoManager3
  1029. 描述:获取要删除的精修片订单号;
  1030. 参数:
  1031. OUT: AryOfValues
  1032. 返回:成功获取且大于0返回TRUE;
  1033. 要求:
  1034. 注意:
  1035. 示例:
  1036. */
  1037. /************************************************************************/
  1038. BOOL CBranchInfo::GetTblPhotoManager3(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1039. {
  1040. CStringArray AryOfFields;
  1041. AryOfFields.Add(_T("[branchid]"));
  1042. AryOfFields.Add(_T("[order]"));
  1043. AryOfFields.Add(_T("takestatus"));
  1044. AryOfFields.Add(_T("taketime"));
  1045. AryOfFields.Add(_T("fpdel"));
  1046. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and fpdel = 0"), AryOfFields, AryOfValues))
  1047. {
  1048. OutputDebugString(_T("获取PhotoManager表失败\n"));
  1049. return FALSE;
  1050. }
  1051. return TRUE;
  1052. }
  1053. /************************************************************************/
  1054. /*
  1055. 函数:GetTblPhotoManager4
  1056. 描述:获取要删除的设计片订单号;
  1057. 参数:
  1058. OUT: AryOfValues
  1059. 返回:成功获取且大于0返回TRUE;
  1060. 要求:
  1061. 注意:
  1062. 示例:
  1063. */
  1064. /************************************************************************/
  1065. BOOL CBranchInfo::GetTblPhotoManager4(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1066. {
  1067. CStringArray AryOfFields;
  1068. AryOfFields.Add(_T("[branchid]"));
  1069. AryOfFields.Add(_T("[order]"));
  1070. AryOfFields.Add(_T("takestatus"));
  1071. AryOfFields.Add(_T("taketime"));
  1072. AryOfFields.Add(_T("dpdel"));
  1073. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and dpdel = 0"), AryOfFields, AryOfValues))
  1074. {
  1075. OutputDebugString(_T("获取PhotoManager表失败\n"));
  1076. return FALSE;
  1077. }
  1078. return TRUE;
  1079. }
  1080. /************************************************************************/
  1081. /*
  1082. 函数:GetTblPhotoManager5
  1083. 描述:获取要删除的备份原片订单号;
  1084. 参数:
  1085. OUT: AryOfValues
  1086. 返回:成功获取且大于0返回TRUE;
  1087. 要求:
  1088. 注意:
  1089. */
  1090. /************************************************************************/
  1091. BOOL CBranchInfo::GetTblPhotoManager5(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1092. {
  1093. CStringArray AryOfFields;
  1094. AryOfFields.Add(_T("[branchid]"));
  1095. AryOfFields.Add(_T("[order]"));
  1096. AryOfFields.Add(_T("takestatus"));
  1097. AryOfFields.Add(_T("taketime"));
  1098. AryOfFields.Add(_T("opbdel"));
  1099. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and opbdel = 0"), AryOfFields, AryOfValues))
  1100. {
  1101. OutputDebugString(_T("获取PhotoManager表失败\n"));
  1102. return FALSE;
  1103. }
  1104. return TRUE;
  1105. }
  1106. /************************************************************************/
  1107. /*
  1108. 函数:GetTblPhotoManager6
  1109. 描述:获取要删除的备份初修片订单号;
  1110. 参数:
  1111. OUT: AryOfValues
  1112. 返回:成功获取且大于0返回TRUE;
  1113. 要求:
  1114. 注意:
  1115. */
  1116. /************************************************************************/
  1117. BOOL CBranchInfo::GetTblPhotoManager6(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1118. {
  1119. CStringArray AryOfFields;
  1120. AryOfFields.Add(_T("[branchid]"));
  1121. AryOfFields.Add(_T("[order]"));
  1122. AryOfFields.Add(_T("takestatus"));
  1123. AryOfFields.Add(_T("taketime"));
  1124. AryOfFields.Add(_T("epbdel"));
  1125. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and epbdel = 0"), AryOfFields, AryOfValues))
  1126. {
  1127. OutputDebugString(_T("获取PhotoManager表失败\n"));
  1128. return FALSE;
  1129. }
  1130. return TRUE;
  1131. }
  1132. /************************************************************************/
  1133. /*
  1134. 函数:GetTblPhotoManager7
  1135. 描述:获取要删除的备份精修片订单号;
  1136. 参数:
  1137. OUT: AryOfValues
  1138. 返回:成功获取且大于0返回TRUE;
  1139. 要求:
  1140. 注意:
  1141. */
  1142. /************************************************************************/
  1143. BOOL CBranchInfo::GetTblPhotoManager7(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1144. {
  1145. CStringArray AryOfFields;
  1146. AryOfFields.Add(_T("[branchid]"));
  1147. AryOfFields.Add(_T("[order]"));
  1148. AryOfFields.Add(_T("takestatus"));
  1149. AryOfFields.Add(_T("taketime"));
  1150. AryOfFields.Add(_T("fpbdel"));
  1151. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and fpbdel = 0"), AryOfFields, AryOfValues))
  1152. {
  1153. OutputDebugString(_T("获取PhotoManager表失败\n"));
  1154. return FALSE;
  1155. }
  1156. return TRUE;
  1157. }
  1158. /************************************************************************/
  1159. /*
  1160. 函数:GetTblPhotoManager8
  1161. 描述:获取要删除的备份设计片订单号;
  1162. 参数:
  1163. OUT: AryOfValues
  1164. 返回:成功获取且大于0返回TRUE;
  1165. 要求:
  1166. 注意:
  1167. */
  1168. /************************************************************************/
  1169. BOOL CBranchInfo::GetTblPhotoManager8(OUT CArray<CStringArray, CStringArray> &AryOfValues)
  1170. {
  1171. CStringArray AryOfFields;
  1172. AryOfFields.Add(_T("[branchid]"));
  1173. AryOfFields.Add(_T("[order]"));
  1174. AryOfFields.Add(_T("takestatus"));
  1175. AryOfFields.Add(_T("taketime"));
  1176. AryOfFields.Add(_T("dpbdel"));
  1177. if (!GetTableValues(_T("PhotoManager"), _T("takestatus = 1 and dpbdel = 0"), AryOfFields, AryOfValues))
  1178. {
  1179. OutputDebugString(_T("获取PhotoManager表失败\n"));
  1180. return FALSE;
  1181. }
  1182. return TRUE;
  1183. }
  1184. /************************************************************************/
  1185. /*
  1186. 函数:AddLocalShareDirectory
  1187. 描述:添加本地固定名称的共享目录(早期版本软件使用);
  1188. 参数:#
  1189. 返回:#
  1190. 要求:
  1191. 注意:
  1192. */
  1193. /************************************************************************/
  1194. void CBranchInfo::AddLocalShareDirectory()
  1195. {
  1196. // 1.获取本机计算机名;
  1197. DWORD dwLeng = 0;
  1198. TCHAR szHost[MAX_PATH] = _T("");
  1199. GetComputerName(NULL, &dwLeng);
  1200. GetComputerName(szHost, &dwLeng);
  1201. // 2.本机共享目录;
  1202. TCHAR szShareDirectory[MAX_PATH] = { 0 };
  1203. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), szHost, ORIGINAL);
  1204. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 1, 255);
  1205. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), szHost, EARLY);
  1206. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 2, 255);
  1207. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), szHost, FUTHER);
  1208. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 3, 255);
  1209. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), szHost, DESIGN);
  1210. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 4, 255);
  1211. // 3.其他备份目录;
  1212. if (CHILD_VERSION)
  1213. {
  1214. // 儿童版本;
  1215. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer1, _T("客户原片备份(儿童管理软件)$"));
  1216. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 5, 255);
  1217. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer2, _T("修好的片备份(儿童管理软件)$"));
  1218. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 6, 255);
  1219. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer3, _T("精修好的片备份(儿童管理软件)$"));
  1220. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 7, 255);
  1221. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer4, _T("设计好的片备份(儿童管理软件)$"));
  1222. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 8, 255);
  1223. }
  1224. else
  1225. {
  1226. // 婚纱版本;
  1227. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer1, _T("客户原片备份(管理软件)$"));
  1228. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 5, 255);
  1229. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer2, _T("修好的片备份(管理软件)$"));
  1230. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 6, 255);
  1231. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer3, _T("精修好的片备份(管理软件)$"));
  1232. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 7, 255);
  1233. _stprintf_s(szShareDirectory, _T("\\\\%s\\%s"), m_TblVersion.szbakServer4, _T("设计好的片备份(管理软件)$"));
  1234. InsertNetShareInfo(szShareDirectory, _T("需要读取加密狗的域名"), 5, 30, 8, 255);
  1235. }
  1236. }
  1237. /************************************************************************/
  1238. /*
  1239. 函数:InsertNetShareInfo
  1240. 描述:添加新的共享目录信息;
  1241. 参数:
  1242. IN: lpShareDirectory
  1243. IN: lpBranchId
  1244. IN: nMinCapacity
  1245. IN: nMaxCapacity
  1246. IN: nPhotoType
  1247. IN: nPriority
  1248. 返回:成功添加返回TRUE;
  1249. 要求:
  1250. 注意:
  1251. */
  1252. /************************************************************************/
  1253. 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)
  1254. {
  1255. if (PathFileExists(lpShareDirectory))
  1256. {
  1257. TblNetShareInfo *pNetShareInfo = new TblNetShareInfo;
  1258. pNetShareInfo->bEnable = TRUE;
  1259. _stprintf_s(pNetShareInfo->szBranchId, _T("%s"), m_szBranchDoMain);
  1260. _stprintf_s(pNetShareInfo->szShareDirectory, _T("%s"), lpShareDirectory);
  1261. pNetShareInfo->byMinCapacity = nMinCapacity;
  1262. pNetShareInfo->byMaxCapacity = nMaxCapacity;
  1263. pNetShareInfo->byPhotoType = nPhotoType;
  1264. pNetShareInfo->byPriority = nPriority;
  1265. m_TblNetShareInfo.push_back(pNetShareInfo);
  1266. return TRUE;
  1267. }
  1268. return FALSE;
  1269. }
  1270. /************************************************************************/
  1271. /*
  1272. 函数:Separator
  1273. 描述:根据分隔符解析出目标字符串;
  1274. 参数:
  1275. IN: lpSeparator 源字符串的分隔符;
  1276. IN: lpString 源字符串;
  1277. OUT: ResultArray 解析出的字符串数组;
  1278. 返回:
  1279. 要求:
  1280. 注意:
  1281. */
  1282. /************************************************************************/
  1283. void CBranchInfo::Separator(IN LPCTSTR lpSeparator, IN LPCTSTR lpString, OUT CStringArray &ResultArray)
  1284. {
  1285. CString strSrc = lpString;
  1286. strSrc.TrimLeft(lpSeparator);
  1287. strSrc.TrimRight(lpSeparator);
  1288. strSrc += lpSeparator;
  1289. int nIndex = 0;
  1290. do
  1291. {
  1292. nIndex = strSrc.Find(lpSeparator);
  1293. if ( -1 != nIndex )
  1294. {
  1295. CString strImage = strSrc.Left(nIndex);
  1296. strSrc = strSrc.Mid(nIndex+1);
  1297. if ( PathFileExists(strImage) )
  1298. {
  1299. ResultArray.Add(strImage);
  1300. }
  1301. }
  1302. } while ( -1 != nIndex );
  1303. }
  1304. /************************************************************************/
  1305. /*
  1306. 函数:FindImageShareDirectory
  1307. 描述:根据相片名称,订单号,相片类型在共享目录数组中查找出相片的实现路径;
  1308. 参数:
  1309. IN: byPhotoType 相片类型;
  1310. IN: lpImage 相片名称,带护展名;
  1311. IN: lpOrderNum 相片所在的订单号;
  1312. OUT: lpShareDirectory 若相片存在,这里为相片的实际路径;
  1313. 返回:相片存在返回TRUE,否则FALSE;
  1314. 要求:
  1315. 注意:
  1316. */
  1317. /************************************************************************/
  1318. BOOL CBranchInfo::FindImageShareDirectory(IN const BYTE &byPhotoType, IN LPCTSTR lpImage, IN LPCTSTR lpOrderNum, OUT LPTSTR lpShareDirectory)
  1319. {
  1320. BOOL bExists = FALSE;
  1321. TblNetShareInfo *pNetShareInfo = NULL;
  1322. for (NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  1323. {
  1324. pNetShareInfo = *it;
  1325. if ( _tcscmp(pNetShareInfo->szBranchId,m_szBranchDoMain) == 0 )
  1326. {
  1327. if ( pNetShareInfo->byPhotoType == byPhotoType )
  1328. {
  1329. CString strImagePaht = _T("");
  1330. strImagePaht.Format(_T("%s\\%s\\%s"),pNetShareInfo->szShareDirectory,lpOrderNum,lpImage);
  1331. if ( PathFileExists(strImagePaht) )
  1332. {
  1333. bExists = TRUE;
  1334. _stprintf_s(lpShareDirectory, MAX_PATH, _T("%s"), strImagePaht);
  1335. break;
  1336. }
  1337. }
  1338. }
  1339. }
  1340. return bExists;
  1341. }
  1342. /************************************************************************/
  1343. /*
  1344. 函数:FindImageShareDirectory
  1345. 描述:根据相片名称,订单号,相片类型在共享目录数组中查找出相片的实现路径;
  1346. 参数:
  1347. IN: byPhotoType 相片类型;
  1348. IN: lpImage 相片名称,不带后缀;
  1349. IN: lpOrderNum 相片所在的订单号;
  1350. OUT: AryOfShareDirectory 若相片存在,这里为相片(多种格式)的实际路径数组;
  1351. 返回:相片存在返回TRUE,否则FALSE;
  1352. 要求:
  1353. 注意:
  1354. */
  1355. /************************************************************************/
  1356. BOOL CBranchInfo::FindImageShareDirectory(IN const BYTE &byPhotoType, IN LPCTSTR lpImage, IN LPCTSTR lpOrderNum, OUT CStringArray &AryOfShareDirectory)
  1357. {
  1358. // lpImage只是文件名,无后缀;
  1359. BOOL bExists = FALSE;
  1360. TblNetShareInfo *pNetShareInfo = NULL;
  1361. for (NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  1362. {
  1363. pNetShareInfo = *it;
  1364. if ( _tcscmp(pNetShareInfo->szBranchId,m_szBranchDoMain) == 0 )
  1365. {
  1366. if ( pNetShareInfo->byPhotoType == byPhotoType )
  1367. {
  1368. CString strImagePaht = _T("");
  1369. strImagePaht.Format(_T("%s\\%s\\%s"),pNetShareInfo->szShareDirectory,lpOrderNum,lpImage);
  1370. if ( PathFileExists(strImagePaht + _T(".jpg")) )
  1371. {
  1372. bExists = TRUE;
  1373. AryOfShareDirectory.Add(CString(strImagePaht + _T(".jpg")));
  1374. }
  1375. if ( PathFileExists(strImagePaht + _T(".raw")) )
  1376. {
  1377. bExists = TRUE;
  1378. AryOfShareDirectory.Add(CString(strImagePaht + _T(".raw")));
  1379. }
  1380. if ( PathFileExists(strImagePaht + _T(".cr2")) )
  1381. {
  1382. bExists = TRUE;
  1383. AryOfShareDirectory.Add(CString(strImagePaht + _T(".cr2")));
  1384. }
  1385. if ( PathFileExists(strImagePaht + _T(".nef")) )
  1386. {
  1387. bExists = TRUE;
  1388. AryOfShareDirectory.Add(CString(strImagePaht + _T(".nef")));
  1389. }
  1390. if(bExists) break;
  1391. }
  1392. }
  1393. }
  1394. return bExists;
  1395. }
  1396. /************************************************************************/
  1397. /*
  1398. 函数:GetIncrementContentAndBackup
  1399. 描述:解析出增量表里的content字段保存的相片路径,并增量备份;
  1400. 参数:
  1401. IN: lpBranchId 分店id;
  1402. IN: lpOpTm 操作时间;
  1403. IN: lpOrder 订单号;
  1404. IN: byPhotoType 相片类型;
  1405. IN: lpIncrementContent content字段的相片信息;
  1406. 返回:
  1407. 要求:
  1408. 注意:
  1409. */
  1410. /************************************************************************/
  1411. BOOL CBranchInfo::GetIncrementContentAndBackup(IN LPCTSTR lpBranchId, IN LPCTSTR lpOpTm, IN LPCTSTR lpOrder, IN CONST BYTE &byPhotoType, IN LPCTSTR lpIncrementContent)
  1412. {
  1413. if ( byPhotoType > 8) return FALSE;
  1414. // 1.解析出增量相片的路径;
  1415. CStringArray AryOfImagePath;
  1416. CString strIncrementContent = lpIncrementContent;
  1417. #if 1
  1418. // content里的内容只是相片名称;
  1419. // 首先实现的是有后缀名的相片;
  1420. strIncrementContent.TrimLeft(_T("|"));
  1421. strIncrementContent.TrimRight(_T("|"));
  1422. strIncrementContent += _T("|");
  1423. int nIndex = 0;
  1424. do
  1425. {
  1426. nIndex = strIncrementContent.Find(_T('|'));
  1427. if ( nIndex != -1 )
  1428. {
  1429. CString strImage = strIncrementContent.Left(nIndex);
  1430. strIncrementContent = strIncrementContent.Mid(nIndex+1);
  1431. // 在所有共享目录下查找该相片路径;
  1432. #if 1
  1433. TCHAR szShareDirectory[MAX_PATH] = {0};
  1434. if (FindImageShareDirectory(byPhotoType,strImage,lpOrder,szShareDirectory))
  1435. {
  1436. AryOfImagePath.Add(szShareDirectory);
  1437. }
  1438. #else
  1439. FindImageShareDirectory(byPhotoType,strImage,lpOrder,AryOfImagePath);
  1440. #endif
  1441. }
  1442. } while ( nIndex != -1);
  1443. #endif
  1444. #if 0// content里的内容:"\\lyfz-pc\共享1\001.jpg|\\lyfz-pc\共享1\002.jpg"
  1445. strIncrementContent.TrimLeft(_T("|"));
  1446. strIncrementContent.TrimRight(_T("|"));
  1447. strIncrementContent += _T("|");
  1448. int nIndex = 0;
  1449. do
  1450. {
  1451. nIndex = strIncrementContent.Find(_T('|'));
  1452. if ( nIndex != -1 )
  1453. {
  1454. CString strImage = strIncrementContent.Left(nIndex);
  1455. strIncrementContent = strIncrementContent.Mid(nIndex+1);
  1456. if (PathFileExists(strImage))
  1457. {
  1458. AryOfImagePath.Add(strImage);
  1459. }
  1460. }
  1461. } while ( nIndex != -1);
  1462. #endif
  1463. #if 0
  1464. // 另一种形式:"?\\lyf\共享1\:001.jpg|002.jpg|003.jpg?\\lyfz-server\共享1:001.jpg|002.jpg?"
  1465. strIncrementContent.TrimLeft(_T("?"));
  1466. strIncrementContent.TrimRight(_T("?"));
  1467. strIncrementContent += _T("?");
  1468. int nIndex = 0;
  1469. do
  1470. {
  1471. nIndex = strIncrementContent.Find(_T('?'));
  1472. if ( -1 != nIndex )
  1473. {
  1474. CString strSubIncrement = strIncrementContent.Left(nIndex);
  1475. strIncrementContent = strSubIncrement.Mid(nIndex+1);
  1476. CString strShareDirectory;
  1477. nIndex = strSubIncrement.Find(_T(':'));
  1478. if ( -1 != nIndex )
  1479. {
  1480. strShareDirectory = strSubIncrement.Left(nIndex);
  1481. strShareDirectory.TrimRight(_T('\\'));
  1482. strShareDirectory += _T("\\");
  1483. strShareDirectory += lpOrder;
  1484. strShareDirectory += _T("\\");
  1485. strSubIncrement = strSubIncrement.Mid(nIndex+1);
  1486. strSubIncrement.TrimRight(_T('|'));
  1487. strSubIncrement += _T("|");
  1488. do
  1489. {
  1490. nIndex = strSubIncrement.Find(_T('|'));
  1491. if ( -1 != nIndex)
  1492. {
  1493. CString strImage = strSubIncrement.Left(nIndex);
  1494. strSubIncrement = strSubIncrement.Mid(nIndex+1);
  1495. if ( PathFileExists(strShareDirectory+strImage) )
  1496. {
  1497. AryOfImagePath.Add(strShareDirectory+strImage);
  1498. }
  1499. }
  1500. } while ( -1 != nIndex );
  1501. }
  1502. }
  1503. } while (-1 != nIndex);
  1504. #endif
  1505. if ( AryOfImagePath.GetSize() == 0)
  1506. return FALSE;
  1507. // 获取增量相片的总大小;
  1508. UINT64 uFilesSize = EasyGetSizeOfFiles(AryOfImagePath);
  1509. UINT64 nCapacity = uFilesSize/(1024*1024*1024);
  1510. // 开始备份;
  1511. double dFreeNum;
  1512. TCHAR szEnableShareDirectory[MAX_PATH] = {0};
  1513. if ( !GetEnableShareDirectory(dFreeNum,byPhotoType,lpOrder,lpBranchId,szEnableShareDirectory) )
  1514. {
  1515. OutputDebugString(_T("无可用共享目录\n"));
  1516. return FALSE;
  1517. }
  1518. if ( dFreeNum > nCapacity ) // 一般增量备份的相片大小,不会超过5g,一般可以不判断;
  1519. {
  1520. // 判断是否存在当天日期文件;
  1521. CString strDate = lpOpTm;
  1522. strDate = strDate.Left(10);
  1523. CString strDatePath = szEnableShareDirectory;
  1524. strDatePath += strDate;
  1525. strDatePath += _T("\\");
  1526. MakeSureDirectoryPathExists(strDatePath);
  1527. for ( int i = 0; i < AryOfImagePath.GetSize(); i++)
  1528. {
  1529. // 存储的目录,需要提取出订单号以下出现的各种子目录名;
  1530. EasyCopyFile(lpOrder, AryOfImagePath.ElementAt(i), strDatePath);
  1531. }
  1532. // 更新数据库;
  1533. // --产生个问题,因为如果是多店的话,连接的不是本店的数据库,但是备份的时候把分店的相片备份了;
  1534. //if ( m_bIsOur )
  1535. //{
  1536. strDate.Format(_T("update [IncrementalBackup] set [isbackup] = 1,[baktime] = getdate() where [branchid] = '%s' and [order] = '%s'"),lpBranchId,lpOrder);
  1537. Execute(strDate);
  1538. //}
  1539. }
  1540. return TRUE;
  1541. }
  1542. /************************************************************************/
  1543. /*
  1544. 函数:GetRemvoeOrderInfoAndRemove
  1545. 描述:获取取件OK,且未删除过的相片的订单路径,并删除达到要求时间的订单相片;
  1546. 参数:
  1547. IN: lpOrderNum 要删除的订单号;
  1548. IN: lpOpTm 要删除的订单号的取件时间;
  1549. IN: byPhotoType 要删除的订单号的相片类型;
  1550. 返回:
  1551. 要求:
  1552. 注意:
  1553. 1.如果要删除存储在本店中的分店订单相片,必须在NetShareInfo表中添加分店路径,且用到的域名是本店的域名;
  1554. */
  1555. /************************************************************************/
  1556. BOOL CBranchInfo::GetRemvoeOrderInfoAndRemove(IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, IN LPCTSTR lpOpTm, IN const BYTE &byPhotoType)
  1557. {
  1558. // 1.订单号不能为空,否则会删除根目录全部文件;
  1559. if ( lpOrderNum == NULL || _tcscmp(lpOrderNum,_T("")) == 0)
  1560. {
  1561. OutputDebugString(_T("订单不能为空!\n"));
  1562. return FALSE;
  1563. }
  1564. // 2.判断时间的有效性;
  1565. if (!IsValidDate(lpOpTm))
  1566. {
  1567. OutputDebugString(_T("日期无效!\n"));
  1568. return FALSE;
  1569. }
  1570. // 3.是否达到删除时间;
  1571. int nMonths = 0;
  1572. switch ( byPhotoType )
  1573. {
  1574. case 1:
  1575. nMonths = m_TblVersion.nCheckMonth1;
  1576. if ( !m_TblVersion.bCheck1 )return FALSE;
  1577. break;
  1578. case 2:
  1579. nMonths = m_TblVersion.nCheckMonth2;
  1580. if ( !m_TblVersion.bCheck2 )return FALSE;
  1581. break;
  1582. case 3:
  1583. nMonths = m_TblVersion.nCheckMonth3;
  1584. if ( !m_TblVersion.bCheck3 )return FALSE;
  1585. break;
  1586. case 4:
  1587. nMonths = m_TblVersion.nCheckMonth4;
  1588. if ( !m_TblVersion.bCheck4 )return FALSE;
  1589. break;
  1590. //////////////////////////////////////////////////////////////////////////
  1591. case 5:
  1592. nMonths = m_TblVersion.nCheckbdMonth1;
  1593. if ( !m_TblVersion.bCheckbak1 )return FALSE;
  1594. break;
  1595. case 6:
  1596. nMonths = m_TblVersion.nCheckbdMonth2;
  1597. if ( !m_TblVersion.bCheckbak2 )return FALSE;
  1598. break;
  1599. case 7:
  1600. nMonths = m_TblVersion.nCheckbdMonth3;
  1601. if ( !m_TblVersion.bCheckbak3 )return FALSE;
  1602. break;
  1603. case 8:
  1604. nMonths = m_TblVersion.nCheckbdMonth4;
  1605. if ( !m_TblVersion.bCheckbak4 )return FALSE;
  1606. break;
  1607. default:
  1608. break;
  1609. }
  1610. CString strTakeTime = lpOpTm;
  1611. COleDateTime reachtm(_ttoi(strTakeTime.Left(4)), _ttoi(strTakeTime.Mid(5,2)),_ttoi(strTakeTime.Mid(8,2)),0,0,0);
  1612. COleDateTimeSpan sp(nMonths * 30, 0, 0, 0);
  1613. reachtm += sp;
  1614. COleDateTime curtm = COleDateTime::GetCurrentTime();
  1615. // 取件日期+天数 的日期 < 今天;
  1616. if (reachtm > curtm )
  1617. {
  1618. OutputDebugString(lpOrderNum);
  1619. OutputDebugString(_T("未达到删除日期----------------\n"));
  1620. return FALSE;
  1621. }
  1622. OutputDebugString(lpOrderNum);
  1623. OutputDebugString(_T("已达到删除日期------------------\n"));
  1624. // 4.获取订单路径并删除;
  1625. //CStringArray AryOfRemoveDirectory;
  1626. BOOL bRemove = TRUE;
  1627. for (NETSHAREINFO::const_iterator it = m_TblNetShareInfo.begin(); it != m_TblNetShareInfo.end(); it++)
  1628. {
  1629. //if ( _tcscmp(m_szBranchDoMain,(*it)->szBranchId) == 0 )
  1630. if ( _tcscmp(lpBranchId,(*it)->szBranchId) == 0 )
  1631. {
  1632. if ( (*it)->byPhotoType != byPhotoType)continue;
  1633. CString strOrderPath = _T("");
  1634. strOrderPath.Format(_T("%s\\%s"),(*it)->szShareDirectory,lpOrderNum);
  1635. if ( PathFileExists(strOrderPath) )
  1636. {
  1637. if( DeleteDirectory(strOrderPath) )
  1638. {
  1639. bRemove = FALSE;
  1640. }
  1641. #if 0 // 删除不了网络路径;
  1642. strOrderPath += _T("\0\0");
  1643. SHFILEOPSTRUCT lpsh;
  1644. ZeroMemory(&lpsh, sizeof(lpsh));
  1645. lpsh.hwnd = HWND_DESKTOP;
  1646. lpsh.fFlags = FOF_NOCONFIRMATION | FOF_SIMPLEPROGRESS;
  1647. lpsh.wFunc = FO_DELETE;
  1648. lpsh.pFrom = strOrderPath;
  1649. //AryOfRemoveDirectory.Add(strOrderPath);
  1650. int nResult = SHFileOperation(&lpsh);
  1651. //if (0 == SHFileOperation(&lpsh))
  1652. if ( nResult == 0)
  1653. {
  1654. OutputDebugString(_T("删除订单目录成功\n"));
  1655. }
  1656. else
  1657. {
  1658. DWORD dw = GetLastError();
  1659. bRemove = FALSE;
  1660. }
  1661. #endif
  1662. }
  1663. else
  1664. {
  1665. OutputDebugString(_T("没有该订单路径"));
  1666. OutputDebugString(strOrderPath);
  1667. OutputDebugString(_T("#\n"));
  1668. }
  1669. }
  1670. }
  1671. // 5.再次检查是否删除完;
  1672. if ( !bRemove )
  1673. {
  1674. switch ( byPhotoType )
  1675. {
  1676. case 1:
  1677. strTakeTime.Format(_T("update [PhotoManager] set [opdel] = 1,[opdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  1678. break;
  1679. case 2:
  1680. strTakeTime.Format(_T("update [PhotoManager] set [epdel] = 1,[epdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  1681. break;
  1682. case 3:
  1683. strTakeTime.Format(_T("update [PhotoManager] set [fpdel] = 1,[fpdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  1684. break;
  1685. case 4:
  1686. strTakeTime.Format(_T("update [PhotoManager] set [dpdel] = 1,[dpdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  1687. break;
  1688. //////////////////////////////////////////////////////////////////////////
  1689. case 5:
  1690. strTakeTime.Format(_T("update [PhotoManager] set [opbdel] = 1,[opbdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  1691. break;
  1692. case 6:
  1693. strTakeTime.Format(_T("update [PhotoManager] set [epbdel] = 1,[epbdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  1694. break;
  1695. case 7:
  1696. strTakeTime.Format(_T("update [PhotoManager] set [fpbdel] = 1,[fpbdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  1697. break;
  1698. case 8:
  1699. strTakeTime.Format(_T("update [PhotoManager] set [dpbdel] = 1,[dpbdeltm] = getdate() where [order] = '%s'"), lpOrderNum);
  1700. break;
  1701. default:
  1702. break;
  1703. }
  1704. Execute(strTakeTime);
  1705. }
  1706. return TRUE;
  1707. }