Browse Source

事务冲突

master
wxd 3 months ago
parent
commit
0ce5149366
  1. 121
      src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs
  2. 172
      src/Shentun.Peis.Application/LisRequests/LisRequestAppService.cs
  3. 17
      src/Shentun.Peis.Application/PrintReports/PrintReportAppService.cs

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

@ -68,73 +68,76 @@ namespace Shentun.Peis.ChargeRequests
{ {
throw new UserFriendlyException("input参数不能为空"); throw new UserFriendlyException("input参数不能为空");
} }
var chargeRequest = new ChargeRequest();
var patientRegisterEnt = await _patientRegisterRepository.FirstOrDefaultAsync(f => f.Id == input.PatientRegisterId);
if (patientRegisterEnt == null)
throw new UserFriendlyException("人员不存在");
var isThirdInterface = await _thirdInterfaceRepository.CountAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ChargeRequest
&& o.MedicalCenterId == patientRegisterEnt.MedicalCenterId && o.IsActive == 'Y');
if (isThirdInterface == 0)
return null;
var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
join asbitem in await _asbitemRepository.GetQueryableAsync()
on registerCheckAsbitem.AsbitemId equals asbitem.Id
where registerCheck.PatientRegisterId == input.PatientRegisterId &&
input.RegisterCheckAsbitems.Select(o => o.RegisterCheckAsbitemId)
.Contains(registerCheckAsbitem.Id)
select new
{
registerCheckAsbitem,
asbitem
}).ToList();
var chargeRequestSource = new ChargeRequest()
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{ {
PatientRegisterId = input.PatientRegisterId
};
var chargeRequest = await _chargeRequestManager.CreateAsync(chargeRequestSource);
//更新登记组合项目
foreach (var item in list)
{
if (item.registerCheckAsbitem.ChargeRequestId != null)
var patientRegisterEnt = await _patientRegisterRepository.FirstOrDefaultAsync(f => f.Id == input.PatientRegisterId);
if (patientRegisterEnt == null)
throw new UserFriendlyException("人员不存在");
var isThirdInterface = await _thirdInterfaceRepository.CountAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ChargeRequest
&& o.MedicalCenterId == patientRegisterEnt.MedicalCenterId && o.IsActive == 'Y');
if (isThirdInterface == 0)
return null;
var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
join asbitem in await _asbitemRepository.GetQueryableAsync()
on registerCheckAsbitem.AsbitemId equals asbitem.Id
where registerCheck.PatientRegisterId == input.PatientRegisterId &&
input.RegisterCheckAsbitems.Select(o => o.RegisterCheckAsbitemId)
.Contains(registerCheckAsbitem.Id)
select new
{
registerCheckAsbitem,
asbitem
}).ToList();
var chargeRequestSource = new ChargeRequest()
{ {
var haveChargeRequest = await _chargeRequestRepository.GetAsync((Guid)item.registerCheckAsbitem.ChargeRequestId);
if (haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.ChargeRequest ||
haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.CancelChargeRequest ||
haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.RefundRequest)
PatientRegisterId = input.PatientRegisterId
};
chargeRequest = await _chargeRequestManager.CreateAsync(chargeRequestSource);
//更新登记组合项目
foreach (var item in list)
{
if (item.registerCheckAsbitem.ChargeRequestId != null)
{ {
throw new UserFriendlyException($"{item.asbitem.DisplayName}已经处于收费、作废、退费申请状态");
var haveChargeRequest = await _chargeRequestRepository.GetAsync((Guid)item.registerCheckAsbitem.ChargeRequestId);
if (haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.ChargeRequest ||
haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.CancelChargeRequest ||
haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.RefundRequest)
{
throw new UserFriendlyException($"{item.asbitem.DisplayName}已经处于收费、作废、退费申请状态");
}
} }
item.registerCheckAsbitem.ChargeRequestId = chargeRequest.Id;
await _registerCheckAsbitemRepository.UpdateAsync(item.registerCheckAsbitem);
} }
item.registerCheckAsbitem.ChargeRequestId = chargeRequest.Id;
await _registerCheckAsbitemRepository.UpdateAsync(item.registerCheckAsbitem);
}
//插入申请单信息
chargeRequest = await _chargeRequestRepository.InsertAsync(chargeRequest);
foreach (var item in list)
{
var chargeRequestAsbitemSource = new ChargeRequestAsbitem()
//插入申请单信息
chargeRequest = await _chargeRequestRepository.InsertAsync(chargeRequest);
foreach (var item in list)
{ {
ChargeRequestId = chargeRequest.Id,
AsbitemId = item.registerCheckAsbitem.AsbitemId,
RegisterCheckAsbitemId = item.registerCheckAsbitem.Id,
Amount = item.registerCheckAsbitem.Amount,
ChargePrice = item.registerCheckAsbitem.ChargePrice,
IsCharge = 'N'
};
var chargeRequestAsbitem = await _chargeRequestAsbitemManager.CreateAsync(chargeRequestAsbitemSource);
await _chargeRequestAsbitemRepository.InsertAsync(chargeRequestAsbitem);
var chargeRequestAsbitemSource = new ChargeRequestAsbitem()
{
ChargeRequestId = chargeRequest.Id,
AsbitemId = item.registerCheckAsbitem.AsbitemId,
RegisterCheckAsbitemId = item.registerCheckAsbitem.Id,
Amount = item.registerCheckAsbitem.Amount,
ChargePrice = item.registerCheckAsbitem.ChargePrice,
IsCharge = 'N'
};
var chargeRequestAsbitem = await _chargeRequestAsbitemManager.CreateAsync(chargeRequestAsbitemSource);
await _chargeRequestAsbitemRepository.InsertAsync(chargeRequestAsbitem);
}
//await _unitOfWorkManager.Current.SaveChangesAsync();
await uow.CompleteAsync();
//await UnitOfWorkManager.Current.SaveChangesAsync();
//await UnitOfWorkManager.Current.CompleteAsync();
} }
await _unitOfWorkManager.Current.SaveChangesAsync();
await _unitOfWorkManager.Current.CompleteAsync();
//await UnitOfWorkManager.Current.SaveChangesAsync();
//await UnitOfWorkManager.Current.CompleteAsync();
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
using (var unitOfWork = _unitOfWorkManager.Begin(requiresNew: false, isTransactional: false))
{ {
await _chargeRequestManager.SendThirChargeRequestAsync(chargeRequest.Id, "SendChargeRequestAsync"); await _chargeRequestManager.SendThirChargeRequestAsync(chargeRequest.Id, "SendChargeRequestAsync");
await unitOfWork.CompleteAsync(); await unitOfWork.CompleteAsync();

172
src/Shentun.Peis.Application/LisRequests/LisRequestAppService.cs

@ -653,104 +653,104 @@ namespace Shentun.Peis.LisRequests
//生成LIS条码 //生成LIS条码
var lisRequests = await _lisRequestManager.SetLisRequestAsync(patientRegisterId); var lisRequests = await _lisRequestManager.SetLisRequestAsync(patientRegisterId);
await _unitOfWorkManager.Current.SaveChangesAsync();
await _unitOfWorkManager.Current.CompleteAsync();
//await _unitOfWorkManager.Current.SaveChangesAsync();
//await _unitOfWorkManager.Current.CompleteAsync();
using (var uow = _unitOfWorkManager.Begin(
requiresNew: false, isTransactional: false
))
// using (var uow = _unitOfWorkManager.Begin(
// requiresNew: false, isTransactional: false
//))
// {
if (lisRequestNoPrintMode == "0")
{ {
if (lisRequestNoPrintMode == "0")
var query = (from lisRequest in await _lisRequestRepository.GetQueryableAsync()
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on lisRequest.Id equals registerCheckAsbitem.LisRequestId
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on registerCheckAsbitem.RegisterCheckId equals registerCheck.Id
join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on registerCheck.PatientRegisterId equals patientRegister.Id
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
where lisRequest.LisRequestNo == input.LisRequestNo
select new
{
lisRequest,
registerCheckAsbitem,
asbitem,
registerCheck,
patientRegister,
patient
}).ToList();
if (query.Count == 0)
{ {
var query = (from lisRequest in await _lisRequestRepository.GetQueryableAsync()
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on lisRequest.Id equals registerCheckAsbitem.LisRequestId
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on registerCheckAsbitem.RegisterCheckId equals registerCheck.Id
join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on registerCheck.PatientRegisterId equals patientRegister.Id
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
where lisRequest.LisRequestNo == input.LisRequestNo
select new
{
lisRequest,
registerCheckAsbitem,
asbitem,
registerCheck,
patientRegister,
patient
}).ToList();
if (query.Count == 0)
{
throw new UserFriendlyException("检验单号不存在");
}
throw new UserFriendlyException("检验单号不存在");
}
var patientRegisterGroup = query.GroupBy(g => g.patientRegister);
var patientRegisterGroup = query.GroupBy(g => g.patientRegister);
var resultDto = new LisPatientRegisterDto
var resultDto = new LisPatientRegisterDto
{
Age = patientRegisterGroup.FirstOrDefault().Key.Age,
LisRequestNo = input.LisRequestNo,
PatientName = patientRegisterGroup.FirstOrDefault().Key.PatientName,
SexName = _cacheService.GetSexNameAsync(patientRegisterGroup.FirstOrDefault().Key.SexId).Result,
SampleTypeName = _cacheService.GetSampleTypeNameAsync(patientRegisterGroup.FirstOrDefault().FirstOrDefault().lisRequest.SampleTypeId).Result,
AsbitemDetail = patientRegisterGroup.FirstOrDefault().Select(ss => new LisPatientRegisterDetailDto
{ {
Age = patientRegisterGroup.FirstOrDefault().Key.Age,
LisRequestNo = input.LisRequestNo,
PatientName = patientRegisterGroup.FirstOrDefault().Key.PatientName,
SexName = _cacheService.GetSexNameAsync(patientRegisterGroup.FirstOrDefault().Key.SexId).Result,
SampleTypeName = _cacheService.GetSampleTypeNameAsync(patientRegisterGroup.FirstOrDefault().FirstOrDefault().lisRequest.SampleTypeId).Result,
AsbitemDetail = patientRegisterGroup.FirstOrDefault().Select(ss => new LisPatientRegisterDetailDto
{
AsbitemId = ss.registerCheckAsbitem.AsbitemId,
AsbitemName = ss.asbitem.DisplayName,
AsbitemPrice = ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount
}).ToList()
};
AsbitemId = ss.registerCheckAsbitem.AsbitemId,
AsbitemName = ss.asbitem.DisplayName,
AsbitemPrice = ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount
}).ToList()
};
return resultDto;
}
else
return resultDto;
}
else
{
//人员条码模式
var query = (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
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 lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id
where patientRegister.PatientRegisterNo == input.LisRequestNo
select new
{
registerCheckAsbitem,
asbitem,
registerCheck,
patientRegister,
patient,
lisRequest
}).ToList();
if (query.Count == 0)
{ {
//人员条码模式
var query = (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
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 lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id
where patientRegister.PatientRegisterNo == input.LisRequestNo
select new
{
registerCheckAsbitem,
asbitem,
registerCheck,
patientRegister,
patient,
lisRequest
}).ToList();
if (query.Count == 0)
{
throw new UserFriendlyException("人员条码号不存在");
}
throw new UserFriendlyException("人员条码号不存在");
}
var patientRegisterGroup = query.GroupBy(g => g.patientRegister);
var patientRegisterGroup = query.GroupBy(g => g.patientRegister);
var resultDto = new LisPatientRegisterDto
var resultDto = new LisPatientRegisterDto
{
Age = patientRegisterGroup.FirstOrDefault().Key.Age,
LisRequestNo = input.LisRequestNo,
PatientName = patientRegisterGroup.FirstOrDefault().Key.PatientName,
SexName = _cacheService.GetSexNameAsync(patientRegisterGroup.FirstOrDefault().Key.SexId).Result,
SampleTypeName = _cacheService.GetSampleTypeNameAsync(patientRegisterGroup.FirstOrDefault().FirstOrDefault().lisRequest.SampleTypeId).Result,
AsbitemDetail = patientRegisterGroup.FirstOrDefault().Select(ss => new LisPatientRegisterDetailDto
{ {
Age = patientRegisterGroup.FirstOrDefault().Key.Age,
LisRequestNo = input.LisRequestNo,
PatientName = patientRegisterGroup.FirstOrDefault().Key.PatientName,
SexName = _cacheService.GetSexNameAsync(patientRegisterGroup.FirstOrDefault().Key.SexId).Result,
SampleTypeName = _cacheService.GetSampleTypeNameAsync(patientRegisterGroup.FirstOrDefault().FirstOrDefault().lisRequest.SampleTypeId).Result,
AsbitemDetail = patientRegisterGroup.FirstOrDefault().Select(ss => new LisPatientRegisterDetailDto
{
AsbitemId = ss.registerCheckAsbitem.AsbitemId,
AsbitemName = ss.asbitem.DisplayName,
AsbitemPrice = ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount,
SamplingTime = DataHelper.ConversionDateToString(ss.lisRequest.SamplingTime)
}).ToList()
};
return resultDto;
}
AsbitemId = ss.registerCheckAsbitem.AsbitemId,
AsbitemName = ss.asbitem.DisplayName,
AsbitemPrice = ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount,
SamplingTime = DataHelper.ConversionDateToString(ss.lisRequest.SamplingTime)
}).ToList()
};
return resultDto;
} }
//}
} }

