Browse Source

LIS结果导入

bjmzak
DESKTOP-G961P6V\Zhh 2 years ago
parent
commit
21dfad4fc8
  1. 10
      ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs
  2. 2
      src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs
  3. 44
      src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs
  4. 254
      src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs

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

@ -180,7 +180,7 @@ namespace Shentun.Peis.PlugIns.Gem
}
}
await SetAppChargeRequestFlagAsync(input.ChargeRequestId, chargeRequestForPlugIns.ConcurrencyStamp,ChargeRequestFlag.AlreadyCancelCharge);
await SetAppChargeRequestFlagAsync(chargeRequestForPlugIns, ChargeRequestFlag.AlreadyCancelCharge);
return new ChargeRequestPlugInsOut();
}
@ -225,7 +225,7 @@ namespace Shentun.Peis.PlugIns.Gem
}
}
await SetAppChargeRequestFlagAsync(input.ChargeRequestId, chargeRequestForPlugIns.ConcurrencyStamp,ChargeRequestFlag.RefundRequest);
await SetAppChargeRequestFlagAsync(chargeRequestForPlugIns, ChargeRequestFlag.RefundRequest);
return new ChargeRequestPlugInsOut();
}
public override Task DoWork()
@ -267,18 +267,18 @@ namespace Shentun.Peis.PlugIns.Gem
if (payStatus == "1" && chargeRequest.ChargeRequestFlag != ChargeRequestFlag.RefundRequest)
{
charRequstFlag = ChargeRequestFlag.AlreadyCharge;
SetAppChargeRequestFlagAsync(chargeRequest.ChargeRequestId, chargeRequest.ConcurrencyStamp, charRequstFlag);
SetAppChargeRequestFlagAsync(chargeRequest, charRequstFlag);
}
else if (payStatus == "2")
{
charRequstFlag = ChargeRequestFlag.AlreadyCancelCharge;
SetAppChargeRequestFlagAsync(chargeRequest.ChargeRequestId, chargeRequest.ConcurrencyStamp,charRequstFlag);
SetAppChargeRequestFlagAsync(chargeRequest, charRequstFlag);
}
else if (payStatus == "3")
{
charRequstFlag = ChargeRequestFlag.AlreadyRefund;
SetAppChargeRequestFlagAsync(chargeRequest.ChargeRequestId, chargeRequest.ConcurrencyStamp,charRequstFlag);
SetAppChargeRequestFlagAsync(chargeRequest, charRequstFlag);
}
else
{

2
src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs

@ -12,5 +12,7 @@ namespace Shentun.Peis.PlugIns
public string AsbitemName { get; set; } = string.Empty;
public string ThirdAsbitemCode { get; set; } = string.Empty;
public decimal Charges { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

44
src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs

@ -89,7 +89,8 @@ where patient.id = patient_register.patient_id and
sql = @"
SELECT register_check_asbitem.asbitem_id,
asbitem.display_name as asbitem_name,
register_check_asbitem.amount * register_check_asbitem.charge_price as charges
register_check_asbitem.amount * register_check_asbitem.charge_price as charges,
register_check_asbitem.concurrency_stamp
from register_check
JOIN register_check_asbitem on register_check.id = register_check_asbitem.register_check_id
JOIN charge_request on register_check_asbitem.charge_request_id = charge_request.id
@ -155,32 +156,47 @@ where patient.id = patient_register.patient_id and
// }
//}
public async Task SetAppChargeRequestFlagAsync(Guid chargeRequestId, string concurrencyStamp, char chargeRequestFlag)
public async Task SetAppChargeRequestFlagAsync(ChargeRequestForPlugIns chargeRequestForPlugIns,
char chargeRequestFlag)
{
using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
{
//加ConcurrencyStamp,以防止并发
string sql;
sql = @" update charge_request set charge_request_flag =" + chargeRequestFlag +
@" where id = @ChargeRequestId and concurrency_stamp = @ConcurrencyStamp
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestId,
ConcurrencyStamp = concurrencyStamp
new { ChargeRequestId = chargeRequestForPlugIns.ChargeRequestId,
ConcurrencyStamp = chargeRequestForPlugIns.ConcurrencyStamp
});
if (chargeRequestFlag == ChargeRequestFlag.AlreadyCharge)
foreach(var chargeRequestAsbitem in chargeRequestForPlugIns.Asbitems)
{
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 and concurrency_stamp = @ConcurrencyStamp
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestId });
}
else if (chargeRequestFlag == ChargeRequestFlag.AlreadyRefund)
{
sql = @" update register_check_asbitem set is_charge = 'N' where charge_request_id = @ChargeRequestId
conn.Execute(sql,
new { ChargeRequestId = chargeRequestForPlugIns.ChargeRequestId,
ConcurrencyStamp = chargeRequestAsbitem.ConcurrencyStamp
});
}
else if (chargeRequestFlag == ChargeRequestFlag.AlreadyRefund)
{
sql = @" update register_check_asbitem set is_charge = 'N'
where charge_request_id = @ChargeRequestId and concurrency_stamp = @ConcurrencyStamp
";
conn.Execute(sql,
new { ChargeRequestId = chargeRequestId });
conn.Execute(sql,
new
{
ChargeRequestId = chargeRequestForPlugIns.ChargeRequestId,
ConcurrencyStamp = chargeRequestAsbitem.ConcurrencyStamp
});
}
}

