using System;
using System.Collections.Generic;
using System.Linq;
using Google.Protobuf;
using HH.WCS.Mobox3.RiDong.dto;
using HH.WCS.Mobox3.RiDong.models;
using HH.WCS.Mobox3.RiDong.util;
namespace HH.WCS.Mobox3.RiDong.generalMethod;
///
/// 货位方法
///
public static class LocationMethod
{
///
/// 获取指定接驳位
///
/// 作业信息
///
public static Location QueryLocation(OperationDto input)
{
var location = new Location();
int purpose = 0;
// 入库(根据终点判断)
if (input.taskType == 1 || input.taskType == 3)
{
purpose = 3;
// 获取当前终点货位
location = AdoSqlMethod.QueryFirst(p => p.S_CODE == input.endLocation);
}
// 出库(根据起点判断)
else if (input.taskType == 2 || input.taskType == 4 || input.taskType == 5 || input.taskType == 6 || input.taskType == 7)
{
purpose = 4;
// 获取当前起点货位
location = AdoSqlMethod.QueryFirst(p => p.S_CODE == input.startLocation);
}
if (location != null)
{
// 查询当前出、类型以及对应巷道的接驳位
var jbwLocation = AdoSqlMethod
.QueryFirst(p => p.N_PURPOSE == purpose && p.N_ROADWAY == location.N_ROADWAY);
if (jbwLocation != null)
{
return jbwLocation;
}
}
return null;
}
///
/// 获取立体库区货位信息
///
/// 容器类型
///
public static Location QueryStereoscopicStorehouseLocation(string containerType)
{
Location location = new Location();
// 排查出该托盘类型对应的循环数据
var containerPrioritys = Settings.ContainerPrioritysList.First(p=>p.containerType == containerType);
// 根据容器类型找不同的优先顺序的货位,因为每个托盘的长宽高是不一样的
switch (containerType)
{
case "1":
case "1a":
case "2":
case "2a":
case "3":
case "3a":
case "4":
case "5":
case "6":
case "7":
location = QueryStereoscopicStorehouseLocation(1, containerPrioritys);
break;
case "8":
location = QueryStereoscopicStorehouseLocation(11,containerPrioritys);
break;
case "7a":
location = QueryStereoscopicStorehouseLocation(12,containerPrioritys);
break;
default:
location = null;
break;
}
return location;
}
///
/// 获取立体库区货位信息
///
///
///
public static Location QueryOutLocation(string containerCode)
{
var locCntrRel = AdoSqlMethod.QueryFirst(p => p.S_CNTR_CODE == containerCode);
if (locCntrRel != null)
{
var location = AdoSqlMethod.QueryFirst(p => p.S_CODE == locCntrRel.S_LOC_CODE);
if (location != null)
{
return location;
}
}
return null;
}
///
/// 根据优先顺序获取可用货位
///
///
///
///
private static Location QueryStereoscopicStorehouseLocation(int priority, Settings.ContainerPrioritys containerPrioritys)
{
var sqlSugarClient = AdoSqlMethod