tangjiang 10 сар өмнө
parent
commit
ac3df20352

+ 1 - 0
src/DataSharing.Application/DataSharing.Application.csproj

@@ -14,6 +14,7 @@
 
   <ItemGroup>
     <PackageReference Include="Polly.Core" Version="8.2.0" />
+    <PackageReference Include="XC.RSAUtil" Version="1.3.6" />
   </ItemGroup>
 
   <ItemGroup>

+ 133 - 1
src/DataSharing.Host/Controllers/HotlineWebController.cs

@@ -10,6 +10,7 @@ using DataSharing.RawData;
 using DataSharing.SendTask;
 using DataSharing.SendTask.OtherPlatforms;
 using DataSharing.Share.Consts;
+using DataSharing.Share.Dtos;
 using DataSharing.Share.Dtos.Common;
 using DataSharing.Share.Dtos.FwDataExchange;
 using DataSharing.Share.Dtos.HotlineSetting;
@@ -23,6 +24,9 @@ using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using SqlSugar;
+using System.Security.Cryptography;
+using System.Text;
+using XC.RSAUtil;
 using XF.Domain.Cache;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
@@ -66,6 +70,43 @@ namespace DataSharing.Host.Controllers
         private readonly IRepository<SendHotlineErrorData> _sendHotlineErrorDataRepository;
         private readonly FwClient _fwClient;
         private readonly ISharingConfigurationManager _sharingConfigurationManager;
+        private readonly IRepository<UserOperationLog> _userOperationLogRepository;
+        private const string PublicKey = @"-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgw+/x6IQPkH0A4eoF63j
+kLThsOXWyNBdcL9LATGy/G1yTHOr1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRW
+MONxIIF289riS6bDI4Ox/pFmOfmElFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/v
+oVeDTiOIw9y3tokIxjKwuJ/mQ66MkKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6
+WBFWkxlAqKOWggDU7YohfrbNkg3bd0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+P
+Prr5JWDNYQTXFQklqgae+Puge7xxZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJ
+UQIDAQAB
+-----END PUBLIC KEY-----";
+        private const string PrivateKey = @"-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAgw+/x6IQPkH0A4eoF63jkLThsOXWyNBdcL9LATGy/G1yTHOr
+1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRWMONxIIF289riS6bDI4Ox/pFmOfmE
+lFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/voVeDTiOIw9y3tokIxjKwuJ/mQ66M
+kKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6WBFWkxlAqKOWggDU7YohfrbNkg3b
+d0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+PPrr5JWDNYQTXFQklqgae+Puge7xx
+ZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJUQIDAQABAoIBAAe+312BKUbsp0BV
+fOyCqoTLqTJHBcBneWY86pte9bjaZQYPU1PsdF452o8a38gXwpErBcwcjwCyWv48
+iQKUv8qdiSWGe+Jh3hGM1lKGfsyl3i3wnlJqgcI2U1zc2a4BoREHnmm4yBnfs2lI
+HegpRCG7u3cGPZfJtxJyxdHPfsc3wk8sXt+Byqkuym87l0a8wEF7b33f2hP2R7m/
+37qYvTaGX3yN4s1rssQ3wBEfHEsesQmrQrEkRIUnWfgpkH3FdR5T1V4USC6GhM6x
+sIxqwBBYLL2LhVcNEifegqHtLZOw0VfUfpvoKnH5omSjUP5X+c8dmY9KPoKGpYFT
+l09fiRMCgYEAwSAmJr8G/xOCPtkRZ9qpxOwAeqA9iEhB3ViIydESrYMZGUaIKAWV
+ofOuDIdaMgW/2hyQtJasAnlX87Za7iODcBAMMAPSNiLEXk9nHWO+Xw/oMakgS5Dg
+uE2J02Bn4KFTCGALtfo70A40kkikkR2UdD4RG6j+DgI2JxxrCgaKiIMCgYEArbrv
+cvJs62LlvOFdVCY3mWEJkoBbStHGq2GdtZ5Rx9oNqiy3j/xT7Wav061OPCaC2rcd
+ALEH7AA3JJtAMr6QRv3HYyd2NIrlqS6pn4tInIpqlarrnVkkOk0WhsWVkScQJyx6
+eLKQ24zEF3wHslrRpHcclCWjtQ52TmWOuUvy9psCgYAWw6BbntbHSFho6hNIJ5kt
+Uhg4XB0ErGe/HIl7KH7IHxTdStgPx6C8p0mTxnyWOuFDZ2yTLNN3sy/v1UXgniUH
+F40oN7sWkICPEVL5PuGYuPpIqEPbRGeIsfMWDF4SN1HfQdr/h1B3lMUTnSZwyIjQ
+LuS7Wu8fXZlegNYJJ3462wKBgE5TSF9vktGw/djhVj15GXoKONGXExGxcDuWQA9A
++Kf81EpT7NJ6tbADquPpb6tIxZgsFGRabDLnifT0FcaLCesnwXwfr3hS4uYaxpjK
+qAsDkLg3nhCLvvyWAsDyVdNiZDL1J6ZBA3Qoi8P2xFWSApB+ryDPs3YOtiH0QZui
+9UBfAoGBAIQ2uv4J7ql++EpNNtLzOhTEpyjWS+qRSZRRXfKN2lm7e7czOsSpKIJx
+Q9PP8NTEmKqdI3WVFYqW/OlOFC6sjiscTOOn9Tc5Mrcn8ocCjAPjkhkCCVRMiJnv
+jxrWXHbT1FB6DqkdOnBbQqS1Azqz5HxLlSyEK3F60e3SgB5iZsDZ
+-----END RSA PRIVATE KEY-----";
 
         /// <summary>
         /// 
