This commit is contained in:
2024-04-11 15:04:11 +08:00
parent 1f909839d6
commit 5f16ca1abe
7 changed files with 77 additions and 15 deletions

View File

@@ -2,6 +2,7 @@
using System.Data; using System.Data;
using System.Dynamic; using System.Dynamic;
using System.Security.Policy; using System.Security.Policy;
using System.Text;
using Aop.Api.Domain; using Aop.Api.Domain;
using JNPF; using JNPF;
using JNPF.Common.Cache; using JNPF.Common.Cache;
@@ -193,6 +194,34 @@ namespace Tnb.ProductionMgr
} }
} }
} }
private static readonly Dictionary<LogLevel, string> s_logLevelMap = new()
{
[LogLevel.Debug] = "DBG",
[LogLevel.Information] = "INF",
[LogLevel.Warning] = "WRN",
[LogLevel.Error] = "ERR",
};
protected ILogger Logger => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/custom{DateTime.Now:yyyyMMdd}.log", cfgOpts =>
{
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
cfgOpts.MessageFormat = (logMsg) =>
{
var logLevel = s_logLevelMap[logMsg.LogLevel];
var sb = new StringBuilder();
_ = sb.Append($"[{logLevel}] ");
_ = sb.Append($"{logMsg.LogName} ");
_ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
_ = sb.Append($"#{logMsg.EventId.Id} ");
_ = sb.Append(logMsg.Message + " ");
_ = sb.Append(logMsg.Exception?.ToString());
return sb.ToString();
};
})).CreateLogger(this.GetType());
//扫码入库 //扫码入库
private void ScanInStock(object state) private void ScanInStock(object state)
{ {
@@ -207,9 +236,14 @@ namespace Tnb.ProductionMgr
bool flag = _redisData.HashExist(strs[0], strs[1]).Result; bool flag = _redisData.HashExist(strs[0], strs[1]).Result;
string data = _redisData.GetHash(strs[0], strs[1]).Result; string data = _redisData.GetHash(strs[0], strs[1]).Result;
JObject? res = JsonConvert.DeserializeObject<JObject>(data); JObject? res = JsonConvert.DeserializeObject<JObject>(data);
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false; bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
if (result) if (result)
{ {
Logger.LogInformation($"八工位扫到码发送入库请求:{res}");
Dictionary<string, string> dicCommand = new(StringComparer.OrdinalIgnoreCase) Dictionary<string, string> dicCommand = new(StringComparer.OrdinalIgnoreCase)
{ {
["DevName"] = strs[0], ["DevName"] = strs[0],
@@ -224,7 +258,7 @@ namespace Tnb.ProductionMgr
WmsCarryH? carry = _repository.AsSugarClient().Queryable<WmsCarryH>().Single(it => it.carry_code == coderesult); WmsCarryH? carry = _repository.AsSugarClient().Queryable<WmsCarryH>().Single(it => it.carry_code == coderesult);
if (carry != null) if (carry != null)
{ {
if (_repository.AsSugarClient().Queryable<WmsDistaskH>().Where(p => p.carry_id == carry.id && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID ).Any()) if (_repository.AsSugarClient().Queryable<WmsPretaskH>().Where(p => p.carry_id == carry.id && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID ).Any())
continue; continue;
var WmsCarryCode = _repository.AsSugarClient().Queryable<WmsCarryCode>().Single(it => it.carry_id == carry.id); var WmsCarryCode = _repository.AsSugarClient().Queryable<WmsCarryCode>().Single(it => it.carry_id == carry.id);
if (WmsCarryCode != null) if (WmsCarryCode != null)

View File

@@ -434,6 +434,8 @@ namespace Tnb.WarehouseMgr
{ {
_ = await _db.Deleteable(elevatorQueueItem).ExecuteCommandAsync(); _ = await _db.Deleteable(elevatorQueueItem).ExecuteCommandAsync();
} }
await _wareHouseService.SsxControl(disTask, "LOAD"); await _wareHouseService.SsxControl(disTask, "LOAD");
} }
else if (input.action == "UNLOAD") else if (input.action == "UNLOAD")

View File

@@ -247,6 +247,8 @@ namespace Tnb.WarehouseMgr
[AllowAnonymous] [AllowAnonymous]
public async Task CheckPut(CheckPutInput input) public async Task CheckPut(CheckPutInput input)
{ {
Logger.Information("联合请求CheckPut接口传入参数为:" + JsonConvert.SerializeObject(input));
Dictionary<string, string[]> putdic = new Dictionary<string, string[]>(); Dictionary<string, string[]> putdic = new Dictionary<string, string[]>();
putdic.Add("SSX-011-006", new string[] { "YTCS", "AllowEmptyIn_CS06" }); putdic.Add("SSX-011-006", new string[] { "YTCS", "AllowEmptyIn_CS06" });
@@ -269,10 +271,12 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException("点位" + input.targetName + "不存在", 500); throw new AppFriendlyException("点位" + input.targetName + "不存在", 500);
} }
string data = await _redisData.GetHash(strs[0], strs[1]); string data = await _redisData.GetHash(strs[0], strs[1]);
Logger.Information("联合请求CheckPut接口查询X2Server数据:" + data);
JObject? res = JsonConvert.DeserializeObject<JObject>(data); JObject? res = JsonConvert.DeserializeObject<JObject>(data);
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false; bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
if (!result) if (!result)
throw new AppFriendlyException("点位" + input.targetName + "不可放", 500); throw new AppFriendlyException("点位" + input.targetName + "不可放", 500);
Logger.Information("联合请求CheckPut接口结果CTU可放货" + data);
} }
/// <summary> /// <summary>
@@ -347,6 +351,8 @@ namespace Tnb.WarehouseMgr
} }
public async Task SsxControl(WmsDistaskH disTask, string action) public async Task SsxControl(WmsDistaskH disTask, string action)
{ {
Logger.Information($"输送线控制SsxControl传入参数: {JsonConvert.SerializeObject(disTask)} {action}");
Dictionary<string, string[]> putdic = new Dictionary<string, string[]>(); Dictionary<string, string[]> putdic = new Dictionary<string, string[]>();
Dictionary<string, string[]> getdic = new Dictionary<string, string[]>(); Dictionary<string, string[]> getdic = new Dictionary<string, string[]>();
getdic.Add("SSX-021-005", new string[] { "YTCS", "FullOut_CS05Done", "true" }); getdic.Add("SSX-021-005", new string[] { "YTCS", "FullOut_CS05Done", "true" });
@@ -393,7 +399,7 @@ namespace Tnb.WarehouseMgr
["TagName"] = strarr[1], ["TagName"] = strarr[1],
["Value"] = strarr[2], ["Value"] = strarr[2],
}; };
Logger.Information($"SsxControlLOAD:{dicCommand}"); Logger.Information($"SsxControlLOAD:{JsonConvert.SerializeObject(dicCommand)}");
var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand); var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
Logger.Information($"SsxControlLOAD:{str}"); Logger.Information($"SsxControlLOAD:{str}");
} }
@@ -448,6 +454,8 @@ namespace Tnb.WarehouseMgr
}, true) }, true)
.ToListAsync(); .ToListAsync();
//List<WmsPretaskH> executedPreTasks = await db.Queryable<WmsPretaskH>().Where(it => it.status != WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID && it.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID).ToListAsync(); //List<WmsPretaskH> executedPreTasks = await db.Queryable<WmsPretaskH>().Where(it => it.status != WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID && it.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID).ToListAsync();
List<WmsPretaskH> agvElevatorTasks = preTasks List<WmsPretaskH> agvElevatorTasks = preTasks
@@ -693,8 +701,11 @@ namespace Tnb.WarehouseMgr
List<WmsDistaskCode> DistaskCodes = new List<WmsDistaskCode>(); List<WmsDistaskCode> DistaskCodes = new List<WmsDistaskCode>();
var inCtuExec = new List<WmsDistaskH>(); var inCtuExec = new List<WmsDistaskH>();
var outCtuExec = new List<WmsDistaskH>(); var outCtuExec = new List<WmsDistaskH>();
foreach (var item in InTasks) foreach (var item in InTasks)
{ {
/* /*
if (indic.Keys.Contains(item.startlocation_code)) if (indic.Keys.Contains(item.startlocation_code))
{ {
@@ -708,8 +719,8 @@ namespace Tnb.WarehouseMgr
if (!result) if (!result)
continue; continue;
}*/ }*/
WmsDistaskH distaskH = item.Adapt<WmsDistaskH>(); WmsDistaskH distaskH = item.Adapt<WmsDistaskH>();
distaskH.id = SnowflakeIdHelper.NextId(); distaskH.id = SnowflakeIdHelper.NextId();
distaskH.status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID; distaskH.status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID;
distaskH.is_chain = 1; distaskH.is_chain = 1;
@@ -735,7 +746,11 @@ namespace Tnb.WarehouseMgr
inCtuExec.AddRange(DistaskHs.Where(p => p.groups == distaskH.groups).ToList()); inCtuExec.AddRange(DistaskHs.Where(p => p.groups == distaskH.groups).ToList());
} }
} }
List<WmsPretaskCode> preTaskCodes = TaskCodes.FindAll(x => x.bill_id == distaskH.pretask_id);
Logger.Information($"开始执行CTU入库任务: {JsonConvert.SerializeObject(distaskH)}");
List<WmsPretaskCode> preTaskCodes = TaskCodes.FindAll(x => x.bill_id == distaskH.pretask_id);
List<WmsDistaskCode> disTaskCodes = preTaskCodes.Adapt<List<WmsDistaskCode>>(); List<WmsDistaskCode> disTaskCodes = preTaskCodes.Adapt<List<WmsDistaskCode>>();
disTaskCodes.ForEach(x => disTaskCodes.ForEach(x =>
{ {
@@ -775,6 +790,8 @@ namespace Tnb.WarehouseMgr
outCtuExec.AddRange(DistaskHs.Where(p => p.groups == distaskH.groups).ToList()); outCtuExec.AddRange(DistaskHs.Where(p => p.groups == distaskH.groups).ToList());
} }
} }
Logger.Information($"开始执行CTU出库任务: {JsonConvert.SerializeObject(distaskH)}");
List<WmsPretaskCode> preTaskCodes = TaskCodes.FindAll(x => x.bill_id == distaskH.pretask_id); List<WmsPretaskCode> preTaskCodes = TaskCodes.FindAll(x => x.bill_id == distaskH.pretask_id);
List<WmsDistaskCode> disTaskCodes = preTaskCodes.Adapt<List<WmsDistaskCode>>(); List<WmsDistaskCode> disTaskCodes = preTaskCodes.Adapt<List<WmsDistaskCode>>();
disTaskCodes.ForEach(x => disTaskCodes.ForEach(x =>
@@ -815,8 +832,8 @@ namespace Tnb.WarehouseMgr
if (inCtuExec.Count > 0) if (inCtuExec.Count > 0)
{ {
//呼叫ctu入库 //呼叫ctu入库
// await db.Updateable<WmsDistaskH>().SetColumns(it => new WmsDistaskH { status = WmsWareHouseConst.TASK_BILL_STATUS_RUNING_ID }).Where(it => inCtuExec.Select(p => p.id).ToList().Contains(it.id)).ExecuteCommandAsync(); // await db.Updateable<WmsDistaskH>().SetColumns(it => new WmsDistaskH { status = WmsWareHouseConst.TASK_BILL_STATUS_RUNING_ID }).Where(it => inCtuExec.Select(p => p.id).ToList().Contains(it.id)).ExecuteCommandAsync();
// await db.Updateable<WmsPretaskH>().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_START_ID }).Where(it => inCtuExec.Select(x => x.pretask_id).ToList().Contains(it.id)).ExecuteCommandAsync(); // await db.Updateable<WmsPretaskH>().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_START_ID }).Where(it => inCtuExec.Select(x => x.pretask_id).ToList().Contains(it.id)).ExecuteCommandAsync();
CancellationTokenSource Ctu = new(); CancellationTokenSource Ctu = new();
await CallingCTU(inCtuExec, Ctu.Token, 1); await CallingCTU(inCtuExec, Ctu.Token, 1);
Ctu.Dispose(); Ctu.Dispose();
@@ -1136,6 +1153,9 @@ namespace Tnb.WarehouseMgr
{ {
AgvRequestConfig requestCfg = App.Configuration.Build<AgvRequestConfig>(); AgvRequestConfig requestCfg = App.Configuration.Build<AgvRequestConfig>();
string url = requestCfg.AgvRequestUrls.CreateTaskChainUrl; string url = requestCfg.AgvRequestUrls.CreateTaskChainUrl;
Logger.Information($"Agv任务执行的disTasks{JsonConvert.SerializeObject(disTasks)}");
var taskChainCodeDic = disTasks.Where(t => !t.groups.IsNullOrWhiteSpace()).GroupBy(g => g.groups!) var taskChainCodeDic = disTasks.Where(t => !t.groups.IsNullOrWhiteSpace()).GroupBy(g => g.groups!)
.ToDictionary(x => x.Key, x => x.Select(it => new .ToDictionary(x => x.Key, x => x.Select(it => new
{ {
@@ -1146,6 +1166,8 @@ namespace Tnb.WarehouseMgr
})); }));
Logger.Information($"请求地址:{url}"); Logger.Information($"请求地址:{url}");
Logger.Information($"Agv任务执行的taskChainCodeDic{JsonConvert.SerializeObject(taskChainCodeDic)}");
foreach ((string k, object v) in taskChainCodeDic) foreach ((string k, object v) in taskChainCodeDic)
{ {
var typeflag = false; var typeflag = false;

View File

@@ -68,7 +68,6 @@ namespace Tnb.WarehouseMgr
} }
private async Task<dynamic> WmsEmptyIn(VisualDevModelDataCrInput input) private async Task<dynamic> WmsEmptyIn(VisualDevModelDataCrInput input)
{ {
try try
{ {
await _db.Ado.BeginTranAsync(); await _db.Ado.BeginTranAsync();
@@ -76,7 +75,7 @@ namespace Tnb.WarehouseMgr
//入库取终点 //入库取终点
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 }; InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 };
//test //test
BasLocation llll = await _db.Queryable<BasLocation>().FirstAsync(it => it.location_code == _configuration["TestLocation"]); //BasLocation llll = await _db.Queryable<BasLocation>().FirstAsync(it => it.location_code == _configuration["TestLocation"]);
List<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); List<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
WmsPointH? sPoint = null; WmsPointH? sPoint = null;
WmsPointH? ePoint = null; WmsPointH? ePoint = null;

View File

@@ -179,7 +179,7 @@ namespace Tnb.WarehouseMgr
} }
if (barcodes?.Count > 0) if (barcodes?.Count > 0)
{ {
base.BarCodePrint(barcodes, 1,""); base.BarCodePrint(barcodes, 1, "192.167.14.253");
} }
await _db.Ado.CommitTranAsync(); await _db.Ado.CommitTranAsync();
} }

View File

@@ -2,7 +2,8 @@
"ConnectionStrings": { "ConnectionStrings": {
"ConfigId": "default", "ConfigId": "default",
"DBType": "PostgreSQL", //MySql;SqlServer;Oracle;PostgreSQL;Dm;Kdbndp;Sqlite; "DBType": "PostgreSQL", //MySql;SqlServer;Oracle;PostgreSQL;Dm;Kdbndp;Sqlite;
"Host": "192.168.11.109", //"Host": "192.168.11.109",
"Host": "localhost",
"Port": "5432", "Port": "5432",
//"DBName": "tianyi_db", //"DBName": "tianyi_db",
//"UserName": "postgres", //"UserName": "postgres",

View File

@@ -50,10 +50,14 @@
node1.ivex = p2; node1.ivex = p2;
node1.weight = weight; node1.weight = weight;
// 将node1链接到"p1所在链表的末尾" // 将node1链接到"p1所在链表的末尾"
if (mVexs[p1].firstEdge == null) if (p1 != -1)
mVexs[p1].firstEdge = node1; {
else if (p1 != -1 && mVexs[p1].firstEdge == null)
LinkLast(mVexs[p1].firstEdge, node1); mVexs[p1].firstEdge = node1;
else
LinkLast(mVexs[p1].firstEdge, node1);
}
//// 初始化node2 //// 初始化node2
//ENode node2 = new ENode(); //ENode node2 = new ENode();
//node2.ivex = p1; //node2.ivex = p1;