username@email.com
2024-09-09 cc170291673472d3cda8d7ea77f6bd3a3b5dbb83
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/***********************************************************************
 *            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
{
    /// <summary>
    /// 消息配置表 接口实现
    /// </summary>
    public class CoreCmsMessageCenterServices : BaseServices<CoreCmsMessageCenter>, 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;
        }
 
 
        /// <summary>
        /// 商家发送信息助手
        /// </summary>
        /// <param name="userId">接受者id</param>
        /// <param name="code">模板编码</param>
        /// <param name="parameters">参数</param>
        /// <returns></returns>
        public async Task<WebApiCallBack> SendMessage(int userId, string code, JObject parameters)
        {
            try
            {
                var jm = new WebApiCallBack();
 
                using var container = _serviceProvider.CreateScope();
 
                var userServices = container.ServiceProvider.GetService<ICoreCmsUserServices>();
                var settingServices = container.ServiceProvider.GetService<ICoreCmsSettingServices>();
                var smsServices = container.ServiceProvider.GetService<ICoreCmsSmsServices>();
                var messageServices = container.ServiceProvider.GetService<ICoreCmsMessageServices>();
                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;
            }
        }
 
    }
}