@@ -131,7 +172,8 @@ namespace DataSharing.Host.Controllers
            IRepository<DsOrder> dsOrderRepository,
            IRepository<SendHotlineErrorData> sendHotlineErrorDataRepository,
            FwClient fwClient,
-           ISharingConfigurationManager sharingConfigurationManager)
+           ISharingConfigurationManager sharingConfigurationManager,
+           IRepository<UserOperationLog> userOperationLogRepository)
         {
             _mapper = mapper;
             _mediator = mediator;
@@ -164,6 +206,7 @@ namespace DataSharing.Host.Controllers
             _sendHotlineErrorDataRepository = sendHotlineErrorDataRepository;
             _fwClient = fwClient;
             _sharingConfigurationManager = sharingConfigurationManager;
+            _userOperationLogRepository = userOperationLogRepository;
         }
         #endregion
 
@@ -951,6 +994,30 @@ namespace DataSharing.Host.Controllers
             if (string.IsNullOrEmpty(Id) || string.IsNullOrEmpty(Type))
                 throw UserFriendlyException.SameMessage("参数无效");
 
+            var userInfo = Request.Headers["userinfo"].ToString();
+            if (string.IsNullOrEmpty(userInfo))
+                throw UserFriendlyException.SameMessage("用户信息获取失败");
+
+            var pkcs1 = new RsaPkcs1Util(Encoding.UTF8, PublicKey, PrivateKey);
+            var info = pkcs1.Decrypt(userInfo, RSAEncryptionPadding.Pkcs1);
+            if (info == null)
+                throw UserFriendlyException.SameMessage("用户信息获取失败");
+
+            var user = System.Text.Json.JsonSerializer.Deserialize<UserInfo>(info);
+            if (user == null)
+                throw UserFriendlyException.SameMessage("用户信息获取失败");
+
+            //写入操作记录
+
+            UserOperationLog operationLog = new()
+            {
+                DataId = Id,
+                PlatformSource = EPlatformSource.Province,
+                UserId = user.UserId,
+                UserName = user.UserName,
+                OrgCode = user.OrgCode,
+                OrgName = user.OrgName
+            };
             string resultId = "";
 
             //服务工单受理
