wxd 1 year ago
parent
commit
a7832af674
  1. 24
      src/Shentun.Pacs.Application.Contracts/PacsBusiness/ImportPeisCheckDataByCheckRequestNoInputDto.cs
  2. 162
      src/Shentun.Pacs.Application/CollectItemTypes/CollectItemTypeAppService.cs
  3. 300
      src/Shentun.Pacs.Application/PacsBusiness/PacsBusinessAppService.cs
  4. 842
      src/Shentun.Pacs.Application/PacsDataMigrates/PacsDataMigrateAppService.cs
  5. 24
      src/Shentun.Pacs.Domain/PatientRegisters/PatientRegister.cs
  6. 2
      src/Shentun.Pacs.Domain/Patients/PatientManager.cs
  7. 7
      src/Shentun.Pacs.Domain/RegisterCheckAsbitems/RegisterCheckAsbitem.cs
  8. 7
      src/Shentun.Pacs.Domain/RegisterCheckItems/RegisterCheckItem.cs
  9. 3
      src/Shentun.Pacs.EntityFrameworkCore/DbMapping/PatientRegisters/PatientRegisterDbMapping.cs
  10. 16267
      src/Shentun.Pacs.EntityFrameworkCore/Migrations/20241213083723_update_patient_register_check.Designer.cs
  11. 119
      src/Shentun.Pacs.EntityFrameworkCore/Migrations/20241213083723_update_patient_register_check.cs
  12. 34
      src/Shentun.Pacs.EntityFrameworkCore/Migrations/PeisDbContextModelSnapshot.cs
  13. 6
      src/Shentun.Pacs.HttpApi.Host/appsettings.json

24
src/Shentun.Pacs.Application.Contracts/PacsBusiness/ImportPeisCheckDataByCheckRequestNoInputDto.cs

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Pacs.PacsBusiness
{
public class ImportPeisCheckDataByCheckRequestNoInputDto
{
/// <summary>
/// 检查条码号
/// </summary>
public string CheckRequestNo { get; set; }
/// <summary>
/// 设备Id
/// </summary>
public string DeviceId { get; set; }
/// <summary>
/// 预检Aet
/// </summary>
public string ScheduledAet { get; set; }
}
}

162
src/Shentun.Pacs.Application/CollectItemTypes/CollectItemTypeAppService.cs

