/// <summary> /// 执行 /// </summary> public override void Execute() { var ServiceTime = DateTime.Now; while (true) { try { //从预约订单推送消息数据链表左边起获取一条数据 AssignOrderPushContent content = RedisDB.ListLeftPop <AssignOrderPushContent>(LegworkConfig.RedisKey.LegworkUserAddOrder); //不存在,则休眠1秒钟,避免CPU空转 if (null == content) { Thread.Sleep(100); continue; } //获取预约订单推送接口配置信息 var apiConfig = PushApiConfigManager.GetApiConfig(SysEnums.PushType.LegworkUserAddOrder); if (null == apiConfig) { continue; } //将订单数据转换成为字典以便参与接口加密 var dic = content.ToMap(); if (apiConfig.Method == "get") { DefaultClient.DoGet(apiConfig.Url, dic, PushApiConfigManager.Config.ModuleID, PushApiConfigManager.Config.Secret); } else if (apiConfig.Method == "post") { DefaultClient.DoPost(apiConfig.Url, dic, PushApiConfigManager.Config.ModuleID, PushApiConfigManager.Config.Secret); ExceptionLoger loger = new ExceptionLoger(@"/logs/Sccess" + DateTime.Now.ToString("yyyyMMdd") + ".txt"); loger.Success("用户下单推送给工作端推送时", "推送结果:订单编号为“" + content.OrderCode + "”"); } } catch (Exception ex) { if (ServiceTime.AddHours(1) >= DateTime.Now) { ServiceTime = DateTime.Now; //异常处理 ExceptionLoger loger = new ExceptionLoger(@"/logs/Error" + DateTime.Now.ToString("yyyyMMdd") + ".txt"); loger.Write("用户下单,用户下单推送给工作端", ex); } Thread.Sleep(100); continue; } } }
public static AssignOrderPushContent PushAddAssignOrderPushContent(long orderID) { using (var db = new DataContext()) { var legworkOrder = db.Legwork_Order.Where(q => q.OrderID == orderID).FirstOrDefault(); if (legworkOrder != null) { var deliveryModel = GetAddress(legworkOrder.RequiredDeliveryAddressID); #region 计算区域ID var listAreaID = db.Legwork_AreaConfig.Select(q => q.AreaID).ToArray(); bool result = false; int AreaID = 0; foreach (var i in listAreaID) { //获取开通跑腿区域 var openAreas = db.Legwork_AreaConfig.Where(p => p.AreaID == i).Select(t => t.OpenAreas).FirstOrDefault().Split(',').Select(p => p.ToInt32()); if (!openAreas.HasValue()) { return(null); } //获取区域经纬度 try { var listArea = db.System_Area.Where(q => openAreas.Contains(q.AreaID)).Select(t => t.Points).Select(p => Newtonsoft.Json.JsonConvert.DeserializeObject <List <List <AreaModel> > >(p)); if (!listArea.HasValue()) { return(null); } foreach (var list1 in listArea) { foreach (var list2 in list1) { result = LocationUtility.IsInPolygon(new Location(deliveryModel.Latitude, deliveryModel.Longitude), list2.Select(p => new Location(p.lat, p.lng)).ToList()); if (result) { AreaID = i; break; ; } } if (result) { break; } } if (result) { break; } } catch { continue; } } #endregion string PushCode = ""; var userList = (from a in db.Worker_Account join b in db.Worker_BusinessRelation on a.WorkerID equals b.WorkerID where a.AccountStatus == (short)WorkerAccountStatus.Normal && a.WorkingState == (short)WorkingState.Enabled && a.DefaultAreaID == AreaID && b.AuditStatus == (int)WorkerBusinessAuditStatus.Passed && b.BusinessType == (int)BusinessType.LegworkService select new { a.PushCode }).ToArray(); if (!userList.Any()) { return(null); } foreach (var item in userList) { if (!string.IsNullOrWhiteSpace(item.PushCode)) { PushCode += item.PushCode + ","; } } AssignOrderPushContent assignOrder = new AssignOrderPushContent() { PushCode = PushCode.TrimEnd(new char[] { ',' }), CreateTime = legworkOrder.SubmitTime, OrderID = legworkOrder.OrderID, OrderType = legworkOrder.OrderType, OrderCode = legworkOrder.OrderCode, }; return(assignOrder); } return(null); } }