@@ -959,7 +1026,12 @@ namespace DataSharing.Host.Controllers
                 var data = await _sendTaskSubmitCaseInfoRepository.GetAsync(Id, HttpContext.RequestAborted);
 
                 if (data != null)
+                {
+                    operationLog.ReceiveServiceInterface = data.TaskType;
+                    operationLog.Path = data.Path;
+                    operationLog.RequestData = data.Request;
                     resultId = await _initPushDataService.InitDsSendTaskSubmitCaseInfo(data.ProvinceNo, data.Request, data.RequestData, data.GenerationTime, HttpContext.RequestAborted);
+                }
             }
 
             //电话记录
@@ -967,7 +1039,12 @@ namespace DataSharing.Host.Controllers
             {
                 var data = await _sendTaskSubmitCaseRecordRepository.GetAsync(Id, HttpContext.RequestAborted);
                 if (data != null)
+                {
+                    operationLog.ReceiveServiceInterface = data.TaskType;
+                    operationLog.Path = data.Path;
+                    operationLog.RequestData = data.Request;
                     resultId = await _initPushDataService.InitDsSendTaskSubmitCaseRecord(data.ProvinceNo, data.Request, data.RequestData, data.GenerationTime, HttpContext.RequestAborted);
+                }
             }
 
             //服务工单处理过程
@@ -975,7 +1052,12 @@ namespace DataSharing.Host.Controllers
             {
                 var data = await _sendTaskSubmitCaseProcessRepository.GetAsync(Id, HttpContext.RequestAborted);
                 if (data != null)
+                {
+                    operationLog.ReceiveServiceInterface = data.TaskType;
+                    operationLog.Path = data.Path;
+                    operationLog.RequestData = data.Request;
                     resultId = await _initPushDataService.InitDsSendTaskSubmitCaseProcess(data.ProvinceNo, data.Request, data.RequestData, data.GenerationTime, HttpContext.RequestAborted);
+                }
             }
 
             //服务工单处理结果
@@ -983,7 +1065,12 @@ namespace DataSharing.Host.Controllers
             {
                 var data = await _sendTaskSubmitCaseResultRepository.GetAsync(Id, HttpContext.RequestAborted);
                 if (data != null)
+                {
+                    operationLog.ReceiveServiceInterface = data.TaskType;
+                    operationLog.Path = data.Path;
+                    operationLog.RequestData = data.Request;
                     resultId = await _initPushDataService.InitDsSendTaskSubmitCaseResult(data.ProvinceNo, data.Request, data.RequestData, data.GenerationTime, HttpContext.RequestAborted);
+                }
             }
 
             //其他接口
@@ -991,7 +1078,12 @@ namespace DataSharing.Host.Controllers
             {
                 var data = await _sendTaskProvinceOtherRepository.GetAsync(Id, HttpContext.RequestAborted);
                 if (data != null)
+                {
+                    operationLog.ReceiveServiceInterface = data.TaskType;
+                    operationLog.Path = data.Path;
+                    operationLog.RequestData = data.Request;
                     resultId = await _initPushDataService.InitDsSendTaskProvinceOther(data.TaskType, data.Path, data.ProvinceNo, data.Request, data.RequestData, data.HttpMethod, data.PathType.Value, data.FileJson, data.GenerationTime, HttpContext.RequestAborted);
+                }
             }
 
             //其他平台
@@ -999,8 +1091,17 @@ namespace DataSharing.Host.Controllers
             {
                 var data = await _sendTaskOtherPlatformsRepository.GetAsync(Id, HttpContext.RequestAborted);
                 if (data != null)
+                {
+                    operationLog.ReceiveServiceInterface = data.TaskType;
+                    operationLog.Path = data.Path;
+                    operationLog.RequestData = data.Request;
                     resultId = await _initPushDataService.InitDsSendTaskOtherPlatforms(data.TaskType, data.Path, data.ProvinceNo, data.Request, data.RequestData, data.PlatformSource, data.HttpMethod, data.PathType.Value, data.FileJson, data.GenerationTime, HttpContext.RequestAborted);
+                }
             }
