Browse Source

导入LIS结果

bjmzak
DESKTOP-G961P6V\Zhh 2 years ago
parent
commit
67628c0437
  1. 83
      ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs
  2. 1
      src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs
  3. 94
      src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs
  4. 5
      src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsBase.cs
  5. 58
      src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsDbBase.cs
  6. 21
      src/Shentun.ColumnReferencePlugIns/ThirdPlugInsBase.cs
  7. 7
      src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs
  8. 22
      src/Shentun.Peis.Domain.Shared/Enums/ChargeRequestFlag.cs
  9. 3
      src/Shentun.Peis.Domain.Shared/Enums/ThirdInterfaceTypeFlag.cs
  10. 2
      src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs
  11. 5
      src/Shentun.Peis.Domain/ThirdInterfaces/ThirdInterfaceManager.cs
  12. 5
      test/Shentun.Peis.ColumnReference.Tests/appsettings.json

83
ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs

@ -2,6 +2,7 @@
using log4net.Repository.Hierarchy;
using Npgsql;
using ServiceReferenceHzcyHis;
using Shentun.Peis.Enums;
using System;
using System.Collections.Generic;
using System.Data.Common;
@ -20,11 +21,11 @@ namespace Shentun.Peis.PlugIns.Gem
{
_endpointAddress = InterfaceConfig.GetSection("Interface").GetSection("EndpointAddress").Value;
}
public override async Task<ChargeRequestPlugInsOut> SendRequestAsync(ChargeRequestPlugInsInput input)
public override async Task<ChargeRequestPlugInsOut> SendChargeRequestAsync(ChargeRequestPlugInsInput input)
{
//建立人员档案
var patientRegisterForPlugIns = await GetPatientRegisterForPlugInsAsync(input.ChargeRequestId);
var chargeRequestForPlugIns = await GetChargeRequestForPlugInsAsync(input.ChargeRequestId);
var patientRegisterForPlugIns = await GetPatientRegisterAsync(input.ChargeRequestId);
var chargeRequestForPlugIns = await GetChargeRequestAsync(input.ChargeRequestId);
if(chargeRequestForPlugIns == null)
{
throw new Exception("没有申请单信息");
@ -131,9 +132,9 @@ namespace Shentun.Peis.PlugIns.Gem
return new ChargeRequestPlugInsOut();
}
public override async Task<ChargeRequestPlugInsOut> CancelRequestAsync(ChargeRequestPlugInsInput input)
public override async Task<ChargeRequestPlugInsOut> CancelChargeRequestAsync(ChargeRequestPlugInsInput input)
{
var chargeRequestForPlugIns = await GetChargeRequestForPlugInsAsync(input.ChargeRequestId);
var chargeRequestForPlugIns = await GetChargeRequestAsync(input.ChargeRequestId);
if (chargeRequestForPlugIns == null)
{
throw new Exception("没有申请单信息");
@ -161,18 +162,82 @@ namespace Shentun.Peis.PlugIns.Gem
{
throw new Exception("作废申请单失败" + result.MsgHeader.Detail);
}
await CancelAppChargeRequestAsync(input.ChargeRequestId);
await SetAppChargeRequestFlagAsync(input.ChargeRequestId, ChargeRequestFlag.AlreadyCancelCharge);
return new ChargeRequestPlugInsOut();
}
public override Task DoWorkAsync()
public override async Task DoWorkAsync()
{
throw new Exception("格尔木DoWorkAsync。。。");
//return base.DoWorkAsync();
}
public override Task DoWork()
{
var queryDaysStr = InterfaceConfig.GetSection("Scheduler").GetSection("QueryDays").Value;
if (string.IsNullOrWhiteSpace(queryDaysStr))
{
queryDaysStr = "1";
}
if(!int.TryParse(queryDaysStr,out int days))
{
days = 1;
}
var chargeRequests = GetRequests(days).Result;
foreach (var chargeRequest in chargeRequests)
{
var hisInput = new HisPayStatusInput()
{
Data = new HisPayStatusDataInput()
{
MsgHeader = new HisMsgHeaderInput()
{
Sender = "PEIS",
MsgType = "SVR_ODS_6105",
MsgVersion = "3.1",
},
Item = new HisPayStatusDataItemInput()
{
Yjxh = chargeRequest.HisChargeNo,
ExamRequestNo = chargeRequest.ChargeRequestNo,
}
}
};
var result = PayStatus(hisInput).Result;
if (result.MsgHeader.Status != "true")
{
throw new Exception("查询支付状态失败" + result.MsgHeader.Detail);
}
//1:已支付,2.已作废3.已退费, 其他:未支付
char charRequstFlag;
if (result.MsgHeader.ErrCode == "1")
{
charRequstFlag = ChargeRequestFlag.AlreadyCharge;
SetAppChargeRequestFlagAsync(chargeRequest.ChargeRequestId, charRequstFlag);
}
else if (result.MsgHeader.ErrCode == "2")
{
charRequstFlag = ChargeRequestFlag.AlreadyCancelCharge;
SetAppChargeRequestFlagAsync(chargeRequest.ChargeRequestId, charRequstFlag);
}
else if (result.MsgHeader.ErrCode == "3")
{
charRequstFlag = ChargeRequestFlag.AlreadyRefund;
SetAppChargeRequestFlagAsync(chargeRequest.ChargeRequestId, charRequstFlag);
}
else
{
throw new Exception("查询支付状态不支持的收费标志" + result.MsgHeader.ErrCode);
}
}
return base.DoWork();
}
public override async Task<ChargeRequestPlugInsOut> RefundRequestAsync(ChargeRequestPlugInsInput input)
{
var chargeRequestForPlugIns = await GetChargeRequestForPlugInsAsync(input.ChargeRequestId);
var chargeRequestForPlugIns = await GetChargeRequestAsync(input.ChargeRequestId);
if (chargeRequestForPlugIns == null)
{
throw new Exception("没有申请单信息");
@ -201,7 +266,7 @@ namespace Shentun.Peis.PlugIns.Gem
{
throw new Exception("允许退费申请失败" + result.MsgHeader.Detail);
}
await RefundAppChargeRequestAsync(input.ChargeRequestId);
await SetAppChargeRequestFlagAsync(input.ChargeRequestId, ChargeRequestFlag.RefundRequest);
return new ChargeRequestPlugInsOut();
}
public async Task<HisPatientQueryOut> PatientQuery(HisPatientQueryInput input)

1
src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs

@ -10,6 +10,7 @@ namespace Shentun.Peis.PlugIns
{
public class ChargeRequestForPlugIns
{
public Guid ChargeRequestId { get; set; }
/// <summary>
/// 收费申请单号
/// </summary>

94
src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs

@ -1,5 +1,6 @@
using Dapper;
using Npgsql;
using Shentun.Peis.Enums;
using System;
using System.Collections.Generic;
using System.Data.Common;
@ -15,13 +16,13 @@ namespace Shentun.Peis.PlugIns
{
}
public virtual async Task<ChargeRequestPlugInsOut> SendRequestAsync(ChargeRequestPlugInsInput input)
public virtual async Task<ChargeRequestPlugInsOut> SendChargeRequestAsync(ChargeRequestPlugInsInput input)
{
var result = new ChargeRequestPlugInsOut();
return result;
}
public virtual async Task<ChargeRequestPlugInsOut> CancelRequestAsync(ChargeRequestPlugInsInput input)
public virtual async Task<ChargeRequestPlugInsOut> CancelChargeRequestAsync(ChargeRequestPlugInsInput input)
{
var result = new ChargeRequestPlugInsOut();
return result;
@ -32,7 +33,7 @@ namespace Shentun.Peis.PlugIns
return result;
}
public async Task<PatientRegisterForPlugIns> GetPatientRegisterForPlugInsAsync(Guid chargeRequestId)
public async Task<PatientRegisterForPlugIns> GetPatientRegisterAsync(Guid chargeRequestId)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
@ -66,12 +67,13 @@ where patient.id = patient_register.patient_id and
}
public async Task<ChargeRequestForPlugIns> GetChargeRequestForPlugInsAsync(Guid chargeRequestId)
public async Task<ChargeRequestForPlugIns> GetChargeRequestAsync(Guid chargeRequestId)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
string sql;
sql = @"SELECT charge_request_no,
sql = @"SELECT id as charge_request_id,
charge_request_no,
his_charge_no,
charge_request_flag
FROM charge_request
@ -102,51 +104,85 @@ where patient.id = patient_register.patient_id and
}
}
public async Task CancelAppChargeRequestAsync(Guid chargeRequestId)
public async Task<List<ChargeRequestForPlugIns>> GetRequests(int days)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
string sql;
sql = @" update charge_request set charge_request_flag = '2' where id = @ChargeRequestId
var startDate = DateTime.Now.Date.AddDays(-days);
sql = @"SELECT id as charge_request_id,
charge_request_no,
his_charge_no,
charge_request_flag
FROM charge_request
WHERE (charge_request_flag = '0' or charge_request_flag = '2' or
charge_request_flag = '4')and
creation_time >@StartDate
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestId });
}
}
public async Task RefundAppChargeRequestAsync(Guid chargeRequestId)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
string sql;
sql = @" update charge_request set charge_request_flag = '3' where id = @ChargeRequestId
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestId });
var chargeRequestForPlugInss = (await conn.QueryAsync<ChargeRequestForPlugIns>(sql,
new { StartDate = startDate })).ToList();
return chargeRequestForPlugInss;
}
}
public async Task SetAppChargeRequestIsChargeAsync(Guid chargeRequestId)
//public async Task CancelAppChargeRequestAsync(Guid chargeRequestId)
//{
// using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
// {
// string sql;
// sql = @" update charge_request set charge_request_flag = '2' where id = @ChargeRequestId
// ";
// conn.Execute(sql,
// new { ChargeRequestId = chargeRequestId });
// }
//}
//public async Task RefundAppChargeRequestAsync(Guid chargeRequestId)
//{
// using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
// {
// string sql;
// sql = @" update charge_request set charge_request_flag = '3' where id = @ChargeRequestId
// ";
// conn.Execute(sql,
// new { ChargeRequestId = chargeRequestId });
// }
//}
public async Task SetAppChargeRequestFlagAsync(Guid chargeRequestId, char chargeRequestFlag)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
string sql;
sql = @" update charge_request set charge_request_flag = '1' where id = @ChargeRequestId
sql = @" update charge_request set charge_request_flag =" + chargeRequestFlag +
@" where id = @ChargeRequestId
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestId });
sql = @" update register_check_asbitem set is_charge = 'Y' where charge_request_id = @ChargeRequestId
if (chargeRequestFlag == ChargeRequestFlag.AlreadyCharge)
{
sql = @" update register_check_asbitem set is_charge = 'Y' where charge_request_id = @ChargeRequestId
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestId });
conn.Execute(sql,
new { ChargeRequestId = chargeRequestId });
}
else if (chargeRequestFlag == ChargeRequestFlag.AlreadyRefund)
{
sql = @" update register_check_asbitem set is_charge = 'Y' where charge_request_id = @ChargeRequestId
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestId });
}
}
}
}
public class ChargeRequestPlugInsInput

