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.
269 lines
14 KiB
269 lines
14 KiB
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Identity.Client.Extensions.Msal;
|
|
using System.Drawing;
|
|
using WMS_GIRAF_Interface.Data;
|
|
using WMS_GIRAF_Interface.Entities;
|
|
using WMS_GIRAF_Interface.Models;
|
|
using WMS_GIRAF_Interface.Repositories.Interface;
|
|
using WMS_GIRAF_Interface.TaskServices;
|
|
|
|
namespace WMS_GIRAF_Interface.Controllers
|
|
{
|
|
[ApiController, Route("/Output")]
|
|
public class OutputRequestController(
|
|
MichelinDbContext context,
|
|
IdestinationIdRepository destinationIdRepository,
|
|
ManageTaskService manageTaskService,
|
|
IManageMainRepository manageMainRepository,
|
|
IWhCellRepository whCellRepository,
|
|
IProductInformationRepository productInformationRepository,
|
|
IIoControlRepository ioControlRepository,
|
|
IIoControlRouteRepository ioControlRouteRepository,
|
|
IStorageMainRepository storageMainRepository,
|
|
CellLogicService cellLogicService)
|
|
: ControllerBase
|
|
{
|
|
/// <summary>
|
|
/// 根据产品ID生成出库任务
|
|
/// </summary>
|
|
/// <param name="outputRequest"></param>
|
|
[HttpPost("ByProductIds")]
|
|
public OutputRequestByProductIdsReturn OutputRequestByProductIds(OutputRequestByProductIds.RootObjectForOutputRequestByProductIds? outputRequest)
|
|
{
|
|
bool bResult = true;
|
|
string sResult = string.Empty;
|
|
OutputRequestByProductIdsReturn returnJsonString = new OutputRequestByProductIdsReturn();
|
|
if (outputRequest!=null)
|
|
{
|
|
//判断当前出库终点是否存在
|
|
var checkDestinationId = destinationIdRepository.GetDestinationId(outputRequest.evacuationPost);
|
|
if (checkDestinationId != null)
|
|
{
|
|
//轮询轮胎号来生成出库任务
|
|
if (outputRequest.productIds is{Length:>0})
|
|
{
|
|
|
|
foreach (var outputRequestProductId in outputRequest.productIds)
|
|
{
|
|
//根据productId生成出库任务,终点选择当前巷道的自动出库站台
|
|
var productInfo = context.V_StorageList.FirstOrDefault(x => x.STOCK_BARCODE == outputRequestProductId)
|
|
;
|
|
|
|
if (productInfo != null)
|
|
{
|
|
//根据device Code 判断路径可用性
|
|
if (!string.IsNullOrEmpty(productInfo.DEVICE_CODE) && !string.IsNullOrEmpty(checkDestinationId.AREA))
|
|
{
|
|
var ioControlRoute = ioControlRouteRepository.GetRouteByStartDeviceAndControlRouteCode(productInfo.DEVICE_CODE, checkDestinationId.AREA);
|
|
if (ioControlRoute is { CONTROL_ROUTE_STATUS: 1 })
|
|
{
|
|
var endStationId = whCellRepository.GetCell(ioControlRoute.END_DEVICE);
|
|
if (endStationId!=null)
|
|
{
|
|
MANAGE_MAIN manageMain = new MANAGE_MAIN
|
|
{
|
|
requestNumber = outputRequest.outputRequestId,
|
|
//20180811,gh修改,临时使用,使用plan_id字段,区别指定条码要胎的流程,该流程取货空后不做任何处理
|
|
PLAN_ID = 1,
|
|
MANAGE_TYPE_CODE = "ManageDown",
|
|
STOCK_BARCODE = productInfo.STOCK_BARCODE,
|
|
START_CELL_ID = productInfo.CELL_ID,
|
|
END_CELL_ID = endStationId.CELL_ID,
|
|
MANAGE_OPERATOR = "AUTO", // wyb 自动出库
|
|
MANAGE_BEGIN_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
|
MANAGE_STATUS = "WaitingSend",
|
|
MANAGE_LEVEL = string.Empty,
|
|
MANAGE_REMARK = string.Empty,
|
|
keepRequestInMemoryEvenIfMechanicalIssue = true,
|
|
DESTINATIONID = outputRequest.evacuationPost,
|
|
TargetOutputDateInUtc = Convert.ToDateTime(outputRequest.expectedCompletionDate) ,
|
|
CELL_MODEL = productInfo.CELL_MODEL,
|
|
//tlt20210913:添加CV标志
|
|
POPULATIONNUMBER = "TO_CV",
|
|
};
|
|
//Add task and control task
|
|
bResult = manageTaskService.CreateOutputTaskFromGiraf(manageMain, productInfo.CELL_ID, true, out sResult);
|
|
if (bResult)
|
|
{
|
|
returnJsonString.status = "1";
|
|
returnJsonString.evacuationPost = outputRequest.evacuationPost;
|
|
returnJsonString.estimatedExitTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
returnJsonString.errorDetails += $"RefusedBecauseUnknownEvacuationPost{outputRequestProductId}";
|
|
}
|
|
else
|
|
{
|
|
returnJsonString.status = "0";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime =string.Empty;
|
|
returnJsonString.errorDetails += $"Create Task have errors:{sResult[..200]}";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//终点信息不对
|
|
returnJsonString.status = "3";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime = string.Empty;
|
|
returnJsonString.errorDetails += $"RefusedBecauseUnknownEvacuationPost{outputRequestProductId}";
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//判断路径信息不全,无法进行判断
|
|
//未找到指定条码
|
|
returnJsonString.status = "3";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime = string.Empty;
|
|
returnJsonString.errorDetails += $"RefusedBecauseUnknownPost{outputRequestProductId}";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
//未找到指定条码
|
|
returnJsonString.status = "4";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime = string.Empty;
|
|
returnJsonString.errorDetails += $"RefusedBecauseLackOfBarcode{outputRequestProductId}";
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//无可用的轮胎号列表
|
|
returnJsonString.status = "3";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime = string.Empty;
|
|
returnJsonString.errorDetails = "RefusedBecauseEmptyProductIds";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
returnJsonString.status = "3";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime = string.Empty;
|
|
returnJsonString.errorDetails = "RefusedBecauseUnknownPostNumber";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
//当前入参为空
|
|
returnJsonString.status = "3";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime = string.Empty;
|
|
returnJsonString.errorDetails = "RefusedBecauseEmptyInputParameter";
|
|
}
|
|
return returnJsonString;
|
|
}
|
|
/// <summary>
|
|
/// 根据Sku生成出库任务
|
|
/// SendOutputRequestByLotWithManyPool
|
|
/// </summary>
|
|
/// <param name="outputRequest"></param>
|
|
[HttpPost("BySku")]
|
|
public OutputRequestBySkuReturn OutputRequestBySku(OutputRequestBySku.RootObjectForOutputRequestBySku? outputRequest)
|
|
{
|
|
bool bResult = true;
|
|
string sResult = string.Empty;
|
|
OutputRequestBySkuReturn returnJsonString = new OutputRequestBySkuReturn();
|
|
if (outputRequest!=null)
|
|
{
|
|
//先判断当前sku是否有可用库存,然后筛选出库,如果没有的话就就启用备用sku的库存出库
|
|
if (context.V_StorageList.FromSqlRaw($"SELECT TOP 1 STOCK_BARCODE FROM V_STORAGE_LIST WHERE requestNumber = '{outputRequest.outputRequestId}'").ToList().Count>0)
|
|
{
|
|
returnJsonString.status = "0";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime = string.Empty;
|
|
returnJsonString.errorDetails = "RefusedBecauseSameRequestNumber";
|
|
}
|
|
else
|
|
{
|
|
//检查post number
|
|
var checkPost =
|
|
destinationIdRepository.GetDestinationId(outputRequest.evacuationPost);
|
|
if (checkPost==null)
|
|
{
|
|
returnJsonString.status = "0";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime = string.Empty;
|
|
returnJsonString.errorDetails = "RefusedBecauseUnknownPostNumber";
|
|
}
|
|
else
|
|
{
|
|
//tlt:根据SKu来筛选物料信息
|
|
//无需筛选巷道状态,直接选择可用轮胎,只需考虑availableEvacuationPosts即可,筛选lane_way
|
|
#region outlevel 4/3/2/1
|
|
|
|
string temp = $@"SELECT TOP 1 STORAGE_ID FROM V_STORAGE_LIST
|
|
WHERE RUN_STATUS = 'Enable'
|
|
AND (requestNumber IS NULL OR requestNumber = '')
|
|
AND IsBlocked = {(outputRequest.productIsBlocked ? 1 : 0)}
|
|
AND LOTNUMBER = '{outputRequest.sku}'
|
|
AND PopulationNumber = '{outputRequest.productClass}'
|
|
AND Lane_way IN ({string.Join(",", outputRequest.availableEvacuationPosts)})
|
|
ORDER BY OutLevel DESC , HdvDateTimeInUtc";
|
|
|
|
var checkHighPriorityTire = context.V_StorageList.FromSqlRaw(
|
|
$@"SELECT TOP 1 STORAGE_ID FROM V_STORAGE_LIST
|
|
WHERE RUN_STATUS = 'Enable'
|
|
AND (requestNumber IS NULL OR requestNumber = '')
|
|
AND IsBlocked = {(outputRequest.productIsBlocked ? 1 : 0)}
|
|
AND LOTNUMBER = '{outputRequest.sku}'
|
|
AND PopulationNumber = '{outputRequest.productClass}'
|
|
AND Lane_way IN ({string.Join(",",outputRequest.availableEvacuationPosts)})
|
|
ORDER BY OutLevel DESC , HdvDateTimeInUtc").ToList();
|
|
|
|
if (checkHighPriorityTire.Count > 0)
|
|
{
|
|
//选择当前的可用的轮胎,更新需求号
|
|
var storageId = checkHighPriorityTire[0].STORAGE_ID;
|
|
if (storageId != 0 && storageId !=null)
|
|
{
|
|
var getStorageMain = storageMainRepository.GetStorageMain("StorageId", storageId.ToString());
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//当前入参为空
|
|
returnJsonString.status = "3";
|
|
returnJsonString.evacuationPost = string.Empty;
|
|
returnJsonString.estimatedExitTime = string.Empty;
|
|
returnJsonString.errorDetails = "RefusedBecauseEmptyInputParameter";
|
|
}
|
|
return returnJsonString;
|
|
}
|
|
|
|
[HttpPut]
|
|
public void UpdateOutputRequest(UpdateOutputRequest.RootObjectForUpdateOutputRequest updateOutputRequest)
|
|
{
|
|
|
|
}
|
|
|
|
[HttpPost("Cancel")]
|
|
public void CancelOutputRequest(CancelOutputRequest.RootObjectForCancelOutputRequest cancelOutputRequest)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|