+
+            operationLog.NewDataId = resultId;
+            await _userOperationLogRepository.AddAsync(operationLog, HttpContext.RequestAborted);
+
             if (string.IsNullOrEmpty(resultId))
                 throw UserFriendlyException.SameMessage("重新推送失败");
         }
@@ -1344,6 +1445,19 @@ namespace DataSharing.Host.Controllers
             if (data == null)
                 throw UserFriendlyException.SameMessage("重新推送失败");
 
+            var userInfo = Request.Headers["userinfo"].ToString();
+            if (string.IsNullOrEmpty(userInfo))
+                throw UserFriendlyException.SameMessage("用户信息获取失败");
+
+            var pkcs1 = new RsaPkcs1Util(Encoding.UTF8, PublicKey, PrivateKey);
+            var info = pkcs1.Decrypt(userInfo, RSAEncryptionPadding.Pkcs1);
+            if (info == null)
+                throw UserFriendlyException.SameMessage("用户信息获取失败");
+
+            var user = System.Text.Json.JsonSerializer.Deserialize<UserInfo>(info);
+            if (user == null)
+                throw UserFriendlyException.SameMessage("用户信息获取失败");
+
             bool isSuccess = true;
             string error = "";
             //调用工单创建接口
@@ -1382,6 +1496,24 @@ namespace DataSharing.Host.Controllers
                 error = ex.Message;
             }
 