@ -0,0 +1,162 @@
using AutoMapper.Internal.Mappers;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Shentun.Pacs.HelperDto;
using Shentun.Pacs.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Identity;
namespace Shentun.Pacs.CollectItemTypes
{
/// <summary>
/// 汇总项目类别
/// </summary>
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class CollectItemTypeAppService : ApplicationService
{
private readonly IRepository<CollectItemType, Guid> _collectItemTypeRepository;
private readonly CacheService _cacheService;
private readonly CollectItemTypeManager _manager;
private readonly IRepository<IdentityUser, Guid> _userRepository;
public CollectItemTypeAppService(
IRepository<CollectItemType, Guid> collectItemTypeRepository,
IRepository<IdentityUser, Guid> userRepository,
CollectItemTypeManager manager,
CacheService cacheService)
{
_collectItemTypeRepository = collectItemTypeRepository;
_cacheService = cacheService;
_manager = manager;
_userRepository = userRepository;
}
/// <summary>
/// 根据ID查实体内容
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/CollectItemType/GetById")]
public async Task<CollectItemTypeDto> GetByIdAsync(CollectItemTypeIdInputDto input)
{
var entity = await _collectItemTypeRepository.GetAsync(input.Id);
var entityDto = ObjectMapper.Map<CollectItemType, CollectItemTypeDto>(entity);
entityDto.CreatorName = _cacheService.GetSurnameAsync(entityDto.CreatorId).Result;
entityDto.LastModifierName = _cacheService.GetSurnameAsync(entityDto.LastModifierId).Result;
return entityDto;
}
/// <summary>
/// 查询列表
/// </summary>
/// <returns></returns>
[HttpPost("api/app/CollectItemType/GetList")]
public async Task<List<CollectItemTypeDto>> GetListAsync()
{
var userQueryable = await _userRepository.GetQueryableAsync();
var entlist = (from a in await _collectItemTypeRepository.GetQueryableAsync()
join b in userQueryable on a.CreatorId equals b.Id into bb
from ab in bb.DefaultIfEmpty()
join c in userQueryable on a.LastModifierId equals c.Id into cc
from ac in cc.DefaultIfEmpty()
select new
{
a,
CreatorName = ab != null ? ab.Surname : "",
LastModifierName = ac != null ? ac.Surname : ""
})
.Select(s => new CollectItemTypeDto
{
CreationTime = s.a.CreationTime,
CreatorId = s.a.CreatorId,
LastModifierId = s.a.LastModifierId,
Id = s.a.Id,
DisplayOrder = s.a.DisplayOrder,
DisplayName = s.a.DisplayName,
InvoiceItemTypeId = s.a.InvoiceItemTypeId,
SimpleCode = s.a.SimpleCode,
LastModificationTime = s.a.LastModificationTime,
CreatorName = s.CreatorName,
LastModifierName = s.LastModifierName
}).OrderBy(o => o.DisplayOrder).ToList();
return entlist;
}
/// <summary>
/// 创建
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/CollectItemType/Create")]
public async Task<CollectItemTypeDto> CreateAsync(CreateCollectItemTypeDto input)
{
var createEntity = ObjectMapper.Map<CreateCollectItemTypeDto, CollectItemType>(input);
var entity = await _manager.CreateAsync(createEntity);
entity = await _collectItemTypeRepository.InsertAsync(entity);
var dto = ObjectMapper.Map<CollectItemType, CollectItemTypeDto>(entity);
return dto;
}
/// <summary>
/// 修改
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/CollectItemType/Update")]
public async Task<CollectItemTypeDto> UpdateAsync(UpdateCollectItemTypeDto input)
{
var entity = await _collectItemTypeRepository.GetAsync(input.Id);
var sourceEntity = ObjectMapper.Map<UpdateCollectItemTypeDto, CollectItemType>(input);
await _manager.UpdateAsync(sourceEntity, entity);
entity = await _collectItemTypeRepository.UpdateAsync(entity);
return ObjectMapper.Map<CollectItemType, CollectItemTypeDto>(entity);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/CollectItemType/Delete")]
public async Task DeleteAsync(CollectItemTypeIdInputDto input)
{
var entity = await _collectItemTypeRepository.GetAsync(input.Id);
await _manager.CheckAndDeleteAsync(entity);
}
/// <summary>
/// 修改排序 置顶,置底
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/CollectItemType/UpdateManySort")]
public async Task UpdateManySortAsync(UpdateManySortInput input)
{
await _manager.UpdateManySortAsync(input.Id, input.SortType);
}
/// <summary>
/// 修改排序 拖拽
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/CollectItemType/UpdateSortMany")]
public async Task UpdateSortManyAsync(UpdateSortManyDto input)
{
await _manager.UpdateSortManyAsync(input);
}
}
}

300
src/Shentun.Pacs.Application/PacsBusiness/PacsBusinessAppService.cs

@ -6,10 +6,12 @@ using Microsoft.Extensions.Logging;
using NPOI.POIFS.Storage;
using NPOI.Util;
using NUglify.Helpers;
using Shentun.Pacs.ColumnReferenceCodes;
using Shentun.Pacs.CustomerOrgs;
using Shentun.Pacs.Enums;
using Shentun.Pacs.Models;
using Shentun.Pacs.PatientRegisters;
using Shentun.Pacs.Patients;
using Shentun.Pacs.PrintReports;
using Shentun.Pacs.RegisterCheckItems;
using Shentun.Pacs.RegisterCheckPictures;
@ -19,8 +21,11 @@ using Shentun.Pacs.RegisterCheckSummarys;
using Shentun.Pacs.SumSummaryReports;
using Shentun.Pacs.ThirdBookingPushs;
using Shentun.Pacs.ThirdPartyPublicInterfaces;
using Shentun.Utilities;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net.Http;
using System.Text;
@ -61,6 +66,12 @@ namespace Shentun.Pacs.PacsBusiness
private readonly IRepository<ItemType, Guid> _itemTypeRepository;
private readonly CustomerOrgManager _customerOrgManager;
private readonly IRepository<Volo.Abp.Identity.OrganizationUnit, Guid> _organizationUnitRepository;
private readonly IRepository<Patient, Guid> _patientRepository;
private readonly PatientManager _manager;
private readonly PatientRegisterManager _patientRegisterManager;
private readonly ColumnReferenceCodeManager _columnReferenceCodeManager;
private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
public PacsBusinessAppService(
IConfiguration configuration,
IRepository<RegisterCheck, Guid> registerCheckRepository,
@ -82,7 +93,12 @@ namespace Shentun.Pacs.PacsBusiness
ILogger<PacsBusinessAppService> logger,
IRepository<ItemType, Guid> itemTypeRepository,
CustomerOrgManager customerOrgManager,
IRepository<Volo.Abp.Identity.OrganizationUnit, Guid> organizationUnitRepository)
IRepository<Volo.Abp.Identity.OrganizationUnit, Guid> organizationUnitRepository,
IRepository<Patient, Guid> patientRepository,
PatientManager manager,
PatientRegisterManager patientRegisterManager,
ColumnReferenceCodeManager columnReferenceCodeManager,
IRepository<RegisterCheckItem> registerCheckItemRepository)
{
_configuration = configuration;
_registerCheckRepository = registerCheckRepository;
@ -105,6 +121,11 @@ namespace Shentun.Pacs.PacsBusiness
_itemTypeRepository = itemTypeRepository;
_customerOrgManager = customerOrgManager;
_organizationUnitRepository = organizationUnitRepository;
_patientRepository = patientRepository;
_manager = manager;
_patientRegisterManager = patientRegisterManager;
_columnReferenceCodeManager = columnReferenceCodeManager;
_registerCheckItemRepository = registerCheckItemRepository;
}
@ -751,5 +772,282 @@ namespace Shentun.Pacs.PacsBusiness
}
#region 新流程增加接口
/// <summary>
/// 导入老系统人员、项目数据,并自动加入worklist
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/PacsBusiness/ImportPeisCheckDataByCheckRequestNo")]
public async Task ImportPeisCheckDataByCheckRequestNoAsync(ImportPeisCheckDataByCheckRequestNoInputDto input)
{
if (string.IsNullOrWhiteSpace(input.CheckRequestNo))
{
throw new UserFriendlyException("检查条码不能为空");
}
if (string.IsNullOrWhiteSpace(input.DeviceId))
{
throw new UserFriendlyException("设备id不能为空");
}
if (string.IsNullOrWhiteSpace(input.ScheduledAet))
{
throw new UserFriendlyException("预检AET不能为空");
}
string connectionString = _configuration.GetValue<string>("OldPeis:ConnectionStrings", "");
SqlSugarClient oldDb = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = connectionString,
DbType = SqlSugar.DbType.SqlServer,
IsAutoCloseConnection = true
});
var oldRegisterAsbitemList = await oldDb.Ado.GetDataTableAsync("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," +
"b.print_barcode_no,b.asbitem_id,b.price,b.standard_price,b.charge_flag,b.payment_mode,c.item_id " +
"from patient_register as a left join register_asbitem as b on a.patient_register_id=b.patient_register_id " +
"left join register_item as c on b.asbitem_id=c.asbitem_id and a.patient_register_id=c.patient_register_id" +
$" where b.print_barcode_no='{input.CheckRequestNo}'");
if (oldRegisterAsbitemList.Rows.Count > 0)
{
var registerCheckFirst = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
where registerCheck.CheckRequestNo == input.CheckRequestNo
select new
{
patientRegister,
registerCheck
}).FirstOrDefault();
if (registerCheckFirst == null)
{
#region 插入人员
#region 档案
var patientName = oldRegisterAsbitemList.Rows[0]["patient_name"].ToString();
var sexId = ConvertSex(oldRegisterAsbitemList.Rows[0]["sex_id"].ToString());
var mobileTelephone = oldRegisterAsbitemList.Rows[0]["mobile_telephone"].ToString();
var telephone = oldRegisterAsbitemList.Rows[0]["telephone"].ToString();
var idNo = oldRegisterAsbitemList.Rows[0]["id_card_no"].ToString();
short? age = string.IsNullOrWhiteSpace(oldRegisterAsbitemList.Rows[0]["age"].ToString()) ? null : Convert.ToInt16(oldRegisterAsbitemList.Rows[0]["age"].ToString());
var maritalStatusId = oldRegisterAsbitemList.Rows[0]["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(oldRegisterAsbitemList.Rows[0]["marital_status_id"].ToString());
var patientQuery = await _patientRepository.GetQueryableAsync();
patientQuery = patientQuery.Where(m => m.DisplayName == patientName && m.SexId == sexId);
if (!string.IsNullOrWhiteSpace(mobileTelephone))
{
patientQuery = patientQuery.Where(m => m.MobileTelephone == mobileTelephone);
}
if (!string.IsNullOrWhiteSpace(idNo))
{
patientQuery = patientQuery.Where(m => m.IdNo == idNo);
}
//档案
var patientEnt = await patientQuery.FirstOrDefaultAsync();
if (patientEnt == null)
{
patientEnt = new Patient(GuidGenerator.Create())
{
BirthDate = null,
BirthPlaceId = null,
DisplayName = patientName,
Email = null,
IdNo = idNo,
MaritalStatusId = maritalStatusId,
MedicalCenterId = Guid.Empty,
MobileTelephone = mobileTelephone,
NationId = null,
PatientNo = await _manager.CreatePatientNo(Guid.Empty),
PatientPassword = "",
PostalCode = "",
SexId = sexId,
SimpleCode = LanguageConverter.GetPYSimpleCode(patientName),
Telephone = telephone
};
patientEnt = await _patientRepository.InsertAsync(patientEnt, true);
}
#endregion
#region 人员
var patientRegisterEnt = new PatientRegister(GuidGenerator.Create())
{
Age = age,
CompleteFlag = Convert.ToChar(oldRegisterAsbitemList.Rows[0]["complete_flag"].ToString()),
CustomerOrgId = GuidFlag.PersonCustomerOrgId,
CustomerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId,
DeviceId = Guid.Parse(input.DeviceId),
GuidePrintTimes = 0,
IsAudit = 'N',
IsLock = 'N',
IsMedicalStart = 'Y',
IsNameHide = 'N',
IsPhoneFollow = 'N',
IsVip = 'N',
IsRecoverGuide = 'N',
IsUpload = 'N',
IsUploadAppoint = 'N',
MaritalStatusId = maritalStatusId,
MedicalCenterId = Guid.Empty,
MedicalTimes = 0,
PatientId = patientEnt.Id,
PatientName = patientName,
ReportPrintTimes = 0,
PatientRegisterNo = await _patientRegisterManager.CreatePatientRegisterNo(Guid.Empty),
SendFlag = '0',
SexId = sexId
};
patientRegisterEnt = await _patientRegisterRepository.InsertAsync(patientRegisterEnt, true);
#endregion
#region 登记项目 明细项目
string oldAsbitemId = oldRegisterAsbitemList.Rows[0]["asbitem_id"].ToString();
var oldAsbitemPrice = Convert.ToDecimal(oldRegisterAsbitemList.Rows[0]["price"].ToString());
var oldAsbitemStandardPrice = Convert.ToDecimal(oldRegisterAsbitemList.Rows[0]["standard_price"].ToString());
Guid asbitemColumnReferenId = Guid.Parse(_configuration.GetValue<string>("OldPeis:AsbitemColumnReferenId", Guid.Empty.ToString()));
Guid itemColumnReferenId = Guid.Parse(_configuration.GetValue<string>("OldPeis:ItemColumnReferenId", Guid.Empty.ToString()));
var asbitemCodeValues = await _columnReferenceCodeManager.GetColumnReferenCodeValueAsync(asbitemColumnReferenId, oldAsbitemId);
if (!asbitemCodeValues.Any())
{
throw new UserFriendlyException($"组合项目编号:{oldAsbitemId}没有对照");
}
if (asbitemCodeValues.Count() > 1)
{
throw new UserFriendlyException($"组合项目编号:{oldAsbitemId}有多个pacs项目进行了对照");
}
Guid asbitemId = Guid.Parse(asbitemCodeValues.First()); //pacs系统组合项目id
//检查
var registerCheckEnt = new RegisterCheck(GuidGenerator.Create())
{
CheckRequestNo = input.CheckRequestNo,
CheckRequestPrintTimes = 0,
CompleteFlag = RegisterCheckCompleteFlag.UnChecked,
IsAudit = 'N',
IsLock = 'N',
IsPacsCheck = 'N',
IsSignIn = 'Y',
PatientRegisterId = patientRegisterEnt.Id,
ScheduledAet = input.ScheduledAet,
WorklistFlag = '1',
WorklistPreCheckDate = DateTime.Now
};
registerCheckEnt = await _registerCheckRepository.InsertAsync(registerCheckEnt, true);
//组合项目
var registerCheckAsbitemEnt = new RegisterCheckAsbitem(GuidGenerator.Create())
{
Amount = 1,
AsbitemId = asbitemId,
ChargePrice = oldAsbitemPrice,
StandardPrice = oldAsbitemStandardPrice,
IsCharge = Convert.ToChar(oldRegisterAsbitemList.Rows[0]["charge_flag"].ToString()),
OldAsbitemId = oldAsbitemId,
PatientRegisterId = patientRegisterEnt.Id,
PayTypeFlag = Convert.ToChar(oldRegisterAsbitemList.Rows[0]["payment_mode"].ToString()),
RegisterCheckId = registerCheckEnt.Id
};
registerCheckAsbitemEnt = await _registerCheckAsbitemRepository.InsertAsync(registerCheckAsbitemEnt, true);
//明细项目
List<RegisterCheckItem> registerCheckItemList = new List<RegisterCheckItem>();
foreach (DataRow row in oldRegisterAsbitemList.Rows)
{
string oldItemId = row["item_id"].ToString();
var itemCodeValues = await _columnReferenceCodeManager.GetColumnReferenCodeValueAsync(itemColumnReferenId, oldItemId);
if (!itemCodeValues.Any())
{
throw new UserFriendlyException($"项目编号:{oldItemId}没有对照");
}
if (itemCodeValues.Count() > 1)
{
throw new UserFriendlyException($"项目编号:{oldAsbitemId}有多个pacs项目进行了对照");
}
Guid itemId = Guid.Parse(itemCodeValues.First()); //pacs系统项目id
if (registerCheckItemList.Count(c => c.ItemId == itemId) == 0)
{
registerCheckItemList.Add(new RegisterCheckItem
{
ItemId = itemId,
RegisterCheckId = registerCheckEnt.Id,
});
}
}
if (registerCheckItemList.Any())
{
await _registerCheckItemRepository.InsertManyAsync(registerCheckItemList);
}
#endregion
#endregion
}
else
{
//更新设备id
registerCheckFirst.patientRegister.DeviceId = Guid.Parse(input.DeviceId);
await _patientRegisterRepository.UpdateAsync(registerCheckFirst.patientRegister);
}
}
else
{
throw new UserFriendlyException("检查条码不正确");
}
}
#endregion
/// <summary>
/// 转换老系统性别
/// </summary>
/// <param name="SexId"></param>
/// <returns></returns>
private char ConvertSex(string SexId)
{
if (SexId == "0")
{
return 'M';
}
else if (SexId == "1")
{
return 'F';
}
else
{
return 'U';
}
}
}
}

