/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.Threading.Tasks;
using CoreCms.Net.Caching.AutoMate.RedisCache;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
namespace CoreCms.Net.Services
{
///
/// 消息配置表 接口实现
///
public class CoreCmsMessageCenterServices : BaseServices, ICoreCmsMessageCenterServices
{
private readonly ICoreCmsMessageCenterRepository _dal;
private readonly IServiceProvider _serviceProvider;
private readonly IRedisOperationRepository _redisOperationRepository;
private readonly IUnitOfWork _unitOfWork;
public CoreCmsMessageCenterServices(IUnitOfWork unitOfWork, ICoreCmsMessageCenterRepository dal, IServiceProvider serviceProvider, ISysTaskLogServices taskLogServices, IRedisOperationRepository redisOperationRepository)
{
this._dal = dal;
_serviceProvider = serviceProvider;
_redisOperationRepository = redisOperationRepository;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
///
/// 商家发送信息助手
///
/// 接受者id
/// 模板编码
/// 参数
///
public async Task SendMessage(int userId, string code, JObject parameters)
{
try
{
var jm = new WebApiCallBack();
using var container = _serviceProvider.CreateScope();
var userServices = container.ServiceProvider.GetService();
var settingServices = container.ServiceProvider.GetService();
var smsServices = container.ServiceProvider.GetService();
var messageServices = container.ServiceProvider.GetService();
var allConfigs = await settingServices.GetConfigDictionaries();
var config = await _dal.QueryByClauseAsync(p => p.code == code);
if (config == null)
{
jm.msg = GlobalErrorCodeVars.Code10100;
return jm;
}
if (config.isSms)
{
//判断短信是否够,如果够,就去发
var user = await userServices.QueryByClauseAsync(p => p.id == userId);
if (user != null && !string.IsNullOrEmpty(user.mobile))
{
var mobile = user.mobile;
//判断是否平台通知
if (code == GlobalEnumVars.PlatformMessageTypes.SellerOrderNotice.ToString())
{
mobile = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopMobile);
}
//发货时,短信通知用发货人的
if (code == GlobalEnumVars.PlatformMessageTypes.DeliveryNotice.ToString())
{
if (parameters.ContainsKey("shipMobile"))
{
mobile = parameters["shipMobile"].ObjectToString();
}
}
if (!string.IsNullOrEmpty(mobile))
{
await smsServices.Send(mobile, code, parameters);
}
}
}
//站内消息
if (config.isMessage && code != GlobalEnumVars.PlatformMessageTypes.SellerOrderNotice.ToString())
{
await messageServices.Send(userId, code, parameters);
}
//微信模板消息【小程序,公众号都走这里】
if (config.isWxTempletMessage &&
(code == GlobalEnumVars.PlatformMessageTypes.OrderPayed.ToString() || code == GlobalEnumVars.PlatformMessageTypes.DeliveryNotice.ToString() || code == GlobalEnumVars.PlatformMessageTypes.RemindOrderPay.ToString()))
{
var @params = new JObject();
@params.Add("parameters", parameters);
var data = new
{
userId,
code,
parameters = @params
};
//队列推送消息
await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.SendWxTemplateMessage, JsonConvert.SerializeObject(data));
}
jm.status = true;
return jm;
}
catch (Exception ex)
{
NLogUtil.WriteAll(LogLevel.Trace, LogType.RefundResultNotification, "商家发送信息助手", JsonConvert.SerializeObject(ex));
throw;
}
}
}
}