/// <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;
                }
            }
        }
Esempio n. 2
0
        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);
            }
        }