842
src/Shentun.Pacs.Application/PacsDataMigrates/PacsDataMigrateAppService.cs

@ -1,11 +1,27 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http.Headers;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Microsoft.Extensions.Logging;
using Shentun.Pacs.Models;
using Volo.Abp.Domain.Repositories;
using System.Data;
using Volo.Abp.Uow;
using Shentun.Utilities;
using Shentun.Pacs.ItemTypes;
using Shentun.Pacs.Enums;
namespace Shentun.Pacs.PacsDataMigrates
{
@ -17,10 +33,834 @@ namespace Shentun.Pacs.PacsDataMigrates
public class PacsDataMigrateAppService : ApplicationService
{
public PacsDataMigrateAppService()
private readonly ILogger<PacsDataMigrateAppService> _logger;
private readonly IRepository<ItemType, Guid> _itemTypeRepository;
private readonly IRepository<Item, Guid> _itemRepository;
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
private readonly UnitOfWorkManager _unitOfWorkManager;
private readonly IRepository<FieldComparison, Guid> _fieldComparisonRepository;
private readonly IRepository<DeviceType, Guid> _deviceTypeRepository;
private readonly ItemTypeManager _itemTypeManager;
private readonly IRepository<AsbitemDetail> _asbitemDetailRepository;
private readonly IRepository<ColumnReference, Guid> _columnReferenceRepository;
private readonly IRepository<ColumnReferenceCode, Guid> _columnReferenceCodeRepository;
private readonly IRepository<ColumnReferenceInterface, Guid> _columnReferenceInterfaceRepository;
private readonly SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = "server=192.168.0.3;uid=sa;pwd=;database=reddolphin;Encrypt=false;",
DbType = SqlSugar.DbType.SqlServer,
IsAutoCloseConnection = true
});
//默认指引类别ID
private readonly char defaultGuidTypeId = '0';
//默认体检报告类别ID
private readonly char defaultMedicalReportTypeId = '0';
/// <summary>
/// 汇总项目类别
/// </summary>
private readonly Guid collectItemTypeId = Guid.Parse("3a11fe49-5719-0e9e-dd44-0c4aff0900b3");
public PacsDataMigrateAppService(
ILogger<PacsDataMigrateAppService> logger,
IRepository<ItemType, Guid> itemTypeRepository,
IRepository<Item, Guid> itemRepository,
IRepository<Asbitem, Guid> asbitemRepository,
UnitOfWorkManager unitOfWorkManager,
IRepository<DeviceType, Guid> deviceTypeRepository,
ItemTypeManager itemTypeManager,
IRepository<AsbitemDetail> asbitemDetailRepository,
IRepository<ColumnReference, Guid> columnReferenceRepository,
IRepository<ColumnReferenceCode, Guid> columnReferenceCodeRepository,
IRepository<ColumnReferenceInterface, Guid> columnReferenceInterfaceRepository,
IRepository<FieldComparison, Guid> fieldComparisonRepository)
{
_logger = logger;
_itemTypeRepository = itemTypeRepository;
_itemRepository = itemRepository;
_asbitemRepository = asbitemRepository;
_unitOfWorkManager = unitOfWorkManager;
_deviceTypeRepository = deviceTypeRepository;
_itemTypeManager = itemTypeManager;
_asbitemDetailRepository = asbitemDetailRepository;
_columnReferenceRepository = columnReferenceRepository;
_columnReferenceCodeRepository = columnReferenceCodeRepository;
_columnReferenceInterfaceRepository = columnReferenceInterfaceRepository;
_fieldComparisonRepository = fieldComparisonRepository;
}
#region 对照
/// <summary>
/// 组合项目对照
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PacsDataMigrate/AsbitemFieldComparison")]
public async Task AsbitemFieldComparison()
{
Guid columnReferenceId = GuidGenerator.Create();
var columnReferenceEnt = await _columnReferenceRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("组合项目对照"));
if (columnReferenceEnt == null)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
columnReferenceEnt = new ColumnReference(columnReferenceId)
{
DisplayName = "组合项目对照",
DisplayOrder = 1,
ParmValue = ""
};
await _columnReferenceRepository.InsertAsync(columnReferenceEnt, true);
await uow.CompleteAsync();
}
}
else
{
columnReferenceId = columnReferenceEnt.Id;
}
var fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "asbitem");
if (fieldComparisonList.Count > 0)
{
foreach (var fieldComparison in fieldComparisonList)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
string pacsId = fieldComparison.NewKeyValue;
string peisId = fieldComparison.OldKeyValue;
var columnReferenceCodeEnt = await _columnReferenceCodeRepository.FirstOrDefaultAsync(f => f.ColumnReferenceId == columnReferenceId
&& f.CodeValue == pacsId);
Guid columnReferenceCodeId = GuidGenerator.Create();
if (columnReferenceCodeEnt == null)
{
columnReferenceCodeEnt = new ColumnReferenceCode(columnReferenceCodeId)
{
CodeValue = pacsId,
ColumnReferenceId = columnReferenceId,
FilterCodeValue = ""
};
await _columnReferenceCodeRepository.InsertAsync(columnReferenceCodeEnt, true);
}
else
{
columnReferenceCodeId = columnReferenceCodeEnt.Id;
}
#region 对照值
var columnReferenceInterfaceEnt = await _columnReferenceInterfaceRepository.FirstOrDefaultAsync(f => f.ColumnReferenceCodeId == columnReferenceCodeId);
if (columnReferenceInterfaceEnt == null)
{
columnReferenceInterfaceEnt = new ColumnReferenceInterface(GuidGenerator.Create())
{
ColumnReferenceCodeId = columnReferenceCodeId,
InterfaceCodeValue = peisId
};
await _columnReferenceInterfaceRepository.InsertAsync(columnReferenceInterfaceEnt, true);
}
#endregion
await uow.CompleteAsync();
}
}
}
}
/// <summary>
/// 明细项目对照
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PacsDataMigrate/ItemFieldComparison")]
public async Task ItemFieldComparison()
{
Guid columnReferenceId = GuidGenerator.Create();
var columnReferenceEnt = await _columnReferenceRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("明细项目对照"));
if (columnReferenceEnt == null)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
columnReferenceEnt = new ColumnReference(columnReferenceId)
{
DisplayName = "明细项目对照",
DisplayOrder = 1,
ParmValue = ""
};
await _columnReferenceRepository.InsertAsync(columnReferenceEnt, true);
await uow.CompleteAsync();
}
}
else
{
columnReferenceId = columnReferenceEnt.Id;
}
var fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "item");
if (fieldComparisonList.Count > 0)
{
foreach (var fieldComparison in fieldComparisonList)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
string pacsId = fieldComparison.NewKeyValue;
string peisId = fieldComparison.OldKeyValue;
var columnReferenceCodeEnt = await _columnReferenceCodeRepository.FirstOrDefaultAsync(f => f.ColumnReferenceId == columnReferenceId
&& f.CodeValue == pacsId);
Guid columnReferenceCodeId = GuidGenerator.Create();
if (columnReferenceCodeEnt == null)
{
columnReferenceCodeEnt = new ColumnReferenceCode(columnReferenceCodeId)
{
CodeValue = pacsId,
ColumnReferenceId = columnReferenceId,
FilterCodeValue = ""
};
await _columnReferenceCodeRepository.InsertAsync(columnReferenceCodeEnt, true);
}
else
{
columnReferenceCodeId = columnReferenceCodeEnt.Id;
}
#region 对照值
var columnReferenceInterfaceEnt = await _columnReferenceInterfaceRepository.FirstOrDefaultAsync(f => f.ColumnReferenceCodeId == columnReferenceCodeId);
if (columnReferenceInterfaceEnt == null)
{
columnReferenceInterfaceEnt = new ColumnReferenceInterface(GuidGenerator.Create())
{
ColumnReferenceCodeId = columnReferenceCodeId,
InterfaceCodeValue = peisId
};
await _columnReferenceInterfaceRepository.InsertAsync(columnReferenceInterfaceEnt, true);
}
#endregion
await uow.CompleteAsync();
}
}
}
}
/// <summary>
/// 仪器类别对照
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PacsDataMigrate/DeviceTypeFieldComparison")]
public async Task DeviceTypeFieldComparison()
{
Guid columnReferenceId = GuidGenerator.Create();
var columnReferenceEnt = await _columnReferenceRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("仪器类别对照"));
if (columnReferenceEnt == null)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
columnReferenceEnt = new ColumnReference(columnReferenceId)
{
DisplayName = "仪器类别对照",
DisplayOrder = 1,
ParmValue = ""
};
await _columnReferenceRepository.InsertAsync(columnReferenceEnt, true);
await uow.CompleteAsync();
}
}
else
{
columnReferenceId = columnReferenceEnt.Id;
}
var fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "device_type");
if (fieldComparisonList.Count > 0)
{
foreach (var fieldComparison in fieldComparisonList)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
string pacsId = fieldComparison.NewKeyValue;
string peisId = fieldComparison.OldKeyValue;
var columnReferenceCodeEnt = await _columnReferenceCodeRepository.FirstOrDefaultAsync(f => f.ColumnReferenceId == columnReferenceId
&& f.CodeValue == pacsId);
Guid columnReferenceCodeId = GuidGenerator.Create();
if (columnReferenceCodeEnt == null)
{
columnReferenceCodeEnt = new ColumnReferenceCode(columnReferenceCodeId)
{
CodeValue = pacsId,
ColumnReferenceId = columnReferenceId,
FilterCodeValue = ""
};
await _columnReferenceCodeRepository.InsertAsync(columnReferenceCodeEnt, true);
}
else
{
columnReferenceCodeId = columnReferenceCodeEnt.Id;
}
#region 对照值
var columnReferenceInterfaceEnt = await _columnReferenceInterfaceRepository.FirstOrDefaultAsync(f => f.ColumnReferenceCodeId == columnReferenceCodeId);
if (columnReferenceInterfaceEnt == null)
{
columnReferenceInterfaceEnt = new ColumnReferenceInterface(GuidGenerator.Create())
{
ColumnReferenceCodeId = columnReferenceCodeId,
InterfaceCodeValue = peisId
};
await _columnReferenceInterfaceRepository.InsertAsync(columnReferenceInterfaceEnt, true);
}
#endregion
await uow.CompleteAsync();
}
}
}
}
#endregion
#region 基础数据
/// <summary>
/// 处理基础数据
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PacsDataMigrate/HandBaseData")]
public async Task HandBaseData()
{
await TransferDeviceTypeData();
await TransferItemTypeData();
}
/// <summary>
/// 处理基础项目相关数据
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PacsDataMigrate/HandBaseItemData")]
public async Task HandBaseItemData()
{
await TransferItemData();
await TransferAsbitemData();
await TransferAsbitemDetailData();
}
#endregion
#region 基础数据
/// <summary>
/// 迁移仪器类别数据
/// </summary>
/// <returns></returns>
[RemoteService(false)]
public async Task TransferDeviceTypeData()
{
var count = await _deviceTypeRepository.GetCountAsync();
if (count == 0)
{
var oldDeviceTypeList = await Db.Ado.GetDataTableAsync("select device_type_id,device_type_name from device_type order by display_order asc");
if (oldDeviceTypeList.Rows.Count > 0)
{
foreach (DataRow row in oldDeviceTypeList.Rows)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
Guid deviceTypeId = GuidGenerator.Create();
var data = new DeviceType(deviceTypeId)
{
CheckTypeFlag = '0',
DisplayName = row["device_type_name"].ToString(),
DisplayOrder = oldDeviceTypeList.Rows.IndexOf(row) + 1,
SimpleCode = LanguageConverter.GetPYSimpleCode(row["device_type_name"].ToString())
};
await _deviceTypeRepository.InsertAsync(data);
var fieldComparison = new FieldComparison
{
TableName = "device_type",
FieldName = "id",
NewKeyValue = deviceTypeId.ToString(),
OldKeyValue = row["device_type_id"].ToString()
};
await _fieldComparisonRepository.InsertAsync(fieldComparison);
await uow.CompleteAsync();
}
}
}
_logger.LogInformation($"仪器类别数据处理完毕,处理数量{oldDeviceTypeList.Rows.Count}");
}
else
{
_logger.LogInformation("仪器类别数据已存在,未处理");
}
}
/// <summary>
/// 迁移项目类别-科室数据
/// </summary>
/// <returns></returns>
[RemoteService(false)]
public async Task TransferItemTypeData()
{
var count = await _itemTypeRepository.GetCountAsync();
if (count == 0)
{
var oldItemTypeList = await Db.Ado.GetDataTableAsync("select department_id,department_type,department_name,merge_asbitem_flag,print_pacs_barcode_flag from department order by display_order asc");
if (oldItemTypeList.Rows.Count > 0)
{
foreach (DataRow row in oldItemTypeList.Rows)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
Guid itemTypeId = GuidGenerator.Create();
var data = new ItemType(itemTypeId)
{
DisplayName = row["department_name"].ToString(),
DisplayOrder = oldItemTypeList.Rows.IndexOf(row) + 1,
SimpleCode = LanguageConverter.GetPYSimpleCode(row["department_name"].ToString()),
CheckTypeFlag = Convert.ToChar(row["department_type"]),
GuidTypeId = defaultGuidTypeId,
IsMergeAsbitem = Convert.ToChar(row["merge_asbitem_flag"]),
IsWrap = 'N',
MedicalReportTypeId = defaultMedicalReportTypeId,
ParentId = null,
PathCode = _itemTypeManager.CreatePathCode(null).Result,
IsCheckRequest = Convert.ToChar(row["print_pacs_barcode_flag"])
};
await _itemTypeRepository.InsertAsync(data);
var fieldComparison = new FieldComparison
{
TableName = "item_type",
FieldName = "id",
NewKeyValue = itemTypeId.ToString(),
OldKeyValue = row["department_id"].ToString()
};
await _fieldComparisonRepository.InsertAsync(fieldComparison);
await uow.CompleteAsync();
}
}
}
_logger.LogInformation($"项目类别数据处理完毕,处理数量{oldItemTypeList.Rows.Count}");
}
else
{
_logger.LogInformation($"项目类别数据已存在,未处理");
}
}
#endregion
#region 基础项目相关数据
/// <summary>
/// 迁移项目数据
/// </summary>
/// <returns></returns>
[RemoteService(false)]
public async Task TransferItemData()
{
var count = await _itemRepository.GetCountAsync();
if (count == 0)
{
var oldItemList = await Db.Ado.GetDataTableAsync("select a.* from item as a left join department as b on a.department_id=b.department_id order by b.display_order,a.display_order");
if (oldItemList.Rows.Count > 0)
{
foreach (DataRow row in oldItemList.Rows)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
#region 根据仪器类别生成二级科室
var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["department_id"].ToString()).FirstOrDefault().NewKeyValue);
Guid? deviceTypeId = null;
if (!string.IsNullOrWhiteSpace(row["device_type_id"].ToString()))
{
deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["device_type_id"].ToString()).FirstOrDefault().NewKeyValue);
var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId);
var deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value);
var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName);
if (itemTypeChildEnt == null)
{
Guid autoItemTypeId = GuidGenerator.Create();
#region 排序值
int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1;
#endregion
var item_type_data = new ItemType(autoItemTypeId)
{
DisplayName = deviceTypeEnt.DisplayName,
DisplayOrder = displayOrder,
SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName),
CheckTypeFlag = itemTypeEnt.CheckTypeFlag,
GuidTypeId = itemTypeEnt.GuidTypeId,
IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem,
IsWrap = itemTypeEnt.IsWrap,
MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId,
ParentId = itemTypeEnt.Id,
PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result,
IsCheckRequest = itemTypeEnt.IsCheckRequest
};
await _itemTypeRepository.InsertAsync(item_type_data);
itemTypeId = autoItemTypeId;
}
else
{
itemTypeId = itemTypeChildEnt.Id;
}
}
#endregion
Guid itemId = GuidGenerator.Create();
var data = new Item(itemId)
{
DisplayName = row["item_name"].ToString(),
DisplayOrder = oldItemList.Rows.IndexOf(row) + 1,
SimpleCode = LanguageConverter.GetPYSimpleCode(row["item_name"].ToString()),
CalculationFunction = "",
DefaultResult = row["default_result"].ToString(),
DiagnosisFunction = "",
EnglishShortName = row["english_abbreviation"].ToString(),
InputCheck = row["input_check"].ToString(),
IsActive = Convert.ToChar(row["valid_flag"].ToString()),
IsCalculationItem = 'N',
IsContinueProcess = 'N',
IsDiagnosisFunction = 'N',
IsNameIntoSummary = Convert.ToChar(row["name_into_summary_flag"]),
IsProduceSummary = Convert.ToChar(row["produce_summary_flag"]),
ItemTypeId = itemTypeId,
LineModeFlag = '0',
Price = Convert.ToDecimal(row["price"]),
PriceItemId = null,
ReferenceRangeTypeFlag = Convert.ToChar(row["reference_range_type"]),
ResultTemplateTypeFlag = '0',
UnitId = null,
DeviceTypeId = deviceTypeId
};
await _itemRepository.InsertAsync(data);
var fieldComparison = new FieldComparison
{
TableName = "item",
FieldName = "id",
NewKeyValue = itemId.ToString(),
OldKeyValue = row["item_id"].ToString()
};
await _fieldComparisonRepository.InsertAsync(fieldComparison);
await uow.CompleteAsync();
}
}
}
_logger.LogInformation($"项目数据处理完毕,处理数量{oldItemList.Rows.Count}");
}
else
{
_logger.LogInformation("项目数据已存在,未处理");
}
}
/// <summary>
/// 迁移组合项目数据
/// </summary>
/// <returns></returns>
[RemoteService(false)]
public async Task TransferAsbitemData()
{
var count = await _asbitemRepository.GetCountAsync();
if (count == 0)
{
var oldAsbitemList = await Db.Ado.GetDataTableAsync("select a.* from asbitem as a left join department as b on a.department_id=b.department_id order by b.display_order,a.display_order ");
if (oldAsbitemList.Rows.Count > 0)
{
foreach (DataRow row in oldAsbitemList.Rows)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
#region 根据仪器类别生成二级科室
var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["department_id"].ToString()).FirstOrDefault().NewKeyValue);
Guid? deviceTypeId = null;
if (!string.IsNullOrWhiteSpace(row["device_type_id"].ToString()))
{
deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["device_type_id"].ToString()).FirstOrDefault().NewKeyValue);
var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId);
var deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value);
var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName);
if (itemTypeChildEnt == null)
{
Guid autoItemTypeId = GuidGenerator.Create();
#region 排序值
int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1;
#endregion
var item_type_data = new ItemType(autoItemTypeId)
{
DisplayName = deviceTypeEnt.DisplayName,
DisplayOrder = displayOrder,
SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName),
CheckTypeFlag = itemTypeEnt.CheckTypeFlag,
GuidTypeId = itemTypeEnt.GuidTypeId,
IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem,
IsWrap = itemTypeEnt.IsWrap,
MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId,
ParentId = itemTypeEnt.Id,
PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result,
IsCheckRequest = itemTypeEnt.IsCheckRequest
};
await _itemTypeRepository.InsertAsync(item_type_data);
itemTypeId = autoItemTypeId;
}
else
{
itemTypeId = itemTypeChildEnt.Id;
}
}
#endregion
Guid asbitemId = GuidGenerator.Create();
var data = new Asbitem(asbitemId)
{
DisplayName = row["asbitem_name"].ToString(),
DisplayOrder = oldAsbitemList.Rows.IndexOf(row) + 1,
SimpleCode = LanguageConverter.GetPYSimpleCode(row["asbitem_name"].ToString()),
DefaultResult = row["default_result"].ToString(),
DiagnosisFunction = "",
IsActive = Convert.ToChar(row["valid_flag"].ToString()),
IsContinueProcess = 'N',
IsDiagnosisFunction = 'N',
ItemTypeId = itemTypeId,
Price = Convert.ToDecimal(row["price"]),
DeviceTypeId = deviceTypeId,
ClinicalMeaning = row["clinical_meaning"].ToString(),
ForSexId = ConvertForSex(row["for_sex_id"].ToString()),
CollectItemTypeId = collectItemTypeId,
//InvoiceItemTypeId = InvoiceItemTypeId,
IsBeforeEat = Convert.ToChar(row["before_eat_flag"].ToString()),
IsCheck = Convert.ToChar(row["check_flag"].ToString()),
IsItemResultMerger = Convert.ToChar(row["item_result_merger_flag"].ToString()),
IsPictureRotate = Convert.ToChar(row["picture_rotate_flag"].ToString()),
QueueTime = string.IsNullOrEmpty(row["queue_time"].ToString()) ? 0 : Convert.ToDecimal(row["queue_time"].ToString()),
ShortName = row["short_name"].ToString()
};
await _asbitemRepository.InsertAsync(data);
var fieldComparison = new FieldComparison
{
TableName = "asbitem",
FieldName = "id",
NewKeyValue = asbitemId.ToString(),
OldKeyValue = row["asbitem_id"].ToString()
};
await _fieldComparisonRepository.InsertAsync(fieldComparison);
await uow.CompleteAsync();
}
}
}
_logger.LogInformation($"组合项目数据处理完毕,处理数量{oldAsbitemList.Rows.Count}");
}
else
{
_logger.LogInformation("组合项目数据已存在,未处理");
}
}
/// <summary>
/// 迁移组合项目明细数据 无字典
/// </summary>
/// <returns></returns>
[RemoteService(false)]
public async Task TransferAsbitemDetailData()
{
var count = await _asbitemDetailRepository.GetCountAsync();
if (count == 0)
{
var oldAsbitemDetailList = await Db.Ado.GetDataTableAsync("select * from asbitem_detail ");
if (oldAsbitemDetailList.Rows.Count > 0)
{
foreach (DataRow row in oldAsbitemDetailList.Rows)
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
Guid asbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue);
Guid itemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["item_id"].ToString()).FirstOrDefault().NewKeyValue);
var data = new AsbitemDetail
{
AsbitemId = asbitemId,
ItemId = itemId
};
await _asbitemDetailRepository.InsertAsync(data);
await uow.CompleteAsync();
}
}
}
_logger.LogInformation($"组合项目明细数据处理完毕,处理数量{oldAsbitemDetailList.Rows.Count}");
}
else
{
_logger.LogInformation("组合项目明细数据已存在,未处理");
}
}
#endregion
/// <summary>
/// 转换老系统适用性别
/// </summary>
/// <param name="forSexId"></param>
/// <returns></returns>
private char ConvertForSex(string forSexId)
{
if (forSexId == "0")
{
return 'M';
}
else if (forSexId == "1")
{
return 'F';
}
else
{
return 'A';
}
}
}
}

