using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.Enums;
using WIDESEA_DTO;
using WIDESEA_Model.Models;
using WIDESEA_Repository;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEA_StoragIntegrationServices
{
public partial class WCSService
{
///
/// 请求入库巷道号
///
///
///
public WebResponseContent RequestInboundRoadWayNo(RequestTaskDto json)
{
WebResponseContent response = new WebResponseContent();
try
{
//如任务已存在则 返回此任务
var checkTask = _taskRepository.QueryFirst(x => x.PalletCode == json.PalletCode && x.PVI == json.PVI);
if (checkTask != null)
{
return response.OK("申请入库成功", data: checkTask);
}
var carInfo = _carBodyInfoRepository.QueryFirst(x => x.RFID == json.PVI && x.PalletCode == json.PalletCode);
if (carInfo == null) throw new Exception("未知车身信息,无法入库");
//屏蔽MES
if (json.Position == "EL01RB")
{
//焊装提升机
HZPassTZ(json);
}
else
{
///涂装提升机
TZPassZZ(json);
}
//{
// Dt_CarBodyInfo _CarBodyInfo = new Dt_CarBodyInfo //测试
// {
// PVI = "J25000660",
// RFID = json.PVI,
// BodyStatus = 0,
// CarType = 1,
// };
//}
List roadWays = new List();
if (carInfo.CarType == 1)
{
roadWays = _roadWayRepository.QueryData(x => x.WirteCar == 1);
}
else if (carInfo.CarType == 2)
{
roadWays = _roadWayRepository.QueryData(x => x.WirteCar == 2);
}
//var locations = _locationRepository.QueryData(x => (x.LocationType == carInfo.CarType || x.LocationType == 3) && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable);
var maxGroup = _locationRepository.QueryData(x => x.LocationType == carInfo.CarType && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable)
.GroupBy(x => x.RoadwayNo)
.OrderByDescending(g => g.Count()) // 根据每个组的元素数量排序
.ToList(); // 取出数量最多的组
if (maxGroup.Count == 0)
{
maxGroup = _locationRepository.QueryData(x => x.LocationType == (int)BodyType.Empty && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable)
.GroupBy(x => x.RoadwayNo)
.OrderByDescending(g => g.Count()) // 根据每个组的元素数量排序
.ToList(); // 取出数量最多的组
}
if (maxGroup.Count == 0) return response.Error(12, "无可用库位");
Dictionary result = new Dictionary();
foreach (var item in maxGroup)
{
var number = _taskRepository.QueryData(x => x.RoadwayNo == item.Key && x.CarType == carInfo.CarType && (x.TaskType == (int)TaskInboundTypeEnum.Inbound || x.TaskType == (int)TaskInboundTypeEnum.InTray)).Count();
if (item.Count() - number <= 0)
{
continue;
}
result.Add(item.Key, item.Count() - number);
}
string maxRoadwayNo = result.OrderByDescending(x => x.Value).FirstOrDefault().Key; // 数量最多的组的Key
var stationList = _stationManagerRepository.QueryData(x => x.RoadwayNo == maxRoadwayNo && x.stationArea == json.area && x.stationType == 1 && x.stationStatus == "1");
Dt_StationManager station = null;
if (stationList.Count > 1)
{
var task = _taskRepository.QueryData(x => x.Roadway == stationList.FirstOrDefault().Roadway && x.TaskType == (int)TaskInboundTypeEnum.Inbound).OrderByDescending(x => x.CreateDate).FirstOrDefault();
if (task != null) station = stationList.Where(x => x.stationChildCode != task.NextAddress && x.stationChildCode != task.CurrentAddress).FirstOrDefault();
else station = stationList.FirstOrDefault();
}
else
{
station = stationList.FirstOrDefault();
}
//var location = _taskService.RequestLocation(station.RoadwayNo, carInfo.CarType);
//if (location == null)
//{
// return response.Error("无法获取货位信息或库位已满");
//}
var newtask = new Dt_Task
{
CurrentAddress = json.Position,
Grade = 1,
Roadway = station.Roadway,
TargetAddress = station.Roadway,
//Dispatchertime = DateTime.Now,
NextAddress = station.stationChildCode,
OrderNo = null,
PalletCode = json.PalletCode,
SourceAddress = json.Position,
TaskState = (int)TaskInStatusEnum.InNew,
TaskType = (int)TaskInboundTypeEnum.Inbound,
TaskNum = _taskRepository.GetTaskNo().Result,
Creater = "Systeam",
PVI = json.PVI,
CarType = carInfo.CarType,
RoadwayNo = station.RoadwayNo
};
_unitOfWorkManage.BeginTran();
_taskRepository.AddData(newtask);
//location.LocationStatus = (int)LocationEnum.InStockDisable;
//_locationRepository.UpdateData(location);
_unitOfWorkManage.CommitTran();
response.OK("申请入库成功", data: newtask);
//response.OK(data: maxRoadwayNo);
}
catch (Exception ex)
{
response.Error($"请求巷道号失败:{ex.Message}");
}
return response;
}
}
}