一楼中储仓下发二楼出库策略优化,bug

This commit is contained in:
2024-07-01 17:45:36 +08:00
parent fd42810269
commit 8c66d5c45c
7 changed files with 160 additions and 58 deletions

View File

@@ -986,9 +986,11 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
catch (Exception ex) catch (Exception ex)
{ {
// 测试代码 无问题后期删 // 测试代码 无问题后期删
if (ex.Message.Contains("Connection is busy")) if (ex.Message.Contains("Connection is busy") || ex.Message.Contains("Exception while reading from stream"))
{ {
db_Floor2UpMachinecodetimer = db_Floor2UpMachinecodetimer.CopyNew(); LoggerFloor2UpDownMachine.LogError("【测试】重置连接");
db_Floor2UpMachinecodetimer.Close();
db_Floor2UpMachinecodetimer = _repository.CopyNew();
} }
LoggerFloor2UpDownMachine.LogError(ex.ToString()); LoggerFloor2UpDownMachine.LogError(ex.ToString());
@@ -1039,12 +1041,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
List<string> configs_upMachine = new List<string>(); List<string> configs_upMachine = new List<string>();
if (await GetBoolTag("东面提升机输送线", $"上升降机请求送空托1")) if (await GetBoolTag("东面提升机输送线", $"上升降机请求送空托1"))
{ {
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】上升降机请求送空托1 true"); LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】上升降机请求送空托1 true");
configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求送空托1"]); configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求送空托1"]);
} }
if (await GetBoolTag("东面提升机输送线", $"上升降机请求送空托2")) if (await GetBoolTag("东面提升机输送线", $"上升降机请求送空托2"))
{ {
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】上升降机请求送空托2 true"); LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】上升降机请求送空托2 true");
configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求送空托2"]); configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求送空托2"]);
} }
@@ -1164,12 +1166,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
List<string> configs_upMachine = new List<string>(); List<string> configs_upMachine = new List<string>();
if (await GetBoolTag("东面提升机输送线", $"下升降机请求送满托1")) if (await GetBoolTag("东面提升机输送线", $"下升降机请求送满托1"))
{ {
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】下升降机请求送满托1 true"); LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】下升降机请求送满托1 true");
configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求送满托1"]); configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求送满托1"]);
} }
if (await GetBoolTag("东面提升机输送线", $"下升降机请求送满托2")) if (await GetBoolTag("东面提升机输送线", $"下升降机请求送满托2"))
{ {
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】下升降机请求送满托2 true"); LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】下升降机请求送满托2 true");
configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求送满托2"]); configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求送满托2"]);
} }
@@ -1329,12 +1331,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
List<string> configs_upMachine = new List<string>(); List<string> configs_upMachine = new List<string>();
if (await GetBoolTag("东面提升机输送线", $"上升降机请求取满托1")) if (await GetBoolTag("东面提升机输送线", $"上升降机请求取满托1"))
{ {
LoggerFloor2RackDelivery.LogError($"【移走上升降区未生成预任务且满托的料架】上升降机请求取满托1 true"); LoggerFloor2RackDelivery.LogInformation($"【移走上升降区未生成预任务且满托的料架】上升降机请求取满托1 true");
configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求取满托1"]); configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求取满托1"]);
} }
if (await GetBoolTag("东面提升机输送线", $"上升降机请求取满托2")) if (await GetBoolTag("东面提升机输送线", $"上升降机请求取满托2"))
{ {
LoggerFloor2RackDelivery.LogError($"【移走上升降区未生成预任务且满托的料架】上升降机请求取满托2 true"); LoggerFloor2RackDelivery.LogInformation($"【移走上升降区未生成预任务且满托的料架】上升降机请求取满托2 true");
configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求取满托2"]); configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求取满托2"]);
} }
@@ -1435,13 +1437,13 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
List<string> configs_upMachine = new List<string>(); List<string> configs_upMachine = new List<string>();
if (await GetBoolTag("东面提升机输送线", $"下升降机请求取空托1")) if (await GetBoolTag("东面提升机输送线", $"下升降机请求取空托1"))
{ {
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】下升降机请求取空托1 true"); LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】下升降机请求取空托1 true");
configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求取空托1"]); configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求取空托1"]);
} }
if (await GetBoolTag("东面提升机输送线", $"下升降机请求取空托2")) if (await GetBoolTag("东面提升机输送线", $"下升降机请求取空托2"))
{ {
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】下升降机请求取空托2 true"); LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】下升降机请求取空托2 true");
configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求取空托2"]); configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求取空托2"]);
} }
@@ -1455,13 +1457,13 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
//await db.BeginTranAsync(); //await db.BeginTranAsync();
// 读取下升降机的左右料架区配置 // 读取下升降机的左右料架区配置
await db_Floor2timer移走下升降区未生成预任务且空托的料架.Ado.BeginTranAsync();
List<WmsMechanicalArmH> WmsMechanicalArmHs = db_Floor2timer移走下升降区未生成预任务且空托的料架.Queryable<WmsMechanicalArmH>().Where(r => !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList(); List<WmsMechanicalArmH> WmsMechanicalArmHs = db_Floor2timer移走下升降区未生成预任务且空托的料架.Queryable<WmsMechanicalArmH>().Where(r => !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList();
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs) foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
{ {
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成 {wmsMechanicalArmH.location_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}"); LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成 {wmsMechanicalArmH.location_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
await db_Floor2timer移走下升降区未生成预任务且空托的料架.Ado.BeginTranAsync();
await db_Floor2timer移走下升降区未生成预任务且空托的料架.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH await db_Floor2timer移走下升降区未生成预任务且空托的料架.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
{ {
iscreatepretask = 1 iscreatepretask = 1
@@ -1506,8 +1508,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}"); LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}");
throw new Exception($"【移走下升降区空托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}"); throw new Exception($"【移走下升降区空托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}");
} }
await db_Floor2timer移走下升降区未生成预任务且空托的料架.Ado.CommitTranAsync();
} }
await db_Floor2timer移走下升降区未生成预任务且空托的料架.Ado.CommitTranAsync();
} }
} }
catch (Exception ex) catch (Exception ex)

