Пример #1
0
        private async Task DoExecute(MpMessageDto args)
        {
            LogWriter.Info(string.Format("群发消息开始 {0}", args.Id));
            var account = await _mpAccountAppService.GetCache(args.MpID);

            #region 初始化数据
            args.SendState = (int)MpMessageTaskState.Doing;

            await _mpMessageAppService.UpdateSendState(new List <MpMessageDto> {
                args
            });

            #endregion

            #region 获取美池OpenID
            List <string> OpenIDs = new List <string>();
            if (!string.IsNullOrEmpty(args.GroupIds))
            {
                if (args.IsMember == IsMemberEnum.ALL.ToString())
                {
                    await SendAllAsync(account, args, await _mpFanAppService.FilterCountAsync(args.MpID));
                }
                else if (args.IsMember == IsMemberEnum.Tag.ToString())
                {
                    OpenIDs = _mpFanAppService.FilterTagDatas(args.MpID, args.TargetID);
                    await SaveIntoGroupMessage(args, OpenIDs);
                    await SendMessageAsync(account, args, OpenIDs.LongCount());
                }
                else if (args.IsMember == IsMemberEnum.NotMember.ToString())
                {
                    OpenIDs = _mpFanAppService.FilterNotMemberDatas(args.MpID);
                    await SaveIntoGroupMessage(args, OpenIDs);
                    await SendMessageAsync(account, args, OpenIDs.LongCount());
                }
                else
                {
                    var messageResult = await StaticObjects.GetMessageResponse(account.Token, account.Id, args.Id);
                    await SaveIntoGroupMessage(args, messageResult.OpenIDs);
                    await SendMessageAsync(account, args, messageResult.OpenIDs.LongCount());
                }
            }
            else
            {
                await SendAllAsync(account, args, await _mpFanAppService.FilterCountAsync(args.MpID));
            }
            #endregion
        }
Пример #2
0
        private async Task DoRun()
        {
            IDBHelper db       = new MssqlHelper(JobConfig.ConnectionStrings["YiliscrmDb"]);
            var       accounts = await db.FindToListAsync <MpAccountDto>("SELECT * FROM MpAccounts WHERE ISDELETED=0 ", null, false);

            var Messages = await db.FindToListAsync <MpMessageDto>($"SELECT * FROM MpMessages WHERE ISDELETED=0 AND ISTASK=1 AND ExecTaskTime<=GETDATE() AND SendState={(int)MpMessageTaskState.Wait}", null, false);

            List <string> successList = new List <string>();

            foreach (var args in Messages)
            {
                var account = accounts.Where(m => m.Id == args.MpID).FirstOrDefault();
                args.WxMsgID = Guid.NewGuid().ToString();
                await db.ExcuteNonQueryAsync($"Update MpMessages Set SendState='{(int)MpMessageTaskState.Doing}' Where ID='{args.Id}'", null, false);//正在发送

                if (!string.IsNullOrWhiteSpace(args.GroupIds))
                {
                    if (args.IsMember == IsMemberEnum.ALL.ToString())
                    {
                        var fancount = await db.ExecuteScalarAsync("SELECT count(*) FROM MpFans WHERE ISDELETED=0 AND MpID=" + args.MpID, null, false);
                        await SendAllAsync(account, args, Convert.ToInt64(fancount));
                    }
                    else if (args.IsMember == IsMemberEnum.Tag.ToString())
                    {
                        var tagids   = new List <int>();
                        var tagidstr = args.TargetID.Split(',', StringSplitOptions.RemoveEmptyEntries);
                        int tagid    = -1;
                        foreach (var item in tagidstr)
                        {
                            if (int.TryParse(item, out tagid))
                            {
                                tagids.Add(tagid);
                            }
                        }
                        if (tagids.Count == 0)
                        {
                            tagids.Add(-1);
                        }
                        var _fan = await db.FindToListAsync <MpFanDto>("SELECT a.OpenID FROM MpFans a inner join MpFansTagItems b on a.Id=b.FansId WHERE a.ISDELETED=0 AND a.MpID=" + args.MpID + " AND b.TagId in (" + string.Join(",", tagids) + ")", null, false);
                        await SaveIntoGroupMessage(args, _fan.Select(m => m.OpenID));
                        await SendMessageAsync(account, args, _fan.LongCount());
                    }
                    else if (args.IsMember == IsMemberEnum.NotMember.ToString())
                    {
                        var _fan = await db.FindToListAsync <MpFanDto>("SELECT OpenID FROM MpFans WHERE ISDELETED=0 AND MemberID=0 AND MpID=" + args.MpID, null, false);
                        await SaveIntoGroupMessage(args, _fan.Select(m => m.OpenID));
                        await SendMessageAsync(account, args, _fan.LongCount());
                    }
                    else
                    {
                        var messageResult = await StaticObjects.GetMessageResponse(account.Token, account.Id, args.Id);
                        await SaveIntoGroupMessage(args, messageResult.OpenIDs);
                        await SendMessageAsync(account, args, messageResult.OpenIDs.LongCount());
                    }
                }
                else
                {
                    var fancount = await db.ExecuteScalarAsync("SELECT count(*) FROM MpFans WHERE ISDELETED=0 AND MpID=" + args.MpID, null, false);
                    await SendAllAsync(account, args, Convert.ToInt64(fancount));
                }
            }
        }