using MailKit.Search;
|
using Microsoft.AspNetCore.Http;
|
using Microsoft.Extensions.Logging;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection;
|
using System.Reflection.Metadata;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Common.LocationEnum;
|
using WIDESEA_Common.Log;
|
using WIDESEA_Common.StockEnum;
|
using WIDESEA_Common.TaskEnum;
|
using WIDESEA_Core;
|
using WIDESEA_Core.Enums;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_DTO.Inbound;
|
using WIDESEA_DTO.Task;
|
using WIDESEA_Model.Models;
|
using static WIDESEA_ITaskInfoService.ITaskService;
|
|
namespace WIDESEA_TaskInfoService
|
{
|
public partial class WMSCruJob
|
{
|
/// <summary>
|
/// 判断巷道内移库
|
/// </summary>
|
/// <param name="TaskNum"></param>
|
/// <param name="SourceAddress"></param>
|
/// <returns></returns>
|
public WebResponseContent JudgmentIsRelocations(Dt_Task dt_Task)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
string Locationcodeadd = dt_Task.TaskType == (int)TaskTypeEnum.Inbound ? dt_Task.NextAddress : dt_Task.CurrentAddress;
|
Dt_LocationInfo dt_Location = _locationInfoService.FindStorageLocation(Locationcodeadd);
|
if (dt_Location == null) { return content.Error("未能查找到库位"); }
|
if (dt_Location.RoadwayNo == "5") return content.OK(); //浅货位直接返回,可下发出入口任务
|
if(dt_Location.Depth == 1 && dt_Task.TaskType== (int)TaskTypeEnum.Outbound) return content.OK();
|
|
int locrow = _locationInfoService.judgmentRow(dt_Location.RoadwayNo, dt_Location.Row);
|
Dt_LocationInfo shallowLocation = _locationInfoService.ShallowGetLocation(dt_Location.RoadwayNo, dt_Location.LocationType, locrow, dt_Location.Layer, dt_Location.Column);
|
if (dt_Location.Depth == 1 && dt_Task.TaskType == (int)TaskTypeEnum.Inbound)
|
{
|
if (shallowLocation.LocationStatus == (int)LocationStatusEnum.InStock) return content.OK();
|
return content.Error($"入库至深库位,但是浅货位有货,任务号:{dt_Task.TaskId},托盘条码");
|
}
|
if (shallowLocation.LocationStatus == (int)LocationStatusEnum.Free) return content.OK();
|
|
|
//判断当前浅货位是否有出库任务
|
var OutTask = _taskService.GeOutCuTaskQueue(shallowLocation.LocationCode);
|
if (OutTask != null)
|
{
|
//进行下发给堆垛机任务
|
WCSginseng outresult = _taskService.SC_IssueTasks(OutTask.TaskId, int.Parse(OutTask.Roadway), OutTask.TaskNum, OutTask.PalletCode, int.Parse(OutTask.PalletType), OutTask.CurrentAddress, OutTask.NextAddress, OutTask.TargetAddress);
|
if (outresult.IsSuccess)
|
{
|
|
OutTask.TaskStatus = (int)OutTaskStatusEnum.SC_OutExecuting;
|
_taskService.UpdateData(OutTask);
|
return content.OK();
|
}
|
else
|
{
|
UpdateTaskStatus(dt_Task, outresult,0, 1);
|
|
return content.Error($"下发wcs失败,原因:{outresult.Message}");
|
}
|
}
|
|
|
//判断是否有移库任务
|
var TransferTask = _taskService.GeRelocationTaskQueue(shallowLocation.LocationCode);
|
if (TransferTask != null)
|
{
|
//进行下发给堆垛机任务
|
WCSginseng result = _taskService.SC_IssueTasks(TransferTask.TaskId,int.Parse(TransferTask.Roadway),TransferTask.TaskNum,TransferTask.PalletCode,int.Parse(TransferTask.PalletType),TransferTask.CurrentAddress,TransferTask.NextAddress,dt_Task.TargetAddress);
|
if (result.IsSuccess)
|
{
|
TransferTask.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting;
|
_taskService.UpdateData(TransferTask);
|
return content.OK();
|
}
|
else
|
{
|
UpdateTaskStatus(dt_Task, result,0,1); //默认不需要更改状态传0
|
|
return content.Error($"下发wcs失败,原因:{result.Message}");
|
}
|
}
|
|
var CuttTransferTask = _taskService.RelocationTaskProgress(dt_Task.Roadway);
|
//判断当前是否有移库任务
|
if (CuttTransferTask) return content.Error("当前有移库任务,不可下发");
|
|
|
if (shallowLocation.LocationStatus != (int)LocationStatusEnum.InStock) return content.Error($"库位状态异常,当前状态:{(LocationStatusEnum)shallowLocation.LocationStatus},应为:{LocationStatusEnum.InStock}");
|
|
//生成移库任务
|
return content = GenerateTransferTask(shallowLocation.LocationCode);
|
}
|
catch (Exception ex)
|
{
|
return content.Error($"判断巷道内移库,失败,方法内故障,原因:{ex.Message}");
|
|
}
|
}
|
|
|
//生成移库任务
|
public WebResponseContent GenerateTransferTask(string shallowLocation)
|
{
|
WebResponseContent webResponse = new WebResponseContent();
|
try
|
{
|
Dt_LocationInfo OriginalLocation = _locationInfoService.Repository.QueryData(x => x.LocationCode == shallowLocation).FirstOrDefault();
|
Dt_StockInfo dt_StockInfo = _stockInfoService.Repository.QueryData(x => x.LocationCode == shallowLocation).FirstOrDefault();
|
Dt_LocationInfo newLocation = _locationInfoService.GetLocation(OriginalLocation.RoadwayNo, OriginalLocation.LocationType);
|
List<Dt_LocationInfo> dt_Locations = new List<Dt_LocationInfo>();
|
var TransferTask = _taskService.GeRelocationTaskQueue(shallowLocation);
|
MES_parameter mES_Parame = _taskService.ApplicationChangeStorageLocation(dt_StockInfo.PalletCode, OriginalLocation.LocationCode, newLocation.LocationCode);
|
if (mES_Parame != null)
|
{
|
if (mES_Parame.Result == "Y")
|
{
|
//进行生成任务,下发任务至MES
|
Dt_Task task = new Dt_Task();
|
task.TaskNum = "0";
|
task.PalletCode = dt_StockInfo.PalletCode;
|
task.PalletType = dt_StockInfo.PalletType;
|
task.Roadway = OriginalLocation.RoadwayNo;
|
task.TaskType = (int)TaskTypeEnum.Relocation;
|
task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationNew;
|
task.SourceAddress = OriginalLocation.LocationCode;
|
task.TargetAddress = newLocation.LocationCode;
|
task.CurrentAddress = OriginalLocation.LocationCode;
|
task.NextAddress = newLocation.LocationCode;
|
task.WarehouseId = OriginalLocation.WarehouseId;
|
task.OrderNo = "";
|
task.Grade = 1;
|
task.Creater = "MES";
|
task.CreateDate = DateTime.Now;
|
|
OriginalLocation.LocationStatus = (int)LocationStatusEnum.Lock;
|
newLocation.LocationStatus = (int)LocationStatusEnum.Lock;
|
dt_StockInfo.StockStatus = (int)StockStatusEmun.移库锁定;
|
|
dt_Locations.Add(OriginalLocation);
|
dt_Locations.Add(newLocation);
|
|
_unitOfWorkManage.BeginTran();
|
|
int TaskId = _taskService.Repository.AddData(task);
|
_locationInfoService.UpdateData(dt_Locations);
|
_stockInfoService.UpdateData(dt_StockInfo);
|
_unitOfWorkManage.CommitTran();
|
return webResponse.Error("已生成移库任务");
|
}
|
else
|
{
|
|
WriteLog.Write_Log("WMS_移库故障", $"EMS申请储位异动返回失败内容", "失败", $"MES不允许移动====>>>>返回内容:{mES_Parame.ToJson()}");
|
return webResponse.Error($"申请储位异动,MES不允许移动====>>>>返回内容:{mES_Parame.ToJson()}");
|
}
|
}
|
else
|
{
|
WriteLog.Write_Log("WMS_移库故障", $"EMS申请储位异动返回失败内容", "失败", $"申请储位异动,MES返回为空");
|
return webResponse.Error("申请储位异动,MES返回为空");
|
}
|
|
//进行下发给堆垛机任务
|
/*WCSginseng result = _taskService.SC_IssueTasks(
|
TaskId,
|
int.Parse(task.Roadway),
|
task.TaskNum,
|
task.PalletCode,
|
int.Parse(task.PalletType),
|
task.CurrentAddress,
|
task.NextAddress,
|
task.TargetAddress);
|
if (result.IsSuccess)
|
{
|
Dt_Task dt_Task=_taskService.Repository.QueryFirst(x=>x.TaskId== task.TaskId);
|
dt_Task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting;
|
_taskService.UpdateData(dt_Task);
|
return webResponse.OK();
|
}
|
else
|
{
|
return webResponse.Error($"下发移库失败,原因:{result.Message}");
|
}*/
|
|
/* MES_parameter mES_Parame = _taskService.ApplicationChangeStorageLocation(dt_StockInfo.PalletCode, OriginalLocation.LocationCode, newLocation.LocationCode);
|
if (mES_Parame != null)
|
{
|
if (mES_Parame.Result == "Y")
|
{
|
//进行生成任务,下发任务至MES
|
Dt_Task task = new Dt_Task();
|
task.TaskNum = "0";
|
task.PalletCode = dt_StockInfo.PalletCode;
|
task.PalletType = dt_StockInfo.PalletType;
|
task.Roadway = OriginalLocation.RoadwayNo;
|
task.TaskType = (int)TaskTypeEnum.Relocation;
|
task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationNew;
|
task.SourceAddress = OriginalLocation.LocationCode;
|
task.TargetAddress = newLocation.LocationCode;
|
task.CurrentAddress = OriginalLocation.LocationCode;
|
task.NextAddress = newLocation.LocationCode;
|
task.WarehouseId = OriginalLocation.WarehouseId;
|
task.OrderNo = "";
|
task.Grade = 1;
|
task.Creater = "MES";
|
task.CreateDate = DateTime.Now;
|
|
OriginalLocation.LocationStatus = (int)LocationStatusEnum.Lock;
|
newLocation.LocationStatus = (int)LocationStatusEnum.Lock;
|
dt_StockInfo.StockStatus = (int)StockStatusEmun.移库锁定;
|
|
dt_Locations.Add(OriginalLocation);
|
dt_Locations.Add(newLocation);
|
|
_unitOfWorkManage.BeginTran();
|
|
int TaskId = _taskService.Repository.AddData(task);
|
_locationInfoService.UpdateData(dt_Locations);
|
_stockInfoService.UpdateData(dt_StockInfo);
|
_unitOfWorkManage.CommitTran();
|
|
|
//return webResponse.Error("已生成移库任务");
|
//进行下发给堆垛机任务
|
WCSginseng result = _taskService.SC_IssueTasks(
|
TaskId,
|
int.Parse(task.Roadway),
|
task.TaskNum,
|
task.PalletCode,
|
int.Parse(task.PalletType),
|
task.CurrentAddress,
|
task.NextAddress,
|
task.TargetAddress);
|
if (result.IsSuccess)
|
{
|
task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting;
|
_taskService.UpdateData(task);
|
return webResponse.OK();
|
}
|
else
|
{
|
return webResponse.Error($"下发移库失败,原因:{result.Message}");
|
}
|
}
|
else
|
{
|
return webResponse.Error($"申请储位异动,MES不允许移动====>>>>返回内容:{mES_Parame.ToJson()}");
|
}
|
}
|
else
|
{
|
return webResponse.Error("申请储位异动,MES返回为空");
|
}*/
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return webResponse.Error($"移库任务生成方法,系统故障,原因:{ex.Message}");
|
}
|
}
|
|
}
|
}
|