24
src/Shentun.Pacs.Domain/PatientRegisters/PatientRegister.cs

@ -12,10 +12,7 @@ namespace Shentun.Pacs.Models
/// 体检登记主档
/// </summary>
[Table("patient_register")]
//[Index(nameof(CustomerOrgRegisterId), Name = "fki_fk_patient_register_org_register")]
[Index(nameof(MedicalCenterId), Name = "fki_fk_patient_register_ororganization_unit")]
[Index(nameof(PatientRegisterNo), Name = "ix_patient_register", IsUnique = true)]
[Index(nameof(PatientId), nameof(MedicalTimes), Name = "ix_patient_register_1", IsUnique = true)]
[Index(nameof(PatientRegisterNo), Name = "ix_patient_register")]
[Index(nameof(PatientName), Name = "ix_patient_register_2")]
public class PatientRegister : AuditedEntity<Guid>, IHasConcurrencyStamp
{
@ -324,6 +321,25 @@ namespace Shentun.Pacs.Models
[Column("concurrency_stamp")]
public string ConcurrencyStamp { get; set; }
/// <summary>
/// 仪器ID pacs系统的仪器id
/// </summary>
[Column("device_id")]
public Guid DeviceId { get; set; }
/// <summary>
/// 发送状态 0-未发送 1-发送
/// </summary>
[Column("send_flag")]
public char SendFlag { get; set; }
/// <summary>
/// 发送时间
/// </summary>
[Column("send_date")]
public DateTime? SendDate { get; set; }
/// <summary>
/// 修改登记人
/// </summary>

2
src/Shentun.Pacs.Domain/Patients/PatientManager.cs

@ -291,7 +291,7 @@ namespace Shentun.Pacs.Patients
/// </summary>
/// <param name="medicalCenterId">体检中心ID</param>
/// <returns></returns>
private async Task<string> CreatePatientNo(Guid medicalCenterId)
public async Task<string> CreatePatientNo(Guid medicalCenterId)
{
var patient_id_rule_prefix = ""; //前缀
var patient_id_rule_tail_len = ""; //尾号长度

7
src/Shentun.Pacs.Domain/RegisterCheckAsbitems/RegisterCheckAsbitem.cs

@ -119,6 +119,13 @@ namespace Shentun.Pacs.Models
[Column("concurrency_stamp")]
public string ConcurrencyStamp { get; set; }
/// <summary>
/// 体检系统组合项目id
/// </summary>
[StringLength(50)]
[Column("old_asbitem_id")]
public string OldAsbitemId { get; set; }
///// <summary>
///// 主键
///// </summary>

7
src/Shentun.Pacs.Domain/RegisterCheckItems/RegisterCheckItem.cs

@ -171,6 +171,13 @@ namespace Shentun.Pacs.Models
[Column("concurrency_stamp")]
public string ConcurrencyStamp { get; set; }
/// <summary>
/// 体检系统明细项目id
/// </summary>
[StringLength(50)]
[Column("old_item_id")]
public string OldItemId { get; set; }
//[Column("last_modifier_id")]
//public Guid LastModifierId { get; set; }
//[Column("last_modification_time", TypeName = "timestamp without time zone")]

3
src/Shentun.Pacs.EntityFrameworkCore/DbMapping/PatientRegisters/PatientRegisterDbMapping.cs

@ -100,6 +100,9 @@ namespace Shentun.Pacs.DbMapping
entity.Property(t => t.CustomerOrgRegisterId).HasComment("客户单位登记ID").HasDefaultValue(Guid.Empty);
entity.Property(t => t.AppointPatientRegisterId).HasMaxLength(40).HasComment("预约人员登记ID");
entity.Property(t => t.SendFlag).HasComment("发送状态 0-未发送 1-发送").IsRequired().HasDefaultValueSql("'0'");
entity.Property(t => t.SendDate).HasComment("发送时间");
//entity.HasOne(d => d.CustomerOrgRegister)
// .WithMany(p => p.PatientRegisters)
// .HasForeignKey(d => d.CustomerOrgRegisterId)

16267
src/Shentun.Pacs.EntityFrameworkCore/Migrations/20241213083723_update_patient_register_check.Designer.cs
File diff suppressed because it is too large
View File

119
src/Shentun.Pacs.EntityFrameworkCore/Migrations/20241213083723_update_patient_register_check.cs

@ -0,0 +1,119 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Shentun.Pacs.Migrations
{
public partial class update_patient_register_check : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "fki_fk_patient_register_ororganization_unit",
table: "patient_register");
migrationBuilder.DropIndex(
name: "ix_patient_register",
table: "patient_register");
migrationBuilder.DropIndex(
name: "ix_patient_register_1",
table: "patient_register");
migrationBuilder.AddColumn<string>(
name: "old_item_id",
table: "register_check_item",
type: "character varying(50)",
maxLength: 50,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "old_asbitem_id",
table: "register_check_asbitem",
type: "character varying(50)",
maxLength: 50,
nullable: true);
migrationBuilder.AddColumn<Guid>(
name: "device_id",
table: "patient_register",
type: "uuid",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
migrationBuilder.AddColumn<DateTime>(
name: "send_date",
table: "patient_register",
type: "timestamp without time zone",
nullable: true,
comment: "发送时间");
migrationBuilder.AddColumn<char>(
name: "send_flag",
table: "patient_register",
type: "character(1)",
nullable: false,
defaultValueSql: "'0'",
comment: "发送状态 0-未发送 1-发送");
migrationBuilder.CreateIndex(
name: "ix_patient_register",
table: "patient_register",
column: "patient_register_no");
migrationBuilder.CreateIndex(
name: "IX_patient_register_patient_id",
table: "patient_register",
column: "patient_id");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "ix_patient_register",
table: "patient_register");
migrationBuilder.DropIndex(
name: "IX_patient_register_patient_id",
table: "patient_register");
migrationBuilder.DropColumn(
name: "old_item_id",
table: "register_check_item");
migrationBuilder.DropColumn(
name: "old_asbitem_id",
table: "register_check_asbitem");
migrationBuilder.DropColumn(
name: "device_id",
table: "patient_register");
migrationBuilder.DropColumn(
name: "send_date",
table: "patient_register");
migrationBuilder.DropColumn(
name: "send_flag",
table: "patient_register");
migrationBuilder.CreateIndex(
name: "fki_fk_patient_register_ororganization_unit",
table: "patient_register",
column: "medical_center_id");
migrationBuilder.CreateIndex(
name: "ix_patient_register",
table: "patient_register",
column: "patient_register_no",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_patient_register_1",
table: "patient_register",
columns: new[] { "patient_id", "medical_times" },
unique: true);
}
}
}