5
src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsBase.cs

@ -38,7 +38,7 @@ namespace Shentun.Peis.PlugIns
{
string sql;
sql = @"
SELECT lis_request.id ,
SELECT distinct lis_request.id ,
lis_request.lis_request_no
from patient_register
JOIN register_check on patient_register.id = register_check.patient_register_id
@ -46,7 +46,8 @@ namespace Shentun.Peis.PlugIns
JOIN lis_request on register_check_asbitem.lis_request_id = lis_request.id
where patient_register.id = @PatientRegisterId
";
var lisRequestForResultImportPlugInss = (await conn.QueryAsync<LisRequestForResultImportPlugIns>(sql)).ToList();
var lisRequestForResultImportPlugInss = (await conn.QueryAsync<LisRequestForResultImportPlugIns>(sql,
new { PatientRegisterId = patientRegisterId })).ToList();
return lisRequestForResultImportPlugInss;
}
}

58
src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsDbBase.cs

@ -2,7 +2,11 @@
using Microsoft.Data.SqlClient;
using Newtonsoft.Json;
using Npgsql;
using NPOI.Util;
using NUglify.Helpers;
using Oracle.ManagedDataAccess.Client;
using Shentun.Peis.ImportLisResults;
using Shentun.Peis.LisRequests;
using Shentun.Utilities;
using System;
using System.Collections.Generic;
@ -24,20 +28,66 @@ namespace Shentun.Peis.PlugIns
public override async Task<LisResultImportPlugInsOut> ImportResultAsync(LisResultImportPlugInsInput input)
{
var result = new LisResultImportPlugInsOut();
var lisRequests = await GetLisRequestForResultImportPlugInssAsync(input.PatientRegisterId);
using (DbConnection conn = CreateInterfaceDbConnect())
{
var list = (await conn.QueryAsync<LisResultFromInterface>(InterfaceSql)).ToList();
var lisResultFromInterfaces = (await conn.QueryAsync<LisResultFromInterface>(InterfaceSql)).ToList();
//设置结果,生成小结
foreach (var item in list)
var createImportLisResultDtos = new List<CreateImportLisResultDto>();
foreach (var lisResult in lisResultFromInterfaces)
{
if (string.IsNullOrWhiteSpace(lisResult.ItemName))
{
throw new Exception("第三方接口数据项目名称不能为空");
}
var columnReferenceCodes = await GetColumnReferenceCodeValuesAsync(ItemColumnReferenceId, lisResult.ItemId);
if(columnReferenceCodes == null || !columnReferenceCodes.Any())
{
throw new Exception($"{lisResult.ItemName}没有对照编码");
}
foreach (var columnReferenceCode in columnReferenceCodes)
{
if (string.IsNullOrWhiteSpace(columnReferenceCode.CodeValue))
{
continue;
}
if (!Guid.TryParse(columnReferenceCode.CodeValue, out var appItemId))
{
continue;
}
else
{
throw new Exception($"{lisResult.ItemName}对照的编码无效");
}
var createImportLisResultDto = new CreateImportLisResultDto()
{
LisRequestNo = lisResult.LisRequestNo,
ItemId = appItemId,
ItemName = lisResult.ItemName,
Result = lisResult.Result,
Unit = lisResult.Unit,
ReferenceRangeValue = lisResult.ReferenceRangeValue,
CriticalRangeValue = lisResult.CriticalRangeValue,
ResultStatusId = lisResult.ResultStatusId,
ReportPrompt = lisResult.ReportPrompt,
CheckDoctorName = lisResult.CheckDoctorName,
CheckDate = lisResult.CheckDate,
};
createImportLisResultDtos.Add(createImportLisResultDto);
}
}
if(!createImportLisResultDtos.Any())
{
return result;
}
await LoginAsync();
await CallAppServiceAsync<List<CreateImportLisResultDto>,object>("api/app/ImportLisResult/ImportResult", createImportLisResultDtos);
}
return new LisResultImportPlugInsOut();
return result;
}

