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 { /// /// 扫码订单处理 /// 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 repository; private readonly SqlSugarClient dbClient; private readonly ICapPublisher _capBus; public OrderService(ISqlSugarRepository sqlSugarRepository, ICapPublisher capPublisher) { repository = sqlSugarRepository; dbClient = repository.Context; _capBus = capPublisher; } /// /// 获取可用的订单 /// /// 设备信息 /// 用户资料 /// 1-获取小程序,2-链接,3-小程序,0-全部 /// 是否为绑定处理,true-是 /// /// 1-带测量参数的二维码,2-固定贴纸 /// public async Task 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(); 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().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().AnyAsync(x => x.FansId == userinfo.unionid)) { wxfansid = await dbClient.Queryable().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().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(); //写入异常日志 var param = $"equ={equ.ToJson()},userinfo={userinfo.ToJson()},isdefault={isdefault},isbind={isbind}"; logger.AddErrorLogger(ex, param, "获取订单"); return new OrderInfo { code = (int)ErrorInfoDesc.systemerror }; } } /// /// 获取设备绑定的商户端小程序 /// /// /// /// public async Task GetDevMagOrderAsync(YB_Device equ, UserBaseInfoS2SDto userinfo) { if (equ == null) { equ = await dbClient.Queryable().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(); 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().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; } /// /// 获取八电极小程序订单 /// /// public async Task 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(); 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().FirstAsync(x => x.FansId == userinfo.unionid)).Id; var office = await dbClient.Queryable().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; } /// /// 获取带测量参数的二维码订单 /// /// 设备信息 /// 用户资料 /// 1-设备管理,2-用户测量,3-用户绑定 /// public async Task 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(); 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().FirstAsync(x => x.FansId == userinfo.unionid)).Id; //如果是关注公众号 if (order.Type == OrderType.Office) { var office = await dbClient.Queryable().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().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; } /// /// 获取固定贴纸订单 /// /// 设备信息 /// 用户资料 /// 1-设备管理,2-用户测量,3-用户绑定 /// public async Task GetOrderByStickerAsync(YB_Device equ, UserBaseInfoS2SDto userinfo, int ordertype = 2) { bool isbind = false; int isdefault = 0;//1-公众号,2-链接,3-小程序,0-全部 //如果设备协议符合八电极体重体脂,则查找wifi绑定订单 if (await dbClient.Queryable().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(); 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().FirstAsync(x => x.FansId == userinfo.unionid)).Id; //如果是关注公众号 if (order.Type == OrderType.Office) { var office = await dbClient.Queryable().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().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; } /// /// 更新八电极推送的消息数据记录 /// /// /// /// /// public async Task UpdateBodyResultAsync(Guid resultid, UserBaseInfoS2SDto userinfo, OrderInfo order) { //如果wxfansid绑定了用户则userid直接赋值 var account = await dbClient.Queryable().Where(x => x.FansId == order.WxFansId).FirstAsync(); string fansid = order.WxFansId.ToString(); int userid = account != null ? account.Id : 0; if (await dbClient.Queryable().AnyAsync(x => x.Id == resultid)) { await dbClient.Updateable().SetColumns(x => new YB_nUserResult { FansId = order.WxFansId, UserId = userid }).Where(x => x.Id == resultid).ExecuteCommandAsync(); } } /// /// 插入扫码测量记录 /// /// /// /// /// /// 1-单电阻,2-八电极 /// /// /// /// /// /// /// 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().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().SetColumns(x => new YB_Order { ShowCount = x.ShowCount + 1, DayCount = x.DayCount + 1 }).Where(x => x.Id == order.id).ExecuteCommandAsync(); } /// /// 插入固定二维码扫码记录 /// /// /// /// /// public async Task InsertResultAsync(YB_Device equ, UserBaseInfoS2SDto userinfo, OrderInfo order) { //更新订单展现次数 await dbClient.Updateable().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(); } } } /// /// 处理固定贴纸图文链接 /// /// /// /// /// /// /// public async Task HandlerStickySubscribeAsync(string appid, string openid, int type, string fansid, Guid? resultid) { //获取记录 var result = await dbClient.Queryable().FirstAsync(x => x.Id == resultid.Value); //更新关注记录 if (result != null) { //如果未计费则进行计费 if (result.Subscribe == 0) { //更新记录 await dbClient.Updateable().SetColumns(x => new YB_ScanResult { Subscribe = 1, TakeTime = DateTime.Now }).Where(x => x.Id == result.Id).ExecuteCommandAsync(); //更新订单 await dbClient.Updateable().SetColumns(x => new YB_Order { RealCount = x.RealCount + 1, DayRealCount = x.DayRealCount + 1 }).Where(x => x.Id == result.OrderId).ExecuteCommandAsync(); //更新设备数据 await dbClient.Updateable().SetColumns(x => new YB_EquRealData { TodayRealCnt = x.TodayRealCnt + 1, TotalRealCnt = x.TotalRealCnt + 1 }).Where(x => x.Id == result.EquId).ExecuteCommandAsync(); //更新商户数据 await dbClient.Updateable().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(); 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().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; } /// /// 处理带参数二维码图文链接 /// /// /// /// /// /// public async Task HandlerResultSubscribeAsync(string appid, string openid, int type, string fansid, Guid? resultid) { //获取记录 var result = await dbClient.Queryable().FirstAsync(x => x.Id == resultid); if (result == null) { return null; } //更新关注记录 //如果未计费则进行计费 if (result.Subscribe == 0) { Guid wxfansid = Guid.Parse(fansid); if (await dbClient.Queryable().AnyAsync(x => x.AppId == appid && x.OpenId == openid)) { await dbClient.Updateable().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().SetColumns(x => new YB_Order { RealCount = x.RealCount + 1, DayRealCount = x.DayRealCount + 1 }).Where(x => x.Id == result.OrderId).ExecuteCommandAsync(); //更新设备数据 await dbClient.Updateable().SetColumns(x => new YB_EquRealData { TodayRealCnt = x.TodayRealCnt + 1, TotalRealCnt = x.TotalRealCnt + 1 }).Where(x => x.Id == result.EquId).ExecuteCommandAsync(); //更新商户数据 await dbClient.Updateable().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(); 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().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; } /// /// 用户事件处理 /// /// /// /// 1-认证的服务号关注事件,2-认证的服务号扫码事件,3-非认证关注事件,4-回复关键字,5-第一次打开落地页,6-非认证扫码事件 /// 健康码 /// 设备id /// /// 1-带测量参数的二维码,2-固定二维码 /// public async Task 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(table); if (equlist != null && equlist.Count > 0) { var equ = equlist.FirstOrDefault(); devicetype = equ.Type; } } return devicetype; } /// /// 设备状态描述 /// /// 设备状态 /// private string EquStatusMsg(int status) => (status) switch { _ when status == (int)DeviceStatus.Stop => "设备已停止运行", _ when status == (int)DeviceStatus.UnActive => "设备还未激活", _ => "正常运行" }; /// /// 是否跳转到新平台 /// /// 设备序列号 /// public async Task IsNewPlatformAsync(string code) { //如果是F01则全部转移到新平台 if (await dbClient.Queryable().AnyAsync(x => x.FacCode == code && x.Type == 7)) { return true; } //var time = DateTime.Parse("2022-06-01 00:00:00"); //if (await dbClient.Queryable().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().Where(x => (x.OrderId == 2265 || x.OrderId == 2259 || x.OrderId == 2315) && x.DeviceCode == code).AnyAsync(); if (!isexist) { isexist = await dbClient.Queryable().AnyAsync(x => x.FacCode == code && (x.BusinessId == 6360 || x.BindBusinessId == 6360 || x.BindBusinessId == 2607)); } return isexist; } } }