using Furion.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Senparc.NeuChar.Entities;
using Senparc.Weixin.MP.Entities;
using System;
using System.Threading.Tasks;
using YBDevice.WXApplication.DeviceInfo;
namespace YBDevice.WX.MessageHandlers.CustomMessageHandler
{
///
/// 自定义MessageHandler
///
public partial class CustomMessageHandler
{
///
/// 预处理文字或事件类型请求。
/// 这个请求是一个比较特殊的请求,通常用于统一处理来自文字或菜单按钮的同一个执行逻辑,
/// 会在执行OnTextRequest或OnEventRequest之前触发,具有以下一些特征:
/// 1、如果返回null,则继续执行OnTextRequest或OnEventRequest
/// 2、如果返回不为null,则终止执行OnTextRequest或OnEventRequest,返回最终ResponseMessage
/// 3、如果是事件,则会将RequestMessageEvent自动转为RequestMessageText类型,其中RequestMessageText.Content就是RequestMessageEvent.EventKey
///
///
///
public override Task OnTextOrEventRequestAsync(RequestMessageText requestMessage)
{
return base.OnTextOrEventRequestAsync(requestMessage);
}
///
/// 二维码扫码事件
///
///
///
public override async Task OnEvent_ScanRequestAsync(RequestMessageEvent_Scan requestMessage)
{
//检查是否为带参二维码
if (!string.IsNullOrEmpty(requestMessage.EventKey))
{
var sceneId = requestMessage.EventKey.Replace("qrscene_", "");
#region 针对自定义二维码的处理
var paramarr = sceneId.Split('#');
var deviceService = base.ServiceProvider.GetService();
if (paramarr.Length == 4 && paramarr[0].ToLower() == "yb")
{
#region 针对八电极绑定处理 参数格式:yb#1#设备id#粉丝唯一标识
if (paramarr[1] == "1")
{
var result = await deviceService.InsertOrUpdateBodyBindInfoAsync(paramarr[3], paramarr[2], requestMessage.ToUserName, requestMessage.FromUserName);
var responseMessage = CreateResponseMessage();
responseMessage.Content = result.message;
return responseMessage;
}
#endregion
else if (paramarr[1] == "2") //认证的服务号测量二维码
{
Guid wxfansid = Guid.Parse(paramarr[3]);
//更新关注状态
var resultid = await deviceService.InsertOrUpdateSubscribeAsync(requestMessage.ToUserName, requestMessage.FromUserName, wxfansid, 2, 2);
if (!string.IsNullOrEmpty(resultid))
{
var arts = deviceService.GetWXMessageNews(RequestMessage.ToUserName, requestMessage.FromUserName, paramarr[3], 1, resultid);
var requestMessagenews = base.CreateResponseMessage();
requestMessagenews.Articles.AddRange(arts);
return requestMessagenews;
}
}
else if (paramarr[1] == "3") //固定贴纸关注二维码
{
//更新关注状态
Guid wxfansid = Guid.Parse(paramarr[3]);
var resultid = await deviceService.InsertOrUpdateSubscribeAsync(requestMessage.ToUserName, requestMessage.FromUserName, wxfansid, 2, 1);
if (!string.IsNullOrEmpty(resultid))
{
var rid = Guid.Parse(resultid);
var arts = deviceService.GetStickyWXMessageNews(RequestMessage.ToUserName, requestMessage.FromUserName, paramarr[3], 2, rid);
var requestMessagenews = base.CreateResponseMessage();
requestMessagenews.Articles.AddRange(arts);
return requestMessagenews;
}
}
}
#endregion
}
return await base.OnEvent_ScanRequestAsync(requestMessage);
}
///
/// 关注事件
///
///
///
public override async Task OnEvent_SubscribeRequestAsync(RequestMessageEvent_Subscribe requestMessage)
{
var deviceService = base.ServiceProvider.GetService();
//检查是否为带参二维码
if (!string.IsNullOrEmpty(requestMessage.EventKey))
{
var sceneId = requestMessage.EventKey.Replace("qrscene_", "");
#region 针对自定义二维码的处理
var paramarr = sceneId.Split('#');
if (paramarr.Length == 4 && paramarr[0].ToLower() == "yb")
{
#region 针对八电极绑定处理 参数格式:yb#1#设备id#粉丝唯一标识
if (paramarr[1] == "1")
{
var result = await deviceService.InsertOrUpdateBodyBindInfoAsync(paramarr[3], paramarr[2], requestMessage.ToUserName, requestMessage.FromUserName);
var responseMessage = CreateResponseMessage();
responseMessage.Content = result.message;
return responseMessage;
}
#endregion
else if (paramarr[1] == "2") //认证的服务号测量二维码
{
Guid wxfansid = Guid.Parse(paramarr[3]);
//更新关注状态
var resultid=await deviceService.InsertOrUpdateSubscribeAsync(requestMessage.ToUserName, requestMessage.FromUserName, wxfansid, 1,2);
if (!string.IsNullOrEmpty(resultid))
{
var arts = deviceService.GetWXMessageNews(RequestMessage.ToUserName, requestMessage.FromUserName, paramarr[3], 1, resultid);
var requestMessagenews = base.CreateResponseMessage();
requestMessagenews.Articles.AddRange(arts);
return requestMessagenews;
}
}
else if (paramarr[1] == "3") //固定贴纸二维码
{
//更新关注状态
Guid wxfansid = Guid.Parse(paramarr[3]);
var resultid= await deviceService.InsertOrUpdateSubscribeAsync(requestMessage.ToUserName, requestMessage.FromUserName, wxfansid, 1,1);
if (!string.IsNullOrEmpty(resultid))
{
var rid = Guid.Parse(resultid);
var arts = deviceService.GetStickyWXMessageNews(RequestMessage.ToUserName, requestMessage.FromUserName, paramarr[3], 2, rid);
var requestMessagenews = base.CreateResponseMessage();
requestMessagenews.Articles.AddRange(arts);
return requestMessagenews;
}
}
}
#endregion
}
await deviceService.InsertOrUpdateSubscribeAsync(requestMessage.ToUserName, requestMessage.FromUserName,null,3);
//if(!await new OfficialApp().CheckIsRZFAsync(requestMessage.ToUserName))
//{
// var arts = new DeviceApp().GetWXMessageNews(RequestMessage.ToUserName, requestMessage.FromUserName, "", 3);
// var requestMessagenews = base.CreateResponseMessage();
// requestMessagenews.Articles.AddRange(arts);
// return requestMessagenews;
//}
return await base.OnEvent_SubscribeRequestAsync(requestMessage);
}
///
/// 取关
///
///
///
public override async Task OnEvent_UnsubscribeRequestAsync(RequestMessageEvent_Unsubscribe requestMessage)
{
var deviceService = base.ServiceProvider.GetService();
//更新取关信息
await deviceService.InsertOrUpdateSubscribeAsync(requestMessage.ToUserName, requestMessage.FromUserName,null, 0);
return await base.OnEvent_UnsubscribeRequestAsync(requestMessage);
}
}
}