/// <summary>
        /// 微信消息模板推送
        /// </summary>
        /// <param name="userids"></param>
        /// <param name="batchid"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static async Task <bool> PushByUserIDAndBatchIDAsync(IEnumerable <string> userids,
                                                                    int batchid, PushTemplateLog log)
        {
            try
            {
                using (var client = new TemplatePushClient())
                {
                    var pushResult = await client.PushByUserIDAndBatchIDAsync(userids, batchid, log);

                    if (pushResult.Success && pushResult.Result)
                    {
                        return(true);
                    }
                    else
                    {
                        Logger.Warn($"PushByUserIDAndBatchIDAsync 推送失败{pushResult.ErrorCode + pushResult.ErrorMessage}");
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error($"PushByUserIDAndBatchIDAsync 异常,{ex.Message + ex.StackTrace}", ex);
            }

            return(false);
        }
        private void PushMessage(int batchId, List <Guid> userList)
        {
            //var target = userList.Select(g => g.ToString("D")).ToList();
            var nickNameList = GetGroupBuyingUserName(userList);

            if (nickNameList.Any())
            {
                using (var client = new TemplatePushClient())
                {
                    foreach (var item in nickNameList)
                    {
                        var target = new List <string> {
                            item.Item1.ToString("D")
                        };
                        var nickName = item.Item2;
                        var result   =
                            client.PushByUserIDAndBatchID(target, batchId, new PushTemplateLog
                        {
                            Replacement = JsonConvert.SerializeObject(new Dictionary <string, string>
                            {
                                { "{{nickname}}", nickName }
                            })
                        });
                        if (!(result.Success && result.Result))
                        {
                            Logger.Warn(
                                $"向{item.Item1:d}/{item.Item2}用户推送信息{batchId}失败-->{result.Exception}");
                        }
                    }
                }
            }
        }
Пример #3
0
        public static List <PushTemplate> SelectTemplateByBatchID(int batchId)
        {
            List <PushTemplate> result = new List <PushTemplate>();

            try
            {
                using (var client = new TemplatePushClient())
                {
                    var getResult = client.SelectTemplateByBatchID(batchId);
                    getResult.ThrowIfException(true);
                    result = getResult.Result;
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
            return(result);
        }
        private void PushMessage(Guid userId, Guid idKey, int batchId, string ProductName, decimal FinalPrice, string pid, int apId, string simpleDisplayName, decimal originalPrice)
        {
            var target = new List <string>()
            {
                userId.ToString("D")
            };
            var nickName = "";

            using (var client = new UserAccountClient())
            {
                var searchResule = client.GetUserById(userId);
                if (searchResule.Success)
                {
                    nickName = searchResule.Result?.Profile?.NickName ?? "";
                }
            }
            using (var client = new TemplatePushClient())
            {
                var result = client.PushByUserIDAndBatchID(target, batchId, new PushTemplateLog()
                {
                    Replacement = JsonConvert.SerializeObject(new Dictionary <string, string>()
                    {
                        ["{{IdKey}}"]             = idKey.ToString("D"),
                        ["{{Pid}}"]               = pid,
                        ["{{AcitvityProductId}}"] = apId.ToString(),
                        ["{{ProductName}}"]       = ProductName,
                        ["{{NickName}}"]          = nickName,
                        ["{{ProductBriefName}}"]  = simpleDisplayName,
                        ["{{Price}}"]             = originalPrice.ToString("#0.00"),
                        ["{{ActivityPrice}}"]     = FinalPrice.ToString("#0.00")
                    }),
                });
                if (result.Success && result.Result)
                {
                    Logger.Info($"砍价消息推送成功,用户{userId},产品名称{ProductName},IdKey是{idKey},模板Id是{batchId}");
                }
                else
                {
                    Logger.Warn($"砍价消息推送失败,用户{userId},产品名称{ProductName},IdKey是{idKey},模板Id是{batchId}");
                }
            }
        }
Пример #5
0
        /// <summary>
        ///     推送消息
        /// </summary>
        /// <param name="cacheClient"></param>
        /// <param name="templatePushClient"></param>
        /// <param name="userId"></param>
        /// <param name="userClient"></param>
        private void PushMessage(
            int pushId
            , CacheClient cacheClient
            , UserClient userClient
            , TemplatePushClient templatePushClient
            , Guid userId
            , DateTime playtime)

        {
            var cacheKey = "/ActivityUserQuestionAnswerClear/" + userId.ToString("N");
            //判断redis里面今天是否已经推送过了
            var existsResult = cacheClient.Exists(cacheKey);

            //如果不存在
            if (!existsResult.Success)
            {
                var dateDiff = (DateTime.Now.Date.AddDays(1) - DateTime.Now).Add(TimeSpan.FromMinutes(5));
                //保存到cache中
                //今天不再推送
                var setResult = cacheClient.Set(cacheKey, 1, dateDiff);

                if (setResult.Success)
                {
                    //获取用户数据
                    var userInfo = userClient.FetchUserByUserId(userId.ToString());
                    if (userInfo != null && userInfo.Success && userInfo.Result != null)
                    {
                        templatePushClient.PushByUserIDAndBatchID(new List <string> {
                            userId.ToString()
                        }, pushId,
                                                                  new PushTemplateLog
                        {
                            Replacement = JsonConvert.SerializeObject(new Dictionary <string, string>
                            {
                                { "{{nickname}}", userInfo.Result.Nickname },
                                { "{{playtime}}", playtime.ToString("yyyy-MM-dd") },
                            })
                        });
                    }
                }
            }
        }
Пример #6
0
        /// <summary>
        /// 消息推送
        /// </summary>
        /// <param name="userids"></param>
        /// <param name="batchid"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public async static Task <OperationResult <bool> > PushByUserIDAndBatchIDAsync(IEnumerable <string> userids, int batchid, PushTemplateLog log)
        {
            if (userids != null && userids.Any())
            {
                using (var client = new TemplatePushClient())
                {
                    var result = await client.PushByUserIDAndBatchIDAsync(userids, batchid, log);

                    if (!result.Success)
                    {
                        Logger.Error($" PushByUserIDAndBatchIDAsync fail => ErrorCode ={result.ErrorCode} & ErrorMessage ={result.ErrorMessage} ");
                    }
                    return(result);
                }
            }
            else
            {
                return(OperationResult.FromResult(true));
            }
        }
Пример #7
0
        private void PushMessage(Guid packetGroupNo, string nickName, int count, Guid userId)
        {
            var templateLog = new PushTemplateLog
            {
                Replacement = JsonConvert.SerializeObject(new Dictionary <string, string>
                {
                    { "{{leftnumber}}", count.ToString() },
                    { "{{packetgroupno}}", packetGroupNo.ToString("D") },
                    { "{{nickname}}", nickName }
                })
            };

            var client  = new TemplatePushClient();
            int batchId = 1642;
            var target  = userId.ToString("D");

            try
            {
                var result =
                    client.PushByUserIDAndBatchID(new List <string> {
                    target.ToLower()
                }, batchId, templateLog);
                result.ThrowIfException(true);
                if (!(result.Success && result.Result))
                {
                    Logger.Warn(
                        $"向用户{JsonConvert.SerializeObject(target)}推送信息{JsonConvert.SerializeObject(templateLog)},推送失败",
                        result.Exception);
                }
            }
            catch (Exception ex)
            {
                Logger.Warn($"向用户{JsonConvert.SerializeObject(target)}推送信息{batchId}出现异常", ex);
            }
            finally
            {
                client.Dispose();
            }
        }
        public void Execute(IJobExecutionContext context)
        {
            Logger.Info("启动任务");

            //var testUser = "";
            //using (var cmd = new SqlCommand(@"SELECT  Value TotalDuration,
            //        Description MsgTitle
            //FROM    Gungnir..RuntimeSwitch WITH ( NOLOCK )
            //WHERE   SwitchName = N'OrderPushMessageJob';"))
            //{
            //    var swithcConfig = DbHelper.ExecuteSelect<MessagePushConfig>(cmd)?.FirstOrDefault();
            //    if (swithcConfig?.TotalDuration == null || swithcConfig.TotalDuration == 0)
            //    {
            //        Logger.Info("任务关闭");
            //        return;
            //    }
            //    testUser = swithcConfig.MsgTitle;
            //}

            using (var command = new SqlCommand(@"
SELECT  PKID ,
        EnID,
        MsgTitle,
        MsgContent,
        MsgLink,
        MsgDescription,
        TotalDuration,
        AheadHour
FROM    Configuration..tbl_MessagePush WITH(NOLOCK)
WHERE   EnID = 'pingjiatixing'; "))
            {
                var msgConfig = DbHelper.ExecuteSelect <MessagePushConfig>(command)?.First();

                using (var cmd = new SqlCommand(@"
SELECT TOP 500
        O.UserID ,
        O.OrderNo ,
        UserTel AS Phone ,
        O.PKID AS OrderID ,
        O.UserID Device_Tokens,
        ISNULL(O.OrderProducts, O.OrderNo) AS Products,
        O.OrderDatetime
FROM    Gungnir..tbl_Order AS O WITH ( NOLOCK )
WHERE   Status <> '7Canceled'
        AND CommentStatus = 1
        AND OrderDatetime >= '2016-4-25'
        AND O.OrderChannel != N'r天猫马牌'
        AND NOT EXISTS ( SELECT 1
                         FROM   SystemLog..tbl_OrderPushInfo AS OPI WITH ( NOLOCK )
                         WHERE  OrderID = O.PKID
                                AND MsgType = 'pingjiatixing' )
ORDER BY O.PKID DESC;"))
                {
                    try
                    {
                        var dt = DbHelper.ExecuteSelect <PushInfoModel>(true, cmd)?.ToList();
                        foreach (var d in dt)
                        {
                            var productName = d.Products;
                            if (!string.IsNullOrWhiteSpace(productName))
                            {
                                if (productName.Length > 30)
                                {
                                    productName = productName.Substring(0, 20) + "...";
                                }
                            }
                            else
                            {
                                productName = "";
                            }
                            using (var client = new TemplatePushClient())
                            {
                                //var userids = testUser == "all" ? new List<string>() { d.Device_Tokens } : testUser.Split(',').ToList();
                                var userids = new List <string>()
                                {
                                    d.Device_Tokens
                                };
                                var result = client.PushByUserIDAndBatchID(
                                    userids,
                                    450,
                                    new Service.Push.Models.Push.PushTemplateLog()
                                {
                                    Replacement = JsonConvert.SerializeObject(new Dictionary <string, string>
                                    {
                                        ["{{ios.orderid}}"]        = d.OrderNo,
                                        ["{{android.orderid}}"]    = d.OrderNo,
                                        ["{{messagebox.orderid}}"] = d.OrderNo,
                                        ["{{replace.orderid}}"]    = d.OrderNo,
                                        ["{{first.DATA}}"]         = $"您还有订单没有评价哦,评价就有机会获得最高100积分奖励,赶紧来吧!",
                                        ["{{keyword1.DATA}}"]      = productName,
                                        ["{{keyword2.DATA}}"]      = d.OrderDatetime.ToString("yyyy-MM-dd HH:mm"),

                                        ["{{remark.DATA}}"]    = $"点击赢取积分奖励",
                                        ["{{wxopen.orderid}}"] = d.OrderNo,
                                    }),
                                    DeviceType = Service.Push.Models.Push.DeviceType.iOS
                                });
                                if (result?.Result == null || !result.Success || !result.Result)
                                {
                                    Logger.Error($"推送失败{result.ErrorCode};{result.ErrorMessage}", result.Exception);
                                    //continue;
                                }
                                //if (testUser == "all")
                                InsetPushInfo(d.OrderID, msgConfig.EnID, "All");
                                //else
                                //{
                                //    return;
                                //}
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex.Message, ex);
                    }
                }
            }
            Logger.Info("结束任务");
        }
Пример #9
0
        /// <summary>
        ///     清算用户数据
        /// </summary>
        /// <param name="questionModel"></param>
        /// <param name="activityId"></param>
        private void UserAnswerClear(QuestionModel questionModel, long activityId)
        {
            var questionId = questionModel.PKID;
            //获取题目的选项和子项
            var options = DalActivity.SearchQuestionOption(questionId)?.ToList();

            if (options?.Count == 0)
            {
                return;
            }
            //正确选项
            var rightOption = options.FirstOrDefault(p => p.QuestionParentID == 0 && p.IsRightValue == 1);

            if (rightOption == null)
            {
                return;
            }
            var i = 1;

            using (var db = DbHelper.CreateDbHelper())
                using (var configClient = new ConfigClient())
                    using (var userClient = new UserClient())
                        using (var activityClient = new ActivityClient())
                            using (var templatePushClient = new TemplatePushClient())
                                using (var cacheClient = CacheHelper.CreateCacheClient("ActivityUserQuestionAnswerClear"))
                                {
                                    //推送的开关设置
                                    var pushResult = configClient.GetOrSetRuntimeSwitch("activityquestionclearpush")?.Result;
                                    //推送开关
                                    var pushFlag = pushResult?.Value ?? false;
                                    //推送的模板ID
                                    var pushIdstr = pushResult?.Description;
                                    var pushId    = 0;
                                    int.TryParse(pushIdstr, out pushId);
                                    while (true)
                                    {
                                        var ts = new Stopwatch();
                                        ts.Start();
                                        var clearCount = 1000;
                                        //获取用户答题尚未清算数据
                                        var userAnswerNotClearDatas = DalActivity.SearchUserAnswerNotClear(questionId, clearCount)?.ToList();
                                        if (userAnswerNotClearDatas?.Count == 0)
                                        {
                                            break;
                                        }

                                        //循环用户数据
                                        userAnswerNotClearDatas.AsParallel().ForAll(userData =>
                                        {
                                            try
                                            {
                                                //用户选择的选项
                                                var userOption = options.FirstOrDefault(p => p.PKID == userData.AnswerOptionID);
                                                if (userOption != null)
                                                {
                                                    Logger.Info($"开始清算用户数据:{userData.UserID} {userData.AnswerOptionID}");

                                                    //找用户选项的根选项
                                                    var rootOption = GetRootOption(userOption, options);
                                                    //判断是否正确选项
                                                    //正确则赠送兑换券 否则不赠送兑换券
                                                    if (rootOption.PKID == rightOption.PKID)
                                                    {
                                                        //更新回答结果
                                                        var resultAnswer = activityClient.ModifyQuestionUserAnswerResult(
                                                            new ModifyQuestionUserAnswerResultRequest()
                                                        {
                                                            AnswerResultStatus = 1,
                                                            ResultId           = userData.PKID,
                                                            WinCouponCount     = userData.WinCouponCount
                                                        });

                                                        if (resultAnswer?.Result?.IsOk == true)
                                                        {
                                                            //更新兑换券 和 日志
                                                            var result = activityClient.ModifyActivityCoupon(userData.UserID,
                                                                                                             activityId,
                                                                                                             userOption.WinCouponCount ?? 0
                                                                                                             , "答题清算服务"
                                                                                                             , userData.AnswerDate);
                                                            if (!result.Success && result.Result <= 0)
                                                            {
                                                                Logger.Warn($"请求 ModifyActivityCoupon 失败 {result.ErrorMessage}");
                                                                //回滚
                                                                DalActivity.UpdateUserAnswerResult(db, userData.PKID,
                                                                                                   userData.WinCouponCount, 0);
                                                                return;
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        //更新用户答题结果
                                                        var resultAnswer = activityClient.ModifyQuestionUserAnswerResult(
                                                            new ModifyQuestionUserAnswerResultRequest()
                                                        {
                                                            AnswerResultStatus = 2,
                                                            ResultId           = userData.PKID,
                                                            WinCouponCount     = 0
                                                        });
                                                    }
                                                    Logger.Info($"用户 {userData.UserID} ");
                                                    //推送消息 判断推送开关是否开启
                                                    if (pushFlag && pushId != 0)
                                                    {
                                                        PushMessage(pushId, cacheClient, userClient, templatePushClient, userData.UserID, userData.CreateDatetime);
                                                    }
                                                }
                                            }
                                            catch (Exception e)
                                            {
                                                Logger.Error($" {nameof(ActivityUserQuestionAnswerClearJob)} 失败 ", e);
                                            }
                                        });
                                        ts.Stop();
                                        Logger.Info($" {nameof(UserAnswerClear)} 清算 {clearCount} 条数据 执行时间 {ts.Elapsed.TotalSeconds} 秒 ");
                                        i++;
                                    }
                                }
        }
Пример #10
0
        public void Execute(IJobExecutionContext context)
        {
            Logger.Info("启动任务");

            //var testUser = "";
            //using (var cmd = new SqlCommand(@"SELECT  Value TotalDuration,
            //        Description MsgTitle
            //FROM    Gungnir..RuntimeSwitch WITH ( NOLOCK )
            //WHERE   SwitchName = N'OrderPushJob';"))
            //{
            //    var swithcConfig = DbHelper.ExecuteSelect<MessagePushConfig>(cmd)?.FirstOrDefault();
            //    if (swithcConfig?.TotalDuration == null || swithcConfig.TotalDuration == 0)
            //    {
            //        Logger.Info("任务关闭");
            //        return;
            //    }
            //    testUser = swithcConfig.MsgTitle;
            //}

            #region 处理1
            using (var cmd = new SqlCommand(@"
SELECT  PKID,
        EnID,
        MsgTitle,
        MsgContent,
        MsgLink,
        MsgDescription,
        TotalDuration,
        AheadHour
FROM    Configuration..tbl_MessagePush WITH(NOLOCK) WHERE  EnID='fukuanchaoshitixing'"))
            {
                var msgConfig = DbHelper.ExecuteSelect <MessagePushConfig>(cmd)?.First();
                #region 数据处理
                using (var c = new SqlCommand(@"
SELECT  *
FROM    ( SELECT    O.UserID ,
                    O.OrderNo ,
                    UserTel AS Phone ,
                    O.PKID AS OrderID ,
                    O.UserID Device_Tokens,
                    ISNULL(O.OrderProducts, O.OrderNo) AS Products,
                    O.OrderDateTime
          FROM      Gungnir..tbl_Order AS O WITH ( NOLOCK )
          WHERE     Status <> '7Canceled'
                    AND OrderDatetime >= @StarTime
                    AND OrderDatetime <= @EndTime
                    AND PayStatus = '1Waiting'
                    AND PayMothed IN ( '5Alipay', 'aweixin', 'bWeiXin',
                                       'fXianShangZhiFu' )
                    AND O.OrderType <> N'6美容'
                    AND O.OrderChannel != N'r天猫马牌'
        ) AS T
WHERE   NOT EXISTS ( SELECT 1
                     FROM   SystemLog..tbl_OrderPushInfo AS OPI WITH ( NOLOCK )
                     WHERE  OrderID = T.OrderID
                            AND MsgType = 'fukuanchaoshitixing' );"))
                {
                    try
                    {
                        c.Parameters.AddWithValue("@StarTime", DateTime.Now.AddHours(-(msgConfig.TotalDuration.Value - msgConfig.AheadHour.Value)).ToString("yyyy-MM-dd HH:00:00"));
                        c.Parameters.AddWithValue("@EndTime", DateTime.Now.AddHours(-(msgConfig.TotalDuration.Value - msgConfig.AheadHour.Value)).ToString("yyyy-MM-dd HH:59:59"));

                        var dt = DbHelper.ExecuteSelect <PushInfoModel>(true, c)?.ToList();
                        foreach (var d in dt)
                        {
                            var productName = d.Products;
                            if (!string.IsNullOrWhiteSpace(productName))
                            {
                                if (productName.Length > 30)
                                {
                                    productName = productName.Substring(0, 20);
                                }
                            }
                            else
                            {
                                productName = "";
                            }

                            using (var client = new TemplatePushClient())
                            {
                                //var userids = testUser == "all" ? new List<string>() { d.Device_Tokens } : testUser.Split(',').ToList();
                                var userids = new List <string>()
                                {
                                    d.Device_Tokens
                                };
                                var result = client.PushByUserIDAndBatchID(
                                    userids,
                                    453,
                                    new Service.Push.Models.Push.PushTemplateLog()
                                {
                                    Replacement = JsonConvert.SerializeObject(new Dictionary <string, string>
                                    {
                                        ["{{ios.productname}}"]        = productName,
                                        ["{{ios.hour}}"]               = (msgConfig.AheadHour)?.ToString(),
                                        ["{{ios.orderid}}"]            = d.OrderNo,
                                        ["{{android.productname}}"]    = productName,
                                        ["{{android.hour}}"]           = (msgConfig.AheadHour)?.ToString(),
                                        ["{{android.orderid}}"]        = d.OrderNo,
                                        ["{{messagebox.productname}}"] = productName,
                                        ["{{messagebox.hour}}"]        = (msgConfig.AheadHour)?.ToString(),
                                        ["{{messagebox.orderid}}"]     = d.OrderNo,
                                        ["{{replace.orderid}}"]        = d.OrderNo,
                                        ["{{first.DATA}}"]             = $"您选购的【{productName}】未付款,再过{(msgConfig.AheadHour)?.ToString()}小时将会被取消订单,请抓紧付款哦!",
                                        ["{{OrderSn.DATA}}"]           = d.OrderNo,
                                        ["{{OrderStatus.DATA}}"]       = "即将到达付款期限",
                                        ["{{remark.DATA}}"]            = "点击查看订单详情",
                                        ["{{wxopen.orderid}}"]         = d.OrderNo,
                                    }),
                                    DeviceType = Service.Push.Models.Push.DeviceType.iOS
                                });
                                if (result?.Result == null || !result.Success || !result.Result)
                                {
                                    Logger.Error($"推送失败{result.ErrorCode};{result.ErrorMessage}", result.Exception);
                                    //continue;
                                }
                                //if (testUser == "all")
                                InsetPushInfo(d.OrderID, msgConfig.EnID, "All");
                                //else
                                //{
                                //    return;
                                //}
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex.Message, ex);
                    }
                }
                #endregion
            }
            #endregion
            Logger.Info("结束任务");
        }
        public void Execute(IJobExecutionContext context)
        {
            Logger.Info("启动任务");

            //var testUser = "";
            //using (var cmd = new SqlCommand(@"SELECT Value TotalDuration,
            //        Description MsgTitle
            //FROM    Gungnir..RuntimeSwitch WITH ( NOLOCK )
            //WHERE   SwitchName = N'InstallOrderPushJob';"))
            //{
            //    var swithcConfig = DbHelper.ExecuteSelect<MessagePushConfig>(cmd)?.FirstOrDefault();
            //    if (swithcConfig?.TotalDuration == null || swithcConfig.TotalDuration == 0)
            //    {
            //        Logger.Info("任务关闭");
            //        return;
            //    }
            //    testUser = swithcConfig.MsgTitle;
            //}

            #region 处理1
            using (var cmd = new SqlCommand("SELECT * FROM Configuration.. tbl_MessagePush WITH(NOLOCK) WHERE  EnID in('anzhuangchaoshiyifukuantixing','anzhuangchaoshiweifukuantixing')"))
            {
                var msgConfig = DbHelper.ExecuteSelect <MessagePushConfig>(cmd)?.ToList();

                foreach (var i in msgConfig)
                {
                    #region 数据处理
                    using (var c = new SqlCommand(@"
SELECT  *
FROM    ( SELECT    O.UserID ,
                    O.OrderNo ,
                    UserTel AS Phone ,
                    O.PKID AS OrderID ,
                    O.UserID Device_Tokens,
                    ISNULL(O.OrderProducts, O.OrderNo) AS Products,
                    O.OrderDatetime
          FROM      Gungnir..tbl_Order AS O WITH ( NOLOCK )
                    LEFT JOIN Gungnir.dbo.tbl_OrderDeliveryLog AS LG WITH ( NOLOCK ) ON O.PKID = LG.OrderID
          WHERE     Status <> '7Canceled'
                    AND ( LG.DeliveryStatus = '3Received'
                          OR LG.DeliveryStatus = '3.5Signed'
                        )
                    AND LG.DeliveryDatetime >= @StarTime
                    AND LG.DeliveryDatetime < @EndTime
                    AND PayStatus = @PayStatus
                    AND O.OrderType <> N'6美容'
                    AND O.OrderChannel != N'r天猫马牌'
                    AND InstallType = '1ShopInstall'
                    AND InstallShopID > 0
                    AND InstallStatus <> '2Installed'
                    AND InstallStatus <> '3NoInstall'
                    AND ( O.DeliveryStatus = '3Received'
                          OR O.DeliveryStatus = '3.5Signed'
                        )
        ) AS T
WHERE   NOT EXISTS ( SELECT 1
                     FROM   SystemLog..tbl_OrderPushInfo AS OPI WITH ( NOLOCK )
                     WHERE  OrderID = T.OrderID
                            AND MsgType = @MsgType );"))
                    #endregion
                    {
                        try
                        {
                            var MsgId = 0;
                            c.Parameters.AddWithValue("@StarTime", DateTime.Now.AddHours(-(i.TotalDuration.Value - i.AheadHour.Value)).ToString("yyyy-MM-dd"));
                            c.Parameters.AddWithValue("@EndTime", DateTime.Now.AddHours(-(i.TotalDuration.Value - i.AheadHour.Value)).AddDays(1).ToString("yyyy-MM-dd"));
                            if (i.EnID == "anzhuangchaoshiyifukuantixing")
                            {
                                c.Parameters.AddWithValue("@PayStatus", "2Paid");
                                MsgId = MsgId_YFK;
                            }
                            else
                            {
                                c.Parameters.AddWithValue("@PayStatus", "1Waiting");
                                MsgId = MsgId_WFK;
                            }
                            c.Parameters.AddWithValue("@MsgType", i.EnID);

                            var dt = DbHelper.ExecuteSelect <PushInfoModel>(true, c)?.ToList();
                            foreach (var d in dt)
                            {
                                var productName = d.Products;
                                if (!string.IsNullOrWhiteSpace(productName))
                                {
                                    if (productName.Length > 30)
                                    {
                                        productName = productName.Substring(0, 20);
                                    }
                                }
                                else
                                {
                                    productName = "";
                                }
                                //var userids = testUser == "all" ? new List<string>() { d.Device_Tokens } : testUser.Split(',').ToList();
                                var userids = new List <string>()
                                {
                                    d.Device_Tokens
                                };
                                using (var client = new TemplatePushClient())
                                {
                                    var replacementdict = new Dictionary <string, string>
                                    {
                                        ["{{ios.productname}}"]        = productName,
                                        ["{{ios.day}}"]                = (i.AheadHour / 24)?.ToString(),
                                        ["{{ios.orderid}}"]            = d.OrderNo,
                                        ["{{android.productname}}"]    = productName,
                                        ["{{android.day}}"]            = (i.AheadHour / 24)?.ToString(),
                                        ["{{android.orderid}}"]        = d.OrderNo,
                                        ["{{messagebox.productname}}"] = productName,
                                        ["{{messagebox.day}}"]         = (i.AheadHour / 24)?.ToString(),
                                        ["{{messagebox.orderid}}"]     = d.OrderNo,
                                        ["{{replace.orderid}}"]        = d.OrderNo
                                    };
                                    if (MsgId == MsgId_YFK)
                                    {
                                        replacementdict["{{first.DATA}}"] =
                                            $"您预约的【{productName}】未进行安装,再过{(i.AheadHour / 24)?.ToString()}天将会被取消订单,请抓紧去门店享受服务吧!";
                                        replacementdict["{{OrderSn.DATA}}"]     = d.OrderNo;
                                        replacementdict["{{OrderStatus.DATA}}"] = "即将到达安装期限";
                                        replacementdict["{{remark.DATA}}"]      = "点击查看订单详情";
                                        replacementdict["{{wxopen.orderid}}"]   = d.OrderNo;
                                    }
                                    if (MsgId == MsgId_WFK)
                                    {
                                        replacementdict["{{first.DATA}}"] =
                                            $"您预约的{productName}未进行安装,再过{(i.AheadHour / 24)?.ToString()}天将会被取消订单,请抓紧去门店享受服务吧!";
                                        replacementdict["{{OrderSn.DATA}}"]     = d.OrderNo;
                                        replacementdict["{{OrderStatus.DATA}}"] = "即将到达安装期限";
                                        replacementdict["{{remark.DATA}}"]      = "点击查看订单详情";
                                        replacementdict["{{wxopen.orderid}}"]   = d.OrderNo;
                                    }
                                    var result = client.PushByUserIDAndBatchID(
                                        userids,
                                        MsgId,
                                        new Service.Push.Models.Push.PushTemplateLog()
                                    {
                                        Replacement = JsonConvert.SerializeObject(replacementdict),
                                        DeviceType  = Service.Push.Models.Push.DeviceType.iOS
                                    });
                                    if (result?.Result == null || !result.Success || !result.Result)
                                    {
                                        Logger.Error($"推送失败{result.ErrorCode};{result.ErrorMessage}", result.Exception);
                                        //continue;
                                    }
                                    //if (testUser == "all")
                                    InsetPushInfo(d.OrderID, i.EnID, "All");
                                    //else
                                    //{
                                    //    return;
                                    //}
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Error(ex.Message, ex);
                        }
                    }
                }
            }
            #endregion
            Logger.Info("结束任务");
        }
        public void Execute(IJobExecutionContext context)
        {
            Logger.Info("启动任务");

            //var testUser = "";
            //using (var cmd = new SqlCommand(@"SELECT  Value TotalDuration,
            //        Description MsgTitle
            //FROM    Gungnir..RuntimeSwitch WITH ( NOLOCK )
            //WHERE   SwitchName = N'OrderPushDeliveryCodeJob';"))
            //{
            //    var swithcConfig = DbHelper.ExecuteSelect<MessagePushConfig>(cmd)?.FirstOrDefault();
            //    if (swithcConfig?.TotalDuration == null || swithcConfig.TotalDuration == 0)
            //    {
            //        Logger.Info("任务关闭");
            //        return;
            //    }
            //    testUser = swithcConfig.MsgTitle;
            //}

            #region 处理1
            using (var cmd = new SqlCommand("SELECT * FROM Configuration.. tbl_MessagePush WITH(NOLOCK) WHERE  EnID='fahuotixing'"))
            {
                try
                {
                    var msgConfig = DbHelper.ExecuteSelect <MessagePushConfig>(cmd)?.First();

                    #region 数据处理
                    using (var c = new SqlCommand(@"
SELECT  *
FROM    ( SELECT    O.OrderNo ,
                    O.PKID AS OrderID ,
                    O.UserID Device_Tokens,
                    O.UserTel AS Phone ,
                    ISNULL(O.OrderProducts, O.OrderNo) AS Products ,
                    LT.DeliveryCode,
                    O.OrderDatetime
          FROM      Gungnir..tbl_Order AS O WITH ( NOLOCK )
                    INNER JOIN WMSSERVER.WMS.dbo.LogisticTask AS LT WITH ( NOLOCK ) ON O.PKID = LT.OrderId
          WHERE     LT.TaskStatus = '3Sent'
                    AND Status = '2Shipped'
                    AND DeliveryStatus = '2Sent'
                    AND O.DeliveryType <> '4NoDelivery'
                    AND InstallType = '3NoInstall'
                    AND O.OrderType <> N'6美容'
                    AND O.OrderChannel != N'r天猫马牌'
                    AND O.OrderDatetime >= '2016-4-24' 
                    --AND LT.DeliveryCode <> ''
                    --AND LT.DeliveryCode IS NOT NULL
        ) AS T
WHERE   NOT EXISTS ( SELECT 1
                     FROM   SystemLog..tbl_OrderPushInfo AS OPI WITH ( NOLOCK )
                     WHERE  OrderID = T.OrderID
                            AND MsgType = 'fahuotixing' )
ORDER BY T.OrderID DESC; "))
                    {
                        try
                        {
                            var dt = DbHelper.ExecuteSelect <PushInfoModel>(true, c)?.ToList();
                            foreach (var d in dt)
                            {
                                var productName = d.Products;
                                if (!string.IsNullOrWhiteSpace(productName))
                                {
                                    if (productName.Length > 30)
                                    {
                                        productName = productName.Substring(0, 20) + "...";
                                    }
                                }
                                else
                                {
                                    productName = "";
                                }
                                string company       = "";
                                var    DeliveryInfos = SelectOrderDeliveryInfosByOrderId(Convert.ToInt32(d.OrderID), d.UserID);
                                if (DeliveryInfos != null && DeliveryInfos.Any())
                                {
                                    var m = DeliveryInfos.FirstOrDefault(
                                        x => !string.IsNullOrEmpty(x.DeliveryCode) &&
                                        x.DeliveryCode.Contains(d.DeliveryCode));
                                    if (m != null)
                                    {
                                        company = m.DeliveryCompany;
                                    }
                                }
                                using (var client = new TemplatePushClient())
                                {
                                    // var userids = testUser == "all" ? new List<string>() { d.Device_Tokens } : testUser.Split(',').ToList();
                                    var userids = new List <string>()
                                    {
                                        d.Device_Tokens
                                    };
                                    var replacementdict = new Dictionary <string, string>
                                    {
                                        ["{{ios.productname}}"]        = productName,
                                        ["{{ios.trackingno}}"]         = d.DeliveryCode,
                                        ["{{ios.orderid}}"]            = d.OrderNo,
                                        ["{{android.productname}}"]    = productName,
                                        ["{{android.trackingno}}"]     = d.DeliveryCode,
                                        ["{{android.orderid}}"]        = d.OrderNo,
                                        ["{{messagebox.productname}}"] = productName,
                                        ["{{messagebox.trackingno}}"]  = d.DeliveryCode,
                                        ["{{messagebox.orderid}}"]     = d.OrderNo,
                                        ["{{replace.orderid}}"]        = d.OrderNo,
                                        ["{{first.DATA}}"]             = $"亲,您购买的宝贝{productName}已经启程了,好想快点来到你身边",
                                        ["{{keyword1.DATA}}"]          = d.OrderNo,
                                        ["{{OrderStatus.DATA}}"]       = "订单已发货",
                                        ["{{OrderSn.DATA}}"]           = d.OrderNo,
                                        ["{{keyword2.DATA}}"]          = company,
                                        ["{{keyword3.DATA}}"]          = d.DeliveryCode,
                                        ["{{remark.DATA}}"]            = $"点击查看订单详情",
                                        ["{{wxopen.orderid}}"]         = d.OrderNo,
                                    };


                                    var result = client.PushByUserIDAndBatchID(
                                        userids,
                                        439,
                                        new Service.Push.Models.Push.PushTemplateLog()
                                    {
                                        Replacement = JsonConvert.SerializeObject(replacementdict),
                                        DeviceType  = Service.Push.Models.Push.DeviceType.iOS
                                    });
                                    if (result?.Result == null || !result.Success || !result.Result)
                                    {
                                        Logger.Error($"推送失败{result.ErrorCode};{result.ErrorMessage}", result.Exception);
                                        //continue;
                                    }
                                    //if (testUser == "all")
                                    InsetPushInfo(d.OrderID, msgConfig.EnID, "All");
                                    //else
                                    //{
                                    //    return;
                                    //}
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Error(ex.Message, ex);
                        }
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    Logger.Error(ex.Message, ex);
                }
            }
            #endregion
            Logger.Info("结束任务");
        }