View File

@@ -0,0 +1,54 @@
namespace Tnb.WarehouseMgr.Entities.Dto
{
public class OutStockStrategyZCC2Floor2Query
{
/// <summary>
/// 仓库Id
/// </summary>
public string warehouse_id { get; set; }
/// <summary>
/// 载具Id
/// </summary>
public string carry_id { get; set; }
/// <summary>
/// 载具规格Id
/// </summary>
public string carrystd_id { get; set; }
/// <summary>
/// 物料Id
/// </summary>
public string material_id { get; set; }
/// <summary>
/// 批次
/// </summary>
public string code_batch { get; set; }
/// <summary>
/// 业务类型s
/// </summary>
public int BllType { get; set; }
public int Size { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal qty { get; set; }
/// <summary>
/// 规格型号
/// </summary>
public string? material_specification { get; set; }
/// <summary>
/// 箱号
/// </summary>
public string? container_no { get; set; }
/// <summary>
///
/// </summary>
public decimal? needOut { get; set; }
/// <summary>
///
/// </summary>
public string? material_code { get; set; }
}
}

View File

@@ -46,7 +46,7 @@ namespace Tnb.WarehouseMgr.Interfaces
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="AppFriendlyException"></exception> /// <exception cref="AppFriendlyException"></exception>
Task<List<WmsCarryH>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyQuery input); Task<List<Tuple<WmsCarryH, decimal, BasLocation>>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyZCC2Floor2Query input);
/// <summary> /// <summary>
/// 出库策略-销售出库下发 /// 出库策略-销售出库下发

View File

