米其林项目Giraf的新接口,采用WebAPI形式,会应用在上海玉兰,印度米其林及波兰米其林项目中
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
5.3 KiB

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WMS_GIRAF_Interface.Data;
using WMS_GIRAF_Interface.Entities;
using WMS_GIRAF_Interface.Repositories.Implement;
using WMS_GIRAF_Interface.Repositories.Interface;
namespace WMS_GIRAF_Interface.TaskServices;
public class CellLogicService(MichelinDbContext context,IWhCellRepository whCellRepository, ILogger<CellLogicService> logger)
{
/// <summary>
/// 自动入库 获取line way number
/// </summary>
/// <param name="startCell"></param>
/// <param name="cellModel"></param>
/// <param name="stockBarcode"></param>
/// <param name="endLineNumbers"></param>
/// <param name="lotNumber"></param>
/// <param name="sResult"></param>
/// <returns></returns>
public bool GetLaneWayFromDecisionPoint(WH_CELL startCell,
string cellModel,
string stockBarcode,
string[] endLineNumbers,
string lotNumber, out int selectedLaneWay , out string sResult)
{
selectedLaneWay = 0;
sResult = string.Empty;
string endDeviceList = "";
foreach (var endLineNumber in endLineNumbers)
{
if (endDeviceList=="")
{
endDeviceList = $"'{endLineNumber}'";
}
else
{
endDeviceList += $",'{endLineNumber}'";
}
}
string endDeviceCode = "";
var getSelectedLaneWay =
context.V_ManageInCount.FromSqlRaw($@"SELECT
t3.START_DEVICE,
t3.END_DEVICE,
t3.MANAGE_COUNT,
t3.ENABLE_CELL_COUNT
FROM
(
SELECT
top 4 t1.*,
ISNULL( t2.LOTCOUNTS, 0 ) LOTCOUNTS
FROM
(
( SELECT * FROM V_MANAGE_IN_COUNT WHERE START_DEVICE = '{startCell.DEVICE_CODE}' AND ENABLE_CELL_COUNT > 0
AND END_DEVICE in (SELECT DEVICE_CODE FROM WH_CELL WHERE CELL_TYPE = 'Cell' and LANE_WAY in ({endDeviceList}))) t1
LEFT JOIN ( SELECT ISNULL( COUNT ( DEVICE_CODE ), 0 ) LOTCOUNTS, DEVICE_CODE FROM V_STORAGE_LIST t2
WHERE LOTNUMBER = '{lotNumber}' GROUP BY DEVICE_CODE ) t2 ON t1.END_DEVICE = t2.DEVICE_CODE
)
ORDER BY
LOTCOUNTS,
ENABLE_CELL_COUNT DESC,
END_DEVICE DESC
) t3").ToList();
if (getSelectedLaneWay.Count > 0)
{
endDeviceCode = getSelectedLaneWay[0].END_DEVICE;
selectedLaneWay = whCellRepository.GetCell(endDeviceCode)!.CELL_ID;
return true;
}
else
{
sResult = "did not find the enable lane way";
return false;
}
}
/// <summary>
/// 手工入库获取终点货位信息
/// </summary>
/// <param name="startCell">起始位置</param>
/// <param name="endCellId">终点ID</param>
/// <param name="sResult">错误信息</param>
/// <returns></returns>
public bool GetCellLocationFromCheckPoint(WH_CELL startCell, out int endCellId, out string sResult)
{
bool bResult = true;
sResult = string.Empty;
endCellId = 0;
switch (startCell.CELL_MODEL)
{
case "CP":
var getPosition = context.Wh_Cell
.FromSqlRaw(
$@"SELECT TOP 1 CELL_ID,CELL_CODE FROM WH_CELL
WHERE CELL_STATUS = 'Nohave' AND RUN_STATUS = 'Enable' AND CELL_TYPE = 'Cell' AND LANE_WAY = '{startCell.LANE_WAY}'
ORDER BY CELL_X,CELL_Y")
.ToList();
if (getPosition is { Count: > 0 })
{
endCellId = getPosition[0].CELL_ID;
sResult = $"{startCell.CELL_CODE} (CP): get right end position:{getPosition[0].CELL_CODE}";
}
else
{
sResult = $"cell_model:{startCell.CELL_CODE} (CP); not find the enable position !";
bResult = false;
}
break;
case "MP":
case "EP":
var getManualPosition = context.V_WhCellEnable
.FromSqlRaw(
$@"SELECT TOP 1 CELL_ID,CELL_CODE FROM V_WH_CELL_ENABLE
WHERE LANE_WAY = '{startCell.LANE_WAY}'
ORDER BY PRIORITY,CELL_X,YPRIORITY,CELL_Y")
.ToList();
if (getManualPosition is { Count : >0})
{
endCellId = getManualPosition[0].CELL_ID;
sResult = $"{startCell.CELL_CODE} (EP): get right end position:{getManualPosition[0].CELL_CODE}";
}
else
{
sResult = $"cell_model:{startCell.CELL_CODE} (EP); not find the enable position !";
bResult = false;
}
break;
default:
goto case "EP";
break;
}
logger.LogInformation(sResult);
return bResult;
}
}