PhotoDelMgr.cpp 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431
  1. // PhotoDelMgr.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "DBServer.h"
  5. #include "PhotoDelMgr.h"
  6. #include "Global.h"
  7. #include "BranchInfo.h"
  8. #include "PhotoDelLog.h"
  9. #include "mysqldata.h"
  10. #include "DelPhotoModel\DelFilesFactory.h"
  11. #include "DelPhotoModel\DelFilesInterface.h"
  12. typedef HRESULT (WINAPI *GetClassDelFileObject)(REFCLSID, REFIID, LPVOID*);
  13. CPhotoDelMgr* g_pPhotoDelMgr;
  14. #define MSG_SHOWPROMPTING WM_USER + 101
  15. // CPhotoDelMgr 对话框
  16. IMPLEMENT_DYNAMIC(CPhotoDelMgr, CDialog)
  17. CPhotoDelMgr::CPhotoDelMgr(CWnd* pParent /*=NULL*/)
  18. : CDialog(CPhotoDelMgr::IDD, pParent)
  19. {
  20. m_pFactory = NULL;
  21. m_pInterface = NULL;
  22. m_lpCurrSel = NULL;
  23. m_pdb = NULL;
  24. memset(m_szConnect, 0, sizeof(TCHAR)*MAX_PATH);
  25. }
  26. CPhotoDelMgr::~CPhotoDelMgr()
  27. {
  28. if(m_pInterface)
  29. m_pInterface->Release();
  30. if(m_pFactory)
  31. m_pFactory->Release();
  32. m_vCurrSelLog.clear();
  33. CleareLog(m_vPickupLog);
  34. ClearBakDirInfo();
  35. if(m_pdb)
  36. delete m_pdb;
  37. m_pdb = NULL;
  38. }
  39. void CPhotoDelMgr::DoDataExchange(CDataExchange* pDX)
  40. {
  41. CDialog::DoDataExchange(pDX);
  42. DDX_Control(pDX, IDC_DelInfo_List, m_DelList);
  43. DDX_Control(pDX, IDC_DelType_LIST, m_PhotoTypeList);
  44. DDX_Control(pDX, IDC_Start_Date, m_StartTime);
  45. DDX_Control(pDX, IDC_End_Date, m_EndTime);
  46. DDX_Control(pDX, IDC_DELTIPS_RICHEDIT, m_DelTips);
  47. }
  48. BEGIN_MESSAGE_MAP(CPhotoDelMgr, CDialog)
  49. ON_BN_CLICKED(IDC_StartDel_Btn, &CPhotoDelMgr::OnBnClickedStartdelBtn)
  50. ON_BN_CLICKED(IDC_SelectAll_Btn, &CPhotoDelMgr::OnBnClickedSelectallBtn)
  51. ON_BN_CLICKED(IDC_DeleteLog_Btn, &CPhotoDelMgr::OnBnClickedDeletelogBtn)
  52. ON_BN_CLICKED(IDC_UnAllSel_Btn, &CPhotoDelMgr::OnBnClickedUnallselBtn)
  53. ON_BN_CLICKED(IDC_SetAutoDel_Btn, &CPhotoDelMgr::OnBnClickedSetAutodelBtn)
  54. ON_BN_CLICKED(IDC_Refresh_Btn, &CPhotoDelMgr::OnBnClickedRefreshBtn)
  55. ON_NOTIFY(NM_CLICK, IDC_DelInfo_List, &CPhotoDelMgr::OnNMClickDelinfoList)
  56. ON_NOTIFY(NM_CLICK, IDC_DelType_LIST, &CPhotoDelMgr::OnNMClickDeltypeList)
  57. ON_MESSAGE(MSG_SHOWPROMPTING, &CPhotoDelMgr::ShowPrompting)
  58. END_MESSAGE_MAP()
  59. BOOL CPhotoDelMgr::OnInitDialog()
  60. {
  61. CDialog::OnInitDialog();
  62. g_pPhotoDelMgr = this;
  63. #ifndef ENTERPRISE_VERSION
  64. m_DelList.InsertColumn( 0, TEXT("主机名"), LVCFMT_LEFT, 100 );
  65. #else
  66. m_DelList.InsertColumn( 0, TEXT("店名"), LVCFMT_LEFT, 100 );
  67. #endif
  68. m_DelList.InsertColumn( 1, TEXT("域名"), LVCFMT_LEFT, 200 );
  69. m_DelList.InsertColumn( 2, TEXT("订单号"), LVCFMT_LEFT, 70 );
  70. m_DelList.InsertColumn( 3, TEXT("取件"), LVCFMT_LEFT, 70 );
  71. m_DelList.InsertColumn( 4, TEXT("时间"), LVCFMT_LEFT, 70 );
  72. m_DelList.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_GRIDLINES);
  73. m_PhotoTypeList.InsertColumn( 0, TEXT("类型"), LVCFMT_LEFT, 100 );
  74. m_PhotoTypeList.InsertColumn( 1, TEXT("已删除"), LVCFMT_LEFT, 70 );
  75. m_PhotoTypeList.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_GRIDLINES);
  76. CTime currtime = CTime::GetCurrentTime();
  77. m_EndTime.SetTime(&currtime);
  78. CTimeSpan timespan(30,0,0,0);
  79. CTime endtime = currtime - timespan;
  80. m_StartTime.SetTime(&endtime);
  81. GetBranchInfo(m_BranchArr);
  82. OnBnClickedRefreshBtn();
  83. LoadDelPhotoModule(g_hDllInst);
  84. GetShareBackupDir();
  85. return TRUE;
  86. }
  87. // CPhotoDelMgr 消息处理程序
  88. //开始删除
  89. void CPhotoDelMgr::OnBnClickedStartdelBtn()
  90. {
  91. if(m_pInterface && m_pInterface->IsDeleting())
  92. {
  93. MessageBox(_T("正在处理删除工作中,请稍后再试"));
  94. return;
  95. }
  96. // TODO: 在此添加控件通知处理程序代码
  97. if (AfxMessageBox("是否删除选中的已取件相片?", MB_YESNO | MB_ICONINFORMATION) != IDYES)
  98. return;
  99. int nCount = m_DelList.GetItemCount();
  100. for(int i = 0; i<nCount; i++)
  101. {
  102. if(m_DelList.GetCheck(i) == TRUE)
  103. {
  104. CString strDomain = m_DelList.GetItemText(i, 1);
  105. CString strOrder = m_DelList.GetItemText(i, 2);
  106. std::vector<LPSPICKUPINFO>::iterator iter = m_vPickupLog.begin();
  107. for(; iter != m_vPickupLog.end();)
  108. {
  109. LPSPICKUPINFO lp = (*iter);
  110. if(lp != NULL && lp->bTakestatus && lp->strBranchid == strDomain && lp->strOrder == strOrder)
  111. {
  112. //把勾选了的已取件订单添加到删除集里
  113. if(lp->bOpNeedDel)
  114. AddDelData(strDomain, strOrder, 1);
  115. if(lp->bEpNeedDel)
  116. AddDelData(strDomain, strOrder, 2);
  117. if(lp->bFpNeedDel)
  118. AddDelData(strDomain, strOrder, 3);
  119. if(lp->bDpNeedDel)
  120. AddDelData(strDomain, strOrder, 4);
  121. if(lp->bOpbNeedDel)
  122. AddDelData(strDomain, strOrder, 5);
  123. if(lp->bEpbNeedDel)
  124. AddDelData(strDomain, strOrder, 6);
  125. if(lp->bFpbNeedDel)
  126. AddDelData(strDomain, strOrder, 7);
  127. if(lp->bDpbNeedDel)
  128. AddDelData(strDomain, strOrder, 8);
  129. }
  130. ++iter;
  131. }
  132. }
  133. }
  134. //开始删除相片
  135. if(m_pInterface && !m_pInterface->IsDeleting())
  136. m_pInterface->StartDelFiles(DelFinish);
  137. }
  138. //去掉全选
  139. void CPhotoDelMgr::OnBnClickedUnallselBtn()
  140. {
  141. // TODO: 在此添加控件通知处理程序代码
  142. int nNum = m_DelList.GetItemCount();
  143. for(int i=0; i<nNum; i++)
  144. m_DelList.SetCheck(i, FALSE);
  145. m_vCurrSelLog.clear();
  146. }
  147. //全选
  148. void CPhotoDelMgr::OnBnClickedSelectallBtn()
  149. {
  150. // TODO: 在此添加控件通知处理程序代码
  151. int nNum = m_DelList.GetItemCount();
  152. for(int i=0; i<nNum; i++)
  153. m_DelList.SetCheck(i, TRUE);
  154. m_vCurrSelLog.clear();
  155. std::vector<LPSPICKUPINFO>::iterator it = m_vPickupLog.begin();
  156. for(;it != m_vPickupLog.end();)
  157. {
  158. if((*it) != NULL)
  159. m_vCurrSelLog.push_back((*it));
  160. ++it;
  161. }
  162. }
  163. //查看删除记录
  164. void CPhotoDelMgr::OnBnClickedDeletelogBtn()
  165. {
  166. // TODO: 在此添加控件通知处理程序代码
  167. PhotoDelLog dlg;
  168. dlg.m_pBranchArr = &m_BranchArr;
  169. dlg.m_pdb = m_pdb;
  170. dlg.m_plock = &m_lock;
  171. dlg.DoModal();
  172. }
  173. void CPhotoDelMgr::OnDestroy()
  174. {
  175. }
  176. //加载列表数据
  177. void CPhotoDelMgr::LoadListData()
  178. {
  179. m_lock.lock();
  180. if(m_pdb == NULL)
  181. {
  182. m_lock.unlock();
  183. return;
  184. }
  185. CleareLog(m_vPickupLog);
  186. CString strTimeFielded = _T("");
  187. if(!GetTimeField(strTimeFielded))
  188. {
  189. m_lock.unlock();
  190. return;
  191. }
  192. //已取件记录
  193. CString sql = _T("");
  194. sql = _T("SELECT [branchid],[order],[takestatus],[taketime],\
  195. [opdel],[epdel],[fpdel],[dpdel],\
  196. [opbdel],[epbdel],[fpbdel],[dpbdel],\
  197. [opdeltm],[epdeltm],[fpdeltm],[dpdeltm],\
  198. [opbdeltm],[epbdeltm],[fpbdeltm],[dpbdeltm] FROM [PhotoManager] where [takestatus]='True' and ") + strTimeFielded;
  199. try
  200. {
  201. CRecordset myset;
  202. myset.m_pDatabase = m_pdb;
  203. myset.Open(CRecordset::forwardOnly, sql);
  204. int ii = 0;
  205. while (!myset.IsEOF())
  206. {
  207. LPSPICKUPINFO lp = new SPICKUPINFO;
  208. CString strValue = _T("");
  209. myset.GetFieldValue(_T("branchid"), lp->strBranchid); /* 分店id 域名*/
  210. lp->strName = CPhotoDelMgr::GetBranchNameForDomain(&m_BranchArr, lp->strBranchid);
  211. myset.GetFieldValue(_T("order"), lp->strOrder); /* 主键订单号(唯一) */
  212. myset.GetFieldValue(_T("takestatus"), strValue); /* 取件状态:0未取,1已取 */
  213. lp->bTakestatus = _ttoi(strValue);
  214. myset.GetFieldValue(_T("taketime"), lp->strTaketime); /* 整个订单的取件时间 */
  215. myset.GetFieldValue(_T("opdel"), strValue); /* 原片删除状态 */
  216. lp->bOpdel = _ttoi(strValue);
  217. myset.GetFieldValue(_T("epdel"), strValue); /* 初修删除状态 */
  218. lp->bEpdel = _ttoi(strValue);
  219. myset.GetFieldValue(_T("fpdel"), strValue); /* 精修删除状态 */
  220. lp->bFpdel = _ttoi(strValue);
  221. myset.GetFieldValue(_T("dpdel"), strValue); /* 设计删除状态 */
  222. lp->bDpdel = _ttoi(strValue);
  223. myset.GetFieldValue(_T("opbdel"), strValue); /* 原片备份删除状态 */
  224. lp->bOpbdel = _ttoi(strValue);
  225. myset.GetFieldValue(_T("epbdel"), strValue); /* 初修备份删除状态 */
  226. lp->bEpbdel = _ttoi(strValue);
  227. myset.GetFieldValue(_T("fpbdel"), strValue); /* 精修备份删除状态 */
  228. lp->bFpbdel = _ttoi(strValue);
  229. myset.GetFieldValue(_T("dpbdel"), strValue); /* 设计备份删除状态 */
  230. lp->bDpbdel = _ttoi(strValue);
  231. myset.GetFieldValue(_T("opdeltm"), lp->strOpdeltm); /* 原片删除时间 */
  232. myset.GetFieldValue(_T("epdeltm"), lp->strEpdeltm); /* 初修删除时间 */
  233. myset.GetFieldValue(_T("fpdeltm"), lp->strFpdeltm); /* 精修删除时间 */
  234. myset.GetFieldValue(_T("dpdeltm"), lp->strDpdeltm); /* 设计删除时间 */
  235. myset.GetFieldValue(_T("opbdeltm"), lp->strOpbdeltm); /* 原片备份删除时间 */
  236. myset.GetFieldValue(_T("epbdeltm"), lp->strEpbdeltm); /* 初修备份删除时间 */
  237. myset.GetFieldValue(_T("fpbdeltm"), lp->strFpbdeltm); /* 精修备份删除时间 */
  238. myset.GetFieldValue(_T("dpbdeltm"), lp->strDpbdeltm); /* 设计备份删除时间 */
  239. //是否已取件
  240. if(!lp->bTakestatus)
  241. {
  242. delete lp;
  243. myset.MoveNext();
  244. continue;
  245. }
  246. //是否全部已删除
  247. if(lp->bOpdel && lp->bEpdel && lp->bFpdel && lp->bDpdel && lp->bOpbdel && lp->bEpbdel && lp->bFpbdel && lp->bDpbdel)
  248. {
  249. delete lp;
  250. myset.MoveNext();
  251. continue;
  252. }
  253. m_vPickupLog.push_back(lp);
  254. myset.MoveNext();
  255. }
  256. }
  257. catch (CException* e)
  258. {
  259. m_lock.unlock();
  260. CleareLog(m_vPickupLog);
  261. TCHAR szError[1024] = { 0 };
  262. e->GetErrorMessage(szError, 1024);
  263. WriteLogin(CString(szError));
  264. e->Delete();
  265. }
  266. m_lock.unlock();
  267. }
  268. void CPhotoDelMgr::FillData()
  269. {
  270. if(m_vPickupLog.size() == 0)
  271. return;
  272. m_DelList.DeleteAllItems();
  273. std::vector<LPSPICKUPINFO>::iterator iter = m_vPickupLog.begin();
  274. for(;iter != m_vPickupLog.end();)
  275. {
  276. LPSPICKUPINFO lp = (*iter);
  277. if(lp != NULL)
  278. {
  279. CString strName = GetBranchNameForDomain(&m_BranchArr, lp->strBranchid);
  280. int nRow = m_DelList.InsertItem(LVIF_TEXT|LVIF_PARAM, 0, strName,0,0,2,0);
  281. m_DelList.SetItemText(nRow, 1, lp->strBranchid);
  282. m_DelList.SetItemText(nRow, 2, lp->strOrder);
  283. m_DelList.SetItemText(nRow, 3, TEXT("已取"));
  284. m_DelList.SetItemText(nRow, 4, lp->strTaketime);
  285. }
  286. ++iter;
  287. }
  288. if(m_DelList.GetItemCount() == 0)
  289. return;
  290. //FillPhotoType(0);
  291. }
  292. /************************************************************************/
  293. /*
  294. 函数:FillPhotoType
  295. 描述:填充类型列表
  296. 参数:
  297. IN const int nIdx 数组索引
  298. 返回:
  299. */
  300. /************************************************************************/
  301. void CPhotoDelMgr::FillPhotoType(IN const int nIdx)
  302. {
  303. LPSPICKUPINFO lp = m_vPickupLog[nIdx];
  304. if(lp == NULL)
  305. return;
  306. m_PhotoTypeList.DeleteAllItems();
  307. int nRow = 0;
  308. nRow = m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, 0, _T("原片"),0,0,2,0);
  309. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bEpdel == TRUE)?_T("已删"):_T("未删")));
  310. m_PhotoTypeList.SetCheck(nRow, lp->bEpNeedDel);
  311. ++nRow;
  312. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("初修"),0,0,2,0);
  313. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bEpdel == TRUE)?_T("已删"):_T("未删")));
  314. m_PhotoTypeList.SetCheck(nRow, lp->bEpNeedDel);
  315. ++nRow;
  316. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("精修"),0,0,2,0);
  317. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bFpdel == TRUE)?_T("已删"):_T("未删")));
  318. m_PhotoTypeList.SetCheck(nRow, lp->bFpNeedDel);
  319. ++nRow;
  320. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("设计"),0,0,2,0);
  321. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bDpdel == TRUE)?_T("已删"):_T("未删")));
  322. m_PhotoTypeList.SetCheck(nRow, lp->bDpNeedDel);
  323. ++nRow;
  324. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("原片备份"),0,0,2,0);
  325. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bOpbdel == TRUE)?_T("已删"):_T("未删")));
  326. m_PhotoTypeList.SetCheck(nRow, lp->bOpbNeedDel);
  327. ++nRow;
  328. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("初修备份"),0,0,2,0);
  329. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bEpbdel == TRUE)?_T("已删"):_T("未删")));
  330. m_PhotoTypeList.SetCheck(nRow, lp->bEpbNeedDel);
  331. ++nRow;
  332. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("精修备份"),0,0,2,0);
  333. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bFpbdel == TRUE)?_T("已删"):_T("未删")));
  334. m_PhotoTypeList.SetCheck(nRow, lp->bFpbNeedDel);
  335. ++nRow;
  336. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, 0, _T("设计备份"),0,0,2,0);
  337. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bDpbdel == TRUE)?_T("已删"):_T("未删")));
  338. m_PhotoTypeList.SetCheck(nRow, lp->bDpbNeedDel);
  339. }
  340. /************************************************************************/
  341. /*
  342. 函数:FillPhotoType
  343. 描述:填充类型列表
  344. 参数:
  345. IN const LPSPICKUPINFO lp 取件信息
  346. 返回:
  347. */
  348. /************************************************************************/
  349. void CPhotoDelMgr::FillPhotoType(IN const LPSPICKUPINFO lp)
  350. {
  351. m_PhotoTypeList.DeleteAllItems();
  352. if(lp == NULL)
  353. return;
  354. int nRow = 0;
  355. nRow = m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, 0, _T("原片"),0,0,2,0);
  356. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bOpdel == TRUE)?_T("已删"):_T("未删")));
  357. m_PhotoTypeList.SetCheck(nRow, lp->bOpNeedDel);
  358. ++nRow;
  359. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("初修"),0,0,2,0);
  360. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bEpdel == TRUE)?_T("已删"):_T("未删")));
  361. m_PhotoTypeList.SetCheck(nRow, lp->bEpNeedDel);
  362. ++nRow;
  363. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("精修"),0,0,2,0);
  364. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bFpdel == TRUE)?_T("已删"):_T("未删")));
  365. m_PhotoTypeList.SetCheck(nRow, lp->bFpNeedDel);
  366. ++nRow;
  367. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("设计"),0,0,2,0);
  368. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bDpdel == TRUE)?_T("已删"):_T("未删")));
  369. m_PhotoTypeList.SetCheck(nRow, lp->bDpNeedDel);
  370. ++nRow;
  371. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("原片备份"),0,0,2,0);
  372. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bOpbdel == TRUE)?_T("已删"):_T("未删")));
  373. m_PhotoTypeList.SetCheck(nRow, lp->bOpbNeedDel);
  374. ++nRow;
  375. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("初修备份"),0,0,2,0);
  376. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bEpbdel == TRUE)?_T("已删"):_T("未删")));
  377. m_PhotoTypeList.SetCheck(nRow, lp->bEpbNeedDel);
  378. ++nRow;
  379. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("精修备份"),0,0,2,0);
  380. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bFpbdel == TRUE)?_T("已删"):_T("未删")));
  381. m_PhotoTypeList.SetCheck(nRow, lp->bFpbNeedDel);
  382. ++nRow;
  383. m_PhotoTypeList.InsertItem(LVIF_TEXT|LVIF_PARAM, nRow, _T("设计备份"),0,0,2,0);
  384. m_PhotoTypeList.SetItemText(nRow, 1, ((lp->bDpbdel == TRUE)?_T("已删"):_T("未删")));
  385. m_PhotoTypeList.SetCheck(nRow, lp->bDpbNeedDel);
  386. }
  387. /************************************************************************/
  388. /*
  389. 函数:GetTimeField
  390. 描述:获取日期限制条件
  391. 参数:
  392. OUT CString& strField 输出条件
  393. 返回:
  394. */
  395. /************************************************************************/
  396. int CPhotoDelMgr::GetTimeField(OUT CString& strField)
  397. {
  398. CTime startTime, endTime, currTime;
  399. CString strStart(_T("")), strEnd(_T(""));
  400. m_StartTime.GetTime(startTime);
  401. strStart = startTime.Format(_T("%Y-%m-%d"));
  402. m_EndTime.GetTime(endTime);
  403. strEnd = endTime.Format(_T("%Y-%m-%d"));
  404. currTime = CTime::GetCurrentTime();
  405. if(startTime > currTime || endTime > currTime)
  406. {
  407. MessageBox(_T("设置的日期不能比当前大"));
  408. return 0;
  409. }
  410. if(startTime > endTime)
  411. {
  412. MessageBox(_T("起始日期不能比结束日期"));
  413. return 0;
  414. }
  415. strField = _T("(taketime>='") + strStart + _T("' and taketime<='") + strEnd + _T("')");
  416. return 1;
  417. }
  418. /************************************************************************/
  419. /*
  420. 函数:CleareLog
  421. 描述:清除
  422. 参数:
  423. N std::vector<LPSPICKUPINFO>& vLog 清除已取件集
  424. 返回:
  425. */
  426. /************************************************************************/
  427. void CPhotoDelMgr::CleareLog(IN std::vector<LPSPICKUPINFO>& vLog)
  428. {
  429. std::vector<LPSPICKUPINFO>::iterator iter = vLog.begin();
  430. for(;iter != vLog.end();)
  431. {
  432. if((*iter) != NULL)
  433. delete (*iter);
  434. ++iter;
  435. }
  436. vLog.clear();
  437. }
  438. /************************************************************************/
  439. /*
  440. 函数:LoadDelPhotoModule
  441. 描述:加载删除管理模块
  442. 参数:
  443. IN HINSTANCE hInstance dll实例句柄
  444. 返回:1成功,0失败
  445. */
  446. /************************************************************************/
  447. int CPhotoDelMgr::LoadDelPhotoModule(IN HINSTANCE hInstance)
  448. {
  449. if(hInstance == NULL)
  450. return 0;
  451. HRESULT hr = NULL;
  452. if(hInstance && m_pFactory && m_pInterface)
  453. return 1;
  454. GetClassDelFileObject getDelFileObj = NULL;
  455. getDelFileObj = (GetClassDelFileObject)GetProcAddress(hInstance, "GetClassDelFileObject");
  456. if(getDelFileObj == NULL)
  457. {
  458. OutputDebugString(_T("打开GetClassDelFileObject失败\n"));
  459. return 0;
  460. }
  461. if(m_pFactory == NULL)
  462. {
  463. hr = getDelFileObj(CLSID_SC_DELFILESINTERFACE, IID_IClassFactory, (void**)&m_pFactory);
  464. if(FAILED(hr))
  465. {
  466. OutputDebugString(_T("获取CSC_DelfilesFactory指针失败\n"));
  467. return 0;
  468. }
  469. }
  470. if(m_pInterface == NULL)
  471. {
  472. hr = m_pFactory->CreateInstance(NULL, IID_IUnknown, (void**)&m_pInterface);
  473. if(FAILED(hr))
  474. {
  475. OutputDebugString(_T("创建ISC_DelFilesInterface失败\n"));
  476. m_pFactory->Release();
  477. return 0;
  478. }
  479. }
  480. return 1;
  481. }
  482. /************************************************************************/
  483. /*
  484. 函数:OnBnClickedSetAutodelBtn
  485. 描述:设置自动删除
  486. 参数:
  487. 返回:1成功,0失败
  488. */
  489. /************************************************************************/
  490. void CPhotoDelMgr::OnBnClickedSetAutodelBtn()
  491. {
  492. // TODO: 在此添加控件通知处理程序代码
  493. }
  494. /************************************************************************/
  495. /*
  496. 函数:OnBnClickedRefreshBtn
  497. 描述:刷新信息
  498. 参数:
  499. 返回:1成功,0失败
  500. */
  501. /************************************************************************/
  502. void CPhotoDelMgr::OnBnClickedRefreshBtn()
  503. {
  504. // TODO: 在此添加控件通知处理程序代码
  505. LoadListData();
  506. FillData();
  507. }
  508. /************************************************************************/
  509. /*
  510. 函数:OnNMClickDeltypeList
  511. 描述:点击取件列表
  512. 参数:
  513. 返回:
  514. */
  515. /************************************************************************/
  516. void CPhotoDelMgr::OnNMClickDelinfoList(NMHDR *pNMHDR, LRESULT *pResult)
  517. {
  518. LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
  519. // TODO: 在此添加控件通知处理程序代码
  520. m_PhotoTypeList.DeleteAllItems();
  521. if(pNMItemActivate->iItem != -1)
  522. {
  523. //选取才显示相片类型
  524. CString strDomain = m_DelList.GetItemText(pNMItemActivate->iItem, 1);
  525. CString strOrder = m_DelList.GetItemText(pNMItemActivate->iItem, 2);
  526. std::vector<LPSPICKUPINFO>::iterator it = m_vPickupLog.begin();
  527. for(;it != m_vPickupLog.end();)
  528. {
  529. if((*it) != NULL && (*it)->bTakestatus && (*it)->strBranchid == strDomain && (*it)->strOrder == strOrder)
  530. {
  531. m_lpCurrSel = (*it);
  532. FillPhotoType(m_lpCurrSel);
  533. break;
  534. }
  535. ++it;
  536. }
  537. }
  538. else
  539. m_lpCurrSel = NULL;
  540. if(m_lpCurrSel == NULL)
  541. {
  542. *pResult = 0;
  543. return;
  544. }
  545. //判断是否点击在listctrl的checkbox上
  546. DWORD dwPos = GetMessagePos();
  547. CPoint point(LOWORD(dwPos), HIWORD(dwPos));
  548. m_DelList.ScreenToClient(&point);
  549. LVHITTESTINFO lvinfo;
  550. lvinfo.pt = point;
  551. lvinfo.flags = LVHT_ABOVE;
  552. UINT nFlag;
  553. int nItem = m_DelList.HitTest(point, &nFlag);
  554. //判断是否点在checkbox上
  555. if(nFlag == LVHT_ONITEMSTATEICON)
  556. {
  557. //选取才显示相片类型
  558. BOOL bFind = FALSE;
  559. std::vector<LPSPICKUPINFO>::iterator iter = m_vCurrSelLog.begin();
  560. for(;iter != m_vCurrSelLog.end();)
  561. {
  562. //是否已存在当前选择并且勾选的记录集
  563. if(m_lpCurrSel->strBranchid == (*iter)->strBranchid && m_lpCurrSel->strOrder == (*iter)->strOrder)
  564. {
  565. //存在不添加
  566. bFind = TRUE;
  567. break;
  568. }
  569. ++iter;
  570. }
  571. //非为勾选
  572. if(!m_DelList.GetCheck(pNMItemActivate->iItem))
  573. {
  574. //勾选上,数组里没找到才添加
  575. if(!bFind)
  576. m_vCurrSelLog.push_back(m_lpCurrSel);
  577. }
  578. else
  579. {
  580. //去掉勾选,同时在当前选择数组里删除
  581. if(bFind)
  582. m_vCurrSelLog.erase(iter);
  583. }
  584. }
  585. *pResult = 0;
  586. }
  587. /************************************************************************/
  588. /*
  589. 函数:OnNMClickDeltypeList
  590. 描述:点击类型列表
  591. 参数:
  592. 返回:
  593. */
  594. /************************************************************************/
  595. void CPhotoDelMgr::OnNMClickDeltypeList(NMHDR *pNMHDR, LRESULT *pResult)
  596. {
  597. LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
  598. // TODO: 在此添加控件通知处理程序代码
  599. if(!m_lpCurrSel)
  600. {
  601. *pResult = 0;
  602. return;
  603. }
  604. //判断是否点击在listctrl的checkbox上
  605. DWORD dwPos = GetMessagePos();
  606. CPoint point(LOWORD(dwPos), HIWORD(dwPos));
  607. m_PhotoTypeList.ScreenToClient(&point);
  608. LVHITTESTINFO lvinfo;
  609. lvinfo.pt = point;
  610. lvinfo.flags = LVHT_ABOVE;
  611. UINT nFlag;
  612. int nItem = m_PhotoTypeList.HitTest(point, &nFlag);
  613. //判断是否点在checkbox上
  614. if(nFlag == LVHT_ONITEMSTATEICON)
  615. {
  616. BOOL bDeled = FALSE;
  617. //设置是否需要删除
  618. BOOL bNeedDel = !m_PhotoTypeList.GetCheck(pNMItemActivate->iItem);
  619. int nType = pNMItemActivate->iItem + 1;
  620. switch(nType)
  621. {
  622. case 1:
  623. //勾选了已删除过的相片类型无效
  624. if(bNeedDel && m_lpCurrSel->bOpdel)
  625. bDeled = TRUE;
  626. else
  627. m_lpCurrSel->bOpNeedDel = bNeedDel;
  628. break;
  629. case 2:
  630. if(bNeedDel && m_lpCurrSel->bEpdel)
  631. bDeled = TRUE;
  632. else
  633. m_lpCurrSel->bEpNeedDel = bNeedDel;
  634. break;
  635. case 3:
  636. if(bNeedDel && m_lpCurrSel->bFpdel)
  637. bDeled = TRUE;
  638. else
  639. m_lpCurrSel->bFpNeedDel = bNeedDel;
  640. break;
  641. case 4:
  642. if(bNeedDel && m_lpCurrSel->bDpdel)
  643. bDeled = TRUE;
  644. else
  645. m_lpCurrSel->bDpNeedDel = bNeedDel;
  646. break;
  647. case 5:
  648. if(bNeedDel && m_lpCurrSel->bOpbdel)
  649. bDeled = TRUE;
  650. else
  651. m_lpCurrSel->bOpbNeedDel = bNeedDel;
  652. break;
  653. case 6:
  654. if(bNeedDel && m_lpCurrSel->bEpbdel)
  655. bDeled = TRUE;
  656. else
  657. m_lpCurrSel->bEpbNeedDel = bNeedDel;
  658. break;
  659. case 7:
  660. if(bNeedDel && m_lpCurrSel->bFpbdel)
  661. bDeled = TRUE;
  662. else
  663. m_lpCurrSel->bFpbNeedDel = bNeedDel;
  664. break;
  665. case 8:
  666. if(bNeedDel && m_lpCurrSel->bDpbdel)
  667. bDeled = TRUE;
  668. else
  669. m_lpCurrSel->bDpbNeedDel = bNeedDel;
  670. break;
  671. }
  672. if(bDeled)
  673. {
  674. m_PhotoTypeList.SetCheck(pNMItemActivate->iItem, TRUE);
  675. MessageBox(_T("此选项的相片已删"));
  676. }
  677. }
  678. *pResult = 0;
  679. }
  680. /************************************************************************/
  681. /*
  682. 函数:AddDelData
  683. 描述:添加删除数据
  684. 参数:
  685. 返回:
  686. */
  687. /************************************************************************/
  688. void CPhotoDelMgr::AddDelData(IN LPCTSTR lpDomain, IN LPCTSTR lpOrder, IN const BYTE nType)
  689. {
  690. if(m_pInterface == NULL)
  691. return;
  692. if(lpDomain == NULL || (_tcscmp(lpDomain, _T("")) == 0) || lpOrder == NULL || (_tcscmp(lpOrder, _T("")) == 0))
  693. return;
  694. if(nType > 4)
  695. {
  696. std::vector<LPSBAKDIRINFO>::iterator it = m_vBackupDirInfos.begin();
  697. for(;it != m_vBackupDirInfos.end(); ++it)
  698. {
  699. LPSBAKDIRINFO lp = (*it);
  700. if(lp == NULL)
  701. continue;
  702. if(lp->byPhotoType != nType)
  703. continue;
  704. TCHAR szDir[MAX_PATH] = {0};
  705. memset(szDir, 0, sizeof(TCHAR)*MAX_PATH);
  706. #ifndef ENTERPRISE_VERSION
  707. if( _tcscmp(lpDomain, g_sdomain) == 0)
  708. _stprintf(szDir, _T("%s\\%s"), lp->strDir, lpOrder);
  709. #else
  710. //集团版
  711. //域名相同为本店订单,不同为分店
  712. if( _tcscmp(lpDomain, g_sdomain) == 0)
  713. _stprintf(szDir, _T("%s\\%s"), lp->strDir, lpOrder);
  714. else
  715. _stprintf(szDir, _T("%s\\%s\\%s"), lp->strDir, lpDomain, lpOrder);
  716. #endif //#ifndef ENTERPRISE_VERSION
  717. m_pInterface->AddDelData(lpDomain, lpOrder, szDir, nType, TRUE);
  718. }
  719. }
  720. else
  721. {
  722. //获取共享目录
  723. vector<TblNetShareInfo*>::iterator it = CBranchInfo::GetInstance()->m_TblNetShareInfo.begin();
  724. for(; it != CBranchInfo::GetInstance()->m_TblNetShareInfo.end(); it++)
  725. {
  726. TblNetShareInfo* p = (*it);
  727. if(p != NULL)
  728. {
  729. if (p->byPhotoType != nType)
  730. continue;
  731. if(_tcscmp(_T(""), p->szBranchId) == 0)
  732. continue;
  733. TCHAR szDir[MAX_PATH] = {0};
  734. memset(szDir, 0, sizeof(TCHAR)*MAX_PATH);
  735. #ifndef ENTERPRISE_VERSION
  736. if( _tcscmp(lpDomain, p->szBranchId) != 0)
  737. continue;
  738. _stprintf(szDir, _T("%s\\%s"), p->szShareDirectory, lpOrder);
  739. #else
  740. //集团版
  741. //域名相同为本店订单,不同为分店
  742. if( _tcscmp(lpDomain, p->szBranchId) == 0)
  743. _stprintf(szDir, _T("%s\\%s"), p->szShareDirectory, lpOrder);
  744. else
  745. _stprintf(szDir, _T("%s\\%s\\%s"), p->szShareDirectory, lpDomain, lpOrder);
  746. #endif //#ifndef ENTERPRISE_VERSION
  747. m_pInterface->AddDelData(lpDomain, lpOrder, szDir, nType, TRUE);
  748. }
  749. }
  750. }
  751. }
  752. /************************************************************************/
  753. /*
  754. 函数:GetBranchInfo
  755. 描述:获取分店信息
  756. 参数:
  757. OUT CArray<CStringArray, CStringArray>& arr 返回分店组
  758. 返回:
  759. */
  760. /************************************************************************/
  761. void CPhotoDelMgr::GetBranchInfo(OUT CArray<CStringArray, CStringArray>& arr)
  762. {
  763. #ifndef ENTERPRISE_VERSION
  764. arr.SetSize(1, 1);
  765. arr.ElementAt(0).Add(g_sdomain);
  766. arr.ElementAt(0).Add(g_localname);
  767. //添加4个空字符只是匹配branchinfo.dat读以的格式
  768. arr.ElementAt(0).Add(_T(""));
  769. arr.ElementAt(0).Add(_T(""));
  770. arr.ElementAt(0).Add(_T(""));
  771. arr.ElementAt(0).Add(_T(""));
  772. #else
  773. try
  774. {
  775. CFile fp;
  776. CString path = g_mainpath + _T("\\branchinfo.dat");
  777. if (::PathFileExists(path) == 0)
  778. return;
  779. fp.Open(path, CFile::modeRead);
  780. DWORD leng = fp.GetLength();
  781. if (leng < sizeof(DWORD) * 2)
  782. {
  783. fp.Close();
  784. return;
  785. }
  786. DWORD flag = 0;
  787. //fp.Seek(-sizeof(DWORD), CFile::end);
  788. fp.Seek(-(int)sizeof(DWORD), CFile::end);
  789. fp.Read(&flag, sizeof(DWORD));
  790. if (flag != 889900)
  791. {
  792. fp.Close();
  793. return;
  794. }
  795. fp.SeekToBegin();
  796. DWORD arraysize;
  797. fp.Read(&arraysize, sizeof(DWORD));
  798. if (arraysize > 20)
  799. {
  800. fp.Close();
  801. return;
  802. }
  803. BYTE *pData = new BYTE[leng - sizeof(DWORD)];
  804. fp.Read(pData, leng - sizeof(DWORD));
  805. fp.Close();
  806. CMemFile memfile;
  807. memfile.Attach(pData, leng - sizeof(DWORD));
  808. CArchive ar(&memfile, CArchive::load);
  809. arr.SetSize(arraysize, 1);
  810. for (int ii = 0; ii < arr.GetSize(); ii++)
  811. arr.ElementAt(ii).Serialize(ar);
  812. ar.Close();
  813. memfile.Detach();
  814. delete[]pData;
  815. }
  816. catch (...)
  817. {
  818. }
  819. #endif
  820. }
  821. /************************************************************************/
  822. /*
  823. 函数:GetBranchInfo
  824. 描述:获取分店信息
  825. 参数:
  826. IN CArray<CStringArray, CStringArray>& arr, 分店组
  827. IN const CString& strDomain 域名
  828. 返回:CString 店名
  829. */
  830. /************************************************************************/
  831. CString CPhotoDelMgr::GetBranchNameForDomain(IN CArray<CStringArray, CStringArray>* pArr, IN const CString& strDomain)
  832. {
  833. if(pArr == NULL)
  834. return _T("");
  835. for(int i=0; i<pArr->GetSize(); i++)
  836. {
  837. if(pArr->ElementAt(i).ElementAt(0) == strDomain)
  838. return pArr->ElementAt(i).ElementAt(1);
  839. }
  840. return _T("");
  841. }
  842. /************************************************************************/
  843. /*
  844. 函数:GetBranchInfo
  845. 描述:获取分店信息
  846. 参数:
  847. IN CArray<CStringArray, CStringArray>& arr, 分店组
  848. IN const CString& strName 店名
  849. 返回:CString 域名
  850. */
  851. /************************************************************************/
  852. CString CPhotoDelMgr::GetDomainForBranchName(IN CArray<CStringArray, CStringArray>* pArr, IN const CString& strName)
  853. {
  854. if(pArr == NULL)
  855. return _T("");
  856. for(int i=0; i<pArr->GetSize(); i++)
  857. {
  858. if(pArr->ElementAt(i).ElementAt(1) == strName)
  859. return pArr->ElementAt(i).ElementAt(1);
  860. }
  861. return _T("");
  862. }
  863. /************************************************************************/
  864. /*
  865. 函数:OpenDb
  866. 描述:连接数据库
  867. 参数:
  868. IN LPCTSTR lpConnect 连接数据库字串
  869. 返回:1成功,0失败
  870. */
  871. /************************************************************************/
  872. int CPhotoDelMgr::OpenDb(IN LPCTSTR lpConnect)
  873. {
  874. #ifdef _UNICODE
  875. if(lpConnect == NULL || wcscmp(lpConnect, _T("")) == 0)
  876. return 0;
  877. #else
  878. if(lpConnect == NULL || strcmp(lpConnect, "") == 0)
  879. return 0;
  880. #endif //#ifdef _UNICODE
  881. m_lock.lock();
  882. if(m_pdb)
  883. {
  884. m_lock.unlock();
  885. return 1;
  886. }
  887. #ifdef _UNICODE
  888. wcscpy(m_szConnect, lpConnect);
  889. #else
  890. strcpy(m_szConnect, lpConnect);
  891. #endif //#ifdef _UNICODE
  892. if (m_pdb == NULL)
  893. {
  894. try
  895. {
  896. m_pdb = new CDatabase;
  897. m_pdb->OpenEx(m_szConnect, CDatabase::noOdbcDialog);
  898. }
  899. catch (CDBException* e)
  900. {
  901. //m_strConnectErrorDescriptor = e->m_strError;
  902. m_lock.unlock();
  903. delete m_pdb;
  904. m_pdb = NULL;
  905. //OutputDebugString(e->m_strError);
  906. //LOG4C_NO_FILENUM((LOG_NOTICE,"打开数据库失败:%s",CW2A(e->m_strError)));
  907. #ifdef _DEBUG
  908. e->ReportError();
  909. #endif //#ifdef _DEBUG
  910. e->Delete();
  911. return FALSE;
  912. }
  913. }
  914. m_lock.unlock();
  915. return 1;
  916. }
  917. /************************************************************************/
  918. /*
  919. 函数:DelFinish
  920. 描述:删除完成回调函数
  921. 参数:
  922. LPVOID, 回调传回值
  923. LPVOID,
  924. LPVOID,
  925. LPVOID,
  926. LPVOID
  927. 返回:1成功,0失败
  928. */
  929. /************************************************************************/
  930. int CPhotoDelMgr::DelFinish(IN LPVOID lpParam1, IN LPVOID lpParam2, IN LPVOID lpParam3, IN LPVOID lpParam4, IN LPVOID lpParam5, IN LPVOID lpParam6)
  931. {
  932. AfxSetResourceHandle(g_Instance);
  933. return g_pPhotoDelMgr->DelFinishPro(lpParam1, lpParam2, lpParam3, lpParam4, lpParam5, lpParam6);
  934. }
  935. /************************************************************************/
  936. /*
  937. 函数:DelFinishPro
  938. 描述:删除完成回调函数
  939. 参数:
  940. LPVOID, 回调传回值
  941. LPVOID,
  942. LPVOID,
  943. LPVOID,
  944. LPVOID
  945. 返回:1成功,0失败
  946. */
  947. /************************************************************************/
  948. int CPhotoDelMgr::DelFinishPro(IN LPVOID lpParam1, IN LPVOID lpParam2, IN LPVOID lpParam3, IN LPVOID lpParam4, IN LPVOID lpParam5, IN LPVOID lpParam6)
  949. {
  950. BYTE byType = *((BYTE*)lpParam1);
  951. BOOL bSuccess = *((BOOL*)lpParam5);
  952. TCHAR szDomain[64] = {0};
  953. TCHAR szOrderNum[64] = {0};
  954. TCHAR szDir[MAX_PATH] = {0};
  955. _stprintf(szDomain, _T("%s") , (TCHAR*)lpParam2);
  956. _stprintf(szOrderNum, _T("%s") , (TCHAR*)lpParam3);
  957. _stprintf(szDir, _T("%s") , (TCHAR*)lpParam4);
  958. CString strShow = _T("");
  959. if(!bSuccess)
  960. {
  961. strShow.Format(_T("%s不存在订单%s,删除失败\n"), szDir, szOrderNum);
  962. SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 0);
  963. return 0;
  964. }
  965. CString updateSql = _T("");
  966. switch ( byType )
  967. {
  968. case 1:
  969. updateSql.Format(_T("update [PhotoManager] set [opdel] = 1,[opdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'"), szOrderNum, szDomain);
  970. break;
  971. case 2:
  972. updateSql.Format(_T("update [PhotoManager] set [epdel] = 1,[epdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'"), szOrderNum, szDomain);
  973. break;
  974. case 3:
  975. updateSql.Format(_T("update [PhotoManager] set [fpdel] = 1,[fpdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'"), szOrderNum, szDomain);
  976. break;
  977. case 4:
  978. updateSql.Format(_T("update [PhotoManager] set [dpdel] = 1,[dpdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'"), szOrderNum, szDomain);
  979. break;
  980. //////////////////////////////////////////////////////////////////////////
  981. case 5:
  982. updateSql.Format(_T("update [PhotoManager] set [opbdel] = 1,[opbdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'"), szOrderNum, szDomain);
  983. break;
  984. case 6:
  985. updateSql.Format(_T("update [PhotoManager] set [epbdel] = 1,[epbdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'"), szOrderNum, szDomain);
  986. break;
  987. case 7:
  988. updateSql.Format(_T("update [PhotoManager] set [fpbdel] = 1,[fpbdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'"), szOrderNum, szDomain);
  989. break;
  990. case 8:
  991. updateSql.Format(_T("update [PhotoManager] set [dpbdel] = 1,[dpbdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'"), szOrderNum, szDomain);
  992. break;
  993. default:
  994. break;
  995. }
  996. try
  997. {
  998. m_lock.lock();
  999. //更新相片管理表
  1000. m_pdb->ExecuteSQL(updateSql);
  1001. }
  1002. catch (CDBException * e)
  1003. {
  1004. m_lock.unlock();
  1005. WriteError(updateSql + "操作数据库失败" + e->m_strError);
  1006. #ifdef _DEBUG
  1007. e->ReportError();
  1008. #endif
  1009. e->Delete();
  1010. return 0;
  1011. }
  1012. m_lock.unlock();
  1013. //更新列表
  1014. std::vector<LPSPICKUPINFO>::iterator it = m_vCurrSelLog.begin();
  1015. for(;it != m_vCurrSelLog.end();)
  1016. {
  1017. LPSPICKUPINFO lp = (*it);
  1018. if(lp != NULL)
  1019. {
  1020. if(lp->strBranchid.CompareNoCase(szDomain) == 0 && lp->strOrder.CompareNoCase(szOrderNum) == 0)
  1021. {
  1022. strShow.Format(_T("%s的%s订单,已删除\n"), szDir, szOrderNum);
  1023. SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 0);
  1024. switch(byType)
  1025. {
  1026. case 1:
  1027. lp->bOpdel = TRUE;
  1028. lp->bOpNeedDel = FALSE;
  1029. break;
  1030. case 2:
  1031. lp->bEpdel = TRUE;
  1032. lp->bEpNeedDel = FALSE;
  1033. break;
  1034. case 3:
  1035. lp->bFpdel = TRUE;
  1036. lp->bFpNeedDel = FALSE;
  1037. break;
  1038. case 4:
  1039. lp->bDpdel = TRUE;
  1040. lp->bDpNeedDel = FALSE;
  1041. break;
  1042. case 5:
  1043. lp->bOpbdel = TRUE;
  1044. lp->bOpbNeedDel = FALSE;
  1045. break;
  1046. case 6:
  1047. lp->bEpbdel = TRUE;
  1048. lp->bEpbNeedDel = FALSE;
  1049. break;
  1050. case 7:
  1051. lp->bFpbdel = TRUE;
  1052. lp->bFpbNeedDel = FALSE;
  1053. break;
  1054. case 8:
  1055. lp->bDpbdel = TRUE;
  1056. lp->bDpbNeedDel = FALSE;
  1057. break;
  1058. }
  1059. FillPhotoType(lp);
  1060. int nCount = m_DelList.GetItemCount();
  1061. for(int i=0; i<nCount; i++)
  1062. {
  1063. if(m_DelList.GetCheck(i) == TRUE)
  1064. {
  1065. CString strDomain = m_DelList.GetItemText(i, 1);
  1066. CString strOrder = m_DelList.GetItemText(i, 2);
  1067. if(strDomain.CompareNoCase(szDomain) == 0 && strOrder.CompareNoCase(szOrderNum) == 0)
  1068. {
  1069. m_DelList.SetCheck(i, FALSE);
  1070. break;
  1071. }
  1072. }
  1073. }
  1074. break;
  1075. }
  1076. }
  1077. ++it;
  1078. }
  1079. return 1;
  1080. }
  1081. /************************************************************************/
  1082. /*
  1083. 函数:GetShareBackupDir
  1084. 描述:获取备份共享目录
  1085. 参数:
  1086. 返回:
  1087. */
  1088. /************************************************************************/
  1089. void CPhotoDelMgr::GetShareBackupDir()
  1090. {
  1091. ClearBakDirInfo();
  1092. CAutoLock autolock(&m_lock);
  1093. try
  1094. {
  1095. CRstversion rsSt;
  1096. rsSt.m_pDatabase = m_pdb;
  1097. rsSt.Open();
  1098. if (!rsSt.IsEOF())
  1099. {
  1100. CString strPath = _T("");
  1101. LPSBAKDIRINFO lp = new SBAKDIRINFO;
  1102. lp->byPhotoType = 5;
  1103. MakeBackupDir(lp->byPhotoType, rsSt.m_bakserver1, strPath);
  1104. lp->strDir = strPath;
  1105. m_vBackupDirInfos.push_back(lp);
  1106. lp = new SBAKDIRINFO;
  1107. lp->byPhotoType = 6;
  1108. MakeBackupDir(lp->byPhotoType, rsSt.m_bakserver2, strPath);
  1109. lp->strDir = strPath;
  1110. m_vBackupDirInfos.push_back(lp);
  1111. lp = new SBAKDIRINFO;
  1112. lp->byPhotoType = 7;
  1113. MakeBackupDir(lp->byPhotoType, rsSt.m_bakserver3, strPath);
  1114. lp->strDir = strPath;
  1115. m_vBackupDirInfos.push_back(lp);
  1116. lp = new SBAKDIRINFO;
  1117. lp->byPhotoType = 8;
  1118. MakeBackupDir(lp->byPhotoType, rsSt.m_bakserver4, strPath);
  1119. lp->strDir = strPath;
  1120. m_vBackupDirInfos.push_back(lp);
  1121. }
  1122. rsSt.Close();
  1123. }
  1124. catch (CException* e)
  1125. {
  1126. TCHAR szError[1024] = {0};
  1127. e->GetErrorMessage(szError, 1024);
  1128. CString strError = _T("");
  1129. strError.Format(_T("获取备份共享目录:%s"), szError);
  1130. WriteLogin(strError);
  1131. e->Delete();
  1132. }
  1133. }
  1134. void CPhotoDelMgr::ClearBakDirInfo()
  1135. {
  1136. std::vector<LPSBAKDIRINFO>::iterator it = m_vBackupDirInfos.begin();
  1137. for(; it != m_vBackupDirInfos.end(); ++it)
  1138. {
  1139. if((*it) != NULL)
  1140. delete (*it);
  1141. }
  1142. m_vBackupDirInfos.clear();
  1143. }
  1144. /************************************************************************/
  1145. /*
  1146. 函数:MakeBackupDir
  1147. 描述:生成备份目录
  1148. 参数:
  1149. IN CONST CString& str, // 可能是共享计算机名/目录/ip地址
  1150. OUT CString& strPath // 返回备份目录
  1151. 返回:
  1152. */
  1153. /************************************************************************/
  1154. void CPhotoDelMgr::MakeBackupDir(IN CONST int nType, IN CONST CString& str, OUT CString& strPath)
  1155. {
  1156. if(str == _T(""))
  1157. return;
  1158. CString strTemp = str;
  1159. strTemp.MakeLower();
  1160. CString strFolderName = _T("");
  1161. #ifdef CHILD_VERSION
  1162. switch(nType)
  1163. {
  1164. case 5:
  1165. strFolderName = _T("客户原片备份(儿童管理软件)$");
  1166. break;
  1167. case 6:
  1168. strFolderName = _T("修好的片备份(儿童管理软件)$");
  1169. break;
  1170. case 7:
  1171. strFolderName = _T("精修好的片备份(儿童管理软件)$");
  1172. break;
  1173. case 8:
  1174. strFolderName = _T("设计好的片备份(儿童管理软件)$");
  1175. break;
  1176. }
  1177. #else
  1178. switch(nType)
  1179. {
  1180. case 5:
  1181. strFolderName = _T("客户原片备份(管理软件)$");
  1182. break;
  1183. case 6:
  1184. strFolderName = _T("修好的片备份(管理软件)$");
  1185. break;
  1186. case 7:
  1187. strFolderName = _T("精修好的片备份(管理软件)$");
  1188. break;
  1189. case 8:
  1190. strFolderName = _T("设计好的片备份(管理软件)$");
  1191. break;
  1192. }
  1193. #endif
  1194. char szServer[50] = {0};
  1195. DWORD leng = 50;
  1196. ::GetComputerName(szServer, &leng);
  1197. CString strMainName = szServer;
  1198. strMainName.MakeLower();
  1199. if(strTemp.Find(strFolderName) != -1) //目录
  1200. {
  1201. if(strTemp.Find(_T(":\\")) != -1 || strTemp.Find(_T("\\\\")) != -1) // 绝对路径: D:\...\... (相对: \\...\...)
  1202. strPath = strTemp;
  1203. }
  1204. else if(strTemp.CompareNoCase(strMainName) == 0) //是否为计算机名
  1205. {
  1206. strMainName.TrimLeft(_T("\\\\"));
  1207. strMainName.TrimRight(_T("\\"));
  1208. strPath = _T("\\\\") + strMainName + _T("\\") + strFolderName;
  1209. }
  1210. else //ip地址
  1211. {
  1212. if(strTemp.GetLength() <= 16)
  1213. {
  1214. CString strip = strTemp;
  1215. int nCount = 0;
  1216. while(1)
  1217. {
  1218. int nPos = strip.Find(_T("."));
  1219. if(nPos == -1)
  1220. break;
  1221. strip = strip.Right((strip.GetLength() - 1) - nPos);
  1222. if(strip == _T(""))
  1223. break;
  1224. ++nCount;
  1225. }
  1226. if(nCount == 3)
  1227. strTemp = strPath;
  1228. }
  1229. }
  1230. if(strPath != _T(""))
  1231. strPath.MakeLower();
  1232. }
  1233. //提示信息
  1234. LRESULT CPhotoDelMgr::ShowPrompting(WPARAM wParam, LPARAM lParam)
  1235. {
  1236. int nShowType = lParam;
  1237. CString strMSG = *(CString*)wParam;
  1238. static CHARFORMAT cf;
  1239. cf.cbSize = sizeof(CHARFORMAT);
  1240. static COleDateTime oletime;
  1241. oletime=COleDateTime::GetCurrentTime();
  1242. strMSG.Format(_T("%s: #%s.\r"),oletime.Format(_T("%Y/%m/%d %H:%M:%S")),strMSG);
  1243. //strMSG += ".\r";
  1244. if ( nShowType == 1) // 错误信息提示
  1245. {
  1246. // 显示前,设置字体颜色;
  1247. //m_EditShow.GetDefaultCharFormat(cf);
  1248. m_DelTips.GetDefaultCharFormat(cf);
  1249. cf.dwMask=CFM_COLOR|CFM_FACE|CFM_SIZE|CFM_BOLD;
  1250. cf.dwEffects = (unsigned long)~(CFE_UNDERLINE | CFE_BOLD | CFE_AUTOCOLOR);
  1251. //cf.dwEffects ^= CFE_AUTOCOLOR;
  1252. cf.crTextColor = RGB(255, 0, 0);
  1253. cf.yHeight = 180;
  1254. memset(cf.szFaceName, 0, LF_FACESIZE);
  1255. // memcpy(cf.szFaceName, "楷体_GB2312", sizeof("楷体_GB2312"));
  1256. memcpy(cf.szFaceName, _T("宋体"), sizeof(_T("宋体")));
  1257. m_DelTips.SetSelectionCharFormat(cf);
  1258. m_DelTips.SetSel(-1,-1);
  1259. m_DelTips.ReplaceSel(strMSG);
  1260. }
  1261. else // 成功信息提示;
  1262. {
  1263. m_DelTips.GetDefaultCharFormat(cf);
  1264. cf.dwMask=CFM_COLOR|CFM_FACE|CFM_SIZE|CFM_BOLD;
  1265. cf.dwEffects = (unsigned long)~(CFE_UNDERLINE | CFE_BOLD | CFE_AUTOCOLOR);
  1266. //cf.dwEffects ^= CFE_AUTOCOLOR;
  1267. cf.crTextColor = RGB(0, 0, 255);
  1268. cf.yHeight = 180;
  1269. memset(cf.szFaceName, 0, LF_FACESIZE);
  1270. // memcpy(cf.szFaceName, "楷体_GB2312", sizeof("楷体_GB2312"));
  1271. memcpy(cf.szFaceName, _T("宋体"), sizeof(_T("宋体")));
  1272. m_DelTips.SetSelectionCharFormat(cf);
  1273. m_DelTips.SetSel(-1,-1);
  1274. m_DelTips.ReplaceSel(strMSG);
  1275. }
  1276. m_DelTips.PostMessage(WM_VSCROLL, SB_BOTTOM,0);
  1277. return 0;
  1278. }