|
|
|
@ -2,6 +2,7 @@ |
|
|
|
using Microsoft.EntityFrameworkCore; |
|
|
|
using Shentun.Peis.Enums; |
|
|
|
using Shentun.Peis.Models; |
|
|
|
using Shentun.Peis.SysParmValues; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Linq; |
|
|
|
@ -21,14 +22,15 @@ namespace Shentun.Peis.LisRequests |
|
|
|
private readonly IRepository<SysParmValue> _sysParmValueRepository; |
|
|
|
private readonly IRepository<PrimarykeyBuilder> _primarykeyBuilderRepository; |
|
|
|
private readonly IRepository<LisRequest, Guid> _lisRequestRepository; |
|
|
|
|
|
|
|
private readonly SysParmValueManager _sysParmValueManager; |
|
|
|
public LisRequestManager( |
|
|
|
IRepository<RegisterCheckAsbitem, Guid> registerAsbitemeRepository, |
|
|
|
IRepository<SampleGroup, Guid> sampleGroupRepository, |
|
|
|
IRepository<SampleGroupDetail> sampleGroupDetailRepository, |
|
|
|
IRepository<SysParmValue> sysParmValueRepository, |
|
|
|
IRepository<PrimarykeyBuilder> primarykeyBuilderRepository, |
|
|
|
IRepository<LisRequest, Guid> lisRequestRepository |
|
|
|
IRepository<LisRequest, Guid> lisRequestRepository, |
|
|
|
SysParmValueManager sysParmValueManager |
|
|
|
) |
|
|
|
{ |
|
|
|
this._registerAsbitemeRepository = registerAsbitemeRepository; |
|
|
|
@ -37,6 +39,7 @@ namespace Shentun.Peis.LisRequests |
|
|
|
this._sysParmValueRepository = sysParmValueRepository; |
|
|
|
this._primarykeyBuilderRepository = primarykeyBuilderRepository; |
|
|
|
this._lisRequestRepository = lisRequestRepository; |
|
|
|
_sysParmValueManager = sysParmValueManager; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -55,71 +58,61 @@ namespace Shentun.Peis.LisRequests |
|
|
|
var registerAsbitemeList = (await _registerAsbitemeRepository.GetDbSetAsync()) |
|
|
|
.Include(x => x.Asbitem) |
|
|
|
.Include(x => x.PatientRegister) |
|
|
|
.Where(m => m.PatientRegisterId == PatientRegisterId) |
|
|
|
.Where(m => m.PatientRegisterId == PatientRegisterId && m.LisRequestId == null) |
|
|
|
.ToList(); |
|
|
|
|
|
|
|
|
|
|
|
if (registerAsbitemeList.Any()) |
|
|
|
//根据登记的组合ID 查找组合项目对应的条码分组
|
|
|
|
var sampleGroupDetailList = await _sampleGroupDetailRepository.GetListAsync(m => registerAsbitemeList.Select(s => s.AsbitemId).Contains(m.AsbitemId)); |
|
|
|
if (!sampleGroupDetailList.Any()) |
|
|
|
{ |
|
|
|
return msg; |
|
|
|
} |
|
|
|
|
|
|
|
if (registerAsbitemeList.Where(m => m.LisRequestId != null).Count() == 0) |
|
|
|
{ |
|
|
|
//根据登记的组合ID 查找组合项目对应的条码分组
|
|
|
|
var sampleGroupDetailList = await _sampleGroupDetailRepository.GetListAsync(m => registerAsbitemeList.Select(s => s.AsbitemId).Contains(m.AsbitemId)); |
|
|
|
if (sampleGroupDetailList.Any()) |
|
|
|
{ |
|
|
|
//查找条码分组信息 根据条码分组ID
|
|
|
|
var sampleGroupList = (await _sampleGroupRepository.GetDbSetAsync()) |
|
|
|
.Include(x => x.SampleContainer) |
|
|
|
.Include(x => x.SampleType) |
|
|
|
.Where(m => sampleGroupDetailList.Select(s => s.SampleGroupId).Contains(m.Id)); |
|
|
|
|
|
|
|
foreach (var sampleGroup in sampleGroupList) |
|
|
|
{ |
|
|
|
//根据条码分组生成,一个条码分组生成一个检验单
|
|
|
|
#region 生成检验申请单
|
|
|
|
|
|
|
|
var lisRequestEnt = new LisRequest |
|
|
|
{ |
|
|
|
IsPrint = 'N', |
|
|
|
IsSignIn = 'N', |
|
|
|
LisRequestNo = await CreateLisRequestNo(registerAsbitemeList.FirstOrDefault().PatientRegister.MedicalCenterId), |
|
|
|
SampleGroupId = sampleGroup.Id, |
|
|
|
//SampleContainerId = sampleGroup.SampleContainerId,
|
|
|
|
//SampleTypeId = sampleGroup.SampleTypeId
|
|
|
|
}; |
|
|
|
//查找条码分组信息 根据条码分组ID
|
|
|
|
var sampleGroupList = (await _sampleGroupRepository.GetDbSetAsync()) |
|
|
|
.Include(x => x.SampleContainer) |
|
|
|
.Include(x => x.SampleType) |
|
|
|
.Where(m => sampleGroupDetailList.Select(s => s.SampleGroupId).Contains(m.Id)); |
|
|
|
|
|
|
|
//生成检验申请单的新实体
|
|
|
|
var lisRequestEnt_New = await _lisRequestRepository.InsertAsync(lisRequestEnt, true); |
|
|
|
foreach (var sampleGroup in sampleGroupList) |
|
|
|
{ |
|
|
|
//根据条码分组生成,一个条码分组生成一个检验单
|
|
|
|
#region 生成检验申请单
|
|
|
|
|
|
|
|
msg.Add(lisRequestEnt_New); |
|
|
|
var lisRequestEnt = new LisRequest(GuidGenerator.Create()) |
|
|
|
{ |
|
|
|
IsPrint = 'N', |
|
|
|
IsSignIn = 'N', |
|
|
|
LisRequestNo = await CreateLisRequestNo(registerAsbitemeList.FirstOrDefault().PatientRegister.MedicalCenterId), |
|
|
|
SampleContainerId = sampleGroup.SampleContainerId, |
|
|
|
SampleTypeId = sampleGroup.SampleTypeId |
|
|
|
}; |
|
|
|
|
|
|
|
#region 修改RegisterAsbitem表 LisRequestId
|
|
|
|
//生成检验申请单的新实体
|
|
|
|
var lisRequestEnt_New = await _lisRequestRepository.InsertAsync(lisRequestEnt, true); |
|
|
|
|
|
|
|
//当前条码分组ID绑定的组合项目
|
|
|
|
var AsbitemIds = sampleGroupDetailList.Where(m => m.SampleGroupId == sampleGroup.Id).Select(s => s.AsbitemId); |
|
|
|
msg.Add(lisRequestEnt_New); |
|
|
|
|
|
|
|
//获取需要更新的RegisterAsbitem数据
|
|
|
|
var registerAsbitemeList_Update = await _registerAsbitemeRepository.GetListAsync(f => f.PatientRegisterId == PatientRegisterId && AsbitemIds.Contains(f.AsbitemId)); |
|
|
|
if (registerAsbitemeList_Update.Any()) |
|
|
|
{ |
|
|
|
//更新LisRequestId
|
|
|
|
registerAsbitemeList_Update.ForEach(m => m.LisRequestId = lisRequestEnt_New.Id); |
|
|
|
await _registerAsbitemeRepository.UpdateManyAsync(registerAsbitemeList_Update); |
|
|
|
} |
|
|
|
#region 修改RegisterAsbitem表 LisRequestId
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
//当前条码分组ID绑定的组合项目
|
|
|
|
var AsbitemIds = sampleGroupDetailList.Where(m => m.SampleGroupId == sampleGroup.Id).Select(s => s.AsbitemId); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
//获取需要更新的RegisterAsbitem数据
|
|
|
|
var registerAsbitemeList_Update = await _registerAsbitemeRepository.GetListAsync(f => |
|
|
|
f.PatientRegisterId == PatientRegisterId && AsbitemIds.Contains(f.AsbitemId) && f.LisRequestId == null); |
|
|
|
if (registerAsbitemeList_Update.Any()) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException("该人员已申请过检验申请单"); |
|
|
|
//更新LisRequestId
|
|
|
|
registerAsbitemeList_Update.ForEach(m => m.LisRequestId = lisRequestEnt_New.Id); |
|
|
|
await _registerAsbitemeRepository.UpdateManyAsync(registerAsbitemeList_Update); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
return msg; |
|
|
|
} |
|
|
|
@ -247,56 +240,40 @@ namespace Shentun.Peis.LisRequests |
|
|
|
/// 生成检验申请单条码号(规则,先找体检中心的配置,如未找到,就直接使用全局的)
|
|
|
|
/// 模式(0 日期+尾号 1.顺序递增)
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="OrganizationUnitId">体检中心ID</param>
|
|
|
|
/// <param name="medicalCenterId">体检中心ID</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<string> CreateLisRequestNo(Guid OrganizationUnitId) |
|
|
|
private async Task<string> CreateLisRequestNo(Guid medicalCenterId) |
|
|
|
{ |
|
|
|
string LisRequestNo = ""; //条码号
|
|
|
|
|
|
|
|
List<SysParmValue> spvlist = await _sysParmValueRepository.GetListAsync(); |
|
|
|
|
|
|
|
var spv_tjzx = spvlist.Where(m => m.MedicalCenterId == OrganizationUnitId); //体检中心配置
|
|
|
|
var spv_global = spvlist.Where(m => m.MedicalCenterId == Guid.Empty); //全局配置
|
|
|
|
|
|
|
|
var lis_request_no_rule_coding = "0"; // 模式(0 日期+尾号 1.顺序递增)
|
|
|
|
var lis_request_no_rule_tail_len = "4"; //尾号长度
|
|
|
|
var lis_request_no_rule_prefix_len = "T"; //前缀
|
|
|
|
|
|
|
|
|
|
|
|
if (spv_tjzx.Where(m => m.SysParmId == "lis_request_no_rule_coding").Count() > 0) |
|
|
|
{ |
|
|
|
//获取体检中心配置
|
|
|
|
lis_request_no_rule_coding = spv_tjzx.Where(m => m.SysParmId == "lis_request_no_rule_coding").FirstOrDefault().ParmValue; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
//获取全局配置
|
|
|
|
lis_request_no_rule_coding = spv_global.Where(m => m.SysParmId == "lis_request_no_rule_coding").FirstOrDefault().ParmValue; |
|
|
|
} |
|
|
|
//var spv_tjzx = spvlist.Where(m => m.MedicalCenterId == medicalCenterId); //体检中心配置
|
|
|
|
//var spv_global = spvlist.Where(m => m.MedicalCenterId == Guid.Empty); //全局配置
|
|
|
|
|
|
|
|
if (spv_tjzx.Where(m => m.SysParmId == "lis_request_no_rule_tail_len").Count() > 0) |
|
|
|
string lis_request_no_rule_coding = "0"; // 模式(0 日期+尾号 1.顺序递增)
|
|
|
|
string lis_request_no_rule_tail_len = "4"; //尾号长度
|
|
|
|
string lis_request_no_rule_prefix = "T"; //前缀
|
|
|
|
lis_request_no_rule_coding = await _sysParmValueManager.GetSysParmValue(medicalCenterId, "lis_request_no_rule_coding"); |
|
|
|
lis_request_no_rule_tail_len = await _sysParmValueManager.GetSysParmValue(medicalCenterId, "lis_request_no_rule_tail_len"); |
|
|
|
lis_request_no_rule_prefix = await _sysParmValueManager.GetSysParmValue(medicalCenterId, "lis_request_no_rule_prefix"); |
|
|
|
if(string.IsNullOrWhiteSpace(lis_request_no_rule_coding)) |
|
|
|
{ |
|
|
|
//获取体检中心配置
|
|
|
|
lis_request_no_rule_tail_len = spv_tjzx.Where(m => m.SysParmId == "lis_request_no_rule_tail_len").FirstOrDefault().ParmValue; |
|
|
|
throw new UserFriendlyException("LIS编码方式不能为空"); |
|
|
|
} |
|
|
|
else |
|
|
|
if (string.IsNullOrWhiteSpace(lis_request_no_rule_tail_len)) |
|
|
|
{ |
|
|
|
//获取全局配置
|
|
|
|
lis_request_no_rule_tail_len = spv_global.Where(m => m.SysParmId == "lis_request_no_rule_tail_len").FirstOrDefault().ParmValue; |
|
|
|
throw new UserFriendlyException("LIS编码尾号长度不能为空"); |
|
|
|
} |
|
|
|
|
|
|
|
if (spv_tjzx.Where(m => m.SysParmId == "lis_request_no_rule_prefix_len").Count() > 0) |
|
|
|
int i_lis_request_no_rule_tail_len = 0; |
|
|
|
if(!int.TryParse(lis_request_no_rule_tail_len, out i_lis_request_no_rule_tail_len)) |
|
|
|
{ |
|
|
|
//获取体检中心配置
|
|
|
|
lis_request_no_rule_prefix_len = spv_tjzx.Where(m => m.SysParmId == "lis_request_no_rule_prefix_len").FirstOrDefault().ParmValue; |
|
|
|
throw new UserFriendlyException("LIS编码尾号长度不能为空"); |
|
|
|
} |
|
|
|
else |
|
|
|
if (string.IsNullOrWhiteSpace(lis_request_no_rule_prefix)) |
|
|
|
{ |
|
|
|
//获取全局配置
|
|
|
|
lis_request_no_rule_prefix_len = spv_global.Where(m => m.SysParmId == "lis_request_no_rule_prefix_len").FirstOrDefault().ParmValue; |
|
|
|
lis_request_no_rule_prefix = ""; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var primarykeyBuilderEnt = await _primarykeyBuilderRepository.FirstOrDefaultAsync(f => f.PrimarykeyBuilderId == "lis_request_no"); |
|
|
|
|
|
|
|
|
|
|
|
@ -323,7 +300,7 @@ namespace Shentun.Peis.LisRequests |
|
|
|
} |
|
|
|
primarykeyBuilderEnt.SerialNo = maxnum; //更新新的序列号
|
|
|
|
|
|
|
|
LisRequestNo = lis_request_no_rule_prefix_len + date + maxnum.PadLeft(Convert.ToInt32(lis_request_no_rule_tail_len), '0'); |
|
|
|
LisRequestNo = lis_request_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(lis_request_no_rule_tail_len), '0'); |
|
|
|
|
|
|
|
await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt); |
|
|
|
} |
|
|
|
@ -331,7 +308,7 @@ namespace Shentun.Peis.LisRequests |
|
|
|
{ |
|
|
|
//初始写入
|
|
|
|
|
|
|
|
LisRequestNo = lis_request_no_rule_prefix_len + date + maxnum.PadLeft(Convert.ToInt32(lis_request_no_rule_tail_len), '0'); |
|
|
|
LisRequestNo = lis_request_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(lis_request_no_rule_tail_len), '0'); |
|
|
|
|
|
|
|
primarykeyBuilderEnt = new PrimarykeyBuilder |
|
|
|
{ |
|
|
|
@ -371,7 +348,7 @@ namespace Shentun.Peis.LisRequests |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
LisRequestNo = lis_request_no_rule_prefix_len + maxnum.PadLeft(Convert.ToInt32(lis_request_no_rule_tail_len), '0'); |
|
|
|
LisRequestNo = lis_request_no_rule_prefix + maxnum.PadLeft(Convert.ToInt32(lis_request_no_rule_tail_len), '0'); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
} |
|
|
|
|