电梯下发逻辑变更
This commit is contained in:
@@ -963,7 +963,7 @@ namespace Tnb.WarehouseMgr
|
||||
if (disTask.area_code == "E" && basLocations.Count() == 0)
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】收到到货完成信号 传入参数: {disTask.bill_code} {action}");
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】收到到货确认信号 传入参数: {disTask.bill_code} {action}");
|
||||
|
||||
if (action == "UNLOAD")
|
||||
{
|
||||
@@ -2668,9 +2668,93 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
|
||||
|
||||
List<WmsRoad> roads = await _db.Queryable<WmsRoad>().Where(it => it.status == 1).ToListAsync();
|
||||
List<WmsPointH> wmsPointHs = await _db.Queryable<WmsPointH>().Where(it => it.status == 1).ToListAsync();
|
||||
|
||||
List<WmsPointH> points = new List<WmsPointH>();
|
||||
|
||||
// 待验证 算法太慢 电梯不跑算法 电梯起终点仓库对应表
|
||||
BasLocation startlocation = await _db.Queryable<BasLocation>().InnerJoin<WmsPointH>((a, b) => a.id == b.location_id).Where((a, b) => b.id == pStartId).FirstAsync();
|
||||
BasLocation endlocation = await _db.Queryable<BasLocation>().InnerJoin<WmsPointH>((a, b) => a.id == b.location_id).Where((a, b) => b.id == pEndId).FirstAsync();
|
||||
|
||||
// 后续可整理成配置表
|
||||
// 3-1
|
||||
if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID)
|
||||
{
|
||||
WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == "2" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();
|
||||
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
|
||||
|
||||
points.Add(wmsPointHs.Where(r => r.id == pStartId).First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-C-03-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-3-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-1-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-01-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
|
||||
}
|
||||
//1-3
|
||||
else if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID)
|
||||
{
|
||||
WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == "2" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();
|
||||
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
|
||||
|
||||
points.Add(wmsPointHs.Where(r => r.id == pStartId).First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-C-01-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-1-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-3-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-03-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
|
||||
}
|
||||
// 2-4
|
||||
else if(startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_DMJC_ID)
|
||||
{
|
||||
WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == "1" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();
|
||||
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
|
||||
|
||||
points.Add(wmsPointHs.Where(r => r.id == pStartId).First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-C-02-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-2-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-4-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-04-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
|
||||
}
|
||||
// 1-4
|
||||
else if(startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_F1BCK_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_BCK_ID)
|
||||
{
|
||||
WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == "1" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();
|
||||
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
|
||||
|
||||
points.Add(wmsPointHs.Where(r => r.id == pStartId).First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-C-01-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-1-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-4-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-04-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
|
||||
}
|
||||
// 4-2
|
||||
else if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_BCK_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_F2BCQ_ID)
|
||||
{
|
||||
WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == "1" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();
|
||||
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
|
||||
|
||||
points.Add(wmsPointHs.Where(r => r.id == pStartId).First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-C-04-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-4-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-2-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-02-0{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
|
||||
}
|
||||
else
|
||||
{
|
||||
List<WmsRoad> roads = await _db.Queryable<WmsRoad>().Where(it => it.status == 1).ToListAsync();
|
||||
points = await LocPathCalcAlgorithms(pStartId, pEndId, roads);
|
||||
}
|
||||
|
||||
|
||||
Logger.Information($"起点{startlocation.location_code} 终点{endlocation.location_code} 获取到路径 {JsonConvert.SerializeObject(points)}");
|
||||
if (points.Count < 6)
|
||||
{
|
||||
throw new AppFriendlyException($"路径错误,需要检查路径配置{JsonConvert.SerializeObject(points)}", 500);
|
||||
}
|
||||
|
||||
// 待验证 电梯不跑算法
|
||||
//List<WmsRoad> wmsRoads = await _db.Queryable<WmsRoad>().Where(r => r.startpoint_id == pStartId).ToListAsync();
|
||||
//if (wmsRoads?.FindAll(x => x.endpoint_code != null && x.location_code.Contains("dt", StringComparison.OrdinalIgnoreCase))?.Count > 0)
|
||||
//{
|
||||
@@ -2681,71 +2765,71 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
|
||||
|
||||
List<WmsPointH> points = await LocPathCalcAlgorithms(pStartId, pEndId, roads);
|
||||
try
|
||||
{
|
||||
if (points?.FindAll(x => x.location_code != null && x.location_code.Contains("dt", StringComparison.OrdinalIgnoreCase))?.Count > 0)
|
||||
{
|
||||
//查询当前电梯点
|
||||
List<WmsElevatorD> curEleDs = await _db.Queryable<WmsElevatorD>().InnerJoin<WmsElevatorH>((a, b) => a.bill_id == b.id).Where((a, b) => points.Select(x => x.id).Contains(a.point_id)).ToListAsync();
|
||||
Logger.Information($"curEleDs==null :{curEleDs == null},curEleDs:{string.Join(",", curEleDs.Select(x => x.bill_id))}");
|
||||
//如果有电梯点,则会进行电梯的均匀分配
|
||||
if (curEleDs?.Count > 0)
|
||||
{
|
||||
//当前电梯
|
||||
WmsElevatorH curEle = await _db.Queryable<WmsElevatorH>().SingleAsync(it => it.id == curEleDs.First().bill_id);
|
||||
|
||||
//try
|
||||
//{
|
||||
// if (points?.FindAll(x => x.location_code != null && x.location_code.Contains("dt", StringComparison.OrdinalIgnoreCase))?.Count > 0)
|
||||
// {
|
||||
// //查询当前电梯点
|
||||
// List<WmsElevatorD> curEleDs = await _db.Queryable<WmsElevatorD>().InnerJoin<WmsElevatorH>((a, b) => a.bill_id == b.id).Where((a, b) => points.Select(x => x.id).Contains(a.point_id)).ToListAsync();
|
||||
// Logger.Information($"curEleDs==null :{curEleDs == null},curEleDs:{string.Join(",", curEleDs.Select(x => x.bill_id))}");
|
||||
// //如果有电梯点,则会进行电梯的均匀分配
|
||||
// if (curEleDs?.Count > 0)
|
||||
// {
|
||||
// //当前电梯
|
||||
// WmsElevatorH curEle = await _db.Queryable<WmsElevatorH>().SingleAsync(it => it.id == curEleDs.First().bill_id);
|
||||
|
||||
//同电梯组电梯
|
||||
List<WmsElevatorH> sGpEle = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == curEle.elevator_group && it.id != curEle.id && it.enabled == 1).ToListAsync();
|
||||
if (curEle.enabled == 0 && (sGpEle == null || sGpEle.Count < 1))
|
||||
{
|
||||
throw new AppFriendlyException("电梯被禁用或未配置", 500);
|
||||
}
|
||||
if ((sGpEle == null || sGpEle.Count < 1) && curEle.enabled == 1)
|
||||
{
|
||||
return points;
|
||||
}
|
||||
if (sGpEle?.Count > 0 && curEle.enabled == 0)
|
||||
{
|
||||
return points;
|
||||
}
|
||||
//判断电梯组中各电梯任务数
|
||||
if (sGpEle.FindAll(x => Math.Abs(x.task_nums - curEle.task_nums) % 2 == 1)?.Count > 0)
|
||||
{
|
||||
List<WmsElevatorD> sGpDs = await _db.Queryable<WmsElevatorD>().Where(it => it.bill_id == sGpEle.First().id).ToListAsync();
|
||||
if (sGpDs?.Count > 0)
|
||||
{
|
||||
List<WmsPointH> sGpPoints = await _db.Queryable<WmsPointH>().Where(it => sGpDs.Select(x => x.point_id).Contains(it.id)).ToListAsync();
|
||||
string sFEndId = sGpDs.Single(x => x.floor == curEleDs.First().floor).point_id;
|
||||
string eFStartId = sGpDs.Single(x => x.floor == curEleDs.Last().floor).point_id;
|
||||
List<WmsPointH> sFPoints = await LocPathCalcAlgorithms(pStartId, sFEndId, roads);
|
||||
List<WmsPointH> elePoints = new();
|
||||
foreach (WmsElevatorD pt in curEleDs)
|
||||
{
|
||||
WmsPointH? elePoint = sGpPoints.Find(x => x.floor == pt.floor);
|
||||
if (elePoint != null)
|
||||
{
|
||||
elePoints.Add(elePoint);
|
||||
}
|
||||
}
|
||||
List<WmsPointH> eFPoints = await LocPathCalcAlgorithms(eFStartId, pEndId, roads);
|
||||
_ = elePoints.Remove(elePoints.First());
|
||||
_ = elePoints.Remove(elePoints.Last());
|
||||
points.Clear();
|
||||
points.AddRange(sFPoints);
|
||||
points.AddRange(elePoints);
|
||||
points.AddRange(eFPoints);
|
||||
}
|
||||
}
|
||||
// //同电梯组电梯
|
||||
// List<WmsElevatorH> sGpEle = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == curEle.elevator_group && it.id != curEle.id && it.enabled == 1).ToListAsync();
|
||||
// if (curEle.enabled == 0 && (sGpEle == null || sGpEle.Count < 1))
|
||||
// {
|
||||
// throw new AppFriendlyException("电梯被禁用或未配置", 500);
|
||||
// }
|
||||
// if ((sGpEle == null || sGpEle.Count < 1) && curEle.enabled == 1)
|
||||
// {
|
||||
// return points;
|
||||
// }
|
||||
// if (sGpEle?.Count > 0 && curEle.enabled == 0)
|
||||
// {
|
||||
// return points;
|
||||
// }
|
||||
// //判断电梯组中各电梯任务数
|
||||
// if (sGpEle.FindAll(x => Math.Abs(x.task_nums - curEle.task_nums) % 2 == 1)?.Count > 0)
|
||||
// {
|
||||
// List<WmsElevatorD> sGpDs = await _db.Queryable<WmsElevatorD>().Where(it => it.bill_id == sGpEle.First().id).ToListAsync();
|
||||
// if (sGpDs?.Count > 0)
|
||||
// {
|
||||
// List<WmsPointH> sGpPoints = await _db.Queryable<WmsPointH>().Where(it => sGpDs.Select(x => x.point_id).Contains(it.id)).ToListAsync();
|
||||
// string sFEndId = sGpDs.Single(x => x.floor == curEleDs.First().floor).point_id;
|
||||
// string eFStartId = sGpDs.Single(x => x.floor == curEleDs.Last().floor).point_id;
|
||||
// List<WmsPointH> sFPoints = await LocPathCalcAlgorithms(pStartId, sFEndId, roads);
|
||||
// List<WmsPointH> elePoints = new();
|
||||
// foreach (WmsElevatorD pt in curEleDs)
|
||||
// {
|
||||
// WmsPointH? elePoint = sGpPoints.Find(x => x.floor == pt.floor);
|
||||
// if (elePoint != null)
|
||||
// {
|
||||
// elePoints.Add(elePoint);
|
||||
// }
|
||||
// }
|
||||
// List<WmsPointH> eFPoints = await LocPathCalcAlgorithms(eFStartId, pEndId, roads);
|
||||
// _ = elePoints.Remove(elePoints.First());
|
||||
// _ = elePoints.Remove(elePoints.Last());
|
||||
// points.Clear();
|
||||
// points.AddRange(sFPoints);
|
||||
// points.AddRange(elePoints);
|
||||
// points.AddRange(eFPoints);
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Error("路径算法异常", ex);
|
||||
throw;
|
||||
}
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// Logger.Error("路径算法异常", ex);
|
||||
// throw;
|
||||
//}
|
||||
|
||||
return points;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user