21
src/Shentun.ColumnReferencePlugIns/ThirdPlugInsBase.cs

@ -39,5 +39,26 @@ namespace Shentun.Peis.PlugIns
return columnReferenceInterfaceCodeValues;
}
}
public async Task<List<ColumnReferenceCodeValue>> GetColumnReferenceCodeValuesAsync(Guid columnReferenceId,
string interfaceCodeValue)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
string sql;
sql = @"
SELECT
column_reference_code.code_value
from column_reference
join column_reference_code on column_reference.id = column_reference_code.column_reference_id
join column_reference_interface on column_reference_code.id = column_reference_interface.column_reference_code_id
where column_reference.id = @ColumnReferenceId and
column_reference_interface.interface_code_value = @InterfaceCodeValue
";
var columnReferenceCodeValues = (await conn.QueryAsync<ColumnReferenceCodeValue>(sql,
new { ColumnReferenceId = columnReferenceId, InterfaceCodeValue = interfaceCodeValue })).ToList();
return columnReferenceCodeValues;
}
}
}
}

7
src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs

@ -91,7 +91,7 @@ namespace Shentun.Peis.ChargeRequests
if(item.registerCheckAsbitem.ChargeRequestId != null)
{
var haveChargeRequest = await _chargeRequestRepository.GetAsync((Guid)item.registerCheckAsbitem.ChargeRequestId);
if(haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.Request)
if(haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.ChargeRequest)
{
throw new UserFriendlyException($"{item.asbitem.DisplayName}已经申请,必须先撤销申请");
}
@ -140,7 +140,7 @@ namespace Shentun.Peis.ChargeRequests
throw new UserFriendlyException("input参数不能为空");
}
await _chargeRequestManager.SendThirChargeRequestAsync(input.ChargeRequestId,"CancelRequestAsync");
await _chargeRequestManager.SendThirChargeRequestAsync(input.ChargeRequestId, "CancelChargeRequestAsync");
ChargeRequestDto result = new ChargeRequestDto();
@ -159,7 +159,8 @@ namespace Shentun.Peis.ChargeRequests
{
throw new UserFriendlyException("input参数不能为空");
}
var chargeRequest = await _chargeRequestRepository.GetAsync(input.ChargeRequestId);
//if(chargeRequest.ChargeRequestFlag == ChargeRequestFlag.)
await _chargeRequestManager.SendThirChargeRequestAsync(input.ChargeRequestId, "RefundRequestAsync");
ChargeRequestDto result = new ChargeRequestDto();

