1
This commit is contained in:
@@ -14,6 +14,7 @@ using JNPF.Systems.Interfaces.System;
|
|||||||
using JNPF.VisualDev;
|
using JNPF.VisualDev;
|
||||||
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
|
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
|
||||||
using JNPF.VisualDev.Interfaces;
|
using JNPF.VisualDev.Interfaces;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
@@ -432,7 +433,25 @@ namespace Tnb.ProductionMgr
|
|||||||
|
|
||||||
return PageResult<PrdMoStatisticsOutput>.SqlSugarPageResult(result);
|
return PageResult<PrdMoStatisticsOutput>.SqlSugarPageResult(result);
|
||||||
}
|
}
|
||||||
|
public class data
|
||||||
|
{
|
||||||
|
public string mo_code { get; set; }
|
||||||
|
public string f_fullname { get; set; }
|
||||||
|
public string material_name { get; set; }
|
||||||
|
public string plan_qty { get; set; }
|
||||||
|
public string scheduled_qty { get; set; }
|
||||||
|
public string tobe_scheduled_qty { get; set; }
|
||||||
|
public string reported_work_qty { get; set; }
|
||||||
|
public string complete_rate { get; set; }
|
||||||
|
public string orderby_field { get; set; }
|
||||||
|
}
|
||||||
|
[HttpPost]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public async Task<dynamic> GetPrdTask()
|
||||||
|
{
|
||||||
|
var result= _db.Ado.SqlQuery<data>("select a.mo_code,b.f_fullname,c.name as material_name,a.plan_qty,a.scheduled_qty,(a.plan_qty-a.scheduled_qty) as tobe_scheduled_qty, a.reported_work_qty,(case when a.scheduled_qty is null or a.scheduled_qty<=0 or a.reported_work_qty is null or a.reported_work_qty<=0 then null else round(a.reported_work_qty*100::numeric/a.plan_qty, 1)||'%' end) as complete_rate,(case when a.scheduled_qty is null or a.scheduled_qty<=0 or a.reported_work_qty is null or a.reported_work_qty<=0 then 0 else round(a.reported_work_qty*100::numeric/a.plan_qty, 1) end) as orderby_field from prd_mo a left join base_dictionarydata b on a.mo_status=b.f_id left join bas_material c on a.material_id=c.id where a.mo_status not in ('25501969636645','25501960891941');");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 正向工单追溯相关
|
#region 正向工单追溯相关
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Data;
|
||||||
using System.Dynamic;
|
using System.Dynamic;
|
||||||
using System.Security.Policy;
|
using System.Security.Policy;
|
||||||
using Aop.Api.Domain;
|
using Aop.Api.Domain;
|
||||||
@@ -33,6 +34,7 @@ namespace Tnb.ProductionMgr
|
|||||||
private Timer? Readtimer;
|
private Timer? Readtimer;
|
||||||
private Timer? CheckGettimer;
|
private Timer? CheckGettimer;
|
||||||
private Timer? Scantimer;
|
private Timer? Scantimer;
|
||||||
|
private Timer? SSXcodetimer;
|
||||||
private readonly RedisData _redisData;
|
private readonly RedisData _redisData;
|
||||||
private readonly IPrdInstockService _prdInstockService;
|
private readonly IPrdInstockService _prdInstockService;
|
||||||
private readonly ISqlSugarRepository<RedisReadConfig> _repository;
|
private readonly ISqlSugarRepository<RedisReadConfig> _repository;
|
||||||
@@ -126,6 +128,11 @@ namespace Tnb.ProductionMgr
|
|||||||
{
|
{
|
||||||
Dictionary<string, string[]> getdic = new Dictionary<string, string[]>();
|
Dictionary<string, string[]> getdic = new Dictionary<string, string[]>();
|
||||||
getdic.Add("SSX-021-005", new string[] { "YTCS", "AllowFullOut_CS05", "LiftCode" });
|
getdic.Add("SSX-021-005", new string[] { "YTCS", "AllowFullOut_CS05", "LiftCode" });
|
||||||
|
getdic.Add("SSX-011-002", new string[] { "YTCS", "AllowAgvFullIn_CS02", "Code_CS02" });
|
||||||
|
getdic.Add("SSX-011-004", new string[] { "YTCS", "AllowCtuFullOut_CS04", "Code_CS04" });
|
||||||
|
|
||||||
|
getdic.Add("SSX-111-011", new string[] { "东面提升机输送线", "下升降机11允许出箱", "下升降机11条码" });
|
||||||
|
getdic.Add("SSX-111-012", new string[] { "东面提升机输送线", "下升降机12允许出箱", "下升降机12条码" });
|
||||||
foreach (var key in getdic.Keys)
|
foreach (var key in getdic.Keys)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -141,7 +148,7 @@ namespace Tnb.ProductionMgr
|
|||||||
JObject? coderes = JsonConvert.DeserializeObject<JObject>(codedata);
|
JObject? coderes = JsonConvert.DeserializeObject<JObject>(codedata);
|
||||||
string coderesult = coderes != null && coderes["Value"] != null ? coderes.Value<string>("Value")! : "";
|
string coderesult = coderes != null && coderes["Value"] != null ? coderes.Value<string>("Value")! : "";
|
||||||
coderesult = coderesult.Replace("\r", "");
|
coderesult = coderesult.Replace("\r", "");
|
||||||
var DistaskH = _repository.AsSugarClient().Queryable<WmsDistaskH>().Where(p => p.carry_code == coderesult && p.status == WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID).First();
|
var DistaskH = _repository.AsSugarClient().Queryable<WmsDistaskH>().Where(p => p.carry_code == coderesult && p.status == WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID&&string.IsNullOrEmpty(p.extras)).First();
|
||||||
if (DistaskH != null)
|
if (DistaskH != null)
|
||||||
{
|
{
|
||||||
dynamic reqBody = new ExpandoObject();
|
dynamic reqBody = new ExpandoObject();
|
||||||
@@ -150,6 +157,8 @@ namespace Tnb.ProductionMgr
|
|||||||
reqBody.containerCode = coderesult;
|
reqBody.containerCode = coderesult;
|
||||||
CancellationTokenSource Ctu = new();
|
CancellationTokenSource Ctu = new();
|
||||||
dynamic respBody = HttpClientHelper.PostStreamAsync("http://192.168.11.104:1880/wcs/notify/cargo", reqBody, Ctu.Token).Result;
|
dynamic respBody = HttpClientHelper.PostStreamAsync("http://192.168.11.104:1880/wcs/notify/cargo", reqBody, Ctu.Token).Result;
|
||||||
|
DistaskH.extras = respBody;
|
||||||
|
_repository.AsSugarClient().Updateable(DistaskH).ExecuteCommand();
|
||||||
Ctu.Dispose();
|
Ctu.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,6 +174,7 @@ namespace Tnb.ProductionMgr
|
|||||||
{
|
{
|
||||||
Dictionary<string, string[]> getdic = new Dictionary<string, string[]>();
|
Dictionary<string, string[]> getdic = new Dictionary<string, string[]>();
|
||||||
getdic.Add("BGWRKYCL02", new string[] { "CP8", "AllowGetFullBox1", "code1", "PutDoneEmptyBox","false" });
|
getdic.Add("BGWRKYCL02", new string[] { "CP8", "AllowGetFullBox1", "code1", "PutDoneEmptyBox","false" });
|
||||||
|
getdic.Add("BGWRKYCL01", new string[] { "CP8", "AllowGetFullBox2", "code2", "PutDoneEmptyBox", "false" });
|
||||||
foreach (var key in getdic.Keys)
|
foreach (var key in getdic.Keys)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -183,7 +193,7 @@ namespace Tnb.ProductionMgr
|
|||||||
["TagName"] = strs[3],
|
["TagName"] = strs[3],
|
||||||
["Value"] = strs[4],
|
["Value"] = strs[4],
|
||||||
};
|
};
|
||||||
HttpClientHelper.GetAsync(_eleCtlCfg.WriteTagUrl, new Dictionary<string, string>(), dicCommand).Wait();
|
HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand).Wait();
|
||||||
|
|
||||||
|
|
||||||
string codedata = _redisData.GetHash(strs[0], strs[2]).Result;
|
string codedata = _redisData.GetHash(strs[0], strs[2]).Result;
|
||||||
@@ -192,7 +202,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_DZX_ID || p.status == WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID || p.status == WmsWareHouseConst.TASK_BILL_STATUS_RUNING_ID)).Any())
|
if (_repository.AsSugarClient().Queryable<WmsDistaskH>().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)
|
||||||
@@ -220,24 +230,73 @@ namespace Tnb.ProductionMgr
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SSXcode(object state)
|
||||||
|
{
|
||||||
|
Dictionary<string, string[]> dic = new Dictionary<string, string[]>();
|
||||||
|
dic.Add("东面提升机输送线", new string[] { "下升降机判断请求", "下升降机判断条码", "下升降机判断完毕", "下升降机判断结果" });
|
||||||
|
Dictionary<string, int> putdic = new Dictionary<string, int>();
|
||||||
|
putdic.Add("SSX-111-011", 11);
|
||||||
|
putdic.Add("SSX-111-012", 12);
|
||||||
|
foreach (var key in dic.Keys)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var strs = dic.Where(p => p.Key == key).First().Value;
|
||||||
|
string dataflag = _redisData.GetHash(key, strs[0]).Result;
|
||||||
|
JObject? resflag = JsonConvert.DeserializeObject<JObject>(dataflag);
|
||||||
|
bool re = resflag != null && resflag["Value"] != null ? resflag.Value<bool>("Value") : false;
|
||||||
|
if (!re)
|
||||||
|
continue;
|
||||||
|
string data = _redisData.GetHash(key, strs[1]).Result;
|
||||||
|
JObject? res = JsonConvert.DeserializeObject<JObject>(data);
|
||||||
|
string? result = res != null && res["Value"] != null ? res.Value<string>("Value") : "";
|
||||||
|
if (!string.IsNullOrEmpty(result))
|
||||||
|
{
|
||||||
|
result = result.Replace("\r", "");
|
||||||
|
var DistaskH = _repository.AsSugarClient().Queryable<WmsDistaskH>().Where(p => p.carry_code == result && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).OrderByDescending(p => p.create_time).First();
|
||||||
|
if (DistaskH != null)
|
||||||
|
{
|
||||||
|
Dictionary<string, string> dicCommand2 = new(StringComparer.OrdinalIgnoreCase)
|
||||||
|
{
|
||||||
|
["DevName"] = strs[0],
|
||||||
|
["token"] = _eleCtlCfg.token,
|
||||||
|
["TagName"] = strs[3],
|
||||||
|
["Value"] = putdic.Keys.Contains(DistaskH.startlocation_code) ? putdic.Where(p => p.Key == DistaskH.startlocation_code).First().Value.ToString() : "13",
|
||||||
|
};
|
||||||
|
HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand2).Wait();
|
||||||
|
Dictionary<string, string> dicCommand = new(StringComparer.OrdinalIgnoreCase)
|
||||||
|
{
|
||||||
|
["DevName"] = strs[0],
|
||||||
|
["token"] = _eleCtlCfg.token,
|
||||||
|
["TagName"] = strs[2],
|
||||||
|
["Value"] = "true",
|
||||||
|
};
|
||||||
|
HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand).Wait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Readtimer?.Dispose();
|
Readtimer?.Dispose();
|
||||||
CheckGettimer?.Dispose();
|
CheckGettimer?.Dispose();
|
||||||
Scantimer?.Dispose();
|
Scantimer?.Dispose();
|
||||||
|
SSXcodetimer?.Dispose();
|
||||||
}
|
}
|
||||||
public Task StartAsync(CancellationToken cancellationToken)
|
public Task StartAsync(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
// Readtimer = new Timer(GetRedisData, null, TimeSpan.Zero, TimeSpan.FromSeconds(300));
|
Readtimer = new Timer(GetRedisData, null, TimeSpan.Zero, TimeSpan.FromSeconds(300));
|
||||||
CheckGettimer = new Timer(CheckGet, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
CheckGettimer = new Timer(CheckGet, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||||
Scantimer = new Timer(ScanInStock, null, TimeSpan.Zero, TimeSpan.FromSeconds(20));
|
Scantimer = new Timer(ScanInStock, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||||
|
SSXcodetimer= new Timer(SSXcode, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
public Task StopAsync(CancellationToken cancellationToken)
|
public Task StopAsync(CancellationToken cancellationToken)
|
||||||
|
|||||||
@@ -91,7 +91,15 @@ namespace Tnb.WarehouseMgr
|
|||||||
[HttpPost, NonUnify, AllowAnonymous]
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> LoadConfirm(ConfirmInput input)
|
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> LoadConfirm(ConfirmInput input)
|
||||||
{
|
{
|
||||||
|
|
||||||
Logger.Information("取货确认..................");
|
Logger.Information("取货确认..................");
|
||||||
|
|
||||||
|
var dis = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code == input.taskCode).First();
|
||||||
|
if (dis.area_code == "ZSCJ001")
|
||||||
|
{
|
||||||
|
await _wareHouseService.SsxControl(dis, "LOAD");
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
}
|
||||||
/*var whereExp = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
|
/*var whereExp = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
|
||||||
.And((a, b, c) => c.bill_code == input.taskCode)
|
.And((a, b, c) => c.bill_code == input.taskCode)
|
||||||
.And((a, b, c) => a.enabled == 1)
|
.And((a, b, c) => a.enabled == 1)
|
||||||
@@ -179,7 +187,12 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
Logger.Information("放货确认..................");
|
Logger.Information("放货确认..................");
|
||||||
Logger.Information($"当前放货,任务编号:{input.taskCode}");
|
Logger.Information($"当前放货,任务编号:{input.taskCode}");
|
||||||
|
var dis = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code == input.taskCode).First();
|
||||||
|
if (dis.area_code == "ZSCJ001")
|
||||||
|
{
|
||||||
|
await _wareHouseService.SsxControl(dis, "UNLOAD");
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
/*var whereExp = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
|
/*var whereExp = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
|
||||||
|
|||||||
@@ -250,7 +250,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
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" });
|
||||||
|
putdic.Add("SSX-121-009", new string[] { "东面提升机输送线", "上升降机9允许入箱" });
|
||||||
|
putdic.Add("SSX-121-010", new string[] { "东面提升机输送线", "上升降机10允许入箱" });
|
||||||
|
putdic.Add("SSX-021-003", new string[] { "YTCS", "AllowCtuEmptyIn_CS03" });
|
||||||
|
putdic.Add("SSX-021-001", new string[] { "YTCS", "AllowCtuEmptyIn_CS01" });
|
||||||
var strs = new string[] { };
|
var strs = new string[] { };
|
||||||
|
|
||||||
if (!putdic.ContainsKey(input.targetName))
|
if (!putdic.ContainsKey(input.targetName))
|
||||||
@@ -274,19 +277,26 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[AllowAnonymous]
|
|
||||||
public async Task Test()
|
|
||||||
{
|
|
||||||
var a = _db.Queryable<WmsDistaskH>().Where(p => p.id == "31900194166806").First();
|
|
||||||
await SsxControl(a, "UNLOAD");
|
|
||||||
}
|
|
||||||
public async Task SsxControl(WmsDistaskH disTask, string action)
|
public async Task SsxControl(WmsDistaskH disTask, string 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" });
|
||||||
|
|
||||||
|
getdic.Add("SSX-111-011", new string[] { "东面提升机输送线", "下升降机11出箱完毕", "true" });
|
||||||
|
getdic.Add("SSX-111-012", new string[] { "东面提升机输送线", "下升降机12出箱完毕", "true" });
|
||||||
|
getdic.Add("ZSSSXCTU02", new string[] { "YTCS", "AgvEmptyOut_CS03Done", "true" });
|
||||||
|
getdic.Add("ZSSSXCTU01", new string[] { "YTCS", "AgvEmptyOut_CS01Done", "true" });
|
||||||
|
|
||||||
putdic.Add("SSX-011-006", new string[] { "YTCS", "EmptyIn_CS06Done", "true" });
|
putdic.Add("SSX-011-006", new string[] { "YTCS", "EmptyIn_CS06Done", "true" });
|
||||||
|
putdic.Add("SSX-021-003", new string[] { "YTCS", "AgvFullIn_CS03Done", "true" });
|
||||||
|
putdic.Add("SSX-021-001", new string[] { "YTCS", "CtuEmptyIn_CS01Done", "true" });
|
||||||
|
|
||||||
|
putdic.Add("ZSSSXCTU02", new string[] { "YTCS", "AgvFullIn_CS04Done", "true" });
|
||||||
|
putdic.Add("ZSSSXCTU01", new string[] { "YTCS", "AgvFullIn_CS02Done", "true" });
|
||||||
|
putdic.Add("SSX-121-009", new string[] { "东面提升机输送线", "上升降机9入箱完毕", "true" });
|
||||||
|
putdic.Add("SSX-121-010", new string[] { "东面提升机输送线", "上升降机10入箱完毕", "true" });
|
||||||
putdic.Add("YCLCKBGW", new string[] { "CP8", "PutDoneEmptyBox", "true" });
|
putdic.Add("YCLCKBGW", new string[] { "CP8", "PutDoneEmptyBox", "true" });
|
||||||
if (action == "LOAD")//取货
|
if (action == "LOAD")//取货
|
||||||
{
|
{
|
||||||
@@ -301,7 +311,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
["Value"] = strarr[2],
|
["Value"] = strarr[2],
|
||||||
};
|
};
|
||||||
Logger.Information($"SsxControlLOAD:{dicCommand}");
|
Logger.Information($"SsxControlLOAD:{dicCommand}");
|
||||||
var str= await HttpClientHelper.GetAsync(_eleCtlCfg.WriteTagUrl, new Dictionary<string, string>(), dicCommand);
|
var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
Logger.Information($"SsxControlLOAD:{str}");
|
Logger.Information($"SsxControlLOAD:{str}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -318,7 +328,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
["Value"] = strarr[2],
|
["Value"] = strarr[2],
|
||||||
};
|
};
|
||||||
Logger.Information($"SsxControlUNLOAD:{dicCommand}");
|
Logger.Information($"SsxControlUNLOAD:{dicCommand}");
|
||||||
var str = await HttpClientHelper.GetAsync(_eleCtlCfg.WriteTagUrl, new Dictionary<string, string>(), dicCommand);
|
var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
Logger.Information($"SsxControlUNLOAD:{str}");
|
Logger.Information($"SsxControlUNLOAD:{str}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -333,7 +343,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task GenTaskExecute()
|
public async Task GenTaskExecute()
|
||||||
{
|
{
|
||||||
|
CTUTaskExecute();
|
||||||
await s_taskExecuteSemaphore.WaitAsync();
|
await s_taskExecuteSemaphore.WaitAsync();
|
||||||
|
|
||||||
Stopwatch sw = Stopwatch.StartNew();
|
Stopwatch sw = Stopwatch.StartNew();
|
||||||
@@ -379,7 +389,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
preTasks = normalPreTasks.Concat(agvElevatorTasks).Concat(elePreTasks).ToList();
|
preTasks = normalPreTasks.Concat(agvElevatorTasks).Concat(elePreTasks).ToList();
|
||||||
|
|
||||||
//一楼中储仓CTU
|
//一楼中储仓CTU
|
||||||
CTUTaskExecute();
|
|
||||||
List<string> ids = preTasks.Select(x => x.id).Distinct().ToList();
|
List<string> ids = preTasks.Select(x => x.id).Distinct().ToList();
|
||||||
List<WmsPretaskCode>? preTaskCodes = await db.Queryable<WmsPretaskCode>().Where(it => ids.Contains(it.bill_id)).ToListAsync();
|
List<WmsPretaskCode>? preTaskCodes = await db.Queryable<WmsPretaskCode>().Where(it => ids.Contains(it.bill_id)).ToListAsync();
|
||||||
if (preTasks.Count > 0)
|
if (preTasks.Count > 0)
|
||||||
@@ -567,10 +577,15 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// 生成CTU任务执行
|
/// 生成CTU任务执行
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private async Task CTUTaskExecute()
|
[HttpPost]
|
||||||
|
public async Task CTUTaskExecute()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
Dictionary<string, string[]> indic = new Dictionary<string, string[]>();
|
||||||
|
indic.Add("SSX-021-005", new string[] { "YTCS", "CallCtuFullIn_CS05" });
|
||||||
|
indic.Add("SSX-111-011", new string[] { "东面提升机输送线", "下升降机11呼叫CTU" });
|
||||||
|
indic.Add("SSX-111-012", new string[] { "东面提升机输送线", "下升降机12呼叫CTU" });
|
||||||
var db = _db.CopyNew();
|
var db = _db.CopyNew();
|
||||||
List<WmsPretaskH> CTUTasks = await db.Queryable<WmsPretaskH>()
|
List<WmsPretaskH> CTUTasks = await db.Queryable<WmsPretaskH>()
|
||||||
.InnerJoin<WmsAreaH>((a, b) => a.area_id == b.id)
|
.InnerJoin<WmsAreaH>((a, b) => a.area_id == b.id)
|
||||||
@@ -597,42 +612,57 @@ namespace Tnb.WarehouseMgr
|
|||||||
var outCtuExec = new List<WmsDistaskH>();
|
var outCtuExec = new List<WmsDistaskH>();
|
||||||
foreach (var item in InTasks)
|
foreach (var item in InTasks)
|
||||||
{
|
{
|
||||||
WmsDistaskH distaskH = item.Adapt<WmsDistaskH>();
|
/*
|
||||||
distaskH.id = SnowflakeIdHelper.NextId();
|
if (indic.Keys.Contains(item.startlocation_code))
|
||||||
distaskH.status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID;
|
|
||||||
distaskH.is_chain = 1;
|
|
||||||
distaskH.create_time = DateTime.Now;
|
|
||||||
var billcode = GetBillCode(OriginDistaskHs, DistaskHs, distaskH);
|
|
||||||
distaskH.groups = billcode.Substring(0, billcode.Length - 2);
|
|
||||||
distaskH.bill_code = billcode;
|
|
||||||
var num = int.Parse(distaskH.bill_code.Substring(billcode.Length - 1, 1));
|
|
||||||
if (num == item.move_num)
|
|
||||||
{
|
{
|
||||||
distaskH.status = WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID;
|
var strs = indic.Where(p => p.Key == item.startlocation_code).First().Value;
|
||||||
inCtuExec.Add(distaskH);
|
bool flag = _redisData.HashExist(strs[0], strs[1]).Result;
|
||||||
if (OriginDistaskHs.Where(p => p.groups == distaskH.groups).Any())
|
if (!flag)
|
||||||
|
continue;
|
||||||
|
string data = _redisData.GetHash(strs[0], strs[1]).Result;
|
||||||
|
JObject? res = JsonConvert.DeserializeObject<JObject>(data);
|
||||||
|
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
|
||||||
|
if (!result)
|
||||||
|
continue;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
WmsDistaskH distaskH = item.Adapt<WmsDistaskH>();
|
||||||
|
distaskH.id = SnowflakeIdHelper.NextId();
|
||||||
|
distaskH.status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID;
|
||||||
|
distaskH.is_chain = 1;
|
||||||
|
distaskH.create_time = DateTime.Now;
|
||||||
|
var billcode = GetBillCode(OriginDistaskHs, DistaskHs, distaskH);
|
||||||
|
distaskH.groups = billcode.Substring(0, billcode.Length - 2);
|
||||||
|
distaskH.bill_code = billcode;
|
||||||
|
var num = int.Parse(distaskH.bill_code.Substring(billcode.Length - 1, 1));
|
||||||
|
if (num == item.move_num)
|
||||||
{
|
{
|
||||||
OriginDistaskHs.Where(p => p.groups == distaskH.groups).ToList().ForEach(p => p.status = WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID);
|
distaskH.status = WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID;
|
||||||
|
inCtuExec.Add(distaskH);
|
||||||
|
if (OriginDistaskHs.Where(p => p.groups == distaskH.groups).Any())
|
||||||
|
{
|
||||||
|
OriginDistaskHs.Where(p => p.groups == distaskH.groups).ToList().ForEach(p => p.status = WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID);
|
||||||
|
|
||||||
UpDistaskHs.AddRange(OriginDistaskHs.Where(p => p.groups == distaskH.groups).ToList());
|
UpDistaskHs.AddRange(OriginDistaskHs.Where(p => p.groups == distaskH.groups).ToList());
|
||||||
inCtuExec.AddRange(OriginDistaskHs.Where(p => p.groups == distaskH.groups).ToList());
|
inCtuExec.AddRange(OriginDistaskHs.Where(p => p.groups == distaskH.groups).ToList());
|
||||||
|
}
|
||||||
|
if (DistaskHs.Where(p => p.groups == distaskH.groups).Any())
|
||||||
|
{
|
||||||
|
DistaskHs.Where(p => p.groups == distaskH.groups).ToList().ForEach(p => p.status = WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID);
|
||||||
|
inCtuExec.AddRange(DistaskHs.Where(p => p.groups == distaskH.groups).ToList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (DistaskHs.Where(p => p.groups == distaskH.groups).Any())
|
List<WmsPretaskCode> preTaskCodes = TaskCodes.FindAll(x => x.bill_id == distaskH.pretask_id);
|
||||||
|
List<WmsDistaskCode> disTaskCodes = preTaskCodes.Adapt<List<WmsDistaskCode>>();
|
||||||
|
disTaskCodes.ForEach(x =>
|
||||||
{
|
{
|
||||||
DistaskHs.Where(p => p.groups == distaskH.groups).ToList().ForEach(p => p.status = WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID);
|
x.id = SnowflakeIdHelper.NextId();
|
||||||
inCtuExec.AddRange(DistaskHs.Where(p => p.groups == distaskH.groups).ToList());
|
x.bill_id = distaskH.id;
|
||||||
}
|
x.create_time = DateTime.Now;
|
||||||
}
|
});
|
||||||
List<WmsPretaskCode> preTaskCodes = TaskCodes.FindAll(x => x.bill_id == distaskH.pretask_id);
|
DistaskHs.Add(distaskH);
|
||||||
List<WmsDistaskCode> disTaskCodes = preTaskCodes.Adapt<List<WmsDistaskCode>>();
|
DistaskCodes.AddRange(disTaskCodes);
|
||||||
disTaskCodes.ForEach(x =>
|
|
||||||
{
|
|
||||||
x.id = SnowflakeIdHelper.NextId();
|
|
||||||
x.bill_id = distaskH.id;
|
|
||||||
x.create_time = DateTime.Now;
|
|
||||||
});
|
|
||||||
DistaskHs.Add(distaskH);
|
|
||||||
DistaskCodes.AddRange(disTaskCodes);
|
|
||||||
}
|
}
|
||||||
foreach (var item in OutTasks)
|
foreach (var item in OutTasks)
|
||||||
{
|
{
|
||||||
@@ -1015,6 +1045,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
private async Task AgvDispatch(List<WmsDistaskH> disTasks, CancellationToken token)
|
private async Task AgvDispatch(List<WmsDistaskH> disTasks, CancellationToken token)
|
||||||
{
|
{
|
||||||
Logger.Information("Agv任务执行....");
|
Logger.Information("Agv任务执行....");
|
||||||
|
List<string> kiva = new List<string>();
|
||||||
|
kiva.Add("ZSSSXCTU02");
|
||||||
|
kiva.Add("ZSSSXCTU01");
|
||||||
//调用AGV创建任务链接口
|
//调用AGV创建任务链接口
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1029,14 +1062,22 @@ namespace Tnb.WarehouseMgr
|
|||||||
containerCode = it.carry_code,
|
containerCode = it.carry_code,
|
||||||
}));
|
}));
|
||||||
Logger.Information($"请求地址:{url}");
|
Logger.Information($"请求地址:{url}");
|
||||||
|
|
||||||
foreach ((string k, object v) in taskChainCodeDic)
|
foreach ((string k, object v) in taskChainCodeDic)
|
||||||
{
|
{
|
||||||
|
var typeflag = false;
|
||||||
|
var dis = disTasks.Where(p => p.groups == k).First();
|
||||||
|
if (kiva.Contains(dis.startlocation_code) || kiva.Contains(dis.endlocation_code))
|
||||||
|
{
|
||||||
|
typeflag = true;
|
||||||
|
}
|
||||||
dynamic reqBody = new ExpandoObject();
|
dynamic reqBody = new ExpandoObject();
|
||||||
reqBody.taskChainCode = k;
|
reqBody.taskChainCode = k;
|
||||||
reqBody.type = (int)EnumTaskChainType.AGV;
|
reqBody.type = typeflag ? (int)EnumTaskChainType.KIVA : (int)EnumTaskChainType.AGV;
|
||||||
reqBody.sequential = false;
|
reqBody.sequential = false;
|
||||||
reqBody.taskChainPriority = 0;
|
reqBody.taskChainPriority = 0;
|
||||||
reqBody.taskList = v;
|
reqBody.taskList = v;
|
||||||
|
reqBody.floor = dis.end_floor;
|
||||||
Logger.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}");
|
Logger.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}");
|
||||||
dynamic respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, token);
|
dynamic respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, token);
|
||||||
Logger.Information($"调用Agv接口响应结果:{respBody}");
|
Logger.Information($"调用Agv接口响应结果:{respBody}");
|
||||||
@@ -1353,6 +1394,24 @@ namespace Tnb.WarehouseMgr
|
|||||||
[NonAction]
|
[NonAction]
|
||||||
public async Task<List<WmsPointH>> PathAlgorithms(string pStartId, string pEndId)
|
public async Task<List<WmsPointH>> PathAlgorithms(string pStartId, string pEndId)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
var sp= await _db.Queryable<WmsPointH>().Where(it => it.id == pStartId).FirstAsync();
|
||||||
|
var ep = await _db.Queryable<WmsPointH>().Where(it => it.id == pEndId).FirstAsync();
|
||||||
|
|
||||||
|
if (sp.area_code == "B" || ep.area_code == "B")
|
||||||
|
{
|
||||||
|
List<WmsPointH> Points = new List<WmsPointH>();
|
||||||
|
var zp = await _db.Queryable<WmsPointH>().Where(it => it.point_code == "ZSCJZJD").FirstAsync();
|
||||||
|
Points.Add(sp);
|
||||||
|
Points.Add(ep);
|
||||||
|
Points.Add(zp);
|
||||||
|
Points.ForEach(p =>
|
||||||
|
{
|
||||||
|
p.area_code = zp.area_code;
|
||||||
|
p.area_id = zp.area_id;
|
||||||
|
});
|
||||||
|
return Points;
|
||||||
|
}*/
|
||||||
List<WmsRoad> roads = await _db.Queryable<WmsRoad>().Where(it => it.status == 1).ToListAsync();
|
List<WmsRoad> roads = await _db.Queryable<WmsRoad>().Where(it => it.status == 1).ToListAsync();
|
||||||
List<WmsPointH> points = await LocPathCalcAlgorithms(pStartId, pEndId, roads);
|
List<WmsPointH> points = await LocPathCalcAlgorithms(pStartId, pEndId, roads);
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -166,7 +166,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|
||||||
throw new AppFriendlyException("绑定失败", 500);
|
throw new AppFriendlyException("绑定失败", 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,11 +94,12 @@ namespace Tnb.WarehouseMgr
|
|||||||
List<BasLocation> locs = await _basLocationService?.GetLocationInfobyIds(locIds)!;
|
List<BasLocation> locs = await _basLocationService?.GetLocationInfobyIds(locIds)!;
|
||||||
if (locs?.Count > 0)
|
if (locs?.Count > 0)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
bool isStoreLoc = locs.Where(x => !x.IsNullOrEmpty()).Select(x => x.is_type.ParseToInt()).Any(x => x == (int)EnumLocationType.存储库位);
|
bool isStoreLoc = locs.Where(x => !x.IsNullOrEmpty()).Select(x => x.is_type.ParseToInt()).Any(x => x == (int)EnumLocationType.存储库位);
|
||||||
if (isStoreLoc)
|
if (isStoreLoc)
|
||||||
{
|
{
|
||||||
throw new AppFriendlyException("起始库位不能为存储库位", 500);
|
throw new AppFriendlyException("起始库位不能为存储库位", 500);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
VisualDevEntity? templateEntity = await _visualDevService?.GetInfoById(ModuleConsts.MODULE_WMSDELIVERYPDA_ID, true)!;
|
VisualDevEntity? templateEntity = await _visualDevService?.GetInfoById(ModuleConsts.MODULE_WMSDELIVERYPDA_ID, true)!;
|
||||||
await _runService.Create(templateEntity, input);
|
await _runService.Create(templateEntity, input);
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"Cache": {
|
"Cache": {
|
||||||
"CacheType": "RedisCache", //MemoryCache
|
"CacheType": "RedisCache", //MemoryCache
|
||||||
"ip": "localhost",
|
"ip": "192.168.11.109",
|
||||||
"port": 6379,
|
"port": 6379,
|
||||||
"password": "05jWEoJa8v",
|
"password": "05jWEoJa8v",
|
||||||
"RedisConnectionString": "{0}:{1},password={2}, poolsize=500,ssl=false,defaultDatabase=0"
|
"RedisConnectionString": "{0}:{1},password={2}, poolsize=500,ssl=false,defaultDatabase=0"
|
||||||
},
|
},
|
||||||
"Redis": {
|
"Redis": {
|
||||||
"ip": "localhost",
|
"ip": "192.168.11.109",
|
||||||
"port": 6379,
|
"port": 6379,
|
||||||
"password": "05jWEoJa8v",
|
"password": "05jWEoJa8v",
|
||||||
"RedisConnectionString": "{0}:{1},password={2}, poolsize=500,ssl=false,defaultDatabase=0"
|
"RedisConnectionString": "{0}:{1},password={2}, poolsize=500,ssl=false,defaultDatabase=0"
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class Startup : AppStartup
|
|||||||
services.AddSingleton<BackgroundService, TimedTaskBackgroundService>(sp => new TimedTaskBackgroundService());
|
services.AddSingleton<BackgroundService, TimedTaskBackgroundService>(sp => new TimedTaskBackgroundService());
|
||||||
//var bgSvc = App.GetRequiredService<BackgroundService>();
|
//var bgSvc = App.GetRequiredService<BackgroundService>();
|
||||||
//bgSvc.StartAsync(CancellationToken.None);
|
//bgSvc.StartAsync(CancellationToken.None);
|
||||||
// services.AddHostedService<RedisBackGround>();
|
services.AddHostedService<RedisBackGround>();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -98,7 +98,20 @@ namespace Tnb.Common.Utils
|
|||||||
}
|
}
|
||||||
return respJson;
|
return respJson;
|
||||||
}
|
}
|
||||||
|
public static async Task<string> GetRequestAsync(string url, Dictionary<string, string> pars = null)
|
||||||
|
{
|
||||||
|
HttpClient Client = new HttpClient();
|
||||||
|
var reqUri = url;
|
||||||
|
if (pars?.Count > 0)
|
||||||
|
{
|
||||||
|
reqUri = QueryHelpers.AddQueryString(url, pars);
|
||||||
|
//await Console.Out.WriteLineAsync(reqUri);
|
||||||
|
}
|
||||||
|
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||||
|
var respBody = await Client.GetAsync(reqUri);
|
||||||
|
var result = await respBody.Content.ReadAsStringAsync();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public static async Task<string> GetAsync(string url, Dictionary<string, string> headers = null, Dictionary<string, string> pars = null)
|
public static async Task<string> GetAsync(string url, Dictionary<string, string> headers = null, Dictionary<string, string> pars = null)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user