|
|
using Microsoft.Extensions.Configuration;using Shentun.Peis.Enums;using Shentun.Peis.Models;using Shentun.Peis.PlugIns;using Shentun.Peis.SysParmValues;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;using Volo.Abp;using Volo.Abp.Domain.Repositories;using Volo.Abp.Domain.Services;
namespace Shentun.Peis.ChargeRequests{ public class ChargeRequestManager : DomainService { private readonly IRepository<ChargeRequest, Guid> _repository; private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository; private readonly IRepository<PrimarykeyBuilder> _primarykeyBuilderRepository; private readonly SysParmValueManager _sysParmValueManager; private readonly IRepository<ThirdInterface, Guid> _thirdInterfaceRepository; public ChargeRequestManager(IRepository<ChargeRequest, Guid> repository, IRepository<PrimarykeyBuilder> primarykeyBuilderRepository, SysParmValueManager sysParmValueManager, IRepository<PatientRegister, Guid> patientRegisterRepository, IRepository<ThirdInterface, Guid> thirdInterfaceRepository) { _repository = repository; _primarykeyBuilderRepository = primarykeyBuilderRepository; _sysParmValueManager = sysParmValueManager; _patientRegisterRepository = patientRegisterRepository; _thirdInterfaceRepository = thirdInterfaceRepository;
} /// <summary>
/// 创建
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<ChargeRequest> CreateAsync( ChargeRequest entity ) { var patientRegister = await _patientRegisterRepository.GetAsync( entity.PatientRegisterId ); return new ChargeRequest( GuidGenerator.Create() ) { PatientRegisterId = entity.PatientRegisterId, HisChargeNo = entity.HisChargeNo, ChargeRequestNo = await CreateChargeRequestNo(patientRegister.MedicalCenterId), ChargeRequestFlag = ChargeRequestFlag.Request, }; }
public async Task SendThirChargeRequestAsync(Guid id) { var thirdInterfaces = (await _thirdInterfaceRepository.GetListAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ChargeRequest)) .OrderBy(o => o.DisplayOrder).ToList(); foreach (var thirdInterface in thirdInterfaces) { var chargeRequestPlugInsInput = new ChargeRequestPlugInsInput() { ChargeRequestId = id };
var parmValue = thirdInterface.ParmValue; var configurationBuilder = new ConfigurationBuilder() .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); var config = configurationBuilder.Build(); var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value; var className = config.GetSection("Interface").GetSection("ClassName").Value; object[] objects = new object[] { chargeRequestPlugInsInput }; var chargeRequestPluginsOut = await InvokeAsync(assemblyName, className, parmValue, "SendRequest", objects); } }
private async Task<ChargeRequestPlugInsOut> InvokeAsync(string assemblyName, string className, string classConstructorArg, string methodName, object[] args = null) { Assembly assembly = Assembly.Load(assemblyName); Type type = assembly.GetType(className); // 创建类的实例
object instance = Activator.CreateInstance(type, classConstructorArg); // 获取方法信息
MethodInfo method = type.GetMethod(methodName); // 调用方法,如果方法需要参数,可以传入对应的参数数组,例如: new object[] { arg1, arg2 }
ChargeRequestPlugInsOut returnValue; var isAsync = (method.ReturnType == typeof(Task) || (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>))); if (isAsync) { // 使用反射调用方法
//object returnValue = method.Invoke(instance, args);
returnValue = await (Task<ChargeRequestPlugInsOut>)method.Invoke(instance, args); } else { returnValue = (ChargeRequestPlugInsOut)method.Invoke(instance, args);
} return returnValue; } private async Task<string> CreateChargeRequestNo(Guid medicalCenterId) { string LisRequestNo = ""; //条码号
string request_no_rule_coding = "0"; // 模式(0 日期+尾号 1.顺序递增)
string request_no_rule_tail_len = "4"; //尾号长度
string request_no_rule_prefix = "T"; //前缀
request_no_rule_coding = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "charge_request_no_rule_coding"); request_no_rule_tail_len = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "charge_request_no_rule_tail_len"); request_no_rule_prefix = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "charge_request_no_rule_prefix"); if (string.IsNullOrWhiteSpace(request_no_rule_coding)) { throw new UserFriendlyException("收费申请单号编码方式不能为空"); } if (string.IsNullOrWhiteSpace(request_no_rule_tail_len)) { throw new UserFriendlyException("收费申请单号编码尾号长度不能为空"); } int tailLen = 0; if (!int.TryParse(request_no_rule_tail_len, out tailLen)) { throw new UserFriendlyException("收费申请单号编码尾号长度不能为空"); } if (tailLen < 3) { throw new UserFriendlyException("收费申请单号编码尾号长度至少为3位"); } if (string.IsNullOrWhiteSpace(request_no_rule_prefix)) { request_no_rule_prefix = ""; } var primarykeyBuilderEnt = await _primarykeyBuilderRepository.FirstOrDefaultAsync(f => f.PrimarykeyBuilderId == "lis_request_no");
string maxnum = "1"; string date = DateTime.Now.ToString("yyyyMMdd");// 当天
if (request_no_rule_coding == "0") { //日期+尾号
#region 模式0 日期+尾号
if (primarykeyBuilderEnt != null) { if (primarykeyBuilderEnt.DateString != date) { //新的日期 为1 maxnum
primarykeyBuilderEnt.DateString = date; } else { maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString(); } primarykeyBuilderEnt.SerialNo = maxnum; //更新新的序列号
LisRequestNo = request_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(request_no_rule_tail_len), '0');
await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt); } else { //初始写入
LisRequestNo = request_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(request_no_rule_tail_len), '0');
primarykeyBuilderEnt = new PrimarykeyBuilder { PrimarykeyBuilderId = "charge_request_no", DateString = date, SerialNo = maxnum };
await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt,true); } #endregion
} else { //模式1 顺序递增
#region 模式1 顺序递增
if (primarykeyBuilderEnt != null) { maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString(); primarykeyBuilderEnt.SerialNo = maxnum; //更新num
await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt); } else { //初始写入
primarykeyBuilderEnt = new PrimarykeyBuilder { PrimarykeyBuilderId = "charge_request_no", DateString = "", SerialNo = maxnum };
await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt,true); }
LisRequestNo = request_no_rule_prefix + maxnum.PadLeft(Convert.ToInt32(request_no_rule_tail_len), '0'); #endregion
}
return LisRequestNo;
} }}
|