22
src/Shentun.Peis.Domain.Shared/Enums/ChargeRequestFlag.cs

@ -8,18 +8,24 @@ namespace Shentun.Peis.Enums
public class ChargeRequestFlag
{
[Description("申请")]
public const char Request = '0';
[Description("收费申请")]
public const char ChargeRequest = '0';
[Description("已收费")]
public const char Charge = '1';
public const char AlreadyCharge = '1';
[Description("作废")]
public const char Cancel = '2';
[Description("作废申请")]
public const char CancelChargeRequest = '2';
[Description("已作废")]
public const char AlreadyCancelCharge = '3';
[Description("退费申请")]
public const char RefundRequest = '4';
[Description("已退费")]
public const char AlreadyRefund = '5';
[Description("退费")]
public const char Refund = '3';
}
}

3
src/Shentun.Peis.Domain.Shared/Enums/ThirdInterfaceTypeFlag.cs

@ -14,5 +14,8 @@ namespace Shentun.Peis.Enums
[Description("收费申请")]
public const string ChargeRequest = "02";
[Description("LIS结果导入")]
public const string ImportLisResult = "02";
}
}

2
src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs

@ -60,7 +60,7 @@ namespace Shentun.Peis.ChargeRequests
PatientRegisterId = entity.PatientRegisterId,
HisChargeNo = entity.HisChargeNo,
ChargeRequestNo = await CreateChargeRequestNo(patientRegister.MedicalCenterId),
ChargeRequestFlag = ChargeRequestFlag.Request,
ChargeRequestFlag = ChargeRequestFlag.ChargeRequest,
};
}

