You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							169 lines
						
					
					
						
							7.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							169 lines
						
					
					
						
							7.1 KiB
						
					
					
				
								using Dapper;
							 | 
						|
								using Newtonsoft.Json.Converters;
							 | 
						|
								using Newtonsoft.Json;
							 | 
						|
								using Npgsql;
							 | 
						|
								using NPOI.SS.Formula.Functions;
							 | 
						|
								using System;
							 | 
						|
								using System.Collections.Generic;
							 | 
						|
								using System.Data.Common;
							 | 
						|
								using System.Linq;
							 | 
						|
								using System.Net.Http.Headers;
							 | 
						|
								using System.Text;
							 | 
						|
								using System.Threading.Tasks;
							 | 
						|
								using System.Text.RegularExpressions;
							 | 
						|
								
							 | 
						|
								namespace Shentun.Peis.PlugIns.Gem
							 | 
						|
								{
							 | 
						|
								    public class ImportPatientRegisterPlugInsGem : ImportPatientRegisterPlugInsBase
							 | 
						|
								    {
							 | 
						|
								        private Guid _importCustomerOrgId;
							 | 
						|
								        private string _hospitalId;
							 | 
						|
								        private string _aesKEY;
							 | 
						|
								        private string _year;
							 | 
						|
								        public ImportPatientRegisterPlugInsGem(string parmValue) : base(parmValue)
							 | 
						|
								        {
							 | 
						|
								
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        public override async Task ImportAsync()
							 | 
						|
								        {
							 | 
						|
								            await InitAsync();
							 | 
						|
								
							 | 
						|
								            var qztlPatientRegisterFromInterface = await CallInterfaceServiceAsync();
							 | 
						|
								            if (qztlPatientRegisterFromInterface == null || !qztlPatientRegisterFromInterface.plans.Any())
							 | 
						|
								            {
							 | 
						|
								                return;
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            foreach(var patient in qztlPatientRegisterFromInterface.plans)
							 | 
						|
								            {
							 | 
						|
								
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        public async Task InitAsync()
							 | 
						|
								        {
							 | 
						|
								            var customerOrgIdStr = InterfaceConfig.GetSection("Interface").GetSection("单位编号").Value;
							 | 
						|
								            _hospitalId = InterfaceConfig.GetSection("Interface").GetSection("HospitalId").Value;
							 | 
						|
								            _aesKEY = InterfaceConfig.GetSection("Interface").GetSection("aesKEY").Value;
							 | 
						|
								            if (string.IsNullOrWhiteSpace(customerOrgIdStr))
							 | 
						|
								            {
							 | 
						|
								                return;
							 | 
						|
								            }
							 | 
						|
								            if (!Guid.TryParse(customerOrgIdStr, out _importCustomerOrgId))
							 | 
						|
								            {
							 | 
						|
								                throw new Exception("单位编号不正确");
							 | 
						|
								            }
							 | 
						|
								            if (string.IsNullOrWhiteSpace(_hospitalId))
							 | 
						|
								            {
							 | 
						|
								                throw new Exception("HospitalId参数不能为空");
							 | 
						|
								            }
							 | 
						|
								            if (string.IsNullOrWhiteSpace(_aesKEY))
							 | 
						|
								            {
							 | 
						|
								                throw new Exception("_aesKEY参数不能为空");
							 | 
						|
								            }
							 | 
						|
								            using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
							 | 
						|
								            {
							 | 
						|
								                string sql;
							 | 
						|
								                sql = @"
							 | 
						|
								                      SELECT id as  customer_org_id,
							 | 
						|
								                             display_name as customer_org_name,
							 | 
						|
								                             parent_id ,
							 | 
						|
								                             path_code
							 | 
						|
								                      from 
							 | 
						|
								                      customer_org 
							 | 
						|
								                      where id = @CustomerOrgId
							 | 
						|
								                      ";
							 | 
						|
								                var customerOrgForPlugInss = (await conn.QueryAsync<CustomerOrgForPlugIns>(sql,
							 | 
						|
								                    new { CustomerOrgId = _importCustomerOrgId })).FirstOrDefault();
							 | 
						|
								
							 | 
						|
								                if (customerOrgForPlugInss == null)
							 | 
						|
								                {
							 | 
						|
								                    throw new Exception("单位编号不正确,找不到单位");
							 | 
						|
								                }
							 | 
						|
								
							 | 
						|
								                var year = customerOrgForPlugInss.CustomerOrgName.Substring(
							 | 
						|
								                    customerOrgForPlugInss.CustomerOrgName.Length - 5
							 | 
						|
								                    , 4);
							 | 
						|
								                if (!int.TryParse(year, out var yearNumber))
							 | 
						|
								                {
							 | 
						|
								                    throw new Exception("单位名称必须是以2000年这样的格式结尾");
							 | 
						|
								                }
							 | 
						|
								                if (yearNumber < 2024 || yearNumber > 2050)
							 | 
						|
								                {
							 | 
						|
								                    throw new Exception("单位名称年限范围必须在2024-2050之间");
							 | 
						|
								                }
							 | 
						|
								
							 | 
						|
								                _year = year;
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        public async Task<QztlPatientRegisterFromInterface?> CallInterfaceServiceAsync()
							 | 
						|
								        {
							 | 
						|
								            string baseAddress = InterfaceWebApiUrl;
							 | 
						|
								            string ary = "HospitalId=" + _hospitalId + (Char)38 + "year=" + _year + (Char)38 + "AesKey=" + _aesKEY;
							 | 
						|
								            baseAddress = baseAddress + ary;
							 | 
						|
								            using (var httpClientHandler = new HttpClientHandler())
							 | 
						|
								            {
							 | 
						|
								                using (var httpClient = new HttpClient(httpClientHandler))
							 | 
						|
								                {
							 | 
						|
								                    httpClient.BaseAddress = new Uri(baseAddress);
							 | 
						|
								
							 | 
						|
								                    httpClient.DefaultRequestHeaders.Accept.Add(
							 | 
						|
								                      new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));//设置accept标头,告诉JSON是可接受的响应类型
							 | 
						|
								                    //httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _accesToken);
							 | 
						|
								                    IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
							 | 
						|
								                    timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
							 | 
						|
								                    //var sendData = JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented, timeFormat);
							 | 
						|
								                    using (HttpContent httpContent = new StringContent(""))
							 | 
						|
								                    {
							 | 
						|
								                        httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
							 | 
						|
								                        HttpResponseMessage response = await httpClient.GetAsync("");
							 | 
						|
								                        string result;
							 | 
						|
								                        if (!response.IsSuccessStatusCode)
							 | 
						|
								                        {
							 | 
						|
								                            result = response.Content.ReadAsStringAsync().Result;
							 | 
						|
								                            throw new Exception("http通信错误:" + response.StatusCode + ",结果:" + result);
							 | 
						|
								                        }
							 | 
						|
								                        result = await response.Content.ReadAsStringAsync();
							 | 
						|
								
							 | 
						|
								                        result = result.Replace(":\"[{", ":[{").Replace("}]\"", "}]").Replace("\\", "");
							 | 
						|
								                        
							 | 
						|
								                        QztlPatientRegisterFromInterface? resultDto = JsonConvert.DeserializeObject<QztlPatientRegisterFromInterface>(result);
							 | 
						|
								                        if (resultDto != null)
							 | 
						|
								                        {
							 | 
						|
								                            if (resultDto.status != 0)
							 | 
						|
								                            {
							 | 
						|
								                                throw new Exception($"调用WebApi失败,返回错误,消息:" + resultDto.status + resultDto.errorMsg);
							 | 
						|
								                            }
							 | 
						|
								                            //插入数据库中备份
							 | 
						|
								                            using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
							 | 
						|
								                            {
							 | 
						|
								                                string sql;
							 | 
						|
								                                var qztlImportDataEntity = new QztlImportDataEntity()
							 | 
						|
								                                {
							 | 
						|
								                                    Id = Guid.NewGuid(),
							 | 
						|
								                                    Data = result,
							 | 
						|
								                                    DataType = '0',
							 | 
						|
								                                    IsComplete = 'Y',
							 | 
						|
								                                    CreationTime = DateTime.Now,
							 | 
						|
								                                };
							 | 
						|
								
							 | 
						|
								                                sql = @"insert into qztl_import_data(id, data, data_type, is_complete,creation_time) 
							 | 
						|
								                             values(@Id, @Data, @DataType, @IsComplete,@CreationTime)";
							 | 
						|
								                                conn.Execute(sql, qztlImportDataEntity);
							 | 
						|
								
							 | 
						|
								                            }
							 | 
						|
								                            return (QztlPatientRegisterFromInterface)resultDto;
							 | 
						|
								                        }
							 | 
						|
								                        return null;
							 | 
						|
								                    }
							 | 
						|
								
							 | 
						|
								                }
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								}
							 |