@ -20,6 +20,7 @@ using Shentun.Pacs.RegisterChecks;
using Shentun.Pacs.RegisterCheckSuggestions ;
using Shentun.Pacs.RegisterCheckSummarys ;
using Shentun.Pacs.SumSummaryReports ;
using Shentun.Pacs.SysParmValues ;
using Shentun.Pacs.ThirdBookingPushs ;
using Shentun.Pacs.ThirdPartyPublicInterfaces ;
using Shentun.Utilities ;
@ -79,6 +80,7 @@ namespace Shentun.Pacs.PacsBusiness
private readonly CacheService _cacheService ;
private readonly UnitOfWorkManager _unitOfWorkManager ;
private readonly IRepository < RegisterCheckSummary , Guid > _registerCheckSummaryRepository ;
private readonly SysParmValueManager _sysParmValueManager ;
public PacsBusinessAppService (
IConfiguration configuration ,
@ -111,7 +113,8 @@ namespace Shentun.Pacs.PacsBusiness
IRepository < DeviceType , Guid > deviceTypeRepository ,
CacheService cacheService ,
UnitOfWorkManager unitOfWorkManager ,
IRepository < RegisterCheckSummary , Guid > registerCheckSummaryRepository )
IRepository < RegisterCheckSummary , Guid > registerCheckSummaryRepository ,
SysParmValueManager sysParmValueManager )
{
_configuration = configuration ;
_registerCheckRepository = registerCheckRepository ;
@ -144,6 +147,7 @@ namespace Shentun.Pacs.PacsBusiness
_cacheService = cacheService ;
_unitOfWorkManager = unitOfWorkManager ;
_registerCheckSummaryRepository = registerCheckSummaryRepository ;
_sysParmValueManager = sysParmValueManager ;
}
@ -236,6 +240,7 @@ namespace Shentun.Pacs.PacsBusiness
//}
#region 未用到
/// <summary>
/// 导入pacs dicom数据
/// </summary>
@ -304,6 +309,74 @@ namespace Shentun.Pacs.PacsBusiness
return entListDto ;
}
/// <summary>
/// 修改pacs项目检查状态及日期 已整合到其他接口,废弃
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PacsBusiness/UpdateRegisterCheckIsPacsCheck")]
[RemoteService(false)]
public async Task UpdateRegisterCheckIsPacsCheckAsync ( UpdateRegisterCheckIsPacsCheckInputDto input )
{
var registerCheckEnt = await _registerCheckRepository . FirstOrDefaultAsync ( f = > f . CheckRequestNo = = input . CheckRequestNo ) ;
if ( registerCheckEnt = = null )
{
throw new UserFriendlyException ( "条码号不正确" ) ;
}
registerCheckEnt . IsPacsCheck = input . IsPacsCheck ;
registerCheckEnt . PacsCheckDate = Convert . ToDateTime ( input . PacsCheckDate ) ;
registerCheckEnt . PacsUploadDate = Convert . ToDateTime ( input . PacsUploadDate ) ;
await _registerCheckRepository . UpdateAsync ( registerCheckEnt ) ;
}
/// <summary>
/// 查询人员的检查图片 为用到
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PacsBusiness/GetRegisterCheckPictureByPatientRegisterId")]
public async Task < List < GetRegisterCheckPictureByPatientRegisterIdDto > > GetRegisterCheckPictureByPatientRegisterIdAsync ( GetRegisterCheckPictureByPatientRegisterIdInputDto input )
{
var query = ( from registerCheckPicture in await _registerCheckPictureRepository . GetQueryableAsync ( )
join registerCheck in await _registerCheckRepository . GetQueryableAsync ( ) on registerCheckPicture . RegisterCheckId equals registerCheck . Id
join patientRegister in await _patientRegisterRepository . GetQueryableAsync ( ) on registerCheck . PatientRegisterId equals patientRegister . Id
join registerCheckAsbitem in await _registerCheckAsbitemRepository . GetQueryableAsync ( ) on registerCheck . Id equals registerCheckAsbitem . RegisterCheckId
join asbitem in await _asbitemRepository . GetQueryableAsync ( ) on registerCheckAsbitem . AsbitemId equals asbitem . Id
join itemType in await _itemTypeRepository . GetQueryableAsync ( ) on asbitem . ItemTypeId equals itemType . Id
where patientRegister . Id = = input . PatientRegisterId & & itemType . CheckTypeFlag = = input . CheckTypeFlag
select new
{
registerCheckPicture ,
patientName = patientRegister . PatientName ,
asbitemName = asbitem . DisplayName ,
checkRequestNo = registerCheck . CheckRequestNo
} ) . ToList ( ) ;
var registerCheckPictureGroup = query . GroupBy ( g = > g . registerCheckPicture ) ;
var entListDto = registerCheckPictureGroup . Select ( s = > new GetRegisterCheckPictureByPatientRegisterIdDto
{
AsbitemName = string . Join ( "," , s . Select ( rs = > rs . asbitemName ) . ToList ( ) ) ,
DisplayOrder = s . Key . DisplayOrder ,
CheckRequestNo = s . FirstOrDefault ( ) . checkRequestNo ,
LocalPathName = s . Key . LocalPathName ,
PictureFilename = s . Key . PictureFilename ,
PictureFileType = s . Key . PictureFileType ,
PatientName = s . FirstOrDefault ( ) . patientName ,
RegisterCheckId = s . Key . RegisterCheckId
} ) . ToList ( ) ;
return entListDto ;
}
#endregion
/// <summary>
@ -354,27 +427,7 @@ namespace Shentun.Pacs.PacsBusiness
return resultDto ;
}
/// <summary>
/// 修改pacs项目检查状态及日期
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PacsBusiness/UpdateRegisterCheckIsPacsCheck")]
[RemoteService(false)]
public async Task UpdateRegisterCheckIsPacsCheckAsync ( UpdateRegisterCheckIsPacsCheckInputDto input )
{
var registerCheckEnt = await _registerCheckRepository . FirstOrDefaultAsync ( f = > f . CheckRequestNo = = input . CheckRequestNo ) ;
if ( registerCheckEnt = = null )
{
throw new UserFriendlyException ( "条码号不正确" ) ;
}
registerCheckEnt . IsPacsCheck = input . IsPacsCheck ;
registerCheckEnt . PacsCheckDate = Convert . ToDateTime ( input . PacsCheckDate ) ;
registerCheckEnt . PacsUploadDate = Convert . ToDateTime ( input . PacsUploadDate ) ;
await _registerCheckRepository . UpdateAsync ( registerCheckEnt ) ;
}
/// <summary>
/// 获取pacs检查项目 pacs看图界面列表
@ -475,33 +528,33 @@ namespace Shentun.Pacs.PacsBusiness
query = query . Where ( m = > customerOrgIds . Contains ( m . customerOrgId ) ) ;
}
#region 增加项目类别权限
// #region 增加项目类别权限
string AdminId = _configuration . GetValue < string > ( "AdminId" ) ;
//string AdminId = _configuration.GetValue<string>("AdminId");
if ( _currentUser . Id = = null )
{
new PagedResultDto < GetPatientRegisterPacsCheckDto > ( 0 , new List < GetPatientRegisterPacsCheckDto > ( ) ) ;
}
if ( _currentUser . Id . Value ! = Guid . Parse ( AdminId ) )
{
var asbitemIds = ( from userItemType in await _userItemTypeRepository . GetQueryableAsync ( )
join asbitem in await _asbitemRepository . GetQueryableAsync ( ) on userItemType . ItemTypeId equals asbitem . ItemTypeId
where userItemType . UserId = = _currentUser . Id . Value
select asbitem . Id ) . ToList ( ) ;
//if (_currentUser.Id == null)
//{
// new PagedResultDto<GetPatientRegisterPacsCheckDto>(0, new List<GetPatientRegisterPacsCheckDto>());
//}
//if (_currentUser.Id.Value != Guid.Parse(AdminId))
//{
// var asbitemIds = (from userItemType in await _userItemTypeRepository.GetQueryableAsync()
// join asbitem in await _asbitemRepository.GetQueryableAsync() on userItemType.ItemTypeId equals asbitem.ItemTypeId
// where userItemType.UserId = = _currentUser.Id.Value
// select asbitem.Id).ToList();
if ( asbitemIds . Any ( ) )
{
query = query . Where ( m = > asbitemIds . Contains ( m . asbitemId ) ) ;
}
else
{
new PagedResultDto < GetPatientRegisterPacsCheckDto > ( 0 , new List < GetPatientRegisterPacsCheckDto > ( ) ) ;
}
// if (asbitemIds.Any())
// {
// query = query.Where(m => asbitemIds.Contains(m.asbitemId));
// }
// else
// {
// new PagedResultDto<GetPatientRegisterPacsCheckDto>(0, new List<GetPatientRegisterPacsCheckDto>());
// }
}
//}
#endregion
// #endregion
var checkRequestNoGroup = query . ToList ( ) . GroupBy ( g = > g . registerCheckId ) ;
@ -519,29 +572,11 @@ namespace Shentun.Pacs.PacsBusiness
if ( fisrtItem . encodingFlag = = '0' )
{
string examDescription = string . Join ( "," , item . Select ( ss = > ss . asbitemShortName ) . Distinct ( ) ) ;
if ( item . Where ( m = > m . isFilmRelease = = 'N' ) . Count ( ) > 0 )
{
examDescription + = ",不出片" ;
}
if ( examDescription . Length > 6 4 )
{
examDescription = examDescription . Substring ( 0 , 6 4 ) ;
}
pacsDesc = examDescription ;
pacsDesc = fisrtItem . asbitemShortName ;
}
else
{
string examEngDescription = string . Join ( "," , item . Select ( ss = > ss . isFilmRelease = = 'N' ? ss . endAsbitemShortName + "(BU)" : ss . endAsbitemShortName ) . Distinct ( ) ) ;
if ( examEngDescription . Length > 6 4 )
{
examEngDescription = examEngDescription . Substring ( 0 , 6 4 ) ;
}
pacsDesc = examEngDescription ;
pacsDesc = fisrtItem . endAsbitemShortName ;
}
entListDto . Add ( new GetPatientRegisterPacsCheckDto
@ -557,12 +592,15 @@ namespace Shentun.Pacs.PacsBusiness
} ) ;
}
entListDto = entListDto . OrderByDescending ( o = > o . CheckRequestNo ) . ToList ( ) ;
return new PagedResultDto < GetPatientRegisterPacsCheckDto > ( totalCount , entListDto ) ;
}
/// <summary>
/// 导入pacs dicom服务返回的数据 用作前端导出文件 修改pacs项目检查状态及日期
/// 导入pacs dicom服务返回的数据 用作前端导出文件 修改pacs项目检查状态及日期 000
/// InstanceId存在就不添加
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PacsBusiness/ImportPacsDicomServiceData")]
@ -596,7 +634,11 @@ namespace Shentun.Pacs.PacsBusiness
if ( string . IsNullOrWhiteSpace ( input . FileName ) )
throw new UserFriendlyException ( "文件名称不能为空" ) ;
var dicomFileDetailEnt = new DicomFileDetail
var dicomFileDetailEnt = await _dicomFileDetailRepository . FirstOrDefaultAsync ( f = > f . InstanceId = = input . InstanceId ) ;
if ( dicomFileDetailEnt = = null )
{
dicomFileDetailEnt = new DicomFileDetail
{
DisplayOrder = 1 ,
RegisterCheckId = registerCheckEnt . Id ,
@ -608,11 +650,8 @@ namespace Shentun.Pacs.PacsBusiness
Path = input . Path ,
Status = input . Status
} ;
await _dicomFileDetailRepository . InsertAsync ( dicomFileDetailEnt ) ;
}
if ( registerCheckEnt . IsPacsCheck ! = 'Y' )
{
@ -627,7 +666,7 @@ namespace Shentun.Pacs.PacsBusiness
}
/// <summary>
/// 查询人员的dicom数据
/// 查询人员的dicom数据 000
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@ -668,49 +707,7 @@ namespace Shentun.Pacs.PacsBusiness
}
/// <summary>
/// 查询人员的检查图片
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PacsBusiness/GetRegisterCheckPictureByPatientRegisterId")]
public async Task < List < GetRegisterCheckPictureByPatientRegisterIdDto > > GetRegisterCheckPictureByPatientRegisterIdAsync ( GetRegisterCheckPictureByPatientRegisterIdInputDto input )
{
var query = ( from registerCheckPicture in await _registerCheckPictureRepository . GetQueryableAsync ( )
join registerCheck in await _registerCheckRepository . GetQueryableAsync ( ) on registerCheckPicture . RegisterCheckId equals registerCheck . Id
join patientRegister in await _patientRegisterRepository . GetQueryableAsync ( ) on registerCheck . PatientRegisterId equals patientRegister . Id
join registerCheckAsbitem in await _registerCheckAsbitemRepository . GetQueryableAsync ( ) on registerCheck . Id equals registerCheckAsbitem . RegisterCheckId
join asbitem in await _asbitemRepository . GetQueryableAsync ( ) on registerCheckAsbitem . AsbitemId equals asbitem . Id
join itemType in await _itemTypeRepository . GetQueryableAsync ( ) on asbitem . ItemTypeId equals itemType . Id
where patientRegister . Id = = input . PatientRegisterId & & itemType . CheckTypeFlag = = input . CheckTypeFlag
select new
{
registerCheckPicture ,
patientName = patientRegister . PatientName ,
asbitemName = asbitem . DisplayName ,
checkRequestNo = registerCheck . CheckRequestNo
} ) . ToList ( ) ;
var registerCheckPictureGroup = query . GroupBy ( g = > g . registerCheckPicture ) ;
var entListDto = registerCheckPictureGroup . Select ( s = > new GetRegisterCheckPictureByPatientRegisterIdDto
{
AsbitemName = string . Join ( "," , s . Select ( rs = > rs . asbitemName ) . ToList ( ) ) ,
DisplayOrder = s . Key . DisplayOrder ,
CheckRequestNo = s . FirstOrDefault ( ) . checkRequestNo ,
LocalPathName = s . Key . LocalPathName ,
PictureFilename = s . Key . PictureFilename ,
PictureFileType = s . Key . PictureFileType ,
PatientName = s . FirstOrDefault ( ) . patientName ,
RegisterCheckId = s . Key . RegisterCheckId
} ) . ToList ( ) ;
return entListDto ;
}
/// <summary>
/// 删除体检dicom服务数据,并清理dicom服务记录
/// 删除体检dicom服务数据,并清理dicom服务记录 000
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@ -746,7 +743,7 @@ namespace Shentun.Pacs.PacsBusiness
/// <summary>
/// 获取dicom文件的数量 根据检查条码号或者实例ID查询
/// 获取dicom文件的数量 根据检查条码号或者实例ID查询 000
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@ -788,7 +785,7 @@ namespace Shentun.Pacs.PacsBusiness
}
/// <summary>
/// 调用dicom服务api
/// 调用dicom服务api 删除dicom
/// </summary>
/// <param name="apiUrl"></param>
/// <param name="authString"></param>
@ -838,13 +835,15 @@ namespace Shentun.Pacs.PacsBusiness
throw new UserFriendlyException ( "检查条码不存在" ) ;
}
string medicalCenterName = await _sysParmValueManager . GetSysParmValueAsync ( Guid . Empty , "medical_center_name" ) ;
var entDto = new GetPatientRegisterByCheckRequestNoDto
{
PatientAge = patientRegisterEnt . patientRegister . Age = = null ? "" : patientRegisterEnt . patientRegister . Age . ToString ( ) ,
PatientBirthDate = patientRegisterEnt . patientRegister . BirthDate = = null ? "" : DataHelper . ConversionDateShortNoSymbolToString ( patientRegisterEnt . patientRegister . BirthDate ) ,
PatientName = patientRegisterEnt . patientRegister . PatientName ,
PatientSex = patientRegisterEnt . patientRegister . SexId . ToString ( ) ,
HospitalName = patientRegisterEnt . medicalCenterName
HospitalName = medicalCenterName
} ;
return entDto ;
@ -1230,7 +1229,7 @@ namespace Shentun.Pacs.PacsBusiness
if ( input . BarcodeMode = = '0' )
{
registerAsbitemSql = "select a.name as patient_name,a.sex_id,a.mobile_telephone,a.telephone," +
"a.age,a.id_card_no,a.marital_status_id,a.complete_flag," +
"a.age,a.id_card_no,a.marital_status_id,a.complete_flag,a.birth_date, " +
"b.patient_register_id,b.print_barcode_no,b.asbitem_id,b.price,b.standard_price,b.charge_flag,b.payment_mode " +
"from patient_register as a left join register_asbitem as b on a.patient_register_id=b.patient_register_id " +
" left join asbitem as c on b.asbitem_id=c.asbitem_id " +
@ -1240,7 +1239,7 @@ namespace Shentun.Pacs.PacsBusiness
{
registerAsbitemSql = "select a.name as patient_name,a.sex_id,a.mobile_telephone,a.telephone," +
"a.age,a.id_card_no,a.marital_status_id,a.complete_flag," +
"a.age,a.id_card_no,a.marital_status_id,a.complete_flag,a.birth_date, " +
"b.patient_register_id,b.print_barcode_no,b.asbitem_id,b.price,b.standard_price,b.charge_flag,b.payment_mode " +
"from patient_register as a left join register_asbitem as b on a.patient_register_id=b.patient_register_id " +
" left join asbitem as c on b.asbitem_id=c.asbitem_id " +
@ -1359,6 +1358,14 @@ namespace Shentun.Pacs.PacsBusiness
patientEnt = await _patientRepository . InsertAsync ( patientEnt , true ) ;
}
//else
//{
// if (patientEnt.BirthDate == null && newBirthDate != null)
// {
// patientEnt.BirthDate = newBirthDate;
// await _patientRepository.UpdateAsync(patientEnt);
// }
//}
#endregion
#region 人员
@ -1387,7 +1394,8 @@ namespace Shentun.Pacs.PacsBusiness
ReportPrintTimes = 0 ,
PatientRegisterNo = await _patientRegisterManager . CreatePatientRegisterNo ( Guid . Empty ) ,
SendFlag = '0' ,
SexId = sexId
SexId = sexId ,
BirthDate = newBirthDate
} ;
patientRegisterEnt = await _patientRegisterRepository . InsertAsync ( patientRegisterEnt , true ) ;
@ -1439,7 +1447,7 @@ namespace Shentun.Pacs.PacsBusiness
IsAudit = 'N' ,
IsLock = 'N' ,
IsPacsCheck = 'N' ,
IsSignIn = 'Y ' ,
IsSignIn = 'N ' ,
PatientRegisterId = tempPatientRegisterId ,
ScheduledAet = input . ScheduledAet ,
WorklistFlag = '1' ,
@ -1756,6 +1764,58 @@ namespace Shentun.Pacs.PacsBusiness
}
/// <summary>
/// 根据检查id获取体检系统项目的检查状态
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PacsBusiness/GetPeisAsbitemCompleteFlag")]
public async Task < GetPeisAsbitemCompleteFlagDto > GetPeisAsbitemCompleteFlagAsync ( RegisterCheckIdInputDto input )
{
var registerCheckFirst = ( 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
where registerCheck . Id = = input . RegisterCheckId
select new
{
registerCheckAsbitem
} ) . FirstOrDefault ( ) ;
if ( registerCheckFirst = = null )
{
throw new UserFriendlyException ( "检查id不正确" ) ;
}
string connectionString = _configuration . GetValue < string > ( "OldPeis:ConnectionStrings" , "" ) ;
SqlSugarClient oldDb = new SqlSugarClient ( new ConnectionConfig ( )
{
ConnectionString = connectionString ,
DbType = SqlSugar . DbType . SqlServer ,
IsAutoCloseConnection = true
} ) ;
string completeFlag = ( await oldDb . Ado . GetScalarAsync ( "select complete_flag from register_asbitem where patient_register_id=@patient_register_id and asbitem_id=@asbitem_id" ,
new List < SugarParameter > ( ) {
new SugarParameter ( "patient_register_id" , registerCheckFirst . registerCheckAsbitem . OldPatientRegisterId ) ,
new SugarParameter ( "asbitem_id" , registerCheckFirst . registerCheckAsbitem . OldAsbitemId )
} ) ) . ToString ( ) ;
if ( string . IsNullOrWhiteSpace ( completeFlag ) )
{
throw new UserFriendlyException ( "体检系统未查到相关信息" ) ;
}
var entDto = new GetPeisAsbitemCompleteFlagDto
{
CompleteFlag = Convert . ToChar ( completeFlag )
} ;
return entDto ;
}
#endregion
/// <summary>