5
src/Shentun.Peis.Domain/ThirdInterfaces/ThirdInterfaceManager.cs

@ -119,9 +119,10 @@ namespace Shentun.Peis.ThirdInterfaces
DataHelper.CheckStringIsNull(entity.ParmValue, "配置参数");
DataHelper.CheckCharIsYOrN(entity.IsActive, "是否启用");
if (entity.ThirdInterfaceType != ThirdInterfaceTypeFlag.LisRequest
&& entity.ThirdInterfaceType != ThirdInterfaceTypeFlag.ChargeRequest)
&& entity.ThirdInterfaceType != ThirdInterfaceTypeFlag.ChargeRequest
&& entity.ThirdInterfaceType != ThirdInterfaceTypeFlag.ImportLisResult)
{
throw new ArgumentException($"接口类型参数为:{entity.ThirdInterfaceType},是无效值,只能为{ThirdInterfaceTypeFlag.LisRequest}跟{ThirdInterfaceTypeFlag.ChargeRequest}");
throw new ArgumentException($"接口类型参数为:{entity.ThirdInterfaceType},是无效值");
}
}
}

5
test/Shentun.Peis.ColumnReference.Tests/appsettings.json

@ -19,12 +19,13 @@
"ConnectionStrings": "User ID=TJ_LIS;Password=TJ_LIS;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.12.34)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = HIS56)))",
//"Sql": "select ZHID as Code ,ZHMC as DisplayName from PORTAL56_LIS.vi_tj_testitemgroup",
"Sql": "SELECT TMH AS LisRequestNo,TJBH AS PatientId,XMDM as ItemId,XMMC as ItemName,XMJG as Result,UNIT as Unit,REFLO ||'-'||Refhi AS ReferenceRangeValue FROM PORTAL56_LIS.VI_TJ_RESULT",
"Sql": "SELECT TMH AS LisRequestNo,TJBH AS PatientId,TESID as ItemId,XMMC as ItemName,XMJG as Result,UNIT as Unit,CKFW AS ReferenceRangeValue FROM PORTAL56_LIS.VI_TJ_RESULT",
"ColumnNames": "Code=编码,DisplayName=名称"
},
"ConnectionStrings": {
"Default": "Host=140.143.162.39;Port=5432;Database=ShentunPeis070703;User ID=postgres;Password=shentun123;"
//"Default": "Host=140.143.162.39;Port=5432;Database=ShentunPeis070703;User ID=postgres;Password=shentun123;",
//"Default": "Host=localhost;Port=5432;Database=ShentunPeis1218;User ID=postgres;Password=wxd123;"
"Default": "Host=10.1.12.140;Port=5432;Database=ShentunPeis;User ID=postgres;Password=st123;"
},
"AuthServer": {

Loading…
Cancel
Save