public bool UpdateShop(string name, Alading.HtmlEditor.Editor editor) { Alading.Entity.Shop focusShop = gridViewShop.GetFocusedRow() as Alading.Entity.Shop; if (focusShop != null) { string session = SystemHelper.GetSessionKey(focusShop.nick); string value = editor.BodyHtml; ShopRsp shopRsp = TopService.ShopUpdate(session, name, value); ShopRsp getShopRsp = TopService.ShopGet(focusShop.nick); if (getShopRsp != null) { if (name == "desc") { focusShop.desc = getShopRsp.Shop.Description; } else { focusShop.bulletin = getShopRsp.Shop.Bulletin; } focusShop.sid = getShopRsp.Shop.Sid; focusShop.modified = DateTime.Parse(getShopRsp.Shop.Modified); ShopService.UpdateShop(focusShop); } return(true); } else { XtraMessageBox.Show("请先选择数据", Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } }
/// <summary> /// 从淘宝获取最新数据 /// </summary> /// <param name="pageno"></param> /// <param name="pageSize"></param> /// <param name="totalResults"></param> /// <param name="tradeRefundList"></param> public void GetNewTradeRefund(string session, int pageno, int pageSize, out int totalResults , List <Alading.Entity.TradeRefund> tradeRefundList, List <string> refundIDList) { TradeReq tradeReq = new TradeReq(); tradeReq.PageNo = pageno; //页数 tradeReq.PageSize = pageSize; //每页的数量 string fields = "refund_id,order_status,modified"; //API参数 TradeRsp tradeRsp = TopService.RefundsReceiveGet(session, fields, tradeReq); /*未获取到数据*/ if (tradeRsp == null || tradeRsp.TotalResults == 0) { totalResults = 0; return; } totalResults = tradeRsp.TotalResults; foreach (Alading.Taobao.Entity.Refund refund in tradeRsp.Refunds.Refund) { Alading.Entity.TradeRefund newTradeRefund = new Alading.Entity.TradeRefund(); newTradeRefund.refund_id = refund.Rid; //退货单号 newTradeRefund.order_status = refund.OrderStatus == null ? string.Empty : refund.OrderStatus; //退款对应的订单交易状态 newTradeRefund.modified = DateTime.Parse(refund.Modified); //对象修改时间 tradeRefundList.Add(newTradeRefund); refundIDList.Add(refund.Rid); } }
/// <summary> /// 获取退货单的详细信息并保存到数据库 /// </summary> /// <param name="tradeRefundList"></param> /// <param name="refundIDList"></param> public void GetNewRefundDetail(string session, List <Alading.Entity.TradeRefund> tradeRefundList, List <string> refundIDList) { //存放数据库中不存在的退货详细信息 List <Alading.Entity.TradeRefund> newRefundList = new List <Alading.Entity.TradeRefund>(); List <Alading.Entity.TradeRefund> oldRefundList = TradeRefundService.GetTradeRefund(refundIDList); foreach (Alading.Entity.TradeRefund tradeRefund in tradeRefundList) { Alading.Entity.TradeRefund oldRefund = oldRefundList.Find(c => c.refund_id == tradeRefund.refund_id); if (oldRefund != null)//数据库中已存在此数据 { continue; } else//不存在则取淘宝网获取 { TradeRsp tradeRsp = TopService.RefundGet(session, tradeRefund.refund_id); /*未获取到数据*/ if (tradeRsp == null) { continue; } oldRefund = new TradeRefund(); oldRefund.modified = tradeRefund.modified; oldRefund.order_status = tradeRefund.order_status; TradeRefundCopyData(oldRefund, tradeRsp.Refund); newRefundList.Add(oldRefund); } } TradeRefundService.AddTradeRefund(newRefundList); }
private void btnStart_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { try { if (string.IsNullOrEmpty(ccbNick.Text)) { XtraMessageBox.Show("请选择店铺!"); return; } #region 买家自定义类目 //读取买家自定义类目列表中被选中的子节点 string sellercids = string.Empty; foreach (TreeListNode node in treeListSellerCat.Nodes) { if (node.HasChildren) { foreach (TreeListNode childNode in node.Nodes) { if (childNode.CheckState == CheckState.Checked) { sellercids += string.Format("{0},", childNode.Tag.ToString()); } } } else { if (node.CheckState == CheckState.Checked) { sellercids += string.Format("{0},", node.Tag.ToString()); } } } itemreq.SellerCids = sellercids.TrimEnd(','); #endregion /*在这里判断stockItem中是否存在此商品,不存在要生成一个*/ string session = SystemHelper.GetSessionKey(ccbNick.Text); ItemRsp addRsp = TopService.ItemAdd(session, itemreq); //上传成功执行 if (addRsp != null && addRsp.Item != null) { ItemRsp rsp = TopService.ItemGet(session, ccbNick.Text, addRsp.Item.Iid, null); Alading.Entity.Item item = new Alading.Entity.Item(); if (rsp.Item == null) { rsp.Item = itemreq as Taobao.Entity.Item; } UIHelper.ItemCopyData(item, rsp.Item); ItemService.AddItem(item); } } catch (Exception ex) { XtraMessageBox.Show(ex.Message); } }
/// <summary> /// 更新商家编码,返回失败的商品,同时置成功商品的IsUpdate为TRUE,标识已同步到淘宝 /// </summary> /// <param name="nick"></param> /// <param name="itemdic"></param> /// <returns></returns> private Dictionary <string, string> UpdateOuterId(string nick, Dictionary <string, string> itemdic, DoWorkEventArgs e) { Dictionary <string, string> failedItemsDic = new Dictionary <string, string>(); List <string> iidlist = itemdic.Keys.ToList(); ItemReq req = new ItemReq(); ItemRsp response = new ItemRsp(); string session = SystemHelper.GetSessionKey(nick); float n = iidlist.Count; int temp = 0;//作用是避免进度值propgress没有改变时得重复报告 for (int i = 0; i < n; i++) { if (workerUpdate.CancellationPending) { e.Cancel = true; break; } if (workerUpdate.CancellationPending) { e.Cancel = true; break; } string iid = iidlist[i]; req.Iid = iid; req.OuterId = itemdic.SingleOrDefault(it => it.Key == iid).Value; try { response = TopService.ItemUpdate(session, req); if (response.Item == null) { failedItemsDic.Add(req.Iid, req.OuterId); } else { ItemService.UpdateItemIsUpdate(iid, true); } } catch (System.Exception ex) { failedItemsDic.Add(req.Iid, req.OuterId); continue; } //进度报告 int propgress = (int)((float)(i + 1) / n * 100); if (propgress > temp) { workerUpdate.ReportProgress(propgress, null); } temp = propgress; } return(failedItemsDic); }
/// <summary> /// 点击更新店铺 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void barBtnDownload_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { WaitDialogForm waitFrm = null; try { Alading.Entity.Shop focusShop = gridViewShop.GetFocusedRow() as Alading.Entity.Shop; if (focusShop == null)//未选中 { XtraMessageBox.Show("请先选中更新的店铺", Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } waitFrm = new WaitDialogForm(Constants.WAIT_LOAD_DATA); ShopRsp shopRsp = TopService.ShopGet(focusShop.nick); string session = SystemHelper.GetSessionKey(focusShop.nick); UserRsp userRsp = TopService.UserGet(session, focusShop.nick, string.Empty); Alading.Entity.Shop shop = new Alading.Entity.Shop(); if (shopRsp == null || userRsp == null)//从淘宝网未获取到数据 { waitFrm.Close(); XtraMessageBox.Show("未获取到数据", Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } ShopCopyData((int)shopShowType, shop, shopRsp.Shop, userRsp.User); Alading.Entity.Shop oldShop = ShopService.GetShopByNick(shop.nick); if (oldShop == null)//不存在时添加 { ShopService.AddShop(shop); } else//存在时更新 { ShopService.UpdateShop(shop); } LoadShop(shopShowType);//重新刷新界面 waitFrm.Close(); XtraMessageBox.Show("更新成功", Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { waitFrm.Close(); XtraMessageBox.Show(ex.Message, Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information); } }
void worker_DoWork(object sender, DoWorkEventArgs e) { List <string> nicklist = (List <string>)e.Argument; int n = nicklist.Count; int temp = 0;//作用是避免进度值propgress没有改变时得重复报告 BackgroundWorker worker = (BackgroundWorker)sender; for (int i = 0; i < n; i++) { if (worker.CancellationPending) { e.Cancel = true; break; } try { string session = SystemHelper.GetSessionKey(nicklist[i]); ShopRsp shopRsp = TopService.ShopGet(nicklist[i]); UserRsp userRsp = TopService.UserGet(session, nicklist[i], string.Empty); if (shopRsp != null || userRsp != null) { Alading.Entity.Shop shop = new Alading.Entity.Shop(); UIHelper.ShopCopyData(shop, shopRsp.Shop, userRsp.User); ShopService.UpdateShop(shop); } //进度报告 int propgress = (int)((float)(i + 1) / n * 100); if (propgress > temp) { MyInfo myInfo = new MyInfo(); myInfo.nick = nicklist[i]; myInfo.isSucceed = true; worker.ReportProgress(propgress, myInfo); } temp = propgress; } catch (System.Exception ex) { MyInfo myInfo = new MyInfo(); myInfo.nick = nicklist[i]; myInfo.isSucceed = false; myInfo.msg = ex.Message; worker.ReportProgress(0, myInfo); } } }
/// <summary> /// 将上架计划列表中的宝贝更新到淘宝,返回成功宝贝的iid /// </summary> /// <param name="itemdic"></param> /// <returns></returns> private Dictionary <string, string> UpdateListPlan(string nick, Dictionary <string, string> itemdic, BackgroundWorker backWorker, DoWorkEventArgs e) { Dictionary <string, string> successitems = new Dictionary <string, string>(); List <string> iidlist = itemdic.Keys.ToList(); ItemReq req = new ItemReq(); ItemRsp response = new ItemRsp(); string session = SystemHelper.GetSessionKey(nick); float n = iidlist.Count; int temp = 0;//作用是避免进度值propgress没有改变时得重复报告 for (int i = 0; i < n; i++) { if (backWorker.CancellationPending) { e.Cancel = true; break; } string iid = iidlist[i]; req.Iid = iid; req.ApproveStatus = "onsale"; req.ListTime = itemdic.SingleOrDefault(it => it.Key == iid).Value; try { response = TopService.ItemUpdate(session, req); if (response.Item != null) { successitems.Add(req.Iid, req.ListTime); } } catch (Exception) { continue; } //进度报告 int propgress = (int)((float)(i + 1) / n * 100); if (propgress > temp) { backWorker.ReportProgress(propgress, null); } temp = propgress; } return(successitems); }
private void backWorker_DoWork(object sender, DoWorkEventArgs e) { try { foreach (string nick in sortItemList.Keys) { if (backWorker.CancellationPending) { e.Cancel = true; break; } if (sortItemList[nick].Count == 0) { continue; } BeginInvoke(new Action(() => { this.progressBarControl1.Properties.Maximum = sortItemList[nick].Count; } )); string session = SystemHelper.GetSessionKey(nick); for (int i = 0; i < sortItemList[nick].Count; i++) { if (backWorker.CancellationPending) { e.Cancel = true; break; } string iid = sortItemList[nick][i]; ItemRsp rsp = TopService.ItemUpdateListing(session, iid); if (rsp != null && rsp.Item != null) { //加入成功列表 iidlist.Add(iid); } backWorker.ReportProgress(i + 1, string.Format("正在更新店铺{0}的宝贝", nick)); } } } catch (Exception ex) { e.Result = ex.Message; } }
void worker_DoWork(object sender, DoWorkEventArgs e) { ItemTask itemTask = e.Argument as ItemTask; List <Taobao.Entity.Item> items = itemTask.ItemList; BackgroundWorker worker = (BackgroundWorker)sender; int totalCount = itemTask.totalCount; for (int i = 0; i < items.Count; i++) { lock (lockObject) { //进度递增 progressCurrent++; } if (worker.CancellationPending) { e.Cancel = true; break; } try { ItemRsp myrsp = TopService.ItemGet(SystemHelper.GetSessionKey(items[i].Nick), items[i].Nick, items[i].Iid, string.Empty); if (myrsp != null && myrsp.Item != null) { Alading.Entity.Item item = new Alading.Entity.Item(); UIHelper.ItemCopyData(item, myrsp.Item); //添加到数据库,如果存在则更新,否则添加 ReturnType result = ItemService.AddItem(item); //计算进度条值 int progress = (int)((float)progressCurrent / (float)totalCount * 100); if (result == ReturnType.Success) { UserState state = new UserState(); state.Index = i + 1; state.Iid = items[i].Iid; state.ItemTaskIndex = itemTask.Index; state.Message = "下载成功!"; worker.ReportProgress(progress, state); } else { UserState state = new UserState(); state.Message = "数据库存储发生错误。"; state.Index = i + 1; state.Iid = items[i].Iid; state.ItemTaskIndex = itemTask.Index; //发生数据库错误的报告 worker.ReportProgress(-1, state); } } } catch (Exception ex) { UserState state = new UserState(); state.Message = ex.Message; state.Index = i + 1; state.Iid = items[i].Iid; state.ItemTaskIndex = itemTask.Index; //发生下载错误的报告 worker.ReportProgress(-1, state); } } e.Result = itemTask.Index; }
void mainWorker_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = (BackgroundWorker)sender; threadCount = Convert.ToInt32(spinEditThreadCount.Text); string nick = string.Empty; string title = string.Empty; string sid = string.Empty; bool isSelected; TreeListNode node = null; //循环shop树,获得选中的店铺 IEnumerator treeListEnumerator = this.treeListShop.Nodes.GetEnumerator(); while (treeListEnumerator.MoveNext()) { if (mainWorker.CancellationPending) { e.Cancel = true; return; } try { node = treeListEnumerator.Current as TreeListNode; isSelected = Convert.ToBoolean(node[treeListShop.Columns["IsSelected"].AbsoluteIndex]); if (node[treeListShop.Columns["nick"].AbsoluteIndex] != null) { nick = node[treeListShop.Columns["nick"].AbsoluteIndex].ToString(); } if (node[treeListShop.Columns["title"].AbsoluteIndex] != null) { title = node[treeListShop.Columns["title"].AbsoluteIndex].ToString(); } if (node[treeListShop.Columns["sid"].AbsoluteIndex] != null) { sid = node[treeListShop.Columns["sid"].AbsoluteIndex].ToString(); } if (isSelected) { //线程总数量设为0 totalThreadCount = 0; //清空itemList itemList.Clear(); //清空子线程列表 workerList.Clear(); worker.ReportProgress(1, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 正在获取店铺" + title + "的宝贝信息......"); //获取选中店铺所有的item itemRsp = TopService.ItemsAllGet(SystemHelper.GetSessionKey(nick), fields, 1, pageSize); if (itemRsp == null) { worker.ReportProgress(1, title + "店铺宝贝获取失败。"); } else { /*把item加入到itemlist中*/ if (itemRsp.Items != null && itemRsp.Items.Item != null) { foreach (Taobao.Entity.Item item in itemRsp.Items.Item) { itemList.Add(item); } } worker.ReportProgress(1, string.Format("检测到店铺内宝贝{0}个。", itemRsp.TotalResults)); //计算页数 pageNo = itemRsp.TotalResults % pageSize == 0 ? (itemRsp.TotalResults / pageSize) : ((itemRsp.TotalResults / pageSize) + 1); //如果超过一页,即超过200条 if (pageNo > 1) { //获取所有的item列表 worker.ReportProgress(1, "正在获取店铺宝贝列表......"); //下载其它页 for (int i = 2; i <= pageNo; i++) { itemRsp = TopService.ItemsAllGet(SystemHelper.GetSessionKey(nick), fields, i, pageSize); if (itemRsp.Items != null && itemRsp.Items.Item != null) { foreach (Taobao.Entity.Item item in itemRsp.Items.Item) { itemList.Add(item); } } } worker.ReportProgress(1, "店铺宝贝列表获取成功。"); } worker.ReportProgress(1, "系统正在启动多线程下载宝贝详细信息......"); //如果商品的数量小于 if (itemRsp.TotalResults < threadCount) { threadCount = itemRsp.TotalResults; } //计算每个子线程应该分配多少item去下载,itemPageSize itemPageSize = itemRsp.TotalResults % threadCount == 0 ? (itemRsp.TotalResults / threadCount) : ((itemRsp.TotalResults / threadCount) + 1); #region 开启下载子线程 //开启Item下载子线程 for (int i = 0; i < threadCount; i++) { //分页item,分配给每一个子线程。 List <Taobao.Entity.Item> items = itemList.Skip(i * itemPageSize).Take(itemPageSize).ToList(); //启动线程 BackgroundWorker itemWorker = new BackgroundWorker(); itemWorker.WorkerReportsProgress = true; itemWorker.WorkerSupportsCancellation = true; itemWorker.DoWork += new DoWorkEventHandler(worker_DoWork); //任务进行时,报告进度 itemWorker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged); //任务完称时要做的,比如提示等等 itemWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); workerList.Add(itemWorker); //Item任务对象 ItemTask itemTask = new ItemTask(); itemTask.ItemList = items; itemTask.ShopSid = sid; itemTask.Index = i + 1; itemTask.totalCount = itemRsp.TotalResults; //每一个子线程传入相关的下载列表信息。 itemWorker.RunWorkerAsync(itemTask); //开启图片下载子线程 BackgroundWorker picWorker = new BackgroundWorker(); picWorker.WorkerReportsProgress = true; picWorker.WorkerSupportsCancellation = true; picWorker.DoWork += new DoWorkEventHandler(picWorker_DoWork); picWorker.ProgressChanged += new ProgressChangedEventHandler(picWorker_ProgressChanged); picWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(picWorker_RunWorkerCompleted); workerList.Add(picWorker); //ItemPic任务对象 ItemTask itemPicTask = new ItemTask(); itemPicTask.ItemList = items; itemPicTask.ShopSid = sid; picWorker.RunWorkerAsync(itemPicTask); } #endregion } progressCurrent = 0; //信号量,阻塞当前线程,这里阻塞的是下载主线程 autoReset.WaitOne(); } } catch (Exception ex) { BeginInvoke(new Action(() => { listBoxCtrl.Items.Insert(0, ex.Message); })); return; } } }
void w_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; SycTaskArgs task = e.Argument as SycTaskArgs; foreach (var p in task.PageNoList) { #region get trade information //这里改成mainWorker,即主线程取消子线程工作全部停止 if (mainWorker.CancellationPending) { e.Cancel = true; return; } TradeReq request = new TradeReq(); TradeRsp response = null; request.Status = null; request.PageSize = task.PageSize; request.PageNo = p; request.StartCreated = task.QueryBeginTime.ToString("yyyy-MM-dd HH:mm:ss"); request.EndCreated = task.QueryEndTime.ToString("yyyy-MM-dd HH:mm:ss"); string sessionkey = SystemHelper.GetSessionKey(task.ShopNick); response = TopService.TradesSoldGet(sessionkey, request); #endregion #region if getting trade failed do next if (response == null || response.Trades == null) { lock (vlock) { sub_done += task.PageSize; } continue; } #endregion foreach (var t in response.Trades.Trade) { //if (worker.CancellationPending) //这里改成mainWorker,即主线程取消子线程工作全部停止 if (mainWorker.CancellationPending) { e.Cancel = true; return; } lock (vlock) { sub_done++; } TradeRsp fulltrade = TopService.TradeFullinfoGet(sessionkey, t.Tid); #region if getting trade detail failed do next if (fulltrade == null || fulltrade.Trade == null) { ReportState state = new ReportState { Total = sub_total, Current = sub_done, Message = string.Format("同步客户 {0} 失败:无法获取交易信息!", t.BuyerNick), }; worker.ReportProgress(0, state); continue; } #endregion UserRsp buyer = TopService.UserGet(sessionkey, fulltrade.Trade.BuyerNick, fulltrade.Trade.AlipayNo); #region if getting buyer detail failed do next if (buyer == null || buyer.User == null) { ReportState state = new ReportState { Total = sub_total, Current = sub_done, Message = string.Format("同步客户 {0} 失败:无法获取买家信息!", t.BuyerNick), }; worker.ReportProgress(0, state); continue; } #endregion Alading.Entity.Consumer consumer = Alading.Business.ConsumerService.GetConsumer(fulltrade.Trade.BuyerNick); if (consumer == null) { #region Consumer is not existed and save it consumer = new Alading.Entity.Consumer(); consumer.nick = buyer.User.Nick; consumer.sex = buyer.User.Sex; consumer.buyer_zip = buyer.User.Location.Zip; consumer.location_city = buyer.User.Location.City; consumer.location_state = buyer.User.Location.State; consumer.location_district = buyer.User.Location.District; consumer.location_address = buyer.User.Location.Address; consumer.location_country = buyer.User.Location.Address; consumer.birthday = buyer.User.Birthday; consumer.credit = buyer.User.BuyerCredit.ToString(); consumer.level = buyer.User.BuyerCredit.Level; consumer.score = buyer.User.BuyerCredit.Score; consumer.status = buyer.User.Status; consumer.created = DateTime.Parse(buyer.User.Created); consumer.last_visit = buyer.User.LastVisit; consumer.mobilephone = fulltrade.Trade.ReceiverMobile; consumer.phone = fulltrade.Trade.ReceiverPhone; consumer.email = fulltrade.Trade.BuyerEmail; consumer.buyer_name = fulltrade.Trade.ReceiverName; consumer.alipay = fulltrade.Trade.AlipayNo; ReturnType result = Alading.Business.ConsumerService.AddConsumer(consumer); if (result == ReturnType.Success) { ReportState state = new ReportState { Total = sub_total, Current = sub_done, Message = string.Format("同步客户 {0} 信息成功!", consumer.nick), }; worker.ReportProgress(1, state); Alading.Entity.ConsumerAddress addr = Alading.Business.ConsumerAddressService.GetConsumerAddress( c => c.tid == fulltrade.Trade.Tid).FirstOrDefault(); if (addr == null) { addr = new Alading.Entity.ConsumerAddress { buyer_nick = fulltrade.Trade.BuyerNick, location_address = fulltrade.Trade.ReceiverAddress, location_city = fulltrade.Trade.ReceiverCity, location_country = buyer.User.Location.Country, location_district = fulltrade.Trade.ReceiverDistrict, location_state = fulltrade.Trade.ReceiverState, location_zip = fulltrade.Trade.ReceiverZip, receiver_mobile = fulltrade.Trade.ReceiverMobile, receiver_name = fulltrade.Trade.ReceiverName, receiver_phone = fulltrade.Trade.ReceiverPhone, receiver_zip = fulltrade.Trade.ReceiverZip, tid = fulltrade.Trade.Tid, }; result = Alading.Business.ConsumerAddressService.AddConsumerAddress(addr); if (result == ReturnType.Success) { state = new ReportState { Total = sub_total, Current = sub_done, Message = string.Format("同步客户 {0} 地址信息成功!", consumer.nick), }; worker.ReportProgress(1, state); } else { state = new ReportState { Total = sub_total, Current = sub_done, Message = string.Format("同步客户 {0} 地址信息失败:数据保存失败!", consumer.nick), }; worker.ReportProgress(1, state); } } } else { ReportState state = new ReportState { Total = sub_total, Current = sub_done, Message = string.Format("同步客户 {0} 信息失败:数据保存失败!", consumer.nick), }; worker.ReportProgress(1, state); continue; } #endregion } else { #region Consumer existed and update address information ReportState state0 = new ReportState { Total = sub_total, Current = sub_done, Message = string.Format("客户 {0} 已存在!", consumer.nick), }; worker.ReportProgress(0, state0); Alading.Entity.ConsumerAddress addr = Alading.Business.ConsumerAddressService.GetConsumerAddress( c => c.tid == fulltrade.Trade.Tid).FirstOrDefault(); if (addr == null) { addr = new Alading.Entity.ConsumerAddress { buyer_nick = fulltrade.Trade.BuyerNick, location_address = fulltrade.Trade.ReceiverAddress, location_city = fulltrade.Trade.ReceiverCity, location_country = buyer.User.Location.Country, location_district = fulltrade.Trade.ReceiverDistrict, location_state = fulltrade.Trade.ReceiverState, location_zip = fulltrade.Trade.ReceiverZip, receiver_mobile = fulltrade.Trade.ReceiverMobile, receiver_name = fulltrade.Trade.ReceiverName, receiver_phone = fulltrade.Trade.ReceiverPhone, receiver_zip = fulltrade.Trade.ReceiverZip, tid = fulltrade.Trade.Tid, }; ReturnType result = Alading.Business.ConsumerAddressService.AddConsumerAddress(addr); if (result == ReturnType.Success) { ReportState state = new ReportState { Total = sub_total, Current = sub_done, Message = string.Format("同步客户 {0} 地址信息成功!", consumer.nick), }; worker.ReportProgress(1, state); } else { ReportState state = new ReportState { Total = sub_total, Current = sub_done, Message = string.Format("同步客户 {0} 地址信息失败:数据保存失败!", consumer.nick), }; worker.ReportProgress(1, state); } } #endregion } } } }
void mainWorker_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = (BackgroundWorker)sender; StringBuilder str_fail = new StringBuilder(); TradeReq tradeReq = new TradeReq(); //获取状态 tradeReq.Status = TradeStatus; //总交易量清空 TotalProessNum = 0; //错误列表清空 failedTrade = new FailedTrade(); tradeReq.PageSize = 100; //每页总数 tradeReq.PageNo = 1; //页数 /*计算总的交易量 即总进度条计算*/ for (int j = 0; j < shop_List.Count; j++) { try { #region 时间设置 /*选择近十五天*/ if (cmbSelectTime.SelectedIndex == 0) { tradeReq.StartCreated = this.dateEditBegin.DateTime.ToString("yyyy-MM-dd HH:mm:ss"); tradeReq.EndCreated = this.dateEditEnd.DateTime.ToString("yyyy-MM-dd HH:mm:ss"); } else/*开店至今*/ { tradeReq.StartCreated = shop_List[j].created.ToString("yyyy-MM-dd HH:mm:ss"); tradeReq.EndCreated = DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd HH:mm:ss"); } #endregion //获取sessionkey string sessionkey = SystemHelper.GetSessionKey(shop_List[j].nick); //从淘宝上获取数据 TradeRsp tradeRsp = TopService.TradesSoldGet(sessionkey, tradeReq); //订单获取失败 if (tradeRsp != null || tradeRsp.Trades != null) { TotalProessNum += tradeRsp.TotalResults; } } catch (System.Exception ex) { BeginInvoke(new Action(() => { OrderDown.Items.Insert(0, string.Format("{0} {1}", DateTime.Now.ToString("HH:mm:ss"), ex.Message)); })); return; } } /*各个店铺的交易处理*/ for (int j = 0; j < shop_List.Count; j++) { //清空线程列表 workerList.Clear(); //清空总线程量 totalThreadCount = 0; //当前交易量 currentProessNum = 0; /*信息*/ UserState DoState = new UserState(); DoState.shopNick = shop_List[j].nick; DoState.message = "开始处理!"; mainWorker.ReportProgress(0, DoState); try { //交易列表 List <string> tidList = new List <string>(); #region 时间设置 /*选择近十五天*/ if (cmbSelectTime.SelectedIndex == 0) { tradeReq.StartCreated = this.dateEditBegin.DateTime.ToString("yyyy-MM-dd HH:mm:ss"); tradeReq.EndCreated = this.dateEditEnd.DateTime.ToString("yyyy-MM-dd HH:mm:ss"); } else/*开店至今*/ { tradeReq.StartCreated = shop_List[j].created.ToString("yyyy-MM-dd HH:mm:ss"); tradeReq.EndCreated = DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd HH:mm:ss"); } #endregion //获取sessionkey string sessionkey = SystemHelper.GetSessionKey(shop_List[j].nick); //从淘宝上获取数据 TradeRsp tradeRsp = TopService.TradesSoldGet(sessionkey, tradeReq); //订单获取失败 if (tradeRsp == null || tradeRsp.Trades == null) { //异步操作 BeginInvoke(new Action(() => { OrderDown.Items.Insert(0, string.Format("{0} 网络异常,{1}店铺的订单下载失败!", DateTime.Now.ToString("HH:mm:ss"), shop_List[j].nick)); })); str_fail.Append(shop_List[j].nick); str_fail.Append(" "); continue; } if (tradeRsp != null) { foreach (Alading.Taobao.Entity.Trade tradeObj in tradeRsp.Trades.Trade) { tidList.Add(tradeObj.Tid); } /*foreach*/ } /*if*/ //店铺的总交易量 int totalResults = tradeRsp.TotalResults; BeginInvoke(new Action(() => { OrderDown.Items.Insert(0, string.Format("{0} 店铺{1}共{2}订单!", DateTime.Now.ToString("HH:mm:ss"), shop_List[j].nick, totalResults)); })); #region 计算是否需要分页获取 int PageTotalNum = 0; /*总页数*/ int PageCurrentNo = 0; /*当前页数*/ //计算总页数 PageTotalNum = (tradeRsp.TotalResults % tradeReq.PageSize == 0) ? (tradeRsp.TotalResults / tradeReq.PageSize) : (tradeRsp.TotalResults / tradeReq.PageSize + 1); /*有多余两页的订单*/ if (PageTotalNum >= 2) { for (PageCurrentNo = 2; PageCurrentNo < PageTotalNum + 1; PageCurrentNo++) { tradeReq.PageNo = PageCurrentNo; tradeRsp = TopService.TradesSoldGet(sessionkey, tradeReq); if (tradeRsp != null && tradeRsp.Trades != null) { foreach (Taobao.Entity.Trade tradeObj in tradeRsp.Trades.Trade) { if (!tidList.Contains(tradeObj.Tid)) { tidList.Add(tradeObj.Tid); } } } //if else /*获取失败*/ { if (!str_fail.ToString().Contains(shop_List[j].nick)) { str_fail.Append(shop_List[j].nick); str_fail.Append(" "); BeginInvoke(new Action(() => { OrderDown.Items.Insert(0, string.Format("{0} 网络异常,{1}店铺的订单下载失败!", DateTime.Now.ToString("HH:mm:ss"), shop_List[j].nick)); })); } break; } } //for } //if #endregion /*总交易数小于线程数*/ if (totalResults < threadCount) { threadCount = totalResults; } //每个线程交易下载量 int tradePageSize = (totalResults % threadCount == 0) ? (totalResults / threadCount) : (totalResults / threadCount + 1); #region 开启多线程 for (int i = 0; i < threadCount; i++) { //获取分给每个线程的tid列表 List <string> TradeTidList = tidList.Skip(i * tradePageSize).Take(tradePageSize).ToList(); /*线程配置*/ BackgroundWorker TradeWorker = new BackgroundWorker(); TradeWorker.WorkerReportsProgress = true; TradeWorker.WorkerSupportsCancellation = true; TradeWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); TradeWorker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged); TradeWorker.DoWork += new DoWorkEventHandler(worker_DoWork); //添加到线程列表 workerList.Add(TradeWorker); /*参数传递*/ TradeTask tradeTask = new TradeTask(); tradeTask.shopNic = shop_List[j].nick; tradeTask.ShopTradeList = TradeTidList; tradeTask.threadIndex = i + 1; tradeTask.sessionKey = sessionkey; tradeTask.totalNum = totalResults; TradeWorker.RunWorkerAsync(tradeTask); } #endregion } catch (System.Exception ex) { BeginInvoke(new Action(() => { if (ex.Message.Contains("Remote service error")) { OrderDown.Items.Insert(0, string.Format("{0} {1}", DateTime.Now.ToString("HH:mm:ss"), "不能连接远程服务器,请多尝试几次下载!".ToString())); } })); /*进度记录*/ ProcessRecord = 0; TotalProessNum = 0; TotalProessNum = 0; BeginInvoke(new Action(() => { btnDownOrders.Enabled = true; })); return; } //信号量,阻塞当前线程,这里阻塞的是下载主线程 autoReset.WaitOne(); }/*foreach 对店铺遍历*/ }
private void btnItemCat_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { WaitDialogForm waitFrm = new WaitDialogForm(Constants.WAIT_LOAD_DATA); try { listBoxCtrl.Items.Insert(0, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 启动淘宝类目下载"); ItemCatRsp results = TopService.ItemCatsGet(null, null, "1970-01-01 00:00:00"); listBoxCtrl.Items.Insert(0, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 淘宝类目下载完毕"); if (results != null && results.ItemCats != null && results.ItemCats.ItemCat != null) { listBoxCtrl.Items.Insert(0, "ItemCats数量为" + results.ItemCats.ItemCat.Length); Application.DoEvents(); //重新置空全局变量 itemcatlist.Clear(); DataTable table = new DataTable(); table.Columns.Add("cid", typeof(string)); table.Columns.Add("parent_cid", typeof(string)); table.Columns.Add("name", typeof(string)); table.Columns.Add("is_parent", typeof(bool)); table.Columns.Add("status", typeof(string)); table.Columns.Add("sort_order", typeof(Int32)); table.Columns.Add("PropTag", typeof(bool)); foreach (ItemCat itemCat in results.ItemCats.ItemCat) { Alading.Entity.ItemCat cat = new Alading.Entity.ItemCat(); cat.cid = itemCat.Cid; cat.parent_cid = itemCat.ParentCid; cat.name = string.IsNullOrEmpty(itemCat.Name) ? "无" : itemCat.Name; cat.is_parent = itemCat.IsParent; cat.status = itemCat.Status; cat.sort_order = itemCat.SortOrder; cat.PropTag = false; itemcatlist.Add(cat); DataRow row = table.NewRow(); row["cid"] = itemCat.Cid; row["parent_cid"] = itemCat.ParentCid; row["name"] = string.IsNullOrEmpty(itemCat.Name) ? "无" : itemCat.Name; row["is_parent"] = itemCat.IsParent; row["status"] = itemCat.Status; row["sort_order"] = itemCat.SortOrder; row["PropTag"] = false; table.Rows.Add(row); } //排序 itemcatlist = itemcatlist.OrderBy(c => c.cid).ToList(); listBoxCtrl.Items.Insert(0, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 启动淘宝类目存储"); Application.DoEvents(); ItemCatService.AddItemCatSqlBulkCopy(table); listBoxCtrl.Items.Insert(0, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 淘宝类目存储完毕"); //重新加载节点 treeListItemCat.Nodes.Clear(); LoadItemCat(treeListItemCat); waitFrm.Close(); } } catch (Exception ex) { waitFrm.Close(); XtraMessageBox.Show(ex.Message, Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information); } }
/// <summary> /// 批量更新类目cid下所有属性值的is_parent字段,条件是必须保证cid下的所有属性及属性值已完全下载 /// </summary> private void UpdatePropValueIsParent(List <string> cidlist, BackgroundWorker worker) { DataTable table = new DataTable(); table.Columns.Add("cid", typeof(string)); table.Columns.Add("is_parent", typeof(bool)); table.Columns.Add("name", typeof(string)); table.Columns.Add("name_alias", typeof(string)); table.Columns.Add("pid", typeof(string)); table.Columns.Add("prop_name", typeof(string)); table.Columns.Add("vid", typeof(string)); table.Columns.Add("status", typeof(string)); table.Columns.Add("sort_order", typeof(Int32)); List <Taobao.Entity.PropValue> pValueListNeedUpdate = new List <Taobao.Entity.PropValue>(); /*每执行一次调用一次API,读取两次数据库 * 这里不能用foreach,因为方法体里面有 * cidlist.Remove(cid)语句,会造成无法 * 枚举的异常 * */ for (int c = 0; c < cidlist.Count; c++) { string cid = cidlist[c]; /*读取存在子属性的关键属性的pid*/ List <string> keyPropsPidList = ItemPropService.GetKeyPropPid(cid); if (keyPropsPidList.Count == 0) { return; } #region 循环获取keyPropsPidList的属性值,每执行一次调用一次API,读取一次数据库 float n = keyPropsPidList.Count; //int temp = 0;//作用是避免进度值propgress没有改变时得重复报告 for (int i = 0; i < n; i++) { ////进度报告 //int propgress = (int)((float)(i + 1) / n * 100); //if (propgress > temp) //{ // worker.ReportProgress(propgress, null); //} //temp = propgress; string pid = keyPropsPidList[i]; ItemCatRsp rsp = new ItemCatRsp(); try { rsp = TopService.ItemPropsGet(cid, pid, null); } catch (Exception ex) { worker.ReportProgress(int.Parse(cid), string.Format("异常信息{0}", ex.Message)); //加入错误列表 if (ciderrorlist == null) { ciderrorlist = new List <string>(); } ciderrorlist.Add(cid); //从需要更新列表中删除 cidlist.Remove(cid); continue; } if (rsp.ItemProps == null || rsp.ItemProps.ItemProp == null) { /*说明下载失败*/ continue; } #region 加一条“自定义”记录至table里,读取了一次数据库 if (!ItemPropValueService.IsExistedPropValueName(cid, pid, "自定义")) { DataRow row = table.NewRow(); row["cid"] = cid; row["is_parent"] = false; row["name"] = row["name_alias"] = "自定义"; row["pid"] = pid; row["vid"] = 0; row["status"] = "normal"; row["sort_order"] = 1000; if (rsp.ItemProps.ItemProp != null && rsp.ItemProps.ItemProp.Length > 0) { row["prop_name"] = rsp.ItemProps.ItemProp[0].Name ?? string.Empty; } else { row["prop_name"] = string.Empty; } table.Rows.Add(row); } #endregion #region 将is_parent为TRUE的属性值加入pValueListNeedUpdate foreach (Taobao.Entity.ItemProp prop in rsp.ItemProps.ItemProp) { Taobao.Entity.PropValues propvalues = prop.PropValues; if (propvalues != null && propvalues.PropValue != null) { List <Alading.Taobao.Entity.PropValue> propValueWhereToList = propvalues.PropValue.Where(p => p.IsParent).ToList(); foreach (Taobao.Entity.PropValue pv in propValueWhereToList) { pv.Cid = cid; pv.Pid = pid; } pValueListNeedUpdate.AddRange(propValueWhereToList); } } //foreach } //for #endregion #endregion } //将自定义加入数据库 if (table.Rows.Count > 0) { ItemPropValueService.AddItemPropValueSqlBulkCopy(table); } //更新is_parent if (pValueListNeedUpdate.Count > 0) { ItemPropValueService.UpdateItemPropValueDataParameters(pValueListNeedUpdate); } }
/// <summary> /// 批量下载类目cid下的所有属性,不能返回prop_values /// </summary> private void DownItemProp(List <string> cidlist, BackgroundWorker worker) { DataTable table = new DataTable(); table.Columns.Add("cid", typeof(string)); table.Columns.Add("child_template", typeof(string)); table.Columns.Add("is_allow_alias", typeof(bool)); table.Columns.Add("is_color_prop", typeof(bool)); table.Columns.Add("is_enum_prop", typeof(bool)); table.Columns.Add("is_input_prop", typeof(bool)); table.Columns.Add("is_item_prop", typeof(bool)); table.Columns.Add("is_key_prop", typeof(bool)); table.Columns.Add("is_sale_prop", typeof(bool)); table.Columns.Add("multi", typeof(bool)); table.Columns.Add("must", typeof(bool)); table.Columns.Add("name", typeof(string)); table.Columns.Add("parent_pid", typeof(string)); table.Columns.Add("parent_vid", typeof(string)); table.Columns.Add("pid", typeof(string)); table.Columns.Add("prop_name", typeof(string)); table.Columns.Add("prop_values", typeof(string)); table.Columns.Add("status", typeof(string)); table.Columns.Add("sort_order", typeof(Int32)); for (int c = 0; c < cidlist.Count; c++) { string cid = cidlist[c]; if (ItemPropService.IsPropExistedCid(cid)) { continue; } ItemCatRsp rsp = new ItemCatRsp(); try { rsp = TopService.ItemPropsGet(cid); } catch (Exception ex) { worker.ReportProgress(int.Parse(cid), string.Format("异常信息{0}", ex.Message)); //加入错误列表 if (ciderrorlist == null) { ciderrorlist = new List <string>(); } ciderrorlist.Add(cid); //从需要更新列表中删除 cidlist.Remove(cid); continue; } if (rsp.ItemProps != null && rsp.ItemProps.ItemProp != null) { ItemProp[] propArr = rsp.ItemProps.ItemProp; for (int i = 0; i < propArr.Length; i++) { #region 数据赋值 DataRow row = table.NewRow(); row["cid"] = cid; row["child_template"] = propArr[i].ChildPropTemplate ?? string.Empty; row["is_allow_alias"] = propArr[i].IsAllowAlias; row["is_color_prop"] = propArr[i].IsColorProp; row["is_enum_prop"] = propArr[i].IsEnumProp; row["is_input_prop"] = propArr[i].IsInputProp; row["is_item_prop"] = propArr[i].IsItemProp; row["is_key_prop"] = propArr[i].IsKeyProp; row["is_sale_prop"] = propArr[i].IsSaleProp; row["multi"] = propArr[i].IsMulti; row["must"] = propArr[i].IsMust; row["name"] = propArr[i].Name ?? string.Empty; row["parent_pid"] = propArr[i].ParentPid; row["parent_vid"] = propArr[i].ParentVid; row["pid"] = propArr[i].Pid; row["prop_values"] = JsonConvert.SerializeObject(propArr[i].PropValues) ?? string.Empty; row["sort_order"] = propArr[i].SortOrder; row["status"] = propArr[i].Status ?? string.Empty; #endregion table.Rows.Add(row); }//for } } if (table.Rows.Count > 0) { ItemPropService.AddItemPropSqlBulkCopy(table); } }
/// <summary> ///批量 先下载类目cid下的所有属性值,不能返回is_parent字段 /// </summary> private void DownItemPropvalue(List <string> cidlist, BackgroundWorker worker) { DataTable table = new DataTable(); table.Columns.Add("cid", typeof(string)); table.Columns.Add("is_parent", typeof(bool)); table.Columns.Add("name", typeof(string)); table.Columns.Add("name_alias", typeof(string)); table.Columns.Add("pid", typeof(string)); table.Columns.Add("prop_name", typeof(string)); table.Columns.Add("vid", typeof(string)); table.Columns.Add("status", typeof(string)); table.Columns.Add("sort_order", typeof(Int32)); for (int c = 0; c < cidlist.Count; c++) { string cid = cidlist[c]; if (ItemPropValueService.IsExistedCid(cid)) { continue; } ItemCatRsp myrsp = new ItemCatRsp(); try { myrsp = TopService.ItemPropValuesGet(cid, null, "2005-01-01 00:00:00"); } catch (Exception ex) { worker.ReportProgress(int.Parse(cid), string.Format("异常信息{0}", ex.Message)); //加入错误列表 if (ciderrorlist == null) { ciderrorlist = new List <string>(); } ciderrorlist.Add(cid); //从需要更新列表中删除 cidlist.Remove(cid); continue; } if (myrsp.PropValues != null && myrsp.PropValues.PropValue != null) { Alading.Taobao.Entity.PropValue[] pvalueArr = myrsp.PropValues.PropValue; for (int i = 0; i < pvalueArr.Length; i++) { DataRow row = table.NewRow(); row["cid"] = pvalueArr[i].Cid; row["is_parent"] = pvalueArr[i].IsParent;//API不能返回此值 row["name"] = pvalueArr[i].Name ?? string.Empty; row["name_alias"] = pvalueArr[i].NameAlias ?? string.Empty; row["pid"] = pvalueArr[i].Pid; row["prop_name"] = pvalueArr[i].PropName ?? string.Empty; row["vid"] = pvalueArr[i].Vid; row["status"] = pvalueArr[i].Status ?? string.Empty; row["sort_order"] = pvalueArr[i].SortOrder; table.Rows.Add(row); } } } if (table.Rows.Count > 0) { ItemPropValueService.AddItemPropValueSqlBulkCopy(table); } }
protected override Task ExecuteJob(IJobExecutionContext context) { var dataMap = context.MergedJobDataMap; ScriptPath = dataMap.GetString("shell-script-path"); ShellName = dataMap.GetString("shell") ?? "/bin/bash"; DbType = dataMap.GetString("db-type") ?? "MySql"; DbConnString = dataMap.GetString("conn-string") ?? ""; AfterShellSql = dataMap.GetString("after-shell-sql") ?? ""; BeforeShellSql = dataMap.GetString("before-shell-sql") ?? ""; AutoDelete = dataMap.GetString("auto-delete") ?? ""; var logService = new LogService(DbType, DbConnString); var topService = new TopService(DbType, DbConnString); Stopwatch stopwatch = new Stopwatch(); if (IsActive) { Logger.Info("存在执行中任务,跳过该周期!"); } else { IsActive = true; string command = string.Empty; string querySql = string.Empty; long? task_id = 0; string ttime = string.Empty; string thour = string.Empty; string phone_number = string.Empty; string tableName = string.Empty; string filePath = string.Empty; string operate_type = "5"; int step_no = 1; try { DbConnection conn; switch (DbType) { case "MsSql": conn = new SqlConnection(DbConnString); //querySql = @"select task_id,list_order,UTCstr,logtime,logmillisecond,MSISDN from sig_ue_mr_top200_plan"; break; default: conn = new MySqlConnection(DbConnString); //querySql = @"select task_id,list_order,UTCstr,logtime,logmillisecond,MSISDN from sig_ue_mr_top200_plan"; break; } using (conn) { try { conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandType = System.Data.CommandType.Text; TableEntity.sig_ue_mr_top200_job sig_ue_mr_top200_job = new TableEntity.sig_ue_mr_top200_job(); sig_ue_mr_top200_job = topService.Query("select * from sig_ue_mr_top200_job where completeTime is null or completeTime='' order by createTime limit 1"); if (sig_ue_mr_top200_job != null) { //更新任务状态 sig_ue_mr_top200_job.state = ExecStatus.运算中.ToString(); topService.Update(sig_ue_mr_top200_job); cmd.CommandText = @"drop table if exists sig_ue_mr_top200_plan_tmp"; cmd.ExecuteNonQuery(); cmd.CommandText = @"create table sig_ue_mr_top200_plan_tmp(task_id int,list_order int, UTCstr nvarchar(20), logtime nvarchar(22), logmillisecond nvarchar(10), MSISDN nvarchar(15))"; cmd.ExecuteNonQuery(); //选取数据到临时表 cmd.CommandText = string.Format(@"insert into sig_ue_mr_top200_plan_tmp select task_id,list_order,UTCstr,logtime,logmillisecond,MSISDN from sig_ue_mr_top200_plan where task_id={0}", sig_ue_mr_top200_job.task_id); cmd.ExecuteNonQuery(); querySql = string.Format(@"select task_id,list_order,UTCstr,logtime,logmillisecond,MSISDN from sig_ue_mr_top200_plan_tmp where task_id={0}", sig_ue_mr_top200_job.task_id); cmd.CommandText = querySql; cmd.CommandTimeout = 0; var reader = cmd.ExecuteReader(); if (reader.HasRows) { List <string> arguments = new List <string>() { }; StringBuilder str = new StringBuilder(); while (reader.Read()) { task_id = reader.GetInt64(0); str.Append(reader.GetString(5)); str.Append(","); str.Append(reader.GetString(2)); str.Append("|"); } str.Remove(str.Length - 1, 1); phone_number = str.ToString(); ShellName.Split(";").ToList().ForEach(shell => { arguments.Add($"{shell} {ttime} {thour} {phone_number} {filePath} {operate_type}"); }); conn.Close(); Logger.Info($"[BeforeShellSql:]-- {BeforeShellSql}"); if (!string.IsNullOrEmpty(BeforeShellSql)) { conn.Open(); cmd.CommandText = BeforeShellSql.Replace("@select_date", ttime);//替换日期占位符 //记录日志到数据表 var step_1 = logService.Insert(new TableEntity.SingleUserAnalysisHistoryInfo() { col_create_time = DateTime.Now, error_msg = "", //异常信息 run_status = RunStatus.执行中.ToString(), spend_time = 0, //耗时 step_name = "(BeforeShellSql)执行shell脚本之前的sql脚本", //步骤名称 step_no = step_no, //步骤编号 step_remark = "", //备注 task_detail_id = task_id ?? 0 //task_id }); stopwatch.Restart(); //计时器开始 int asqResult = 0; try { asqResult = cmd.ExecuteNonQuery(); Logger.Info($" {asqResult} 行受影响"); } catch (Exception ex) { step_1.error_msg = ex.Message; } stopwatch.Stop();//计时器停止 step_1.run_status = RunStatus.已执行.ToString(); step_1.step_remark = $" {asqResult} 行受影响"; step_1.spend_time = (int)stopwatch.Elapsed.TotalSeconds; logService.Update(step_1); conn.Close(); } Logger.Info($"--------------开始执行SHELL命令--------------"); arguments.ForEach(argument => { step_no++; //执行shell脚本 Logger.Info($"/bin/bash {argument}"); //记录日志到数据表 var step_2 = logService.Insert(new TableEntity.SingleUserAnalysisHistoryInfo() { col_create_time = DateTime.Now, error_msg = "", //异常信息 run_status = RunStatus.执行中.ToString(), spend_time = 0, //耗时 step_name = "执行shell脚本,脚本参数" + argument, //步骤名称 step_no = step_no, //步骤编号 step_remark = "", //备注 task_detail_id = task_id ?? 0 //task_id }); stopwatch.Restart(); //计时器开始 var result = ShellUtil.ExecuteCommand("/bin/bash", argument, null); stopwatch.Stop();//计时器停止 step_2.run_status = RunStatus.已执行.ToString(); step_2.step_remark += "执行结果:" + (result.Item1 == true ? "无错误" : string.Concat("有错误,", result.Item2)); step_2.spend_time = (int)stopwatch.Elapsed.TotalSeconds; logService.Update(step_2); }); Logger.Info($"--------------执行SHELL命令完成--------------"); Logger.Info($"[AfterShellSql:]-- {AfterShellSql}"); if (!string.IsNullOrEmpty(AfterShellSql)) { conn.Open(); cmd.CommandText = AfterShellSql.Replace("@select_date", ttime).Replace("@select_hour", thour);//替换日期占位符 //记录日志到数据表 var step_3 = logService.Insert(new TableEntity.SingleUserAnalysisHistoryInfo() { col_create_time = DateTime.Now, error_msg = "", //异常信息 run_status = RunStatus.执行中.ToString(), spend_time = 0, //耗时 step_name = "(AfterShellSql)执行shell脚本之后的sql脚本", //步骤名称 step_no = step_no, //步骤编号 step_remark = "", //备注 task_detail_id = task_id ?? 0 //task_id }); stopwatch.Restart(); //计时器开始 int asqResult = 0; try { asqResult = cmd.ExecuteNonQuery(); Logger.Info($" {asqResult} 行受影响"); } catch (Exception ex) { step_3.error_msg = ex.Message; } stopwatch.Stop();//计时器停止 step_3.run_status = RunStatus.已执行.ToString(); step_3.step_remark = $" {asqResult} 行受影响"; step_3.spend_time = (int)stopwatch.Elapsed.TotalSeconds; logService.Update(step_3); conn.Close(); } step_no++; //记录日志到数据表 var step_4 = logService.Insert(new TableEntity.SingleUserAnalysisHistoryInfo() { col_create_time = DateTime.Now, error_msg = "", //异常信息 run_status = RunStatus.执行中.ToString(), spend_time = 0, //耗时 step_name = "查询完成,并更新任务状态", //步骤名称 step_no = step_no, //步骤编号 step_remark = "", //备注 task_detail_id = task_id ?? 0 //task_id }); stopwatch.Restart(); //计时器开始 sig_ue_mr_top200_job.completeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"); sig_ue_mr_top200_job.state = ExecStatus.已完成.ToString(); topService.Update(sig_ue_mr_top200_job); stopwatch.Stop();//计时器停止 step_4.run_status = RunStatus.已执行.ToString(); step_4.step_remark = "Top200用户批量UE_MR查询完成"; step_4.spend_time = (int)stopwatch.Elapsed.TotalSeconds; logService.Update(step_4); if (!string.IsNullOrEmpty(AutoDelete)) { Logger.Info($"[DeleteOldData:task_id]-- {task_id}"); conn.Open(); cmd.CommandText = string.Format(@"delete from sig_ue_mr_top200_plan where task_id={0}", task_id); cmd.ExecuteNonQuery(); Logger.Info($"[DeleteOldData:task_id]--completed"); } } } } catch (Exception ex) { Logger.Error(ex); } finally { conn.Close(); } } } catch (Exception ex) { Logger.Error(ex); } finally { IsActive = false; } } return(TaskUtil.CompletedTask); }
void worker_DoWork(object sender, DoWorkEventArgs e) { TradeTask tradeTask = (TradeTask)e.Argument; int total_num = tradeTask.totalNum; string shopNick = tradeTask.shopNic; string sessionKey = tradeTask.sessionKey; List <string> tidList = tradeTask.ShopTradeList; int CurrentNum = 0; BackgroundWorker worker = (BackgroundWorker)sender; //用于记录下载失败的订单信息 failedTrade = new FailedTrade(); //买家昵称列表 List <string> buyerNickList = new List <string>(); for (int i = 0; i < tidList.Count; i++) { /*线程取消*/ if (worker.CancellationPending) { e.Cancel = true; break; } try { TradeRsp fullinfoTraderspReturn = TopService.TradeFullinfoGet(sessionKey, tidList[i]); if (fullinfoTraderspReturn == null || fullinfoTraderspReturn.Trade == null) { //加锁 lock (lockObject) { /*记录下载失败的交易*/ failedTrade.tidList.Add(tidList[i]); failedTrade.sessionKey = sessionKey; failedTrade.shopNick = shopNick; } UserState stateFail = new UserState(); stateFail.taskIndex = tradeTask.threadIndex; stateFail.tidIndex = i + 1; stateFail.tid = tidList[i]; ProcessRecord++; currentProessNum++; stateFail.message = "交易获取失败!"; /*订单下载失败*/ worker.ReportProgress(-1, stateFail);/*下载失败*/ continue; } UserState stateSuccess = new UserState(); stateSuccess.taskIndex = tradeTask.threadIndex; stateSuccess.tidIndex = i + 1; currentProessNum++; stateSuccess.tid = tidList[i]; stateSuccess.currentProessNum = (int)((currentProessNum * 100) / (float)total_num); ProcessRecord++; stateSuccess.totalProcessNum = (int)((ProcessRecord * 100) / (float)TotalProessNum); worker.ReportProgress(stateSuccess.currentProessNum, stateSuccess);/*下载成功*/ Alading.Taobao.Entity.Trade fullinfoTradersp = fullinfoTraderspReturn.Trade; if (TradeService.AddTradeOrderBuyer(fullinfoTradersp) != ReturnType.Success) { UserState SaveFailState = new UserState(); SaveFailState.shopNick = shopNick; SaveFailState.message = "保存失败!"; worker.ReportProgress(1, SaveFailState);/*参数2:表示保存失败*/ } }/*try*/ catch (System.Exception ex) { ProcessRecord++; currentProessNum++; //加锁 lock (lockObject) { /*记录下载失败的交易*/ failedTrade.tidList.Add(tidList[i]); failedTrade.sessionKey = sessionKey; failedTrade.shopNick = shopNick; } UserState exceptionState = new UserState(); exceptionState.message = ex.Message.ToString(); exceptionState.taskIndex = tradeTask.threadIndex; exceptionState.tidIndex = i + 1; exceptionState.tid = tidList[i]; worker.ReportProgress(-1, exceptionState); } }/*for 对tid遍历*/ e.Result = tradeTask.threadIndex; }
void worker_DoWork(object sender, DoWorkEventArgs e) { ItemTask itemTask = e.Argument as ItemTask; List <string> iidlist = itemTask.iidList; BackgroundWorker worker = (BackgroundWorker)sender; int n = iidlist.Count; for (int i = 0; i < n; i++) { //完成数加1 itemCompleteNum++; if (isCancel) { e.Cancel = true; break; } string iid = iidlist[i]; ReturnType returntype = ItemService.IsItemExisted(iid); if (checkEditIsUpdate.CheckState != CheckState.Checked && returntype == ReturnType.PropertyExisted) { /*跳过本次下载*/ worker.ReportProgress(-2, string.Format("线程号{0},数据库已存在第{1}个宝贝,跳过下载", itemTask.threadIndex, i + 1)); continue; } string session = itemTask.sessionKey; string nick = itemTask.shopNic; try { ItemRsp myrsp = TopService.ItemGet(session, nick, iid, string.Empty); if (myrsp != null && myrsp.Item != null) { Alading.Entity.Item item = new Alading.Entity.Item(); UIHelper.ItemCopyData(item, myrsp.Item); ItemService.AddItem(item, checkEditIsUpdate.Checked); } else { if (failedDownload.iidList == null) { failedDownload.iidList = new List <string>(); } failedDownload.iidList.Add(iid); failedDownload.shopNick = nick; failedDownload.sessionKey = session; } //int progress = (int)((float)(i + 1) / (float)n * 100); worker.ReportProgress(itemCompleteNum, string.Format("{0}已成功下载第{1}个宝贝,线程号{2}", DateTime.Now.ToString(Constants.DATE_TIME_FORMAT), itemCompleteNum, itemTask.threadIndex)); } catch (System.Exception ex) { MyException myexc = new MyException(); myexc.position = i + 1; myexc.iid = iid; myexc.msg = ex.Message; myexc.threadIndex = itemTask.threadIndex; worker.ReportProgress(-1, myexc); if (failedDownload.iidList == null) { failedDownload.iidList = new List <string>(); } failedDownload.iidList.Add(iid); failedDownload.shopNick = nick; failedDownload.sessionKey = session; } } e.Result = itemTask.threadIndex; }
void mainWorker_DoWork(object sender, DoWorkEventArgs e) { try { BackgroundWorker worker = sender as BackgroundWorker; //threadCount = Convert.ToInt32(spinEditThreadCount.Value);//这里不必要了,在点击按钮时已经赋值 int pageSize = 40; for (int k = 0; k < downShopList.Count; k++) { var shop = downShopList[k]; if (worker.CancellationPending) { e.Cancel = true; return; } ReportState state = new ReportState() { Current = k + 1, Total = downShopList.Count, Message = string.Format("正在同步店铺 {0} 的客户...", shop.title), }; worker.ReportProgress(1, state); #region initialize query time DateTime begin = DateTime.Now; DateTime end = DateTime.Now; switch (typeIndex) { // 15 days case 0: begin = DateTime.Now.AddDays(-15); break; // customize case 1: begin = this.dateEditBegin.DateTime; end = this.dateEditEnd.DateTime; break; // since shop created case 2: begin = shop.created; break; } #endregion #region Get total trade count TradeReq request = new TradeReq(); request.Status = null; request.PageSize = pageSize; request.PageNo = 1; request.StartCreated = begin.ToString("yyyy-MM-dd HH:mm:ss"); request.EndCreated = end.ToString("yyyy-MM-dd HH:mm:ss"); string sessionkey = SystemHelper.GetSessionKey(shop.nick); TradeRsp response = TopService.TradesSoldGet(sessionkey, request); sub_done = 0; sub_total = response.TotalResults; #endregion if (sub_total == 0) { continue; } #region Dispatch task to thread threadList.Clear(); if (sub_total <= pageSize) { #region total count < page size SycTaskArgs task = new SycTaskArgs { ShopNick = shop.nick, PageSize = pageSize, QueryBeginTime = begin, QueryEndTime = end, }; task.PageNoList.Add(1); BackgroundWorker w = new BackgroundWorker { WorkerReportsProgress = true, WorkerSupportsCancellation = true, }; w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(w_RunWorkerCompleted); w.ProgressChanged += new ProgressChangedEventHandler(w_ProgressChanged); w.DoWork += new DoWorkEventHandler(w_DoWork); taskList.Add(task); threadList.Add(w); threadCount = 1; #endregion } else { int pageCount = (sub_total % pageSize == 0) ? (sub_total / pageSize) : (sub_total / pageSize + 1); if (threadCount < pageCount) { #region page count < thread count threadCount = pageCount; for (int i = 0; i < threadCount; i++) { SycTaskArgs task = new SycTaskArgs { ShopNick = shop.nick, PageSize = 40, QueryBeginTime = begin, QueryEndTime = end, }; task.PageNoList.Add(i + 1); BackgroundWorker w = new BackgroundWorker { WorkerReportsProgress = true, WorkerSupportsCancellation = true, }; w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(w_RunWorkerCompleted); w.ProgressChanged += new ProgressChangedEventHandler(w_ProgressChanged); w.DoWork += new DoWorkEventHandler(w_DoWork); taskList.Add(task); threadList.Add(w); } #endregion } else { #region page count > thread count for (int i = 0; i < threadCount; i++) { SycTaskArgs task = new SycTaskArgs { ShopNick = shop.nick, PageSize = 40, QueryBeginTime = begin, QueryEndTime = end, }; BackgroundWorker w = new BackgroundWorker { WorkerReportsProgress = true, WorkerSupportsCancellation = true, }; w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(w_RunWorkerCompleted); w.ProgressChanged += new ProgressChangedEventHandler(w_ProgressChanged); w.DoWork += new DoWorkEventHandler(w_DoWork); taskList.Add(task); threadList.Add(w); } int index = 0; for (int i = 0; i < pageCount; i++, index++) { if (index >= taskList.Count) { index = 0; } taskList[i].PageNoList.Add(i + 1); } #endregion } } #endregion #region run tasks signal = new AutoResetEvent(false); for (int i = 0; i < threadCount; i++) { threadList[i].RunWorkerAsync(taskList[i]); } signal.WaitOne(); #endregion } } catch (Exception ex) { XtraMessageBox.Show(ex.Message); } }
private void btnDowmItems_Click(object sender, EventArgs e) { try { if (cmbNick.Text == string.Empty) { XtraMessageBox.Show("请先选择店铺!", "提示"); return; } this.btnDowmItems.Enabled = false; //下载按钮不可用 this.btnRetry.Enabled = false; itemCompleteNum = 0; //下载完成数置0 threadCompleteNum = 0; //完成线程数置0 int pageSize = 200; int pageNo = 1; string fields = "iid,cid"; ItemRsp myrsp = null; string session = SystemHelper.GetSessionKey(cmbNick.Text); myrsp = TopService.ItemsAllGet(session, fields, 1, pageSize); if (myrsp.TotalResults == 0) { this.btnDowmItems.Enabled = true; XtraMessageBox.Show("无宝贝数据!"); return; } listBoxDetail.Items.Insert(0, string.Format("检测到店铺内宝贝数{0}个", myrsp.TotalResults)); listBoxDetail.Items.Insert(0, "开始下载……"); List <string> totalIidList = new List <string>(); /*把iid加入到iidlist中*/ if (myrsp.Items != null && myrsp.Items.Item != null) { foreach (Taobao.Entity.Item item in myrsp.Items.Item) { totalIidList.Add(item.Iid); } } #region 计算是否需要分页获取 if (myrsp.TotalResults % pageSize == 0) { pageNo = myrsp.TotalResults / pageSize; } else { pageNo = myrsp.TotalResults / pageSize + 1; } if (pageNo >= 2) { for (int i = 2; i <= pageNo; i++) { myrsp = TopService.ItemsAllGet(session, "iid", i, pageSize); if (myrsp.Items != null && myrsp.Items.Item != null) { foreach (Taobao.Entity.Item item in myrsp.Items.Item) { if (!totalIidList.Contains(item.Iid)) { totalIidList.Add(item.Iid); } } } } //for } //if #endregion //进度条最大值赋值 this.progressBarTotal.Properties.Maximum = totalIidList.Count; //线程数,全局变量 threadnum = (int)spinEditThreadCount.Value; int size = 0; if (totalIidList.Count < threadnum) { threadnum = totalIidList.Count; size = 1; } else { size = totalIidList.Count % threadnum == 0 ? totalIidList.Count / threadnum : totalIidList.Count / threadnum + 1; } for (int i = 0; i < threadnum; i++) { List <string> iidlist = totalIidList.Skip(i * size).Take(size).ToList(); BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); listBoxDetail.Items.Insert(0, string.Format("{0}线程{1}开始下载……", DateTime.Now.ToString(Constants.DATE_TIME_FORMAT), i + 1)); ItemTask itemTask = new ItemTask(); itemTask.iidList = iidlist; itemTask.threadIndex = i + 1; itemTask.sessionKey = session; itemTask.shopNic = cmbNick.Text; worker.RunWorkerAsync(itemTask); } } catch (System.Exception ex) { this.btnDowmItems.Enabled = true; listBoxDetail.Items.Insert(0, ex.Message); XtraMessageBox.Show(ex.Message, Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information); } }