34
src/Shentun.Pacs.EntityFrameworkCore/Migrations/PeisDbContextModelSnapshot.cs

@ -7583,6 +7583,10 @@ namespace Shentun.Pacs.Migrations
.HasColumnName("customer_org_register_id")
.HasComment("客户单位登记ID");
b.Property<Guid>("DeviceId")
.HasColumnType("uuid")
.HasColumnName("device_id");
b.Property<short>("GuidePrintTimes")
.ValueGeneratedOnAdd()
.HasColumnType("smallint")
@ -7801,6 +7805,18 @@ namespace Shentun.Pacs.Migrations
.HasColumnName("salesman")
.HasComment("介绍人");
b.Property<DateTime?>("SendDate")
.HasColumnType("timestamp without time zone")
.HasColumnName("send_date")
.HasComment("发送时间");
b.Property<char>("SendFlag")
.ValueGeneratedOnAdd()
.HasColumnType("character(1)")
.HasColumnName("send_flag")
.HasDefaultValueSql("'0'")
.HasComment("发送状态 0-未发送 1-发送");
b.Property<Guid?>("SexHormoneTermId")
.HasColumnType("uuid")
.HasColumnName("sex_hormone_term_id")
@ -7838,13 +7854,9 @@ namespace Shentun.Pacs.Migrations
b.HasIndex("MaritalStatusId");
b.HasIndex(new[] { "MedicalCenterId" }, "fki_fk_patient_register_ororganization_unit");
b.HasIndex("PatientId");
b.HasIndex(new[] { "PatientRegisterNo" }, "ix_patient_register")
.IsUnique();
b.HasIndex(new[] { "PatientId", "MedicalTimes" }, "ix_patient_register_1")
.IsUnique();
b.HasIndex(new[] { "PatientRegisterNo" }, "ix_patient_register");
b.HasIndex(new[] { "PatientName" }, "ix_patient_register_2");
@ -9064,6 +9076,11 @@ namespace Shentun.Pacs.Migrations
.HasColumnName("lis_request_id")
.HasComment("LIS申请ID");
b.Property<string>("OldAsbitemId")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("old_asbitem_id");
b.Property<Guid>("PatientRegisterId")
.HasColumnType("uuid")
.HasColumnName("patient_register_id")
@ -9304,6 +9321,11 @@ namespace Shentun.Pacs.Migrations
.HasColumnType("uuid")
.HasColumnName("last_modifier_id");
b.Property<string>("OldItemId")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("old_item_id");
b.Property<string>("ReferenceRangeValue")
.ValueGeneratedOnAdd()
.HasMaxLength(300)

6
src/Shentun.Pacs.HttpApi.Host/appsettings.json

@ -61,5 +61,11 @@
"Pacs": {
"AuthString": "peis:peis@123",
"BaseApiUrl": "http://192.168.2.74:8042"
},
"OldPeis": {
"ConnectionStrings": "server=192.168.0.3;uid=sa;pwd=;database=reddolphin;Encrypt=false;",
"AsbitemColumnReferenId": "",
"ItemColumnReferenId": "",
"DeviceTypeColumnReferenId": ""
}
}
Loading…
Cancel
Save