private bool Fresh(ref _GoodsFreshStr goodInfo, GoodsFresh objFresh,bool bSynFlag) { //http://m.pconline.com.cn/member/product/products_onsell.htm?&pageSize=60&pageNo=1 goodInfo.strModifyStatus = ""; goodInfo.bModify = false; string strError = ""; if (bSynFlag) { goodInfo.strSynStatus = "登录中..."; } else{ goodInfo.strFreshStatus = "登录中..."; } ShowInfo(goodInfo); bool bRet = false; string strId = ""; #if __PAOPAO string strDirect = System.AppDomain.CurrentDomain.BaseDirectory + "pic"; if (!Directory.Exists(strDirect)) { Directory.CreateDirectory(strDirect); } string strFile = string.Format("{0}\\{1}.bmp", strDirect, goodInfo.strAcc); bRet = objFresh.GetImage(strFile, out strError); string strCheckCode = ""; if (bRet) { lock(m_hLockTable) { GetCodeHandler _myInvoke = new GetCodeHandler(GetCode); strCheckCode = (string)this.Invoke(_myInvoke, new object[] { strFile }); if (strCheckCode.Length != 4) { goodInfo.strFreshStatus = "验证码错误"; ShowInfo(goodInfo); return false; } } } else { goodInfo.strFreshStatus = strError; ShowInfo(goodInfo); return false; } bRet = objFresh.PaoPaoLogin(goodInfo.strAcc, goodInfo.strPwd, strCheckCode, out strError); #else bRet = objFresh.Login(goodInfo.strAcc, goodInfo.strPwd, false, out strId); #endif if (!bRet) { //strError = "登录失败"; if (bSynFlag) { goodInfo.strSynStatus = strError; } else { goodInfo.strFreshStatus = strError; } ShowLogString(strError); ShowInfo(goodInfo); return false; } goodInfo.strId = strId; int iCurPage = 0; int iRet = -1; int iFreshCount; int iGoodCount; bool bBreak = false; if (bSynFlag) { goodInfo.iSynchronizeCount = 0; goodInfo.strSynStatus = "正在同步..."; } else { goodInfo.strFreshStatus = "正在刷新..."; } ShowInfo(goodInfo); Hashtable hWaitTable = new Hashtable(); Hashtable hFailTable = new Hashtable(); //修改失败的价格列表 Hashtable hSynTable = new Hashtable(); //同步列表 Hashtable hSynDuplicateTable = new Hashtable(); //同步列表 int iNetErrorCount = 0; goodInfo.iFreshSucNumCount = 0; Hashtable hFreshTableEx = new Hashtable(); Hashtable hFreshTable = new Hashtable(); _GoodsModifyStr objStruFresh = new _GoodsModifyStr(); if (!bSynFlag) { DataContrl.GetSynData(goodInfo.strAcc, ref hFreshTableEx); if (hFreshTable == null || hFreshTableEx.Count < 1) { ShowLogString("商品未同步,请先同步商品信息再进行刷新"); goodInfo.strFreshStatus = "商品未同步,请先同步商品信息再进行刷新"; return false; } foreach (DictionaryEntry dEntry in hFreshTableEx) { hFreshTable.Add(dEntry.Key, dEntry.Value); } goodInfo.iFreshNumCount = hFreshTable.Count; } iGoodCount = 0; ShowInfo(goodInfo); while (m_bFresh && !bBreak) { objStruFresh = null; if (bSynFlag) { iRet = objFresh.Synchronize(out strError, out iFreshCount, out iGoodCount, out bBreak, iCurPage + 1, ref iNetErrorCount, ref hSynTable, ref hSynDuplicateTable, goodInfo.strId); } else { iFreshCount = 1; foreach (DictionaryEntry dEntry in hFreshTable) { objStruFresh = (_GoodsModifyStr)dEntry.Value; break; } if (objStruFresh != null) { iRet = objFresh.FreshYouNet(objStruFresh.strNo2, out strError, ref iNetErrorCount, goodInfo.strId); } else { goodInfo.strFreshStatus = "刷新完成"; iFreshCount = 0; bBreak = true; } //iRet = objFresh.Fresh(out strError, out iFreshCount, out iGoodCount, out bBreak, iCurPage + 1, false, ref hWaitTable, ref hFailTable, ref iNetErrorCount, goodInfo.strId); } //成功 if (iRet == 0) { if (objStruFresh != null) { hFreshTable.Remove(objStruFresh.strNo); } if (bSynFlag) { goodInfo.iFreshNumCount = iGoodCount; goodInfo.iFreshSucNumCount = hSynTable.Count; goodInfo.iSynchronizeCount = hSynTable.Count; goodInfo.iFreshNumCount = hSynTable.Count; } else goodInfo.iFreshSucNumCount += iFreshCount; if (bSynFlag) { goodInfo.strSynStatus = "正在同步"; } else { goodInfo.strFreshStatus = "正在刷新"; } if (bBreak) { if (bSynFlag) { goodInfo.strSynStatus = "同步完成"; } else { goodInfo.strFreshStatus = "刷新完成"; } } } else if (iRet == -1) { goodInfo.strFreshStatus = strError; goodInfo.strSynStatus = strError; goodInfo.strModifyStatus = strError; bRet = false; ShowLogString(string.Format("{0} {1}", iCurPage, strError)); break; } else { goodInfo.strFreshStatus = strError; goodInfo.strSynStatus = strError; goodInfo.strModifyStatus = strError; goodInfo.strFreshStatus = strError; ShowLogString(string.Format("{0} {1}",iCurPage,strError)); } ShowInfo(goodInfo); if (iRet != -3) { iCurPage++; } if (bBreak) { if (bSynFlag) { //保存到文件 StringBuilder strBuilder = new StringBuilder(); _GoodsModifyStr objStru = new _GoodsModifyStr(); string[] keyArray = new string[hSynTable.Count]; string[] valueArray = new string[hSynTable.Count]; hSynTable.Keys.CopyTo(keyArray, 0); int i=0; foreach (string skey in keyArray) { objStru = (_GoodsModifyStr)hSynTable[skey]; valueArray[i] = objStru.strNoEx; i++; } Array.Sort(valueArray, keyArray); foreach (string skey in keyArray) { objStru = (_GoodsModifyStr)hSynTable[skey]; strBuilder.Append(string.Format("{0},{1},{2},{3},{4},{5},\r\n", objStru.strNo, objStru.strNoEx, objStru.fPrice, objStru.strNo2, objStru.strUrl, objStru.strName)); } string strDirectory = System.AppDomain.CurrentDomain.BaseDirectory + "synfile"; string strDirectoryXls = System.AppDomain.CurrentDomain.BaseDirectory + "xlsfile"; WriteInfo(strDirectory, strBuilder, goodInfo.strAcc); SaveToExcel(strDirectoryXls, hSynTable, goodInfo.strAcc); if (hSynDuplicateTable.Count > 0) { StringBuilder strBuilderEx = new StringBuilder(); string[] keyArrayDup = new string[hSynDuplicateTable.Count]; string[] valueArrayDup = new string[hSynDuplicateTable.Count]; hSynDuplicateTable.Keys.CopyTo(keyArrayDup, 0); int ii = 0; foreach (string skey in keyArrayDup) { objStru = (_GoodsModifyStr)hSynDuplicateTable[skey]; valueArrayDup[ii] = objStru.strNoEx; ii++; } Array.Sort(valueArrayDup, keyArrayDup); foreach (string skey in keyArrayDup) { objStru = (_GoodsModifyStr)hSynDuplicateTable[skey]; strBuilder.Append(string.Format("{0},{1},{2},{3},{4},{5},\r\n", objStru.strNo, objStru.strNoEx, objStru.fPrice, objStru.strNo2, objStru.strUrl, objStru.strName)); } WriteInfo(strDirectory, strBuilderEx, goodInfo.strAcc + "_duplicate"); SaveToExcel(strDirectoryXls, hSynDuplicateTable, goodInfo.strAcc + "_duplicate"); } } break; } if (bSynFlag) { Thread.Sleep(500); } else{ Thread.Sleep(30); } } return true; }