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_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
{
//屏蔽MES
if (json.Position == "EL01RB")
{
//焊装提升机
HZPassTZ(json);
}
else
{
///涂装提升机
TZPassZZ(json);
}
var carInfo = _carBodyInfoRepository.QueryFirst(x => x.RFID == json.PVI && x.PalletCode == json.PalletCode);
if (carInfo == null) throw new Exception("未知车身信息,无法入库");
//{
// 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 maxGroup = _locationRepository.QueryData(x => (x.LocationType == carInfo.CarType || x.LocationType == 3) && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable)
.GroupBy(x => x.RoadwayNo)
.OrderByDescending(g => g.Count()) // 根据每个组的元素数量排序
.ToList(); // 取出数量最多的组
Dictionary result = new Dictionary();
foreach (var item in maxGroup)
{
var number = _taskRepository.QueryData(x => x.TargetAddress == item.Key).Count();
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);
Dt_StationManager station = null;
if (stationList.Count > 1)
{
var task = _taskRepository.QueryData(x => x.Roadway == stationList.FirstOrDefault().Roadway).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,
};
_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;
}
}
}