MeiRiYiCheng_1_old/YBDevice.NApi.Application/OrdersInfo/OrderService.cs

917 lines
40 KiB
C#

using Furion.DependencyInjection;
using Nirvana.Common;
using Senparc.Weixin.MP;
using Senparc.Weixin.MP.AdvancedAPIs;
using Senparc.Weixin.MP.AdvancedAPIs.OAuth;
using Senparc.Weixin.Open;
using Senparc.Weixin.Open.Containers;
using Senparc.Weixin;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using YBDevice.Entity;
using Furion;
using YBDevice.Core;
using Furion.DistributedIDGenerator;
using DotNetCore.CAP;
namespace YBDevice.NApi.Application.OrdersInfo
{
/// <summary>
/// 扫码订单处理
/// </summary>
public class OrderService : IOrderService, ITransient
{
public static string appId = Config.SenparcWeixinSetting.WeixinAppId;
public static string appSecret = Config.SenparcWeixinSetting.WeixinAppSecret;
public static string componentAppid = Config.SenparcWeixinSetting.Component_Appid;
public static string componentAppSecret = Config.SenparcWeixinSetting.Component_Secret;
public static string WXURL = Configs.GetString("WXURL");
private readonly ISqlSugarRepository<YB_Order> repository;
private readonly SqlSugarClient dbClient;
private readonly ICapPublisher _capBus;
public OrderService(ISqlSugarRepository<YB_Order> sqlSugarRepository, ICapPublisher capPublisher)
{
repository = sqlSugarRepository;
dbClient = repository.Context;
_capBus = capPublisher;
}
/// <summary>
/// 获取可用的订单
/// </summary>
/// <param name="equ">设备信息</param>
/// <param name="userinfo">用户资料</param>
/// <param name="isdefault">1-获取小程序,2-链接,3-小程序,0-全部</param>
/// <param name="isbind">是否为绑定处理,true-是</param>
/// /// <param name="scantype">1-带测量参数的二维码,2-固定贴纸</param>
/// <returns></returns>
public async Task<OrderInfo> GetAsync(YB_Device equ, OAuthUserInfo userinfo, int isdefault = 0, bool isbind = false, int scantype = 1)
{
try
{
//检查设备绑定的订单
var orderlist = (await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("PROC_GetOrder", new
{
equid = equ.Id,
businessid = equ.BusinessId,
fansid = userinfo.unionid,
isdefault = isdefault,
ordertype = isbind ? 3 : 2
})).ToList<YB_Order>();
if (orderlist.Count == 0)
{
return null;
}
//返回取出的订单,如果订单id为1,则为系统默认关注公众号的订单,如果订单id为2,则为系统默认的打开链接的订单
var order = orderlist.FirstOrDefault();
var returndata = new OrderInfo
{
id = order.Id,
type = order.Type,
isbind = isbind
};
var wxfansid = IDGen.NextID();
//如果是关注公众号
if (order.Type == OrderType.Office)
{
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 1).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.appid = office.user_name;
//如果是认证的服务号
if (office.service_type_info == ServiceType..ToString()
&& office.verify_type_info == VerifyType..ToString())
{
//八电极绑定带参二维码格式:yb#1#设备id#粉丝唯一标识
var sceneid = $"yb#1#{equ.Id}#{userinfo.unionid}";
if (!isbind)
{
if (await dbClient.Queryable<YB_WXFans>().AnyAsync(x => x.FansId == userinfo.unionid))
{
wxfansid = await dbClient.Queryable<YB_WXFans>().Where(x => x.FansId == userinfo.unionid).Select(x => x.Id).FirstAsync();
}
//2-带测量参数的二维码,3-固定贴纸二维码
sceneid = scantype == 1 ? $"yb#2#{equ.Id}#{wxfansid}" : $"yb#3#{equ.Id}#{wxfansid}";
returndata.WxFansId = wxfansid;
}
var token = await AuthorizerContainer.TryGetAuthorizerAccessTokenAsync(componentAppid, office.authorizer_appid);
var qrresult = await QrCodeApi.CreateAsync(token, 10000, 0, QrCode_ActionName.QR_STR_SCENE, sceneid);
if (qrresult.ErrorCodeValue != 0)
{
returndata.code = (int)ErrorInfoDesc.ercodeerror;
return returndata;
}
returndata.officetype = (int)OfficeType.RZFW;
returndata.content = $"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={qrresult.ticket}";
}
else if (office.service_type_info == "个人")
{
//个人回复由第三方插件自动回复
returndata.officetype = (int)OfficeType.GR;
returndata.content = $"{WXURL}/open/qr/{office.user_name}.jpg";
}
else
{
returndata.officetype = (int)OfficeType.FRZ;
returndata.vrcode = new Random().Next(100000, 999999).ToString().Substring(1, 4);
returndata.content = $"{WXURL}/open/qr/{office.user_name}.jpg";
}
}
//如果是小程序
else if (order.Type == OrderType.Mini)
{
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 2).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.appid = office.user_name;
returndata.content = order.Page;
returndata.officetype = (int)OfficeType.MINI;
}
//如果是链接
else if (order.Type == OrderType.URL)
{
returndata.content = order.Url;
}
else
{
returndata.code = (int)ErrorInfoDesc.develop;
return returndata;
}
if (isbind)
{
//保存绑定记录
await dbClient.Ado.UseStoredProcedure().ExecuteCommandAsync("proc_body_binduser", new
{
wxfansid = wxfansid,
fansid = userinfo.unionid.ToStr(),
oldopenid = userinfo.openid,
equid = equ.Id,
ecode = equ.Ecode,
facecode = equ.FacCode,
orderid = order.Id,
businessid = equ.BusinessId,
publicid = returndata.appid,
headimgurl = userinfo.headimgurl.ToStr(),
nickname = userinfo.nickname.ToStr(),
sex = 0,
city = "",
province = "",
country = "",
language = "",
ordertype = order.Type
});
}
return returndata;
}
catch (Exception ex)
{
var logger = App.GetService<ILoggerService>();
//写入异常日志
var param = $"equ={equ.ToJson()},userinfo={userinfo.ToJson()},isdefault={isdefault},isbind={isbind}";
logger.AddErrorLogger(ex, param, "获取订单");
return new OrderInfo
{
code = (int)ErrorInfoDesc.systemerror
};
}
}
/// <summary>
/// 获取设备绑定的商户端小程序
/// </summary>
/// <param name="equ"></param>
/// <param name="userinfo"></param>
/// <returns></returns>
public async Task<OrderInfo> GetDevMagOrderAsync(YB_Device equ, UserBaseInfoS2SDto userinfo)
{
if (equ == null)
{
equ = await dbClient.Queryable<YB_Device>().FirstAsync(x => x.Id == 1);
}
//检查设备绑定的订单
var orderlist = (await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("PROC_GetOrder", new
{
equid = equ.Id,
businessid = equ.BusinessId,
fansid = userinfo.unionid,
isdefault = 3,
ordertype = 1
})).ToList<YB_Order>();
if (orderlist.Count == 0)
{
return null;
}
var order = orderlist.FirstOrDefault();
var returndata = new OrderInfo
{
id = order.Id,
type = order.Type,
isbind = false
};
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 2).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.appid = office.user_name;
string page = order.Page.Contains("?") ? $"{order.Page}&code={equ.FacCode}" : $"{order.Page}?code={equ.FacCode}";
returndata.content = page;
returndata.officetype = (int)OfficeType.MINI;
returndata.NickName = office.nick_name;
returndata.HeadImg = office.head_img.StartsWith("http") ? office.head_img : $"{App.Configuration["CDNURL"]}{office.head_img}";
return returndata;
}
/// <summary>
/// 获取八电极小程序订单
/// </summary>
/// <returns></returns>
public async Task<OrderInfo> GetBodyOrderAsync(YB_Device equ, UserBaseInfoS2SDto userinfo)
{
var orderlist = (await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("PROC_GetOrder", new
{
equid = equ.Id,
businessid = equ.BusinessId,
fansid = userinfo.unionid,
isdefault = 3,
ordertype = 2,
scantype = 2
})).ToList<YB_Order>();
if (orderlist.Count == 0)
{
return null;
}
var order = orderlist.FirstOrDefault();
var returndata = new OrderInfo
{
id = order.Id,
type = order.Type,
isbind = false
};
returndata.WxFansId = (await dbClient.Queryable<YB_WXFans>().FirstAsync(x => x.FansId == userinfo.unionid)).Id;
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 2).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.appid = office.user_name;
returndata.content = order.Page;
returndata.officetype = (int)OfficeType.MINI;
returndata.NickName = office.nick_name;
returndata.HeadImg = office.head_img;
return returndata;
}
/// <summary>
/// 获取带测量参数的二维码订单
/// </summary>
/// <param name="equ">设备信息</param>
/// <param name="userinfo">用户资料</param>
/// <param name="ordertype">1-设备管理,2-用户测量,3-用户绑定</param>
/// <returns></returns>
public async Task<OrderInfo> GetOrderByTrendAsync(YB_Device equ, UserBaseInfoS2SDto userinfo, int ordertype = 2)
{
var orderlist = (await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("PROC_GetOrder", new
{
equid = equ.Id,
businessid = equ.BusinessId,
fansid = userinfo.unionid,
isdefault = 0,
ordertype = ordertype,
scantype = 2
})).ToList<YB_Order>();
if (orderlist.Count == 0)
{
return null;
}
var order = orderlist.FirstOrDefault();
var returndata = new OrderInfo
{
id = order.Id,
type = order.Type,
isbind = false
};
returndata.WxFansId = (await dbClient.Queryable<YB_WXFans>().FirstAsync(x => x.FansId == userinfo.unionid)).Id;
//如果是关注公众号
if (order.Type == OrderType.Office)
{
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 1).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.WxFansId = returndata.WxFansId;
returndata.appid = office.user_name;
//如果是认证的服务号
if (office.service_type_info == ServiceType..ToString()
&& office.verify_type_info == VerifyType..ToString())
{
//测量关注二维码:yb#2#设备id#粉丝ID
var sceneid = $"yb#2#{equ.Id}#{returndata.WxFansId}";
var token = await AuthorizerContainer.TryGetAuthorizerAccessTokenAsync(componentAppid, office.authorizer_appid);
var qrresult = await QrCodeApi.CreateAsync(token, 10000, 0, QrCode_ActionName.QR_STR_SCENE, sceneid);
if (qrresult.ErrorCodeValue != 0)
{
returndata.code = (int)ErrorInfoDesc.ercodeerror;
return returndata;
}
returndata.officetype = (int)OfficeType.RZFW;
returndata.content = $"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={qrresult.ticket}";
}
else if (office.service_type_info == "个人")
{
//个人回复由第三方插件自动回复
returndata.officetype = (int)OfficeType.GR;
returndata.content = $"{WXURL}/open/qr/{office.user_name}.jpg";
}
else
{
returndata.officetype = (int)OfficeType.FRZ;
returndata.vrcode = new Random().Next(100000, 999999).ToString().Substring(1, 4);
returndata.content = $"{WXURL}/open/qr/{office.user_name}.jpg";
}
}
//如果是小程序
else if (order.Type == OrderType.Mini)
{
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 2).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.appid = office.user_name;
returndata.content = order.Page;
returndata.NickName = office.nick_name;
returndata.HeadImg = office.head_img;
returndata.officetype = (int)OfficeType.MINI;
}
//如果是链接
else if (order.Type == OrderType.URL)
{
returndata.content = order.Url;
}
else
{
returndata.code = (int)ErrorInfoDesc.develop;
return returndata;
}
return returndata;
}
/// <summary>
/// 获取固定贴纸订单
/// </summary>
/// <param name="equ">设备信息</param>
/// <param name="userinfo">用户资料</param>
/// <param name="ordertype">1-设备管理,2-用户测量,3-用户绑定</param>
/// <returns></returns>
public async Task<OrderInfo> GetOrderByStickerAsync(YB_Device equ, UserBaseInfoS2SDto userinfo, int ordertype = 2)
{
bool isbind = false;
int isdefault = 0;//1-公众号,2-链接,3-小程序,0-全部
//如果设备协议符合八电极体重体脂,则查找wifi绑定订单
if (await dbClient.Queryable<YB_DeviceType>().AnyAsync(x => x.Code == equ.Type && x.ProType == DeviceProType.WT8) && equ.Type == 2)
{
isbind = true;
isdefault = 1;
ordertype = 3;
}
//检查设备绑定的订单
var orderlist = (await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("PROC_GetOrder", new
{
equid = equ.Id,
businessid = equ.BusinessId,
fansid = userinfo.unionid,
isdefault = isdefault,
ordertype = ordertype,
scantype = 1
})).ToList<YB_Order>();
if (orderlist.Count == 0)
{
return null;
}
var order = orderlist.FirstOrDefault();
var returndata = new OrderInfo
{
id = order.Id,
type = order.Type,
isbind = isbind
};
returndata.WxFansId = (await dbClient.Queryable<YB_WXFans>().FirstAsync(x => x.FansId == userinfo.unionid)).Id;
//如果是关注公众号
if (order.Type == OrderType.Office)
{
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 1).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.appid = office.user_name;
//如果是认证的服务号
if (office.service_type_info == ServiceType..ToString()
&& office.verify_type_info == VerifyType..ToString())
{
//八电极绑定带参二维码格式:yb#1#设备id#粉丝ID
var sceneid = $"yb#1#{equ.Id}#{returndata.WxFansId}";
if (!isbind) //针对固定贴纸的关注公众号
{
sceneid = $"yb#3#{equ.Id}#{returndata.WxFansId}";
}
var token = await AuthorizerContainer.TryGetAuthorizerAccessTokenAsync(componentAppid, office.authorizer_appid);
var qrresult = await QrCodeApi.CreateAsync(token, 10000, 0, QrCode_ActionName.QR_STR_SCENE, sceneid);
if (qrresult.ErrorCodeValue != 0)
{
returndata.code = (int)ErrorInfoDesc.ercodeerror;
return returndata;
}
returndata.officetype = (int)OfficeType.RZFW;
returndata.content = $"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={qrresult.ticket}";
}
else if (office.service_type_info == "个人")
{
//个人回复由第三方插件自动回复
returndata.officetype = (int)OfficeType.GR;
returndata.content = $"{WXURL}/open/qr/{office.user_name}.jpg";
}
else
{
returndata.officetype = (int)OfficeType.FRZ;
returndata.vrcode = new Random().Next(100000, 999999).ToString().Substring(1, 4);
returndata.content = $"{WXURL}/open/qr/{office.user_name}.jpg";
}
}
//如果是小程序
else if (order.Type == OrderType.Mini)
{
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 2).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.HeadImg = office.head_img;
returndata.NickName = office.nick_name;
returndata.appid = office.user_name;
returndata.content = order.Page;
returndata.officetype = (int)OfficeType.MINI;
}
//如果是链接
else if (order.Type == OrderType.URL)
{
returndata.content = order.Url;
}
else
{
returndata.code = (int)ErrorInfoDesc.develop;
return returndata;
}
return returndata;
}
/// <summary>
/// 更新八电极推送的消息数据记录
/// </summary>
/// <param name="resultid"></param>
/// <param name="userinfo"></param>
/// <param name="order"></param>
/// <returns></returns>
public async Task UpdateBodyResultAsync(Guid resultid, UserBaseInfoS2SDto userinfo, OrderInfo order)
{
//如果wxfansid绑定了用户则userid直接赋值
var account = await dbClient.Queryable<YB_RegUser>().Where(x => x.FansId == order.WxFansId).FirstAsync();
string fansid = order.WxFansId.ToString();
int userid = account != null ? account.Id : 0;
if (await dbClient.Queryable<YB_nUserResult>().AnyAsync(x => x.Id == resultid))
{
await dbClient.Updateable<YB_nUserResult>().SetColumns(x => new YB_nUserResult
{
FansId = order.WxFansId,
UserId = userid
}).Where(x => x.Id == resultid).ExecuteCommandAsync();
}
}
/// <summary>
/// 插入扫码测量记录
/// </summary>
/// <param name="equ"></param>
/// <param name="userinfo"></param>
/// <param name="height"></param>
/// <param name="weight"></param>
/// <param name="type">1-单电阻,2-八电极</param>
/// <param name="bodyimp"></param>
/// <param name="leftfootimp"></param>
/// <param name="rightfootimp"></param>
/// <param name="lefthandimp"></param>
/// <param name="righthandimp"></param>
/// <param name="order"></param>
/// <returns></returns>
public async Task InsertResultAsync(YB_Device equ, UserBaseInfoS2SDto userinfo, OrderInfo order, decimal height, decimal weight, int type = 1, decimal bodyimp = 0, decimal leftfootimp = 0, decimal rightfootimp = 0, decimal lefthandimp = 0, decimal righthandimp = 0)
{
//如果wxfansid绑定了用户则userid直接赋值
var account = await dbClient.Queryable<YB_RegUser>().Where(x => x.FansId == order.WxFansId).FirstAsync();
//记录测量记录
var result = new YB_nResult
{
Id = IDGen.NextID(),
BusinessId = equ.BusinessId,
CreateTime = DateTime.Now,
EquId = equ.Id,
Height = height,
Imp = bodyimp,
Weight = weight,
SourceType = 3,
DevType = equ.Type,
LeftArmImp = lefthandimp,
LeftLegImp = leftfootimp,
RightArmImp = righthandimp,
RightLegImp = rightfootimp
};
await dbClient.Insertable(result).ExecuteCommandAsync();
//记录一条分配记录
var userresult = new YB_nUserResult
{
Id = result.Id,
FamilyId = 0,
CreateTime = result.CreateTime,
DevType = equ.Type,
FansId = order.WxFansId,
UserId = account != null ? account.Id : 0,
Status = 1
};
await dbClient.Insertable(userresult).ExecuteCommandAsync();
//如果是关注公众号,记录扫码结果
if (order.type == OrderType.Office)
{
//记录扫码
var scanresult = new YB_ScanResult
{
BusinessId = equ.BusinessId,
Subscribe = 0,
CreateTime = DateTime.Now,
EquId = equ.Id,
FansId = order.WxFansId.ToString(),
Id = result.Id,
OrderId = order.id,
PublicId = order.appid,
TakeTime = null,
Type = equ.Type
};
await dbClient.Insertable(scanresult).ExecuteCommandAsync();
//如果是非认证号,记录健康码
if (order.officetype == 2)
{
var vrcodedata = new YB_WXMessage
{
CreateTime = DateTime.Now,
EnCode = order.vrcode,
Id = IDGen.NextID(),
PublicId = order.appid,
ResultId = result.Id.ToString(),
Type = 1
};
await dbClient.Insertable(vrcodedata).ExecuteCommandAsync();
}
}
await _capBus.PublishAsync("result.service.updaterealdata", new UpdateRealDataS2SDtO
{
IsUserTake = false,
DevId = equ.Id,
DevType = equ.Type,
DeviceLastHeartTime = equ.LastHeartTime,
BusinessId = equ.BusinessId
});
//更新订单展现次数
await dbClient.Updateable<YB_Order>().SetColumns(x => new YB_Order
{
ShowCount = x.ShowCount + 1,
DayCount = x.DayCount + 1
}).Where(x => x.Id == order.id).ExecuteCommandAsync();
}
/// <summary>
/// 插入固定二维码扫码记录
/// </summary>
/// <param name="equ"></param>
/// <param name="userinfo"></param>
/// <param name="order"></param>
/// <returns></returns>
public async Task InsertResultAsync(YB_Device equ, UserBaseInfoS2SDto userinfo, OrderInfo order)
{
//更新订单展现次数
await dbClient.Updateable<YB_Order>().SetColumns(x => new YB_Order
{
ShowCount = x.ShowCount + 1,
DayCount = x.DayCount + 1
}).Where(x => x.Id == order.id).ExecuteCommandAsync();
//如果是关注公众号,记录扫码结果
if (order.type == OrderType.Office && !order.isbind)
{
var scandata = new YB_ScanResult
{
Id = IDGen.NextID(),
Subscribe = 0,
BusinessId = equ.BusinessId,
CreateTime = DateTime.Now,
EquId = equ.Id,
FansId = order.WxFansId.ToString(),
OrderId = order.id,
PublicId = order.appid,
TakeTime = null,
Type = 1
};
await dbClient.Insertable(scandata).ExecuteCommandAsync();
//如果是非认证号,记录健康码
if (order.officetype == 2)
{
var vrcodedata = new YB_WXMessage
{
CreateTime = DateTime.Now,
EnCode = order.vrcode,
Id = IDGen.NextID(),
PublicId = order.appid,
ResultId = scandata.Id.ToString(),
Type = 2
};
await dbClient.Insertable(vrcodedata).ExecuteCommandAsync();
}
}
}
/// <summary>
/// 处理固定贴纸图文链接
/// </summary>
/// <param name="appid"></param>
/// <param name="openid"></param>
/// <param name="type"></param>
/// <param name="fansid"></param>
/// <param name="resultid"></param>
/// <returns></returns>
public async Task<OrderInfo> HandlerStickySubscribeAsync(string appid, string openid, int type, string fansid, Guid? resultid)
{
//获取记录
var result = await dbClient.Queryable<YB_ScanResult>().FirstAsync(x => x.Id == resultid.Value);
//更新关注记录
if (result != null)
{
//如果未计费则进行计费
if (result.Subscribe == 0)
{
//更新记录
await dbClient.Updateable<YB_ScanResult>().SetColumns(x => new YB_ScanResult
{
Subscribe = 1,
TakeTime = DateTime.Now
}).Where(x => x.Id == result.Id).ExecuteCommandAsync();
//更新订单
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();
}
//查询此设备关联的小程序订单
var orderlist = (await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("PROC_GetOrder", new
{
equid = result.EquId,
businessid = result.BusinessId,
fansid = fansid,
isdefault = 3,
ordertype = 2,
scantype = 1
})).ToList<YB_Order>();
if (orderlist.Count == 0)
{
return null;
}
var order = orderlist.FirstOrDefault();
var returndata = new OrderInfo
{
id = order.Id,
type = order.Type,
isbind = false
};
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 2).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.HeadImg = office.head_img;
returndata.NickName = office.nick_name;
returndata.appid = office.user_name;
returndata.content = order.Page.Contains("?") ? $"{order.Page}&fid={fansid}" : $"{order.Page}?fid={fansid}";
returndata.officetype = (int)OfficeType.MINI;
return returndata;
}
return null;
}
/// <summary>
/// 处理带参数二维码图文链接
/// </summary>
/// <param name="appid"></param>
/// <param name="openid"></param>
/// <param name="type"></param>
/// <param name="fansid"></param>
/// <param name="resultid"></param>
public async Task<OrderInfo> HandlerResultSubscribeAsync(string appid, string openid, int type, string fansid, Guid? resultid)
{
//获取记录
var result = await dbClient.Queryable<YB_ScanResult>().FirstAsync(x => x.Id == resultid);
if (result == null)
{
return null;
}
//更新关注记录
//如果未计费则进行计费
if (result.Subscribe == 0)
{
Guid wxfansid = Guid.Parse(fansid);
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,
ResultId = wxfansid
}).Where(x => x.AppId == appid && x.OpenId == openid).ExecuteCommandAsync();
}
else
{
await dbClient.Insertable(new YB_WXFansExt
{
AppId = appid,
Subscribe = 1,
SubscribeTime = DateTime.Now,
OpenId = openid,
ResultId = wxfansid
}).ExecuteCommandAsync();
}
//更新订单
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();
}
//查询此设备关联的小程序订单
var orderlist = (await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("PROC_GetOrder", new
{
equid = result.EquId,
businessid = result.BusinessId,
fansid = fansid,
isdefault = 3,
ordertype = 2,
scantype = 2
})).ToList<YB_Order>();
if (orderlist.Count == 0)
{
return null;
}
var order = orderlist.FirstOrDefault();
var returndata = new OrderInfo
{
id = order.Id,
type = order.Type,
isbind = false
};
var office = await dbClient.Queryable<YB_OfficlaAccount>().Where(x => x.authorizer_appid == order.Url && x.type == 2).FirstAsync();
if (office == null)
{
returndata.code = (int)ErrorInfoDesc.wxinfoerror;
return returndata;
}
returndata.HeadImg = office.head_img;
returndata.NickName = office.nick_name;
returndata.appid = office.user_name;
returndata.content = order.Page.Contains("?") ? $"{order.Page}&fid={fansid}" : $"{order.Page}?fid={fansid}";
returndata.officetype = (int)OfficeType.MINI;
return returndata;
}
/// <summary>
/// 用户事件处理
/// </summary>
/// <param name="appid"></param>
/// <param name="openid"></param>
/// <param name="type">1-认证的服务号关注事件,2-认证的服务号扫码事件,3-非认证关注事件,4-回复关键字,5-第一次打开落地页,6-非认证扫码事件</param>
/// <param name="encode">健康码</param>
/// <param name="equid">设备id</param>
/// <param name="fansid"></param>
/// <param name="scantype">1-带测量参数的二维码,2-固定二维码</param>
/// <returns></returns>
public async Task<int> SubscribeAsync(string appid, string openid, int type, string encode = "", string equid = "", string fansid = "", int scantype = 1)
{
//如果是固定二维码
var table = await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("proc_updateresult", new
{
encode = encode,
appid = appid,
equid = equid,
fansid = fansid,
openid = openid,
type = type,
scantype = scantype
});
int devicetype = 1;
//获取要展示的小程序名称
if (table.Rows.Count > 0)
{
var equlist = DataTableListHelper.ToList<YB_Device>(table);
if (equlist != null && equlist.Count > 0)
{
var equ = equlist.FirstOrDefault();
devicetype = equ.Type;
}
}
return devicetype;
}
/// <summary>
/// 设备状态描述
/// </summary>
/// <param name="status">设备状态</param>
/// <returns></returns>
private string EquStatusMsg(int status)
=> (status) switch
{
_ when status == (int)DeviceStatus.Stop => "设备已停止运行",
_ when status == (int)DeviceStatus.UnActive => "设备还未激活",
_ => "正常运行"
};
/// <summary>
/// 是否跳转到新平台
/// </summary>
/// <param name="code">设备序列号</param>
/// <returns></returns>
public async Task<bool> IsNewPlatformAsync(string code)
{
//如果是F01则全部转移到新平台
if (await dbClient.Queryable<YB_Device>().AnyAsync(x => x.FacCode == code && x.Type == 7))
{
return true;
}
//var time = DateTime.Parse("2022-06-01 00:00:00");
//if (await dbClient.Queryable<YB_Device>().AnyAsync(x => x.FacCode == code && x.Type != 2 && x.Type != 9 && x.Type != 17 && x.Type != 23 && x.Type != 11 && x.CreateTime >= time))
//{
// return true;
//}
var isexist = await dbClient.Queryable<YB_OutProductDev>().Where(x => (x.OrderId == 2265 || x.OrderId == 2259 || x.OrderId == 2315) && x.DeviceCode == code).AnyAsync();
if (!isexist)
{
isexist = await dbClient.Queryable<YB_Device>().AnyAsync(x => x.FacCode == code && (x.BusinessId == 6360 || x.BindBusinessId == 6360 || x.BindBusinessId == 2607));
}
return isexist;
}
}
}