public string State_ = ""; // 상태 #endregion Fields #region Methods //public enum NeedDBProc //{ // None = 0, // Insert,C // Update, //} public void CopyFrom(COrderData srcData) { //NeedDBProc_ = srcData.NeedDBProc_; //bFindInExcel_ = srcData.bFindInExcel_; //bProcessed_ = srcData.bProcessed_; seq_ = srcData.seq_; goodsSeq_ = srcData.goodsSeq_; memberSeq_ = srcData.memberSeq_; channelSeq_ = srcData.channelSeq_; authoritySeq_ = srcData.authoritySeq_; goodsCode_ = srcData.goodsCode_; goodsPassType = srcData.goodsCode_; goodsSendType_ = srcData.goodsSendType_; channelOrderCode_ = srcData.channelOrderCode_; orderReserveCode_ = srcData.orderReserveCode_; orderID_ = srcData.orderID_; orderSettlePrice_ = srcData.orderSettlePrice_; orderName_ = srcData.orderName_; orderPhone_ = srcData.orderPhone_; orderMethod_ = srcData.orderMethod_; orderEtc1_ = srcData.orderEtc1_; orderEtc2_ = srcData.orderEtc2_; orderTotalPrice_ = srcData.orderTotalPrice_; orderCouponPrice_ = srcData.orderCouponPrice_; orderPointPrice_ = srcData.orderPointPrice_; addPoint_ = srcData.addPoint_; State_ = srcData.State_; BuyDate_ = srcData.BuyDate_; ExData_GoodsName_ = srcData.ExData_GoodsName_; ExData_OptionOriginal_ = srcData.ExData_OptionOriginal_; BuyCount_ = srcData.BuyCount_; }
//public enum NeedDBProc //{ // None = 0, // Insert,C // Update, //} public void CopyFrom(COrderData srcData) { //NeedDBProc_ = srcData.NeedDBProc_; //bFindInExcel_ = srcData.bFindInExcel_; //bProcessed_ = srcData.bProcessed_; seq_ = srcData.seq_; goodsSeq_ = srcData.goodsSeq_; memberSeq_ = srcData.memberSeq_; channelSeq_ = srcData.channelSeq_; authoritySeq_ = srcData.authoritySeq_; goodsCode_ = srcData.goodsCode_; goodsPassType = srcData.goodsCode_; goodsSendType_ = srcData.goodsSendType_; channelOrderCode_ = srcData.channelOrderCode_; orderReserveCode_ = srcData.orderReserveCode_; orderID_ = srcData.orderID_; orderSettlePrice_ = srcData.orderSettlePrice_; orderName_ = srcData.orderName_; orderPhone_ = srcData.orderPhone_; orderMethod_ = srcData.orderMethod_; orderEtc1_ = srcData.orderEtc1_; orderEtc2_ = srcData.orderEtc2_; orderTotalPrice_ = srcData.orderTotalPrice_; orderCouponPrice_ = srcData.orderCouponPrice_; orderPointPrice_ = srcData.orderPointPrice_; addPoint_ = srcData.addPoint_; State_ = srcData.State_; BuyDate_ = srcData.BuyDate_; ExData_GoodsName_ = srcData.ExData_GoodsName_; ExData_OptionOriginal_ = srcData.ExData_OptionOriginal_; BuyCount_ = srcData.BuyCount_; }
protected override bool Internal_Excel_Parsing(ChannelGoodInfo pChannelGoodInfo) { try { if (GoodsDownInfo_.ContainsKey(pChannelGoodInfo.Goods_Code_) == false) { NewLogManager2.Instance.Log(string.Format("!! 상품 코드 엑셀이 없습니다. - {0}", pChannelGoodInfo.Goods_Code_)); return false; } string filepath = GoodsDownInfo_[pChannelGoodInfo.Goods_Code_]; Microsoft.Office.Interop.Excel.Application ap = null; Workbook wb = null; Worksheet ws = null; HKExcelHelper.GetWorkSheet(filepath, ref ap, ref wb, ref ws); Range tRange = null; string tempString = ""; string comparesitename = ""; Int32 nCurrentRow = LQCrawlerInfo_.ExData_Start_; Int32 ExData_Option = LQCrawlerInfo_.ExData_Option_; Int32 ExData_Coupncode = LQCrawlerInfo_.ExData_Coupncode_; Int32 ExData_Buyer = LQCrawlerInfo_.ExData_Buyer_; Int32 ExData_Cancel = LQCrawlerInfo_.ExData_Cancel_; Int32 ExData_Use = LQCrawlerInfo_.ExData_Use_; Int32 ExData_Buyphone = LQCrawlerInfo_.ExData_Buyphone_; Int32 ExData_Price = LQCrawlerInfo_.ExData_Price_; Int32 ExData_BuyDate = LQCrawlerInfo_.ExData_Buydate_; Int32 ExData_BuyCount = LQCrawlerInfo_.ExData_Count_; Int32 ExData_OpCount_1 = 5; Int32 ExData_OpCount_2 = 7; Int32 ExData_OpCount_3 = 9; Int32[] ArrBuyCnt = new Int32[3] { 0, 0, 0 }; if (nCurrentRow > 0) ProcessStateManager.Instance.NeedParsingCount_ += (ws.UsedRange.Rows.Count - (nCurrentRow - 1)); while (true) { try { tRange = ws.Cells[nCurrentRow, 1]; comparesitename = Convert.ToString(tRange.Value2); tRange = ws.Cells[nCurrentRow, ExData_Option]; if (tRange == null) break; tempString = tRange.Value2; if (tempString == null) { break; } COrderData pExcelData = new COrderData(); pExcelData.channelSeq_ = LQCrawlerInfo_.Channel_Idx_; pExcelData.goodsSeq_ = pChannelGoodInfo.Idx_; pExcelData.ExData_Option_ = tempString; pExcelData.ExData_OptionOriginal_ = tempString; pExcelData.ExData_GoodsName_ = pExcelData.ExData_GoodsNick_ = pChannelGoodInfo.GoodsName_; pExcelData.goodsCode_ = pChannelGoodInfo.Goods_Code_; tRange = ws.Cells[nCurrentRow, ExData_Coupncode]; if (tRange == null) break; pExcelData.channelOrderCode_ = Convert.ToString(tRange.Value2); if (pExcelData.channelOrderCode_ == null) break; pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Replace("'", ""); pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Trim(); // 공백 제거 tRange = ws.Cells[nCurrentRow, ExData_Buyer]; pExcelData.orderName_ = Convert.ToString(tRange.Value2); if (pExcelData.orderName_ == null) pExcelData.orderName_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Cancel]; pExcelData.ExData_Cancel_ = tRange.Value2; if (pExcelData.ExData_Cancel_ == null) pExcelData.ExData_Cancel_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Use]; pExcelData.ExData_Use_ = tRange.Value2; if (pExcelData.ExData_Use_ == null) pExcelData.ExData_Use_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Buyphone]; pExcelData.orderPhone_ = Convert.ToString(tRange.Value2); if (pExcelData.orderPhone_ == null) pExcelData.orderPhone_ = ""; pExcelData.orderPhone_ = pExcelData.orderPhone_.Replace("'", ""); if (ExData_Price != 0) { tRange = ws.Cells[nCurrentRow, ExData_Price]; if (tRange.Value2 != null) {// 돈에 , 가 있으면 제거하자. tempString = Convert.ToString(tRange.Value2); tempString = tempString.Replace(",", ""); pExcelData.orderSettlePrice_ = Convert.ToInt32(tempString); } } tRange = ws.Cells[nCurrentRow, ExData_BuyDate]; pExcelData.BuyDate_ = Convert.ToString(tRange.Value2); pExcelData.BuyDate_ = pExcelData.BuyDate_.Replace('.', '-'); if (ExData_BuyCount != 0)// 구매갯수를 따로 뽑아야 하는 채널에서만 { tRange = ws.Cells[nCurrentRow, ExData_BuyCount]; pExcelData.BuyCount_ = Convert.ToInt32(tRange.Value2); } tRange = ws.Cells[nCurrentRow, ExData_OpCount_1]; ArrBuyCnt[0] = Convert.ToInt32(tRange.Value2); tRange = ws.Cells[nCurrentRow, ExData_OpCount_2]; ArrBuyCnt[1] = Convert.ToInt32(tRange.Value2); tRange = ws.Cells[nCurrentRow, ExData_OpCount_3]; ArrBuyCnt[2] = Convert.ToInt32(tRange.Value2); SplitDealAndInsertExcelData(pExcelData, ArrBuyCnt); //SplitDealAndInsertExcelData(pExcelData, comparesitename); } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("엑셀 파싱 에러 : {0}", ex.Message)); break; //nCurrentRow++; //continue; } ProcessStateManager.Instance.CurParsingCount_++; nCurrentRow++; } wb.Close(false, Type.Missing, Type.Missing); ap.Quit(); Marshal.FinalReleaseComObject(ws); Marshal.FinalReleaseComObject(wb); Marshal.FinalReleaseComObject(ap); ws = null; wb = null; ap = null; GC.Collect(); } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("Error protected override bool Internal_Excel_Parsing - {0}", ex.Message)); return false; } return true; }
protected override Int32 SplitDealAndInsertExcelData(COrderData pExcelData, string comparesitename = "") { if (string.IsNullOrEmpty(comparesitename) == true) return 0; if (comparesitename.IndexOf(str_sitecompare_) < 0) return 0; string optionstring = Regex.Replace(pExcelData.ExData_Option_, @" ", ""); Int32 nBuycount = 0; Int32 nTotalcount = 0; string optionnickname = ""; pExcelData.ExData_GoodsNick_ = Convert.ToString(Regex.Replace(pExcelData.ExData_GoodsName_, @"[^a-zA-Z0-9가-힣]", "")); string regstring = @"(?<OptionName>\S+)/\S+/\d+개|(?<OptionName>\S+)/\d+개"; // 옵션명 개수 빼기 Regex re = new Regex(regstring, RegexOptions.IgnoreCase | RegexOptions.Singleline); MatchCollection oe = re.Matches(optionstring); optionnickname = Convert.ToString(Regex.Replace(oe[0].Groups["OptionName"].Value, @"[^a-zA-Z0-9가-힣]", "")); nBuycount = pExcelData.BuyCount_; for (Int32 i = 0; i < nBuycount; i++) { nTotalcount++; COrderData tempExcelData = new COrderData(); tempExcelData.CopyFrom(pExcelData); tempExcelData.ExData_GoodsName_ = pExcelData.ExData_GoodsName_; tempExcelData.ExData_GoodsNick_ = pExcelData.ExData_GoodsNick_; tempExcelData.ExData_Option_ = optionnickname; tempExcelData.channelOrderCode_ = string.Format("{0}_{1}", pExcelData.channelOrderCode_, nTotalcount); if (Excel_List_.ContainsKey(tempExcelData.channelOrderCode_) == false) { Excel_List_.Add(tempExcelData.channelOrderCode_, tempExcelData); } } return nTotalcount; }
// 하나의 딜을 여러개로 나눌 필요가 있는가? 있다면 나눠서 넣고 없다면 그냥 넣는다. protected override Int32 SplitDealAndInsertExcelData(COrderData pExcelData, string comparesitename = "") { pExcelData.ExData_Option_ = Regex.Replace(pExcelData.ExData_Option_, @"[^a-zA-Z0-9가-힣]", ""); pExcelData.ExData_GoodsNick_ = Regex.Replace(pExcelData.ExData_GoodsName_, @"[^a-zA-Z0-9가-힣]", ""); Int32 nTotalcount = 0; Int32 nBuycount = 0; nBuycount = pExcelData.BuyCount_; for (int i = 0; i < nBuycount; i++) { nTotalcount++; COrderData tempExcelData = new COrderData(); tempExcelData.CopyFrom(pExcelData); tempExcelData.ExData_Option_ = pExcelData.ExData_Option_; tempExcelData.ExData_GoodsName_ = pExcelData.ExData_GoodsName_; tempExcelData.ExData_GoodsNick_ = pExcelData.ExData_GoodsNick_; tempExcelData.channelOrderCode_ = string.Format("{0}_{1}", pExcelData.channelOrderCode_, nTotalcount); if (Excel_List_.ContainsKey(tempExcelData.channelOrderCode_) == false) { Excel_List_.Add(tempExcelData.channelOrderCode_, tempExcelData); } } return 1; }
public static bool Select_tblOrder_With_UID(SqlHelper dbHelper, Int32 xchannelSeq, Int32 xGoodsSeq , /*string sDate, string eDate,*/ref Dictionary<string, COrderData> pList) { bool bResult = true; try { Dictionary<string, object> argdic = new Dictionary<string, object>(); argdic.Add("xChannelSeq", xchannelSeq); //argdic.Add("xAuthorityLoginSeq", xGoodsSeq); argdic.Add("xGoodsSeq", xGoodsSeq); //argdic.Add("xSDate", sDate); //argdic.Add("xEDate", eDate); //\MySqlDataReader datareader = dbHelper.call_proc("spNewTestSelectOrderInfo", argdic); MySqlDataReader datareader = dbHelper.call_proc("spNewSelectOrderInfo", argdic); while (datareader.Read()) { COrderData pOrderData = new COrderData(); pOrderData.seq_ = Convert.ToInt64(datareader["seq"]); pOrderData.goodsSeq_ = Convert.ToInt32(datareader["goodsSeq"]); pOrderData.memberSeq_ = Convert.ToInt32(datareader["memberSeq"]); pOrderData.channelSeq_ = Convert.ToInt32(datareader["channelSeq"]); pOrderData.channelOrderCode_ = Convert.ToString(datareader["channelOrderCode"]); pOrderData.orderReserveCode_ = Convert.ToString(datareader["orderCode"]); pOrderData.orderID_ = Convert.ToString(datareader["orderId"]); pOrderData.goodsCode_ = Convert.ToString(datareader["ChGoodsCode"]); pOrderData.orderSettlePrice_ = Convert.ToInt32(datareader["orderSettlePrice"]); pOrderData.orderName_ = Convert.ToString(datareader["orderName"]); pOrderData.orderPhone_ = Convert.ToString(datareader["orderPhone"]); //pOrderData.orderMethod_ = Convert.ToString(datareader["orderMethod"]); pOrderData.State_ = Convert.ToString(datareader["State"]); if (pList.ContainsKey(pOrderData.channelOrderCode_) == false) { pList.Add(pOrderData.channelOrderCode_, pOrderData); } else { NewLogManager2.Instance.Log(string.Format("Error Select_tblOrder_With_UID Same OrderCode {0}", pOrderData.channelOrderCode_)); } } datareader.Close(); datareader.Dispose(); datareader = null; } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("Error bool Select_tblOrder_With_UID - {0}", ex.Message)); bResult = false; } return bResult; }
bool Use_Deal(COrderData pCOrderData) { try { string couponcode = pCOrderData.channelOrderCode_; Int32 LIndex = couponcode.LastIndexOf('_'); couponcode = couponcode.Substring(0, LIndex); string delivery_no = ""; string ticket_code = ""; DateTime eDateTime = Convert.ToDateTime(pCOrderData.BuyDate_); DateTime sDateTime = eDateTime.AddDays(-7); string eDate = string.Format("{0:D4}{1:D2}{2:D2}", eDateTime.Year, eDateTime.Month, eDateTime.Day); string sDate = string.Format("{0:D4}{1:D2}{2:D2}", sDateTime.Year, sDateTime.Month, sDateTime.Day); // 웹 호출을 통해서 사용처리한다. string useurl = LQCrawlerInfo_.UseUserUrl_; string useparam = LQCrawlerInfo_.UseUserParam_; string[] cpcodeArray = couponcode.Split('_'); couponcode = cpcodeArray[0]; GetUseTicketInfo(couponcode, sDate, eDate, ref ticket_code, ref delivery_no); useparam = useparam.Replace("{Delivery_no}", delivery_no); useparam = useparam.Replace("{GoodsCode}", couponcode); useparam = useparam.Replace("{TicketCode}", ticket_code); HttpWebResponse pResponse = HKHttpWebRequest.ReqHttpRequest("POST", useurl, useparam, Cookie_); if (pResponse == null) return false; TextReader r = (TextReader)new StreamReader(pResponse.GetResponseStream()); string htmlBuffer = r.ReadToEnd(); if (htmlBuffer.IndexOf(LQCrawlerInfo_.UseUserCheck_) < 0) { NewLogManager2.Instance.Log(htmlBuffer); return false; } } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("Error bool Use_Deal(COrderData pCOrderData) - {0}", ex.Message)); return false; } return true; }
protected override Int32 SplitDealAndInsertExcelData(COrderData pExcelData, string comparesitename = "") { string optionstring = pExcelData.ExData_Option_; Int32 nBuycount = 0; Int32 nTotalcount = 0; string optionname = ""; string regstring = @"(?<OptionName>\S+)-\S+개"; optionstring = optionstring.Replace(" ", ""); pExcelData.ExData_GoodsNick_ = Regex.Replace(pExcelData.ExData_GoodsName_, @"[^a-zA-Z0-9가-힣]", ""); Regex re = new Regex(regstring, RegexOptions.IgnoreCase | RegexOptions.Singleline); MatchCollection oe = re.Matches(optionstring); foreach (Match mat in oe) { GroupCollection group = mat.Groups; optionname = Convert.ToString(group["OptionName"].Value); optionname = Regex.Replace(optionname, @"[^a-zA-Z0-9가-힣]", ""); nBuycount = pExcelData.BuyCount_; for (Int32 i = 0; i < nBuycount; i++) { nTotalcount++; COrderData tempExcelData = new COrderData(); tempExcelData.CopyFrom(pExcelData); tempExcelData.ExData_Option_ = optionname; tempExcelData.ExData_GoodsName_ = pExcelData.ExData_GoodsName_; tempExcelData.ExData_GoodsNick_ = pExcelData.ExData_GoodsNick_; tempExcelData.channelOrderCode_ = string.Format("{0}_{1}", pExcelData.channelOrderCode_, nTotalcount); if (Excel_List_.ContainsKey(tempExcelData.channelOrderCode_) == false) { Excel_List_.Add(tempExcelData.channelOrderCode_, tempExcelData); } } } return nTotalcount; }
// 엑셀 데이터 리스트에 넣기 protected abstract Int32 SplitDealAndInsertExcelData(COrderData pExcelData, string comparesitename = "");
protected override bool Internal_Excel_Parsing(ChannelGoodInfo pChannelGoodInfo) { try { if (actionType != "insert") { return true; } if (GoodsDownInfo_.ContainsKey(pChannelGoodInfo.Goods_Code_) == false) { NewLogManager2.Instance.Log(string.Format("!! 상품 코드 엑셀이 없습니다. - {0}", pChannelGoodInfo.Goods_Code_)); return false; } DateTime dtNow = BaseChannel.dtnow; DateTime beforeData = dtNow.AddDays(-2); string sData = string.Format("{0}-{1}-{2} {3}:{4}:{5}", beforeData.Year, beforeData.Month, beforeData.Day, "00","00","00"); string filepath = GoodsDownInfo_[pChannelGoodInfo.Goods_Code_]; Microsoft.Office.Interop.Excel.Application ap = null; Workbook wb = null; Worksheet ws = null; HKExcelHelper.GetWorkSheet(filepath, ref ap, ref wb, ref ws); Range tRange = null; string tempString = ""; string comparesitename = ""; Int32 nCurrentRow = LQCrawlerInfo_.ExData_Start_; Int32 ExData_Option = LQCrawlerInfo_.ExData_Option_; Int32 ExData_Coupncode = LQCrawlerInfo_.ExData_Coupncode_; Int32 ExData_Buyer = LQCrawlerInfo_.ExData_Buyer_; Int32 ExData_Cancel = LQCrawlerInfo_.ExData_Cancel_; Int32 ExData_Use = LQCrawlerInfo_.ExData_Use_; Int32 ExData_Buyphone = LQCrawlerInfo_.ExData_Buyphone_; Int32 ExData_Price = LQCrawlerInfo_.ExData_Price_; Int32 ExData_BuyDate = LQCrawlerInfo_.ExData_Buydate_; Int32 ExData_BuyCount = LQCrawlerInfo_.ExData_Count_; if (nCurrentRow > 0) ProcessStateManager.Instance.NeedParsingCount_ += (ws.UsedRange.Rows.Count - (nCurrentRow - 1)); while (true) { try { tRange = ws.Cells[nCurrentRow, 1]; comparesitename = Convert.ToString(tRange.Value2); tRange = ws.Cells[nCurrentRow, ExData_Option]; if (tRange == null) break; tempString = tRange.Value2; if (tempString == null) { break; } COrderData pExcelData = new COrderData(); pExcelData.channelSeq_ = LQCrawlerInfo_.Channel_Idx_; pExcelData.goodsSeq_ = pChannelGoodInfo.Idx_; pExcelData.ExData_Option_ = tempString; pExcelData.ExData_OptionOriginal_ = tempString; pExcelData.ExData_GoodsName_ = pExcelData.ExData_GoodsNick_ = pChannelGoodInfo.GoodsName_; pExcelData.goodsCode_ = pChannelGoodInfo.Goods_Code_; tRange = ws.Cells[nCurrentRow, ExData_BuyDate]; pExcelData.BuyDate_ = Convert.ToString(tRange.Value2); pExcelData.BuyDate_ = pExcelData.BuyDate_.Replace('.', '-'); pExcelData.BuyDate_ = Regex.Replace(pExcelData.BuyDate_, @"^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})$", @"$1-$2-$3 $4:$5:$6"); DateTime excelDate = DateTime.Parse(pExcelData.BuyDate_); int checkTime = DateTime.Compare(beforeData, excelDate); //비교날짜보다 더 크면 리스트에 추가하지 말고 넘어간다 if(checkTime > 0) { ProcessStateManager.Instance.PassParsingCount_++; nCurrentRow++; continue; } tRange = ws.Cells[nCurrentRow, ExData_Coupncode]; if (tRange == null) break; pExcelData.channelOrderCode_ = Convert.ToString(tRange.Value2); if (pExcelData.channelOrderCode_ == null) break; pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Replace("'", ""); pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Trim(); // 공백 제거 tRange = ws.Cells[nCurrentRow, ExData_Buyer]; pExcelData.orderName_ = Convert.ToString(tRange.Value2); if (pExcelData.orderName_ == null) pExcelData.orderName_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Cancel]; pExcelData.ExData_Cancel_ = tRange.Value2; if (pExcelData.ExData_Cancel_ == null) pExcelData.ExData_Cancel_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Use]; pExcelData.ExData_Use_ = tRange.Value2; if (pExcelData.ExData_Use_ == null) pExcelData.ExData_Use_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Buyphone]; pExcelData.orderPhone_ = Convert.ToString(tRange.Value2); if (pExcelData.orderPhone_ == null) pExcelData.orderPhone_ = ""; pExcelData.orderPhone_ = pExcelData.orderPhone_.Replace("'", ""); if (ExData_Price != 0) { tRange = ws.Cells[nCurrentRow, ExData_Price]; if (tRange.Value2 != null && tRange.Value2 != "") {// 돈에 , 가 있으면 제거하자. tempString = Convert.ToString(tRange.Value2); tempString = tempString.Replace(",", ""); pExcelData.orderSettlePrice_ = Convert.ToInt32(tempString); } } if (ExData_BuyCount != 0)// 구매갯수를 따로 뽑아야 하는 채널에서만 { tRange = ws.Cells[nCurrentRow, ExData_BuyCount]; pExcelData.BuyCount_ = Convert.ToInt32(tRange.Value2); } SplitDealAndInsertExcelData(pExcelData, comparesitename); } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("엑셀 파싱 에러 : {0}", ex.Message)); break; //nCurrentRow++; //continue; } ProcessStateManager.Instance.CurParsingCount_++; nCurrentRow++; } wb.Close(false, filepath, Type.Missing); ap.Quit(); Marshal.FinalReleaseComObject(tRange); Marshal.FinalReleaseComObject(ws); Marshal.FinalReleaseComObject(wb); Marshal.FinalReleaseComObject(ap); tRange = null; ws = null; wb = null; ap = null; GC.Collect(); } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("Error protected override bool Internal_Excel_Parsing - {0}", ex.Message)); return false; } return true; }
protected override Int32 SplitDealAndInsertExcelData(COrderData pExcelData, string comparesitename = "") { string optionstring = pExcelData.ExData_Option_; Int32 nBuycount = 0; Int32 nTotalcount = 0; string optionname = ""; pExcelData.ExData_GoodsNick_ = Convert.ToString(Regex.Replace(pExcelData.ExData_GoodsName_, @"[^a-zA-Z0-9가-힣]", "")); string regstring = ""; if (pExcelData.authoritySeq_ != 26) { regstring = @"(?<OptionName>\S+),\S+수량(?<Count>\d+)개"; } else { regstring = @"(?<OptionName>\S+)"; } string[] optionarray = System.Text.RegularExpressions.Regex.Split(optionstring, "(],)"); foreach (string curoption in optionarray) { optionstring = curoption.Replace("],", "]"); optionstring = optionstring.Replace(" ", ""); Regex re = new Regex(regstring, RegexOptions.IgnoreCase | RegexOptions.Singleline); MatchCollection oe = re.Matches(optionstring); foreach (Match mat in oe) { GroupCollection group = mat.Groups; optionname = Convert.ToString(group["OptionName"].Value); optionname = Regex.Replace(optionname, @"[^a-zA-Z0-9가-힣]", ""); if (pExcelData.BuyCount_ != 0) { nBuycount = pExcelData.BuyCount_; } else { nBuycount = Convert.ToInt32(group["Count"].Value); } for (Int32 i = 0; i < nBuycount; i++) { nTotalcount++; COrderData tempExcelData = new COrderData(); tempExcelData.CopyFrom(pExcelData); tempExcelData.ExData_Option_ = optionname; tempExcelData.ExData_GoodsName_ = pExcelData.ExData_GoodsName_; tempExcelData.ExData_GoodsNick_ = pExcelData.ExData_GoodsNick_; tempExcelData.channelOrderCode_ = string.Format("{0}_{1}", pExcelData.channelOrderCode_, nTotalcount); if (Excel_List_.ContainsKey(tempExcelData.channelOrderCode_) == false) { Excel_List_.Add(tempExcelData.channelOrderCode_, tempExcelData); } } } } return nTotalcount; }
protected override bool Internal_Excel_Parsing(ChannelGoodInfo pChannelGoodInfo) { try { if (GoodsDownInfo_.ContainsKey(pChannelGoodInfo.Goods_Code_) == false) { NewLogManager2.Instance.Log(string.Format("!! 상품 코드 엑셀이 없습니다. - {0}", pChannelGoodInfo.Goods_Code_)); return false; } string filepath = GoodsDownInfo_[pChannelGoodInfo.Goods_Code_]; Microsoft.Office.Interop.Excel.Application ap = null; Workbook wb = null; Worksheet ws = null; HKExcelHelper.GetWorkSheet(filepath, ref ap, ref wb, ref ws); Range tRange = null; string tempString = ""; Int32 nCurrentRow = LQCrawlerInfo_.ExData_Start_; Int32 ExData_Option = LQCrawlerInfo_.ExData_Option_; Int32 ExData_Coupncode = LQCrawlerInfo_.ExData_Coupncode_; Int32 ExData_Buyer = LQCrawlerInfo_.ExData_Buyer_; Int32 ExData_Cancel = LQCrawlerInfo_.ExData_Cancel_; Int32 ExData_Use = LQCrawlerInfo_.ExData_Use_; Int32 ExData_Buyphone = LQCrawlerInfo_.ExData_Buyphone_; Int32 ExData_Price = LQCrawlerInfo_.ExData_Price_; Int32 ExData_BuyDate = LQCrawlerInfo_.ExData_Buydate_; Int32 ExData_BuyCount = LQCrawlerInfo_.ExData_Count_; Int32 ExData_GoodsName = LQCrawlerInfo_.ExData_GoodName_; if (nCurrentRow > 0) ProcessStateManager.Instance.NeedParsingCount_ += (ws.UsedRange.Rows.Count - (nCurrentRow - 1)); string beforeOrderName = ""; // 이전 주문자명 string beforeOrderPhone = ""; // 이전 주문 전화번호 string beforeOrderDate = ""; // 이전 주문 날짜 while (true) { try { tRange = ws.Cells[nCurrentRow, ExData_Option]; if (tRange == null) break; tempString = tRange.Value2; if (tempString == null) { break; } COrderData pExcelData = new COrderData(); pExcelData.channelSeq_ = LQCrawlerInfo_.Channel_Idx_; // 채널 시퀀스 pExcelData.goodsSeq_ = -1; // 상품 시퀀스 pExcelData.ExData_Option_ = tempString; // 옵션명 pExcelData.ExData_OptionOriginal_ = tempString; // 원래 옵션명 tRange = ws.Cells[nCurrentRow, ExData_GoodsName]; pExcelData.ExData_GoodsName_ = tRange.Value2; pExcelData.ExData_GoodsNick_ = Regex.Replace(pExcelData.ExData_GoodsName_, @"[^a-zA-Z0-9가-힣]", ""); tRange = ws.Cells[nCurrentRow, ExData_Coupncode]; if (tRange == null) break; pExcelData.channelOrderCode_ = Convert.ToString(tRange.Value2); if (pExcelData.channelOrderCode_ == null) break; pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Replace("'", ""); pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Trim(); tRange = ws.Cells[nCurrentRow, ExData_Buyer]; pExcelData.orderName_ = Convert.ToString(tRange.Value2); if (pExcelData.orderName_ == null) { pExcelData.orderName_ = beforeOrderName; } else { beforeOrderName = pExcelData.orderName_; } tRange = ws.Cells[nCurrentRow, ExData_Cancel]; pExcelData.ExData_Cancel_ = tRange.Value2; if (pExcelData.ExData_Cancel_ == null) pExcelData.ExData_Cancel_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Use]; pExcelData.ExData_Use_ = tRange.Value2; if (pExcelData.ExData_Use_ == null) pExcelData.ExData_Use_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Buyphone]; pExcelData.orderPhone_ = Convert.ToString(tRange.Value2); if (pExcelData.orderPhone_ == null) { pExcelData.orderPhone_ = beforeOrderPhone; } else { beforeOrderPhone = pExcelData.orderPhone_; } pExcelData.orderPhone_ = pExcelData.orderPhone_.Replace("'", ""); if (ExData_Price != 0) { tRange = ws.Cells[nCurrentRow, ExData_Price]; if (tRange.Value2 != null) { tempString = Convert.ToString(tRange.Value2); tempString = tempString.Replace(",", ""); pExcelData.orderSettlePrice_ = Convert.ToInt32(tempString); } } tRange = ws.Cells[nCurrentRow, ExData_BuyDate]; if (tRange.Value2 == null) { pExcelData.BuyDate_ = beforeOrderDate; } else { double temp = Convert.ToDouble(tRange.Value2); DateTime dta = DateTime.FromOADate(temp); pExcelData.BuyDate_ = dta.ToString("u"); pExcelData.BuyDate_ = pExcelData.BuyDate_.Replace("Z", ""); beforeOrderDate = pExcelData.BuyDate_; } if (ExData_BuyCount != 0) { tRange = ws.Cells[nCurrentRow, ExData_BuyCount]; pExcelData.BuyCount_ = Convert.ToInt32(tRange.Value2); } SplitDealAndInsertExcelData(pExcelData); } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("엑셀 파싱 에러 : {0}", ex.Message)); break; //nCurrentRow++; //continue; } ProcessStateManager.Instance.CurParsingCount_++; nCurrentRow++; } wb.Close(false, Type.Missing, Type.Missing); ap.Quit(); Marshal.FinalReleaseComObject(ws); Marshal.FinalReleaseComObject(wb); Marshal.FinalReleaseComObject(ap); ws = null; wb = null; ap = null; GC.Collect(); } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("Error public override bool Internal_Excel_Parsing - {0}", ex.Message)); return false; } return true; }
// 하나의 딜을 여러개로 나눌 필요가 있는가? 있다면 나눠서 넣고 없다면 그냥 넣는다. protected override Int32 SplitDealAndInsertExcelData(COrderData pExcelData, string comparesitename = "") { pExcelData.ExData_Option_ = Regex.Replace(pExcelData.ExData_Option_, @"[^a-zA-Z0-9가-힣]", ""); pExcelData.ExData_GoodsNick_ = Regex.Replace(pExcelData.ExData_GoodsName_, @"[^a-zA-Z0-9가-힣]", ""); string regstring = @"(?<CouponCode>\S+)\(\S+\)"; Int32 nTotalcount = 0; Int32 nBuycount = 0; string[] splitArray = pExcelData.channelOrderCode_.Split(','); nBuycount = splitArray.Length; for (int i = 0; i < nBuycount; i++) { string couponString = splitArray[i].Replace(" ", ""); Regex re = new Regex(regstring, RegexOptions.IgnoreCase | RegexOptions.Singleline); MatchCollection oe = re.Matches(couponString); foreach (Match mat in oe) { GroupCollection group = mat.Groups; couponString = Convert.ToString(group["CouponCode"].Value); nTotalcount++; COrderData tempExcelData = new COrderData(); tempExcelData.CopyFrom(pExcelData); tempExcelData.ExData_Option_ = pExcelData.ExData_Option_; tempExcelData.ExData_GoodsName_ = pExcelData.ExData_GoodsName_; tempExcelData.ExData_GoodsNick_ = pExcelData.ExData_GoodsNick_; tempExcelData.channelOrderCode_ = couponString; if (Excel_List_.ContainsKey(tempExcelData.channelOrderCode_) == false) { Excel_List_.Add(tempExcelData.channelOrderCode_, tempExcelData); } } } return 1; }
// 하나의 딜을 여러개로 나눌 필요가 있는가? 있다면 나눠서 넣고 없다면 그냥 넣는다. protected override Int32 SplitDealAndInsertExcelData(COrderData pExcelData, string comparesitename = "") { pExcelData.ExData_Option_ = Regex.Replace(pExcelData.ExData_Option_, @"[^a-zA-Z0-9가-힣]", ""); Excel_List_.Add(pExcelData.channelOrderCode_, pExcelData); return 1; }
protected override bool Internal_Excel_Parsing(ChannelGoodInfo pChannelGoodInfo) { try { if (GoodsDownInfo_.ContainsKey(pChannelGoodInfo.Goods_Code_) == false) { NewLogManager2.Instance.Log(string.Format("!! 상품 코드 엑셀이 없습니다. - {0}", pChannelGoodInfo.Goods_Code_)); return false; } string filepath = GoodsDownInfo_[pChannelGoodInfo.Goods_Code_]; Microsoft.Office.Interop.Excel.Application ap = null; Workbook wb = null; Worksheet ws = null; HKExcelHelper.GetWorkSheet(filepath, ref ap, ref wb, ref ws); Range tRange = null; string tempString = ""; string comparesitename = ""; Int32 nCurrentRow = LQCrawlerInfo_.ExData_Start_; Int32 ExData_Option = LQCrawlerInfo_.ExData_Option_; Int32 ExData_Coupncode = LQCrawlerInfo_.ExData_Coupncode_; Int32 ExData_Buyer = LQCrawlerInfo_.ExData_Buyer_; Int32 ExData_Cancel = LQCrawlerInfo_.ExData_Cancel_; Int32 ExData_Use = LQCrawlerInfo_.ExData_Use_; Int32 ExData_Buyphone = LQCrawlerInfo_.ExData_Buyphone_; Int32 ExData_Price = LQCrawlerInfo_.ExData_Price_; Int32 ExData_BuyDate = LQCrawlerInfo_.ExData_Buydate_; Int32 ExData_BuyCount = LQCrawlerInfo_.ExData_Count_; Int32 ExData_GoodsName = LQCrawlerInfo_.ExData_GoodName_; Int32 ExData_Coupncode2 = 4; // 11번가만 가지고 있는 주문 순번 쿠폰 코드가 고유하지 않아서 이것과 합쳐야만 고유해진다. ProcessStateManager.Instance.NeedParsingCount_ += ws.UsedRange.Rows.Count; while (true) { try { tRange = ws.Cells[nCurrentRow, 1]; comparesitename = Convert.ToString(tRange.Value2); tRange = ws.Cells[nCurrentRow, ExData_Option]; if (tRange == null) break; tempString = tRange.Value2; if (tempString == null) { break; } COrderData pExcelData = new COrderData(); pExcelData.channelSeq_ = LQCrawlerInfo_.Channel_Idx_; pExcelData.goodsSeq_ = pChannelGoodInfo.Idx_; pExcelData.ExData_Option_ = tempString; pExcelData.ExData_OptionOriginal_ = tempString; tRange = ws.Cells[nCurrentRow, ExData_GoodsName]; pExcelData.ExData_GoodsName_ = tRange.Value2; pExcelData.ExData_GoodsNick_ = Regex.Replace(pExcelData.ExData_GoodsName_, @"[^a-zA-Z0-9가-힣]", ""); tRange = ws.Cells[nCurrentRow, ExData_Coupncode]; if (tRange == null) break; pExcelData.channelOrderCode_ = Convert.ToString(tRange.Value2); if (pExcelData.channelOrderCode_ == null) break; pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Replace("'", ""); pExcelData.channelOrderCode_ = pExcelData.channelOrderCode_.Trim(); // 공백 제거 tRange = ws.Cells[nCurrentRow, ExData_Coupncode2]; if (tRange == null) break; pExcelData.channelOrderCode_ = string.Format("{0}_{1}", pExcelData.channelOrderCode_, Convert.ToString(tRange.Value2)); tRange = ws.Cells[nCurrentRow, ExData_Buyer]; pExcelData.orderName_ = Convert.ToString(tRange.Value2); if (pExcelData.orderName_ == null) pExcelData.orderName_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Cancel]; pExcelData.ExData_Cancel_ = tRange.Value2; if (pExcelData.ExData_Cancel_ == null) pExcelData.ExData_Cancel_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Use]; pExcelData.ExData_Use_ = tRange.Value2; if (pExcelData.ExData_Use_ == null) pExcelData.ExData_Use_ = ""; tRange = ws.Cells[nCurrentRow, ExData_Buyphone]; pExcelData.orderPhone_ = Convert.ToString(tRange.Value2); if (pExcelData.orderPhone_ == null) pExcelData.orderPhone_ = ""; pExcelData.orderPhone_ = pExcelData.orderPhone_.Replace("'", ""); if (ExData_Price != 0) { tRange = ws.Cells[nCurrentRow, ExData_Price]; if (tRange.Value2 != null) {// 돈에 , 가 있으면 제거하자. tempString = Convert.ToString(tRange.Value2); tempString = tempString.Replace(",", ""); pExcelData.orderSettlePrice_ = Convert.ToInt32(tempString); } } tRange = ws.Cells[nCurrentRow, ExData_BuyDate]; if (LQCrawlerInfo_.Channel_Idx_ == 9 || LQCrawlerInfo_.Channel_Idx_ == 14 || LQCrawlerInfo_.Channel_Idx_ == 15 || LQCrawlerInfo_.Channel_Idx_ == 18) { double temp = Convert.ToDouble(tRange.Value2); DateTime dta = DateTime.FromOADate(temp); pExcelData.BuyDate_ = dta.ToString("u"); pExcelData.BuyDate_ = pExcelData.BuyDate_.Replace("Z", ""); } else { pExcelData.BuyDate_ = Convert.ToString(tRange.Value2); } pExcelData.BuyDate_ = pExcelData.BuyDate_.Replace('/', '-'); if (ExData_BuyCount != 0)// 구매갯수를 따로 뽑아야 하는 채널에서만 { tRange = ws.Cells[nCurrentRow, ExData_BuyCount]; pExcelData.BuyCount_ = Convert.ToInt32(tRange.Value2); } SplitDealAndInsertExcelData(pExcelData, comparesitename); } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("엑셀 파싱 에러 : {0}", ex.Message)); break; //nCurrentRow++; //continue; } ProcessStateManager.Instance.CurParsingCount_++; nCurrentRow++; } wb.Close(false, Type.Missing, Type.Missing); ap.Quit(); Marshal.FinalReleaseComObject(ws); Marshal.FinalReleaseComObject(wb); Marshal.FinalReleaseComObject(ap); ws = null; wb = null; ap = null; GC.Collect(); } catch (System.Exception ex) { NewLogManager2.Instance.Log(string.Format("Error override bool Internal_Excel_Parsing - {0}", ex.Message)); return false; } return true; }
void SplitDealAndInsertExcelData(COrderData pExcelData, Int32[] arr) { pExcelData.ExData_Option_ = Regex.Replace(pExcelData.ExData_Option_, @"[^a-zA-Z0-9가-힣]", ""); Int32 nTotalcount = 0; for (Int32 i = 0; i < arr.Length; i++) { for (Int32 j = 0; j < arr[i]; j++) { nTotalcount++; COrderData tempExcelData = new COrderData(); tempExcelData.CopyFrom(pExcelData); tempExcelData.channelOrderCode_ = string.Format("{0}_{1}", pExcelData.channelOrderCode_, nTotalcount); tempExcelData.ExData_Option_ = pExcelData.ExData_Option_; tempExcelData.ExData_GoodsName_ = pExcelData.ExData_GoodsName_; tempExcelData.ExData_GoodsNick_ = pExcelData.ExData_GoodsNick_; tempExcelData.channelOrderCode_ = string.Format("{0}_{1}", pExcelData.channelOrderCode_, nTotalcount); if (Excel_List_.ContainsKey(tempExcelData.channelOrderCode_) == false) { Excel_List_.Add(tempExcelData.channelOrderCode_, tempExcelData); } } } }
protected override Int32 SplitDealAndInsertExcelData(COrderData pExcelData, string comparesitename = "") { pExcelData.ExData_Option_ = Regex.Replace(pExcelData.ExData_Option_, @"[^a-zA-Z0-9가-힣]", ""); pExcelData.ExData_GoodsNick_ = Regex.Replace(pExcelData.ExData_GoodsNick_, @"[^a-zA-Z0-9가-힣]", ""); if (Excel_List_.ContainsKey(pExcelData.channelOrderCode_) == false) { Excel_List_.Add(pExcelData.channelOrderCode_, pExcelData); } return 1; }