254
src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs

@ -111,147 +111,147 @@ namespace Shentun.Peis.ImportLisResults
public async Task ImportResultAsync(List<CreateImportLisResultDto> input)
{
//设置结果
var list = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
join registerCheck in await _registerCheckRepository.GetQueryableAsync()
on patientRegister.Id equals registerCheck.PatientRegisterId
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckItem.RegisterCheckId
join item in await _itemRepository.GetQueryableAsync()
on registerCheckItem.ItemId equals item.Id
join lisRequest in await _lisRequestRepository.GetQueryableAsync()
on registerCheckAsbitem.LisRequestId equals lisRequest.Id
where input.Select(o => o.LisRequestNo).ToList().Contains(lisRequest.LisRequestNo)
select new
{
patientRegister,
registerCheck,
registerCheckAsbitem,
registerCheckItem,
item,
lisRequest,
}).ToList();
var lisRequestNos = input.Select(o => o.LisRequestNo).Distinct().ToList();
var registerChecks = new List<RegisterCheck>();
_referenceRanges = _referenceRangeRepository.GetListAsync().Result;
foreach (var inputItem in input)
{
var lisRequestItem = list.Where(o => o.lisRequest.LisRequestNo == inputItem.LisRequestNo
&& o.registerCheckItem.ItemId == inputItem.ItemId).FirstOrDefault();
if (lisRequestItem == null)
{
continue;
}
lisRequestItem.registerCheckItem.Result = inputItem.Result;
//var itemSource = new RegisterCheckItem()
//{
// Result = inputItem.Result,
// ReferenceRangeValue = inputItem.ReferenceRangeValue,
// Unit = inputItem.Unit,
// CriticalRangeValue = inputItem.CriticalRangeValue
//};
//修改参考范围
await UpdateItemReferenceRangeValueAsync(inputItem.ItemId, lisRequestItem.patientRegister.SexId,
lisRequestItem.patientRegister.Age, inputItem.ReferenceRangeValue);
//修改单位
await UpdateItemUnitAsync(inputItem.ItemId, inputItem.Unit);
var list = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
join registerCheck in await _registerCheckRepository.GetQueryableAsync()
on patientRegister.Id equals registerCheck.PatientRegisterId
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckItem.RegisterCheckId
join item in await _itemRepository.GetQueryableAsync()
on registerCheckItem.ItemId equals item.Id
join lisRequest in await _lisRequestRepository.GetQueryableAsync()
on registerCheckAsbitem.LisRequestId equals lisRequest.Id
where input.Select(o => o.LisRequestNo).ToList().Contains(lisRequest.LisRequestNo)
select new
{
patientRegister,
registerCheck,
registerCheckAsbitem,
registerCheckItem,
item,
lisRequest,
}).ToList();
//await _registerCheckItemManager.UpdateRegisterCheckItemAsync(itemSource, lisRequestItem.registerCheckItem);
//await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem,true);
if (!registerChecks.Where(o => o.Id == lisRequestItem.registerCheck.Id).ToList().Any())
{
lisRequestItem.registerCheck.CheckDoctorId = inputItem.CheckDoctorName;
lisRequestItem.registerCheck.CheckDate = inputItem.CheckDate;
registerChecks.Add(lisRequestItem.registerCheck);
}
var lisRequestNos = input.Select(o => o.LisRequestNo).Distinct().ToList();
var registerChecks = new List<RegisterCheck>();
_referenceRanges = _referenceRangeRepository.GetListAsync().Result;
foreach (var inputItem in input)
{
var lisRequestItem = list.Where(o => o.lisRequest.LisRequestNo == inputItem.LisRequestNo
&& o.registerCheckItem.ItemId == inputItem.ItemId).FirstOrDefault();
if (lisRequestItem == null)
{
continue;
}
lisRequestItem.registerCheckItem.Result = inputItem.Result;
//var itemSource = new RegisterCheckItem()
//{
// Result = inputItem.Result,
// ReferenceRangeValue = inputItem.ReferenceRangeValue,
// Unit = inputItem.Unit,
// CriticalRangeValue = inputItem.CriticalRangeValue
//};
//修改参考范围
await UpdateItemReferenceRangeValueAsync(inputItem.ItemId, lisRequestItem.patientRegister.SexId,
lisRequestItem.patientRegister.Age, inputItem.ReferenceRangeValue);
//修改单位
await UpdateItemUnitAsync(inputItem.ItemId, inputItem.Unit);
//await _registerCheckItemManager.UpdateRegisterCheckItemAsync(itemSource, lisRequestItem.registerCheckItem);
//await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem,true);
if (!registerChecks.Where(o => o.Id == lisRequestItem.registerCheck.Id).ToList().Any())
{
lisRequestItem.registerCheck.CheckDoctorId = inputItem.CheckDoctorName;
lisRequestItem.registerCheck.CheckDate = inputItem.CheckDate;
registerChecks.Add(lisRequestItem.registerCheck);
}
}
//更新参考范围和单位
foreach (var registerCheck in registerChecks)
//更新参考范围和单位
foreach (var registerCheck in registerChecks)
{
var lisRequestItems = list.Where(o => o.registerCheck.Id == registerCheck.Id).ToList();
foreach (var lisRequestItem in lisRequestItems)
{
var lisRequestItems = list.Where(o => o.registerCheck.Id == registerCheck.Id).ToList();
foreach (var lisRequestItem in lisRequestItems)
var referenceRange = _referenceRangeManager.GetReferenceRangeBySexAgeTemp(_referenceRanges,
lisRequestItem.item, lisRequestItem.patientRegister.SexId, lisRequestItem.patientRegister.Age);
if (referenceRange != null)
{
var referenceRange = _referenceRangeManager.GetReferenceRangeBySexAgeTemp(_referenceRanges,
lisRequestItem.item, lisRequestItem.patientRegister.SexId, lisRequestItem.patientRegister.Age);
if (referenceRange != null)
{
lisRequestItem.registerCheckItem.ReferenceRangeValue = referenceRange.ReferenceRangeValue;
lisRequestItem.registerCheckItem.CriticalRangeValue = referenceRange.CriticalRangeValue;
}
else
{
lisRequestItem.registerCheckItem.ReferenceRangeValue = "";
lisRequestItem.registerCheckItem.CriticalRangeValue = "";
}
var unit = _units.Where(o => o.Id == lisRequestItem.item.UnitId).FirstOrDefault();
if (unit != null)
{
lisRequestItem.registerCheckItem.Unit = unit.DisplayName;
}
else
{
lisRequestItem.registerCheckItem.Unit = "";
}
await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem, true);
lisRequestItem.registerCheckItem.ReferenceRangeValue = referenceRange.ReferenceRangeValue;
lisRequestItem.registerCheckItem.CriticalRangeValue = referenceRange.CriticalRangeValue;
}
else
{
lisRequestItem.registerCheckItem.ReferenceRangeValue = "";
lisRequestItem.registerCheckItem.CriticalRangeValue = "";
}
var unit = _units.Where(o => o.Id == lisRequestItem.item.UnitId).FirstOrDefault();
if (unit != null)
{
lisRequestItem.registerCheckItem.Unit = unit.DisplayName;
}
else
{
lisRequestItem.registerCheckItem.Unit = "";
}
await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem, true);
}
//保存结果
foreach (var registerCheck in registerChecks)
}
//保存结果
foreach (var registerCheck in registerChecks)
{
var updateCheckResultDto = new UpdateCheckResultDto()
{
var updateCheckResultDto = new UpdateCheckResultDto()
RegisterCheckId = registerCheck.Id,
CheckDoctorId = registerCheck.CheckDoctorId,
CheckDate = registerCheck.CheckDate,
RegisterCheckItems = list.Where(o => o.registerCheck.Id == registerCheck.Id)
.Select(o => new UpdateRegisterCheckItemDetail()
{
RegisterCheckId = registerCheck.Id,
CheckDoctorId = registerCheck.CheckDoctorId,
CheckDate = registerCheck.CheckDate,
RegisterCheckItems = list.Where(o => o.registerCheck.Id == registerCheck.Id)
.Select(o => new UpdateRegisterCheckItemDetail()
{
ItemId = o.registerCheckItem.ItemId,
Result = o.registerCheckItem.Result,
ItemId = o.registerCheckItem.ItemId,
Result = o.registerCheckItem.Result,
}).ToList()
}).ToList()
};
};
var getDiagnosisResultRequestDto = new GetDiagnosisResultRequestDto()
var getDiagnosisResultRequestDto = new GetDiagnosisResultRequestDto()
{
RegisterCheckId = registerCheck.Id,
Items = list.Where(o => o.registerCheck.Id == registerCheck.Id)
.Select(o => new GetDiagnosisResultRequest_Item()
{
RegisterCheckId = registerCheck.Id,
Items = list.Where(o => o.registerCheck.Id == registerCheck.Id)
.Select(o => new GetDiagnosisResultRequest_Item()
{
ItemId = o.registerCheckItem.ItemId,
Result = o.registerCheckItem.Result,
}).ToList()
};
//生成小结
var summarry = await _diagnosisFunctionAppService.GetDoctorCheckDiagnosisResultAsync(getDiagnosisResultRequestDto);
ItemId = o.registerCheckItem.ItemId,
Result = o.registerCheckItem.Result,
}).ToList()
};
//生成小结
var summarry = await _diagnosisFunctionAppService.GetDoctorCheckDiagnosisResultAsync(getDiagnosisResultRequestDto);
for (var i = 0; i < summarry.DiagnosisResultDetails.Count; i++)
for (var i = 0; i < summarry.DiagnosisResultDetails.Count; i++)
{
updateCheckResultDto.Summarys.Add(new UpdateRegisterCheckSummaryDetail()
{
updateCheckResultDto.Summarys.Add(new UpdateRegisterCheckSummaryDetail()
{
Summary = summarry.DiagnosisResultDetails[i].DiagnosisResult,
SummaryFlag = '0'
});
}
await _registerCheckAppService.UpdateCheckResult(updateCheckResultDto);
Summary = summarry.DiagnosisResultDetails[i].DiagnosisResult,
SummaryFlag = '0'
});
}
await _registerCheckAppService.UpdateCheckResult(updateCheckResultDto);
}
}
private async Task UpdateItemReferenceRangeValueAsync(Guid itemId, char sexId, int? age, string referenceRangeValue)
{
var referenceRanges = _referenceRanges.Where(o=>o.ItemId == itemId).ToList();
var referenceRanges = _referenceRanges.Where(o => o.ItemId == itemId).ToList();
if (age == null) age = 30;
if (string.IsNullOrWhiteSpace(referenceRangeValue))
{
@ -262,7 +262,7 @@ namespace Shentun.Peis.ImportLisResults
if (_referenceRangeManager.IsNumberReferenceRange(referenceRangeValue))
{
item.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number;
await _itemRepository.UpdateAsync(item, true);
await _itemRepository.UpdateAsync(item);
referenceRange = referenceRanges.Where(o => o.ForSexId == sexId
&& age >= o.AgeLowerLimit && age <= o.AgeUpperLimit
@ -271,7 +271,7 @@ namespace Shentun.Peis.ImportLisResults
{
referenceRange.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number;
referenceRange.ReferenceRangeValue = referenceRangeValue;
await _referenceRangeRepository.UpdateAsync(referenceRange, true);
await _referenceRangeRepository.UpdateAsync(referenceRange);
return;
}
@ -282,7 +282,7 @@ namespace Shentun.Peis.ImportLisResults
{
referenceRange.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number;
referenceRange.ReferenceRangeValue = referenceRangeValue;
await _referenceRangeRepository.UpdateAsync(referenceRange, true);
await _referenceRangeRepository.UpdateAsync(referenceRange);
return;
}
referenceRange = new ReferenceRange()
@ -295,18 +295,19 @@ namespace Shentun.Peis.ImportLisResults
ForSexId = ForSexFlag.All
};
referenceRange = _referenceRangeManager.Create(referenceRange);
await _referenceRangeRepository.InsertAsync(referenceRange, true);
await _referenceRangeRepository.InsertAsync(referenceRange);
referenceRanges.Add(referenceRange);
return;
}
item.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Character;
await _itemRepository.UpdateAsync(item, true);
await _itemRepository.UpdateAsync(item);
referenceRange = referenceRanges.Where(o => o.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Character).FirstOrDefault();
if (referenceRange != null)
{
referenceRange.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Character;
referenceRange.ReferenceRangeValue = referenceRangeValue;
await _referenceRangeRepository.UpdateAsync(referenceRange, true);
await _referenceRangeRepository.UpdateAsync(referenceRange);
return;
}
@ -320,7 +321,8 @@ namespace Shentun.Peis.ImportLisResults
ForSexId = ForSexFlag.All
};
referenceRange = _referenceRangeManager.Create(referenceRange);
await _referenceRangeRepository.InsertAsync(referenceRange, true);
await _referenceRangeRepository.InsertAsync(referenceRange);
referenceRanges.Add(referenceRange);
return;
}
@ -340,7 +342,7 @@ namespace Shentun.Peis.ImportLisResults
return;
}
item.UnitId = unit.Id;
await _itemRepository.UpdateAsync(item, true);
await _itemRepository.UpdateAsync(item);
return;
}
unit = new Unit()
@ -349,7 +351,7 @@ namespace Shentun.Peis.ImportLisResults
};
unit = await _unitManager.CreateAsync(unit);
await _unitRepository.InsertAsync(unit, true);
await _unitRepository.InsertAsync(unit);
_units.Add(unit);
}
}

Loading…
Cancel
Save