+            //写入操作记录
+
+            UserOperationLog operationLog = new()
+            {
+                DataId = data.Id,
+                NewDataId = data.Id,
+                PlatformSource = EPlatformSource.Hotline,
+                ReceiveServiceInterface = data.ReceiveServiceInterface,
+                Path = data.Path,
+                RequestData = data.RequestData,
+                UserId = user.UserId,
+                UserName = user.UserName,
+                OrgCode = user.OrgCode,
+                OrgName = user.OrgName
+            };
+
+            await _userOperationLogRepository.AddAsync(operationLog, HttpContext.RequestAborted);
+
             //推送失败添加
             if (!isSuccess)
             {

+ 0 - 1
src/DataSharing.Host/Controllers/Police110/PoliceDCJTController.cs

@@ -22,7 +22,6 @@ using System.Net;
 using System.Text;
 using XF.Domain.Filters;
 using XF.Domain.Repository;
-using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace DataSharing.Host.Controllers.Police110
 {

+ 4 - 6
src/DataSharing.Host/Controllers/Police110/PoliceDSController.cs

@@ -1,8 +1,12 @@
 using DataSharing.FwDataExchange;
 using DataSharing.Police110.DaoShu110;
+using DataSharing.Police110.Encryption;
 using DataSharing.RawData;
 using DataSharing.Share.Dtos;
 using DataSharing.Share.Dtos.HotlineSetting;
+using DataSharing.Share.Dtos.Police110;
+using DataSharing.Share.Dtos.Police110.DaoShu110;
+using DataSharing.Share.Enums;
 using DotNetCore.CAP;
 using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
 using Hotline.Share.Enums.Order;
@@ -16,12 +20,6 @@ using System.Net;
 using System.Text;
 using XF.Domain.Filters;
 using XF.Domain.Repository;
-using DataSharing.Police110.Encryption;
-using DataSharing.Share.Dtos.Police110.DaoShu110;
-using DataSharing.Share.Dtos.Police110;
-using DataSharing.Share.Dtos.Police110.DCJT110;
-using DataSharing.Share.Enums;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 
 namespace DataSharing.Host.Controllers.Police110
 {

+ 20 - 0
src/DataSharing.Host/Controllers/TestController.cs

@@ -3,12 +3,18 @@ using DataSharing.FwDataExchange;
 using DataSharing.Province;
 using DataSharing.Province.SendTask.SubmitCaseRecord;
 using DataSharing.RawData;
+using DataSharing.Share.Dtos;
 using DataSharing.Share.Dtos.Province;
 using DotNetCore.CAP;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using System.Security.Cryptography.X509Certificates;
+using System.Security.Cryptography;
+using System.Text;
+using XC.RSAUtil;
+using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 
 namespace DataSharing.Host.Controllers
@@ -100,6 +106,20 @@ namespace DataSharing.Host.Controllers
         [AllowAnonymous]
         public async Task GetToken([FromQuery] string TEXT)
         {
+
+            var userInfo = Request.Headers["userinfo"].ToString();
+            if (string.IsNullOrEmpty(userInfo))
+                throw UserFriendlyException.SameMessage("用户信息获取失败");
+
+            var pkcs1 = new RsaPkcs1Util(Encoding.UTF8, "12345", "12345");
+            var info = pkcs1.Decrypt(userInfo, RSAEncryptionPadding.Pkcs1);
+            if (info == null)
+                throw UserFriendlyException.SameMessage("用户信息获取失败");
+
+            var user = System.Text.Json.JsonSerializer.Deserialize<UserInfo>(info);
+            if (user == null)
+                throw UserFriendlyException.SameMessage("用户信息获取失败");
+
             //DsWaitSendTaskSubmitCaseRecord data = new();
             //var list = await _waitSendTaskSubmitCaseRecordRepository.Queryable().ToListAsync();
             //for (int i = 0; i < list.Count; i++)

+ 25 - 0
src/DataSharing.Share/Dtos/UserInfo.cs

@@ -0,0 +1,25 @@
+namespace DataSharing.Share.Dtos
+{
+    public class UserInfo
+    {
+        /// <summary>
+        /// 用户ID
+        /// </summary>
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 用户姓名
+        /// </summary>
+        public string UserName { get; set; }
+
+        /// <summary>
+        /// 部门Code
+        /// </summary>
+        public string OrgCode { get; set; }
+
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string OrgName { get; set; }
+    }
+}

+ 6 - 0
src/DataSharing.Share/Enums/EPlatformSource.cs

@@ -48,5 +48,11 @@ namespace DataSharing.Share.Enums
         /// </summary>
         [Description("综治平台")]
         ZZPT = 6,
+
+        /// <summary>
+        /// 业务系统
+        /// </summary>
+        [Description("业务系统")]
+        Hotline = 7,
     }
 }

+ 74 - 0
src/DataSharing/HotlineWeb/UserOperationLog.cs

@@ -0,0 +1,74 @@
+using DataSharing.Share.Enums;
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace DataSharing.HotlineWeb
+{
+    /// <summary>
+    /// 用户操作日志
+    /// </summary>
+    [Description("系统设置表")]
+    public class UserOperationLog : CreationEntity
+    {
+        /// <summary>
+        /// 操作数据ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "操作数据ID")]
+        public string DataId { get; set; }
+
+        /// <summary>
+        /// 操作数据ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "操作数据ID")]
+        public string NewDataId { get; set; }
+
+        /// <summary>
+        /// 平台名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "平台名称")]
+        public EPlatformSource PlatformSource { get; set; } = EPlatformSource.Province;
+
+        /// <summary>
+        /// 接收接口名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接收接口名称", ColumnDataType = "varchar(100)")]
+        public string? ReceiveServiceInterface { get; set; }
+
+        /// <summary>
+        /// 请求地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "请求地址")]
+        public string? Path { get; set; }
+
+        /// <summary>
+        /// 组装参数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "text", ColumnDescription = "组装参数")]
+        public string? RequestData { get; set; }
+
+        /// <summary>
+        /// 用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "用户ID")]
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 用户姓名
+        /// </summary>
+        [SugarColumn(ColumnDescription = "用户姓名")]
+        public string UserName { get; set; }
+
+        /// <summary>
+        /// 部门Code
+        /// </summary>
+        [SugarColumn(ColumnDescription = "部门Code")]
+        public string OrgCode { get; set; }
+
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "部门名称")]
+        public string OrgName { get; set; }
+    }
+}