@@ -456,6 +456,7 @@ namespace Tnb.WarehouseMgr
.Select<WmsCarryH>() .Select<WmsCarryH>()
.ToListAsync(); .ToListAsync();
items = items.Distinct().ToList(); items = items.Distinct().ToList();
return input.Size > 0 ? items.Take(input.Size).ToList() : items; return input.Size > 0 ? items.Take(input.Size).ToList() : items;
} }
@@ -466,7 +467,7 @@ namespace Tnb.WarehouseMgr
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="AppFriendlyException"></exception> /// <exception cref="AppFriendlyException"></exception>
public async Task<List<WmsCarryH>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyQuery input) public async Task<List<Tuple<WmsCarryH, decimal, BasLocation>>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyZCC2Floor2Query input)
{ {
Expressionable<WmsCarryH, WmsCarryCode, BasLocation> whereExprable = Expressionable.Create<WmsCarryH, WmsCarryCode, BasLocation>() Expressionable<WmsCarryH, WmsCarryCode, BasLocation> whereExprable = Expressionable.Create<WmsCarryH, WmsCarryCode, BasLocation>()
.And((a, b, c) => a.is_lock == 0 && c.is_lock == 0) .And((a, b, c) => a.is_lock == 0 && c.is_lock == 0)
@@ -492,17 +493,72 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException("没有可用策略", 500); throw new AppFriendlyException("没有可用策略", 500);
} }
List<WmsCarryH> items = await cyDb.Queryable<WmsCarryH>().LeftJoin<WmsCarryCode>((a, b) => a.id == b.carry_id) #region 60 59 60 6018060 60 60
var itemsASC = await cyDb.Queryable<WmsCarryH>().LeftJoin<WmsCarryCode>((a, b) => a.id == b.carry_id)
.LeftJoin<BasLocation>((a, b, c) => a.location_id == c.id) .LeftJoin<BasLocation>((a, b, c) => a.location_id == c.id)
.Where(whereExpr) .Where(whereExpr)
//.OrderByIF((a,b,c)=>SqlFunc.IsNullOrEmpty()) //.OrderByIF((a,b,c)=>SqlFunc.IsNullOrEmpty())
.OrderBy(policy.policy) //.OrderBy(policy.policy)
.OrderBy("codeqty desc,a.location_code,layers,loc_line,loc_column")
.Select<WmsCarryH>() .Select((a, b) => new { wmsCarryH = a, wmsCarryCode = b })
.ToListAsync(); .ToListAsync();
//items = itemsASC.Count < itemsDESC.Count ? itemsASC : itemsDESC;
items = items.Distinct().ToList(); itemsASC = itemsASC.Distinct().ToList();
return input.Size > 0 ? items.Take(input.Size).ToList() : items;
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = new List<Tuple<WmsCarryH, decimal, BasLocation>>();
for (int i = 0; i < itemsASC.Count; i++)
{
WmsCarryH wmsCarryH = itemsASC[i].wmsCarryH;
WmsCarryCode wmsCarryCode = itemsASC[i].wmsCarryCode;
if (input.needOut <= 0)
{
break;
}
// 查找是否有一个料箱可以正好满足剩余需求数量(目前只做这个额外判断,其它情形不考虑)
bool isFind = false;
for (int j = i + 1; j < itemsASC.Count; j++)
{
WmsCarryCode _wmsCarryCode = itemsASC[j].wmsCarryCode;
if (_wmsCarryCode.codeqty == input.needOut)
{
WmsCarryH _wmsCarryH = itemsASC[j].wmsCarryH;
BasLocation _endlocation_ssx = await _db.Queryable<BasLocation>().Where(r => new string[2] { "32609229889045", "32609238573589" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
await _db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => _endlocation_ssx.id == it.id).ExecuteCommandAsync();
carrys.Add(new Tuple<WmsCarryH, decimal, BasLocation>(_wmsCarryH, _wmsCarryCode.codeqty, _endlocation_ssx));
isFind = true;
break;
}
}
if (isFind)
break;
// 目前只支持一个料箱只有一个物料
input.needOut -= wmsCarryCode.codeqty;
BasLocation endlocation_ssx = await _db.Queryable<BasLocation>().Where(r => new string[2] { "32609229889045", "32609238573589" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
await _db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
carrys.Add(new Tuple<WmsCarryH, decimal, BasLocation>(wmsCarryH, wmsCarryCode.codeqty, endlocation_ssx));
}
#endregion
if (input.needOut > 0)
{
throw new AppFriendlyException($"物料{input.material_code}没有足够的库存!,缺失数量为{input.needOut}", 500);
}
return carrys;
} }
/// <summary> /// <summary>
@@ -2982,6 +3038,8 @@ namespace Tnb.WarehouseMgr
{ {
Logger.LogInformation($"【CommonCreatePretask】 {ex.Message}"); Logger.LogInformation($"【CommonCreatePretask】 {ex.Message}");
Logger.LogInformation($"【CommonCreatePretask】 {ex.StackTrace}"); Logger.LogInformation($"【CommonCreatePretask】 {ex.StackTrace}");
if (!db.Ado.Transaction.IsNull())
await db.Ado.CommitTranAsync();
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message); return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
} }
finally finally

View File

@@ -142,14 +142,6 @@ namespace Tnb.WarehouseMgr
WmsCarryH? carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carry_id); WmsCarryH? carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carry_id);
if (carry != null) if (carry != null)
{ {
int row = await _db.Deleteable<WmsCarryD>().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
isOk = row > 0;
if (!isOk)
{
throw new Exception($"料架id{input.carry_id}载具解绑失败");
}
// 插入子载具绑定记录 // 插入子载具绑定记录
//VisualDevModelDataCrInput visualDevModelCrInput = new() { data = new Dictionary<string, object>() }; //VisualDevModelDataCrInput visualDevModelCrInput = new() { data = new Dictionary<string, object>() };
@@ -167,6 +159,17 @@ namespace Tnb.WarehouseMgr
//VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSCARRYUNBIND_ID, true); //VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSCARRYUNBIND_ID, true);
//await _runService.Create(templateEntity, visualDevModelCrInput); //await _runService.Create(templateEntity, visualDevModelCrInput);
int row = await _db.Deleteable<WmsCarryD>().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
//isOk = row > 0;
//if (!isOk)
//{
// throw new Exception($"料架id{input.carry_id}载具解绑失败");
//}
Logger.LogInformation($"【CarryUnbind】料架{carry.carry_code}已解绑,解绑条数{row}");
await _db.Ado.CommitTranAsync(); await _db.Ado.CommitTranAsync();
} }
else else

