MeiRiYiCheng_1_old/YBDevice.WXApplication/DeviceInfo/DeviceService.cs

338 lines
16 KiB
C#

using Furion;
using Furion.DependencyInjection;
using Nirvana.Common;
using Nirvana.Common.ApiBase;
using Senparc.NeuChar.Entities;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using YBDevice.Core;
using YBDevice.Entity;
namespace YBDevice.WXApplication.DeviceInfo
{
/// <summary>
/// 设备管理
/// </summary>
public class DeviceService : IDeviceService, ITransient
{
private readonly ISqlSugarRepository<YB_Device> repository;
private readonly SqlSugarClient dbClient;
private readonly ILoggerService _loggerService;
public DeviceService(ISqlSugarRepository<YB_Device> sqlSugarRepository, ILoggerService loggerService)
{
repository = sqlSugarRepository;
dbClient = repository.Context;
_loggerService = loggerService;
}
/// <summary>
/// 获取固定贴纸图文信息
/// </summary>
/// <param name="appid"></param>
/// <param name="openid"></param>
/// <param name="fansid"></param>
/// <param name="type">1-认证的服务号关注事件,2-认证的服务号扫码事件,3-非认证关注事件,4-回复关键字,5-第一次打开落地页,6-非认证扫码事件</param>
/// <param name="resultid">记录ID</param>
/// <returns></returns>
public List<Article> GetStickyWXMessageNews(string appid, string openid, string fansid, int type, Guid? resultid = null)
{
var apiurl = App.Configuration["APIURL"];
var url = HttpUtility.HtmlEncode($"{apiurl}/qr/t?openid={Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(openid))}&aid={Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(appid))}&fansid={fansid}&type={type}&rid={resultid}")
.Replace("&amp;", "&");
var result = new List<Article>();
var art = new Article
{
Title = "Hi~点击查看您的健康测量报告!",
Description = "邀你查看报告详情",
PicUrl = "",
Url = url
};
result.Add(art);
return result;
}
/// <summary>
/// 获取微信图文
/// </summary>
/// <param name="appid"></param>
/// <param name="openid"></param>
/// <param name="fansid"></param>
/// <param name="type">1-认证的服务号关注事件,2-认证的服务号扫码事件,3-非认证关注事件,4-回复关键字,5-第一次打开落地页,6-非认证扫码事件</param>
/// <param name="resultid">记录ID</param>
/// <returns></returns>
public List<Article> GetWXMessageNews(string appid, string openid, string fansid, int type, string resultid = "")
{
var apiurl = App.Configuration["APIURL"];
var url = HttpUtility.HtmlEncode($"{apiurl}/qr/s?openid={Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(openid))}&aid={Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(appid))}&fansid={fansid}&type={type}&rid={resultid}")
.Replace("&amp;", "&");
var result = new List<Article>();
var art = new Article
{
Title = "Hi~点击查看您的健康测量报告!",
Description = "邀你查看报告详情",
PicUrl = "",
Url = url
};
result.Add(art);
return result;
}
/// <summary>
/// 处理关键字回复事件
/// </summary>
/// <param name="appid"></param>
/// <param name="openid"></param>
/// <param name="encode">关键字</param>
public async Task<WXTextResponseData> HandlerTextAsync(string appid, string openid, string encode)
{
WXTextResponseData returndata = new WXTextResponseData();
//检查健康码是否存在
var data = await dbClient.Queryable<YB_WXMessage>().FirstAsync(x => x.EnCode == encode);
if (data != null)
{
//如果是固定贴纸二维码
if (data.Type == 2)
{
//更新扫码关注记录
var resultid = Guid.Parse(data.ResultId);
returndata.wxfansid = (await dbClient.Queryable<YB_ScanResult>().FirstAsync(x => x.Id == resultid)).FansId;
returndata.type = data.Type;
returndata.resultid = data.ResultId;
}
else
{
var resultid = Guid.Parse(data.ResultId);
returndata.wxfansid = (await dbClient.Queryable<YB_ScanResult>().FirstAsync(x => x.Id == resultid)).FansId;
returndata.type = data.Type;
returndata.resultid = data.ResultId;
}
//更新wxfansext
if (await dbClient.Queryable<YB_WXFansExt>().AnyAsync(x => x.AppId == appid && x.OpenId == openid))
{
await dbClient.Updateable<YB_WXFansExt>().SetColumns(x => new YB_WXFansExt
{
Subscribe = 1,
SubscribeTime = DateTime.Now
}).Where(x => x.AppId == appid && x.OpenId == openid).ExecuteCommandAsync();
}
else
{
var fansdata = new YB_WXFansExt
{
AppId = appid,
OpenId = openid,
ResultId = Guid.Parse(returndata.wxfansid),
Subscribe = 1,
SubscribeTime = DateTime.Now
};
await dbClient.Insertable(fansdata).ExecuteCommandAsync();
}
}
return returndata;
}
/// <summary>
/// 插入或者更新八电极绑定信息
/// </summary>
/// <param name="fansid"></param>
/// <param name="equid"></param>
/// <param name="appid"></param>
/// <param name="openid"></param>
public async Task<ResultInfo> InsertOrUpdateBodyBindInfoAsync(string fansid, string equid, string appid, string openid)
{
try
{
int devid = equid.ToInt();
var devdata = await dbClient.Queryable<YB_Device>().FirstAsync(x => x.Id == devid);
if (devdata == null)
{
return new ResultInfo(ResultState.FAIL, "设备未找到");
}
Guid wxfansid = Guid.Parse(fansid);
var fansdata = await dbClient.Queryable<YB_WXFans>().FirstAsync(x => x.Id == wxfansid);
if (fansdata == null)
{
return new ResultInfo(ResultState.FAIL, "用户未找到");
}
//增加绑定记录,如果存在则更新,否则插入
if (await dbClient.Queryable<YB_WifiBind>().AnyAsync(x => x.FansId == wxfansid && x.PublicId == appid && x.DevId == devid))
{
await dbClient.Updateable<YB_WifiBind>().SetColumns(x => new YB_WifiBind
{
Subscribe = 1,
BindStatus = 1,
BindTime = DateTime.Now
}).Where(x => x.FansId == wxfansid && x.PublicId == appid && x.DevId == devid).ExecuteCommandAsync();
}
else
{
var binddata = new YB_WifiBind
{
DevCode = devdata.Ecode,
BindStatus = 1,
BindTime = DateTime.Now,
Subscribe = 1,
CreateTime = DateTime.Now,
DevId = devdata.Id,
FansId = wxfansid,
FansUnionId = fansdata.FansId,
OpenId = openid,
PublicId = appid,
UnBindTime = null
};
await dbClient.Insertable(binddata).ExecuteCommandAsync();
}
//增加粉丝关注记录
await InsertOrUpdateSubscribeAsync(appid, openid, wxfansid, 1);
return new ResultInfo(ResultState.SUCCESS, "绑定成功");
}
catch (Exception ex)
{
var errmsg = $"fansid:{fansid},equid={equid},appid={appid},openid={openid}";
_loggerService.AddErrorLogger(ex, errmsg, "插入或者更新八电极绑定信息");
return new ResultInfo(ResultState.FAIL, ex.Message);
}
}
/// <summary>
/// 更新/增加粉丝关注记录
/// </summary>
/// <param name="appid">公众号原始id</param>
/// <param name="openid">用户openid</param>
/// <param name="wxfansid">用户ID</param>
/// <param name="subscribe">关注状态,0-取关,1-关注,2-重复关注</param>
/// <param name="type">类型,1-固定贴纸二维码,2-带参数二维码,3-其他</param
public async Task<string> InsertOrUpdateSubscribeAsync(string appid, string openid, Guid? wxfansid, int subscribe, int type = 3)
{
if (subscribe == 1 || subscribe == 2)
{
if (await dbClient.Queryable<YB_WXFansExt>().AnyAsync(x => x.AppId == appid && x.OpenId == openid))
{
await dbClient.Updateable<YB_WXFansExt>().SetColumns(x => new YB_WXFansExt
{
Subscribe = subscribe,
SubscribeTime = DateTime.Now,
ResultId = wxfansid.Value
}).Where(x => x.AppId == appid && x.OpenId == openid).ExecuteCommandAsync();
}
else if (wxfansid.HasValue)
{
await dbClient.Insertable(new YB_WXFansExt
{
AppId = appid,
Subscribe = subscribe,
SubscribeTime = DateTime.Now,
OpenId = openid,
ResultId = wxfansid.Value
}).ExecuteCommandAsync();
}
//如果是固定贴纸二维码
if (type == 1)
{
var fansid = wxfansid.Value.ToString();
var result = await dbClient.Queryable<YB_ScanResult>().Where(x => x.FansId == fansid && x.PublicId == appid)
.OrderBy(x => x.CreateTime, SqlSugar.OrderByType.Desc)
.FirstAsync()
;
//如果计费
if (result != null && result.Subscribe == 0)
{
//更新关注记录
await dbClient.Updateable<YB_ScanResult>().SetColumns(x => new YB_ScanResult
{
Subscribe = subscribe,
TakeTime = DateTime.Now
}).Where(x => x.Id == result.Id).ExecuteCommandAsync();
if (subscribe == 1)
{
//更新订单
await dbClient.Updateable<YB_Order>().SetColumns(x => new YB_Order
{
RealCount = x.RealCount + 1,
DayRealCount = x.DayRealCount + 1
}).Where(x => x.Id == result.OrderId).ExecuteCommandAsync();
//更新设备数据
await dbClient.Updateable<YB_EquRealData>().SetColumns(x => new YB_EquRealData
{
TodayRealCnt = x.TodayRealCnt + 1,
TotalRealCnt = x.TotalRealCnt + 1
}).Where(x => x.Id == result.EquId).ExecuteCommandAsync();
//更新商户数据
await dbClient.Updateable<YB_BusinessRealData>().SetColumns(x => new YB_BusinessRealData
{
TodayRealCnt = x.TodayRealCnt + 1,
TotalRealCnt = x.TotalRealCnt + 1
}).Where(x => x.BusinessId == result.BusinessId).ExecuteCommandAsync();
}
return result.Id.ToString();
}
}
else if (type == 2)
{
var fansid = wxfansid.Value.ToString();
var result = await dbClient.Queryable<YB_ScanResult>().Where(x => x.FansId == fansid && x.PublicId == appid)
.OrderBy(x => x.CreateTime, SqlSugar.OrderByType.Desc)
.FirstAsync()
;
//如果计费
if (result != null && result.Subscribe == 0)
{
//更新关注记录
await dbClient.Updateable<YB_ScanResult>().SetColumns(x => new YB_ScanResult
{
Subscribe = subscribe,
TakeTime = DateTime.Now
}).Where(x => x.Id == result.Id).ExecuteCommandAsync();
if (subscribe == 1)
{
//更新订单
await dbClient.Updateable<YB_Order>().SetColumns(x => new YB_Order
{
RealCount = x.RealCount + 1,
DayRealCount = x.DayRealCount + 1
}).Where(x => x.Id == result.OrderId).ExecuteCommandAsync();
//更新设备数据
await dbClient.Updateable<YB_EquRealData>().SetColumns(x => new YB_EquRealData
{
TodayRealCnt = x.TodayRealCnt + 1,
TotalRealCnt = x.TotalRealCnt + 1
}).Where(x => x.Id == result.EquId).ExecuteCommandAsync();
//更新商户数据
await dbClient.Updateable<YB_BusinessRealData>().SetColumns(x => new YB_BusinessRealData
{
TodayRealCnt = x.TodayRealCnt + 1,
TotalRealCnt = x.TotalRealCnt + 1
}).Where(x => x.BusinessId == result.BusinessId).ExecuteCommandAsync();
}
return result.Id.ToString();
}
}
}
else
{
if (await dbClient.Queryable<YB_WXFansExt>().AnyAsync(x => x.AppId == appid && x.OpenId == openid))
{
await dbClient.Updateable<YB_WXFansExt>().SetColumns(x => new YB_WXFansExt
{
Subscribe = subscribe,
UnSubscribeTime = DateTime.Now
}).Where(x => x.AppId == appid && x.OpenId == openid).ExecuteCommandAsync();
}
if (await dbClient.Queryable<YB_WifiBind>().AnyAsync(x => x.PublicId == appid && x.OpenId == openid))
{
await dbClient.Updateable<YB_WifiBind>().SetColumns(x => new YB_WifiBind
{
Subscribe = subscribe
}).Where(x => x.PublicId == appid && x.OpenId == openid).ExecuteCommandAsync();
}
}
return null;
}
}
}