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, "消息取消订阅成功");
}
}
}