米其林项目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.

182 lines
9.8 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,
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;
}
[HttpPost("BySku")]
public void OutputRequestBySku(OutputRequestBySku.RootObjectForOutputRequestBySku outputRequest)
{
}
[HttpPut]
public void UpdateOutputRequest(UpdateOutputRequest.RootObjectForUpdateOutputRequest updateOutputRequest)
{
}
[HttpPost("Cancel")]
public void CancelOutputRequest(CancelOutputRequest.RootObjectForCancelOutputRequest cancelOutputRequest)
{
}
}
}