17
src/Shentun.Peis.Application/PrintReports/PrintReportAppService.cs

@ -310,10 +310,17 @@ namespace Shentun.Peis.PrintReports
[HttpPost("api/app/PrintReport/GetLisRequestReportByPatientRegisterId")] [HttpPost("api/app/PrintReport/GetLisRequestReportByPatientRegisterId")]
public async Task<List<LisRequestReportDto>> GetLisRequestReportByPatientRegisterIdAsync(PatientRegisterIdInputDto input) public async Task<List<LisRequestReportDto>> GetLisRequestReportByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
{ {
//生成LIS条码
var lisRequests = await _lisRequestManager.SetLisRequestAsync(input.PatientRegisterId);
await _unitOfWorkManager.Current.SaveChangesAsync();
await _unitOfWorkManager.Current.CompleteAsync();
var lisRequests = new List<LisRequest>();
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
//生成LIS条码
lisRequests = await _lisRequestManager.SetLisRequestAsync(input.PatientRegisterId);
//await _unitOfWorkManager.Current.SaveChangesAsync();
await uow.CompleteAsync();
}
var entlist = new List<LisRequestReportDto>(); var entlist = new List<LisRequestReportDto>();
@ -487,7 +494,7 @@ namespace Shentun.Peis.PrintReports
}).ToList(); }).ToList();
await uow.CompleteAsync(); await uow.CompleteAsync();
} }

Loading…
Cancel
Save