using Furion.DependencyInjection; using Furion.DistributedIDGenerator; using Nirvana.Common; using Nirvana.Common.ApiBase; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using YBDevice.Entity; namespace YBDevice.NApi.Application.MessageInfo { /// /// 消息管理 /// public class MessageService : BaseService, IMessageService, ITransient { private readonly ISqlSugarRepository repository; private readonly SqlSugarClient dbClient; private readonly IDistributedIDGenerator _idGenerator; public MessageService(ISqlSugarRepository sqlSugarRepository, IDistributedIDGenerator idGenerator) { repository = sqlSugarRepository; dbClient = repository.Context; _idGenerator = idGenerator; } /// /// 获取客服配置信息 /// /// 小程序appid /// public async Task GetServiceInfoAsync(string appid) { var data = await dbClient.Queryable() .Where(x => x.AppId == appid) .Select(x => new CustomServiceC2SDto { QyAppId = x.QyAppId, Url = x.Url }) .FirstAsync(); if (data == null) { return new ResultInfo(ResultState.FAIL, "小程序还未配置微信客服"); } return new ResultInfo(ResultState.SUCCESS, "success", data); } /// /// 获取订阅状态 /// /// 小程序appid /// public async Task GetSubscribeInfoAsync(string appid) { var data = await dbClient.Queryable().Where(x => x.AppId == appid && x.OpenId == authInfo.OpenId).Select(x => new UserSubscribeS2CDto { Type = x.Type }).FirstAsync(); if (data == null) { return new ResultInfo(ResultState.FAIL, "未订阅消息"); } return new ResultInfo(ResultState.SUCCESS, "订阅消息", data); } /// /// 获取消息模板列表 /// /// 小程序appid /// public async Task GetTplListAsync(string appid) { var list = await dbClient.Queryable().Where(x => x.AppId == appid && x.IsSelected) .Select(x => new SubscribeTplS2CDto { Id = x.PriTmplId }) .ToListAsync(); return new ResultInfo(ResultState.SUCCESS, "success", list); } /// /// 消息订阅 /// /// /// public async Task SubscribeAsync(SubscribeC2SDto data) { var datalist = await dbClient.Queryable() .Where(x => x.OpenId == authInfo.OpenId) .Select(x => new YB_UserSubscribeMessage { TplId = x.TplId, Id = x.Id, AppId = x.AppId, OpenId = x.OpenId, UserId = x.UserId }) .ToListAsync(); List insertlist = new List(); List updatelist = new List(); List deletelist = new List(); bool IsSuccess = false;//是否订阅成功 data.List.ForEach(x => { var currentData = datalist.FirstOrDefault(e => e.TplId == x.TplId); if (currentData != null) { //如果是接受 if (x.Status.ToUpper() == SubscribeStatusConst.Accept) { updatelist.Add(new YB_UserSubscribeMessage { CreateTime = DateTime.Now, IsAlWays = false, Id = currentData.Id, Type = data.Type, AppId = currentData.AppId, OpenId = currentData.OpenId, TplId = x.TplId, UserId = currentData.UserId }); IsSuccess = true; } //其他情况删除 else { deletelist.Add(currentData.Id); } } //如果是接受 else if (x.Status.ToUpper() == SubscribeStatusConst.Accept) { insertlist.Add(new YB_UserSubscribeMessage { Id = _idGenerator.Create().ToGuid(), CreateTime = DateTime.Now, IsAlWays = false, OpenId = authInfo.OpenId, TplId = x.TplId, Type = data.Type, UserId = authInfo.UserId, AppId = data.AppId }); IsSuccess = true; } }); if (updatelist.Count > 0) { await dbClient.Updateable(updatelist).ExecuteCommandAsync(); } if (insertlist.Count > 0) { await dbClient.Insertable(insertlist).ExecuteCommandAsync(); } if (deletelist.Count > 0) { await dbClient.Deleteable().Where(x => deletelist.Contains(x.Id)).ExecuteCommandAsync(); } if (IsSuccess) { return new ResultInfo(ResultState.SUCCESS, "消息订阅成功"); } else { return new ResultInfo(ResultState.FAIL, "消息订阅失败"); } } /// /// 消息取消订阅 /// /// /// public async Task UnSubscribeAsync(UnSubscribeC2SDto data) { // 清除原先的 await dbClient.Deleteable().Where(x => x.OpenId == authInfo.OpenId && x.Type == data.Type).ExecuteCommandAsync(); return new ResultInfo(ResultState.SUCCESS, "消息取消订阅成功"); } } }