View File

@@ -651,37 +651,27 @@ namespace Tnb.WarehouseMgr
foreach (WmsMaterialTransferD wmsMaterialTransferD in wmsMaterialTransferds) foreach (WmsMaterialTransferD wmsMaterialTransferD in wmsMaterialTransferds)
{ {
//出库取起点,获取所有符合输入的载具规格的载具
OutStockStrategyQuery OutStockStrategyInput = new()
{
warehouse_id = "2",
material_id = wmsMaterialTransferD.material_id,
code_batch = wmsMaterialTransferD.code_batch
};
List<WmsCarryH>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput);
// 需要转库数量 // 需要转库数量
decimal? needOut = wmsMaterialTransferD.qty; decimal? needOut = wmsMaterialTransferD.qty;
foreach (WmsCarryH wmsCarryH in carrys) //出库取起点,获取所有符合输入的载具规格的载具
OutStockStrategyZCC2Floor2Query OutStockStrategyInput = new()
{ {
if (needOut <= 0) warehouse_id = "2",
{ material_id = wmsMaterialTransferD.material_id,
break; code_batch = wmsMaterialTransferD.code_batch,
} needOut = needOut,
material_code = wmsMaterialTransferD.material_code
List<WmsCarryCode> wmsCarryCodes = _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == wmsCarryH.id).ToList(); };
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput);
WmsCarryCode wmsCarryCode = wmsCarryCodes.First();
// 目前只支持一个料箱只有一个物料 foreach (var item in carrys)
foreach (WmsCarryCode _wmsCarryCode in wmsCarryCodes) {
{ WmsCarryH wmsCarryH = item.Item1;
needOut -= wmsCarryCode.codeqty; decimal codeqty = item.Item2;
} BasLocation endlocation_ssx = item.Item3;
BasLocation endlocation_ssx = await _db.Queryable<BasLocation>().Where(r => new string[2] { "32609229889045", "32609238573589" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
await _db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
// 转库单载具子表 // 转库单载具子表
WmsMaterialTransferCarry wmsMaterialTransferCarry = new WmsMaterialTransferCarry(); WmsMaterialTransferCarry wmsMaterialTransferCarry = new WmsMaterialTransferCarry();
@@ -695,14 +685,9 @@ namespace Tnb.WarehouseMgr
wmsMaterialTransferCarry.startlocation_id = wmsCarryH.location_id; wmsMaterialTransferCarry.startlocation_id = wmsCarryH.location_id;
wmsMaterialTransferCarry.startlocation_code = wmsCarryH.location_code; wmsMaterialTransferCarry.startlocation_code = wmsCarryH.location_code;
wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id; wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id;
wmsMaterialTransferCarry.qty = wmsCarryCode.codeqty; wmsMaterialTransferCarry.qty = codeqty;
wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry); wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry);
} }
if (needOut > 0)
{
throw new AppFriendlyException($"物料{wmsMaterialTransferD.material_code}没有足够的库存!,缺失数量为{needOut}", 500);
}
} }
await _db.Ado.BeginTranAsync(); await _db.Ado.BeginTranAsync();

View File

@@ -20,7 +20,7 @@
//Oracle //Oracle
//"DefaultConnection": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1}))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME={2})));User Id={3};Password={4}" //"DefaultConnection": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1}))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME={2})));User Id={3};Password={4}"
//PostgreSQL //PostgreSQL
"DefaultConnection": "server={0};port={1};database={2};uid={3};pwd={4};pooling=true;" "DefaultConnection": "server={0};port={1};database={2};uid={3};pwd={4};pooling=true;KeepAlive=60;ConnectionLifetime=300"
//MySql //MySql
//"DefaultConnection": "server={0};port={1};database={2};uid={3};pwd={4};sslmode=none;pooling=true;charset=utf8mb4;allowLoadLocalInfile=true;allowPublicKeyRetrieval=true" //"DefaultConnection": "server={0};port={1};database={2};uid={3};pwd={4};sslmode=none;pooling=true;charset=utf8mb4;allowLoadLocalInfile=true;allowPublicKeyRetrieval=true"
} }