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 { /// /// 根据产品ID生成出库任务 /// /// [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) { } } }