|
using Newtonsoft.Json.Serialization;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Common.APIEnum;
|
using WIDESEA_Common.CommonEnum;
|
using WIDESEA_Common.LocationEnum;
|
using WIDESEA_Common.OtherEnum;
|
using WIDESEA_Common.StockEnum;
|
using WIDESEA_Common.TaskEnum;
|
using WIDESEA_Common.WareHouseEnum;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_Core.Enums;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_DTO;
|
using WIDESEA_DTO.ERP;
|
using WIDESEA_DTO.MES;
|
using WIDESEA_ITaskInfoRepository;
|
using WIDESEA_ITaskInfoService;
|
using WIDESEA_Model.Models;
|
using WIDESEA_Common.OrderEnum;
|
using System.Diagnostics.Metrics;
|
using System.Reflection.Metadata;
|
using WIDESEA_DTO.Task;
|
using WIDESEA_DTO.Stock;
|
using SqlSugar;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
|
|
namespace WIDESEA_TaskInfoService
|
{
|
public partial class TaskService
|
{
|
static object lock_out = new object();
|
|
static object solderMask_out = new object();
|
|
/// <summary>
|
/// 测试架出仓
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public MesResponseContent TestToolOut(TestToolOutModel model)
|
{
|
lock (lock_out)
|
{
|
MesResponseContent responseContent = new MesResponseContent();
|
try
|
{
|
Dt_Task exsit = Repository.QueryFirst(x => x.TargetAddress == model.TargetAddressCode);
|
if (exsit != null)
|
{
|
return responseContent.Error($"目标地址重复");
|
}
|
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString());
|
//获取库存记录
|
List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
|
x.WarehouseId == warehouse.WarehouseId &&
|
x.StockStatus == (int)StockStatusEmun.入库完成).Includes(x => x.Details).ToList();
|
Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.ToolCode));
|
if (stockInfo == null)
|
{
|
return responseContent.Error($"测试架:{model.ToolCode}无可用库存");
|
}
|
Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
|
if (exsit2 != null)
|
{
|
return responseContent.Error($"测试架批次号重复");
|
}
|
|
Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode &&
|
x.WarehouseId == stockInfo.WarehouseId &&
|
x.LocationStatus == (int)LocationStatusEnum.InStock &&
|
(x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
|
if (locationInfo == null)
|
{
|
return responseContent.Error($"测试架货位:{stockInfo.LocationCode}出库条件不满足");
|
}
|
//生成测试架出库任务 锁定库存 更改货位状态
|
Dt_Task taskOut = new()
|
{
|
CurrentAddress = stockInfo.LocationCode,
|
Grade = 0,
|
PalletCode = stockInfo.PalletCode,
|
NextAddress = "",
|
Roadway = locationInfo.RoadwayNo,
|
SourceAddress = stockInfo.LocationCode,
|
TargetAddress = model.TargetAddressCode,
|
TaskStatus = (int)TaskStatusEnum.New,
|
TaskType = (int)TaskTypeEnum.Outbound,
|
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
|
PalletType = stockInfo.PalletType,
|
WarehouseId = stockInfo.WarehouseId,
|
};
|
string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
|
float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
|
if (MaterielCode != null && Quantity != null)
|
{
|
taskOut.MaterielCode = MaterielCode;
|
taskOut.Quantity = Quantity;
|
}
|
stockInfo.StockStatus = (int)StockStatusEmun.出库锁定;
|
LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
|
locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
|
//判断是否有出库单信息
|
_unitOfWorkManage.BeginTran();
|
//更新库存状态
|
_stockRepository.StockInfoRepository.UpdateData(stockInfo);
|
//更新货位状态
|
_basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
|
//新建任务
|
BaseDal.AddData(taskOut);
|
//加入货位变动记录
|
_recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
|
_unitOfWorkManage.CommitTran();
|
//将任务推送到WCS
|
PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV_CSJ");
|
responseContent.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
responseContent.Error(ex.Message);
|
}
|
return responseContent;
|
}
|
}
|
public MesResponseContent SolderMaskOutNotice(SolderMaskOutNotice model)
|
{
|
lock (solderMask_out)
|
{
|
MesResponseContent responseContent = new MesResponseContent();
|
try
|
{
|
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString());
|
//获取库存记录
|
List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
|
x.WarehouseId == warehouse.WarehouseId &&
|
x.StockStatus == (int)StockStatusEmun.入库完成).Includes(x => x.Details).ToList();
|
Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.LotNo));
|
if (stockInfo == null)
|
{
|
return responseContent.Error($"防焊库:无{model.LotNo}可用库存");
|
}
|
Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
|
if (exsit2 != null)
|
{
|
return responseContent.Error($"防焊任务{stockInfo.PalletCode}已存在");
|
}
|
|
Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode &&
|
x.WarehouseId == stockInfo.WarehouseId &&
|
x.LocationStatus == (int)LocationStatusEnum.InStock &&
|
(x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
|
if (locationInfo == null)
|
{
|
return responseContent.Error($"防焊货位:{stockInfo.LocationCode}出库条件不满足");
|
}
|
//生成防焊出库任务 锁定库存 更改货位状态
|
Dt_Task taskOut = new()
|
{
|
CurrentAddress = stockInfo.LocationCode,
|
Grade = 0,
|
PalletCode = stockInfo.PalletCode,
|
NextAddress = "",
|
Roadway = locationInfo.RoadwayNo,
|
SourceAddress = stockInfo.LocationCode,
|
TargetAddress = model.TargetAddressCode,
|
TaskStatus = (int)TaskStatusEnum.New,
|
TaskType = stockInfo.PalletType<2 ? (int)TaskTypeEnum.MaskOutNoticeSmall : (int)TaskTypeEnum.MaskOutNoticeLarge,
|
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
|
PalletType = stockInfo.PalletType,
|
WarehouseId = stockInfo.WarehouseId,
|
};
|
string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
|
float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
|
if (MaterielCode != null && Quantity != null)
|
{
|
taskOut.MaterielCode = MaterielCode;
|
taskOut.Quantity = Quantity;
|
}
|
stockInfo.StockStatus = (int)StockStatusEmun.出库锁定;
|
LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
|
locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
|
//判断是否有出库单信息
|
_unitOfWorkManage.BeginTran();
|
//更新库存状态
|
_stockRepository.StockInfoRepository.UpdateData(stockInfo);
|
//更新货位状态
|
_basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
|
//新建任务
|
BaseDal.AddData(taskOut);
|
//加入货位变动记录
|
_recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
|
_unitOfWorkManage.CommitTran();
|
//将任务推送到WCS
|
PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV_ZH");
|
responseContent.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
responseContent.Error(ex.Message);
|
}
|
return responseContent;
|
}
|
}
|
|
public MesResponseContent SolderMaskOut(SolderMaskOut model)
|
{
|
lock (solderMask_out)
|
{
|
MesResponseContent responseContent = new MesResponseContent();
|
try
|
{
|
|
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString());
|
//获取库存记录
|
List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
|
x.WarehouseId == warehouse.WarehouseId &&
|
x.StockStatus == (int)StockStatusEmun.入库完成).Includes(x => x.Details).ToList();
|
Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.LotNo));
|
if (stockInfo == null)
|
{
|
return responseContent.Error($"防焊库:无{model.LotNo}可用库存");
|
}
|
Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
|
if (exsit2 != null)
|
{
|
return responseContent.Error($"防焊任务{stockInfo.PalletCode}已存在");
|
}
|
|
Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode &&
|
x.WarehouseId == stockInfo.WarehouseId &&
|
x.LocationStatus == (int)LocationStatusEnum.InStock &&
|
(x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
|
if (locationInfo == null)
|
{
|
return responseContent.Error($"防焊货位:{stockInfo.LocationCode}出库条件不满足");
|
}
|
//生成防焊出库任务 锁定库存 更改货位状态
|
Dt_Task taskOut = new()
|
{
|
CurrentAddress = stockInfo.LocationCode,
|
Grade = 0,
|
PalletCode = stockInfo.PalletCode,
|
NextAddress = "",
|
Roadway = locationInfo.RoadwayNo,
|
SourceAddress = stockInfo.LocationCode,
|
TargetAddress = model.TargetAddressCode,
|
TaskStatus = (int)TaskStatusEnum.New,
|
TaskType = stockInfo.PalletType < 2 ? (int)TaskTypeEnum.MaskOutSmall : (int)TaskTypeEnum.MaskOutLarge,
|
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
|
PalletType = stockInfo.PalletType,
|
WarehouseId = stockInfo.WarehouseId,
|
};
|
string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
|
float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
|
if (MaterielCode != null && Quantity != null)
|
{
|
taskOut.MaterielCode = MaterielCode;
|
taskOut.Quantity = Quantity;
|
}
|
stockInfo.StockStatus = (int)StockStatusEmun.出库锁定;
|
LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
|
locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
|
//判断是否有出库单信息
|
_unitOfWorkManage.BeginTran();
|
//更新库存状态
|
_stockRepository.StockInfoRepository.UpdateData(stockInfo);
|
//更新货位状态
|
_basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
|
//新建任务
|
BaseDal.AddData(taskOut);
|
//加入货位变动记录
|
_recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
|
_unitOfWorkManage.CommitTran();
|
//将任务推送到WCS
|
PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV_ZH");
|
responseContent.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
responseContent.Error(ex.Message);
|
}
|
return responseContent;
|
}
|
}
|
/// <summary>
|
/// 测试架退库
|
/// </summary>
|
/// <returns></returns>
|
public MesResponseContent TestToolBack(TestToolBackModel backModel)
|
{
|
MesResponseContent responseContent = new MesResponseContent();
|
try
|
{
|
//获取测试架原库存信息
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString());
|
//获取库存记录
|
List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
|
x.WarehouseId == warehouse.WarehouseId &&
|
x.StockStatus == (int)StockStatusEmun.出库完成).Includes(x => x.Details).ToList();
|
Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == backModel.TestToolCode));
|
if (stockInfo == null)
|
{
|
return responseContent.Error($"{backModel.TestToolCode}库存信息不存在");
|
}
|
//生成退库任务
|
Dt_Task taskIn = new()
|
{
|
CurrentAddress = backModel.SourceAddressCode,
|
Grade = 0,
|
PalletCode = stockInfo.PalletCode,
|
NextAddress = "",
|
Roadway = "",
|
SourceAddress = backModel.SourceAddressCode,
|
TargetAddress = "",
|
TaskStatus = (int)TaskStatusEnum.New,
|
TaskType = (int)TaskTypeEnum.ProductionReturn,
|
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
|
PalletType = stockInfo.PalletType,
|
WarehouseId = stockInfo.WarehouseId,
|
};
|
string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
|
float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
|
if (MaterielCode != null && Quantity != null)
|
{
|
taskIn.MaterielCode = MaterielCode;
|
taskIn.Quantity = Quantity;
|
}
|
//更改库存状态
|
stockInfo.StockStatus = StockStatusEmun.退库.ObjToInt();
|
BaseDal.AddData(taskIn);
|
_stockRepository.StockInfoRepository.UpdateData(stockInfo);
|
//将任务推送到WCS
|
PushTasksToWCS(new List<Dt_Task>() { taskIn }, "AGV_CSJ"); ;
|
responseContent.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
responseContent.Error(ex.Message);
|
}
|
return responseContent;
|
}
|
/// <summary>
|
/// 测试架报废
|
/// </summary>
|
/// <returns></returns>
|
public MesResponseContent TestScrap(TestToolScrap toolScraps)
|
{
|
MesResponseContent responseContent = new MesResponseContent();
|
try
|
{
|
//获取测试架批次号库存
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString());
|
//获取库存记录
|
List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
|
x.WarehouseId == warehouse.WarehouseId &&
|
x.StockStatus == (int)StockStatusEmun.出库完成).Includes(x => x.Details).ToList();
|
List<Dt_StockInfo> stockInfoUpdates = new List<Dt_StockInfo>();
|
List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>();
|
foreach (var item in toolScraps.ToolCodes)
|
{
|
Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == item));
|
if (stockInfo == null)
|
{
|
return responseContent.Error($"{item}库存信息不存在");
|
}
|
stockInfoUpdates.Add(stockInfo);
|
stockInfoDetails.Add(stockInfo.Details.FirstOrDefault());
|
}
|
//清除库存信息
|
_unitOfWorkManage.BeginTran();
|
_stockRepository.StockInfoRepository.DeleteAndMoveIntoHty(stockInfoUpdates, OperateTypeEnum.自动删除);
|
_stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfoDetails, OperateTypeEnum.自动删除);
|
_unitOfWorkManage.CommitTran();
|
responseContent.OK($"报废成功");
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
responseContent.Error(ex.Message);
|
}
|
return responseContent;
|
}
|
/// <summary>
|
/// 同步测试架寿命
|
/// </summary>
|
/// <param name="toolSynInfo"></param>
|
/// <returns></returns>
|
public WebResponseContent TestSynStock(TestToolSynInfo toolSynInfo)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_TestToolSync.ToString());
|
MESRoot<TestToolSynInfo> root = new MESRoot<TestToolSynInfo>()
|
{
|
From = "WMS",
|
DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
Content = toolSynInfo
|
};
|
JsonSerializerSettings settings = new JsonSerializerSettings
|
{
|
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
};
|
string request = JsonConvert.SerializeObject(root, settings);
|
string response = HttpMesHelper.Post(apiInfo.ApiAddress, request);
|
MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
|
//调用接口
|
if (mesResponseContent.BSucc == true)
|
{
|
content.OK(mesResponseContent.StrMsg);
|
}
|
else
|
{
|
content.Error(mesResponseContent.StrMsg);
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
|
/// <summary>
|
/// 物料出库,WMS同步出库物料批次至MES
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public WebResponseContent UploadMesMaterialLotaAcept(MesMaterialLotaAceptModel model)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_MaterialLotaAcept.ToString());
|
MESRoot<MesMaterialLotaAceptModel> root = new MESRoot<MesMaterialLotaAceptModel>()
|
{
|
From = "WMS",
|
DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
Content = model
|
};
|
JsonSerializerSettings settings = new JsonSerializerSettings
|
{
|
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
};
|
string request = JsonConvert.SerializeObject(root, settings);
|
string response = HttpMesHelper.Post(apiInfo.ApiAddress, request);
|
MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
|
//调用接口
|
if (mesResponseContent.BSucc == true)
|
{
|
content.OK(mesResponseContent.StrMsg);
|
}
|
else
|
{
|
content.Error(mesResponseContent.StrMsg);
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="stockInfo"></param>
|
/// <param name="stockInfoDetail"></param>
|
/// <param name="taskNo"></param>
|
/// <param name="warehouseCode"></param>
|
/// <param name="quantity"></param>
|
/// <param name="cutedType"></param>
|
/// <param name="ppWidth"></param>
|
/// <returns></returns>
|
public MesMaterialLotaAceptModel GetMesMaterialLotaAceptModel(Dt_StockInfo stockInfo, Dt_StockInfoDetail stockInfoDetail, string taskNo, string warehouseCode, float quantity, string cutedType = "", float ppWidth = 0)
|
{
|
MesMaterialLotaAceptModel model = new MesMaterialLotaAceptModel()
|
{
|
CarrierCode = stockInfo.PalletCode,
|
CutedType = cutedType,
|
ExpirationDate = stockInfoDetail.EffectiveDate,
|
MaterialBarCode = stockInfoDetail.SerialNumber,
|
MaterialCode = stockInfoDetail.MaterielCode,
|
MaterialLot = stockInfoDetail.MaterielCode + "," + stockInfoDetail.BatchNo,
|
MaterialName = stockInfoDetail.MaterielName,
|
PPWidth = ppWidth,
|
ProductionDate = stockInfoDetail.ProductionDate,
|
Quantity = quantity,
|
Supplier = "",
|
TaskNo = taskNo,
|
Type = 1,
|
WarehouseArea = warehouseCode,
|
WarehouseLocation = warehouseCode
|
};
|
|
return model;
|
}
|
|
/// <summary>
|
/// 基板出库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public MesResponseContent SubstrateOut(SubstrateOutModel model)
|
{
|
try
|
{
|
string line = string.Empty;
|
if (!model.Line.Contains("SCUTL"))
|
{
|
line = WarehouseEnum.HA58.ToString();
|
}
|
else
|
{
|
line = WarehouseEnum.HA57.ToString();
|
}
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == line);
|
if (warehouse == null)
|
{
|
return MesResponseContent.Instance.Error($"仓库基础信息未配置");
|
}
|
|
Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterialCode);
|
if (materielInfo == null)
|
{
|
return MesResponseContent.Instance.Error($"未找到该物料信息");
|
}
|
|
Dt_MesOutboundOrder mesOutboundOrder = new Dt_MesOutboundOrder()
|
{
|
CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
|
Line = model.Line,
|
MaterialCode = model.MaterialCode,
|
MaterialName = model.MaterialName,
|
OrderQuantity = model.RequiredQuantity,
|
TaskNo = model.TaskNo,
|
Unit = model.Unit,
|
OrderType = MesOutboundOrderTypeEnum.SubstrateOut.ObjToInt(),
|
OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
|
WarehouseId = warehouse.WarehouseId
|
};
|
|
List<Dt_Task> tasks = new List<Dt_Task>();
|
|
List<Dt_StockInfo>? stockInfos = null;
|
List<Dt_OutStockLockInfo>? outStockLockInfos = null;
|
List<Dt_LocationInfo>? locationInfos = null;
|
{
|
(List<Dt_StockInfo>, Dt_MesOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesOutboundOrderService.AssignStockOutbound(mesOutboundOrder);
|
if (result.Item1 != null && result.Item1.Count > 0)
|
{
|
tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
|
result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
result.Item3.ForEach(x =>
|
{
|
x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
|
});
|
|
stockInfos = result.Item1;
|
mesOutboundOrder = result.Item2;
|
outStockLockInfos = result.Item3;
|
locationInfos = result.Item4;
|
}
|
else
|
{
|
throw new Exception("无库存");
|
}
|
}
|
tasks.ForEach(x =>
|
{
|
x.TargetAddress = model.Line;
|
x.OrderNo = mesOutboundOrder.TaskNo;
|
});
|
_unitOfWorkManage.BeginTran();
|
|
int id = BaseDal.AddData(tasks);
|
outStockLockInfos.ForEach(x =>
|
{
|
x.OrderNo = mesOutboundOrder.TaskNo;
|
x.OrderDetailId = id;
|
});
|
_outboundService.MesOutboundOrderService.Repository.AddData(mesOutboundOrder);
|
if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
|
{
|
WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
|
|
if (!content.Status)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return MesResponseContent.Instance.Error(content.Message);
|
}
|
}
|
_unitOfWorkManage.CommitTran();
|
PushTasksToWCS(tasks);
|
|
|
return MesResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
return MesResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// 基板余料退库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public MesResponseContent SubstrateBack(SubstrateBackModel model)
|
{
|
try
|
{
|
Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => model.CarrierCode.Contains(x.CodeStartStr));
|
if (palletTypeInfo == null)
|
{
|
return MesResponseContent.Instance.Error($"未识别该托盘类型,请确认托盘号");
|
}
|
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == palletTypeInfo.WarehouseId);
|
//判断是否托盘库存是否已存在
|
Dt_StockInfo stockInfoOld = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == model.CarrierCode);
|
if (stockInfoOld != null)
|
{
|
return MesResponseContent.Instance.Error($"托盘号库存{model.CarrierCode}已存在");
|
}
|
|
Dt_StockInfo_Hty stockInfo_Hty = _stockRepository.StockInfo_HtyRepository.QueryData(x => x.PalletCode == model.CarrierCode).OrderByDescending(x => x.SourceId).First();
|
Dt_StockInfoDetail_Hty stockInfoDetail_Hty = _stockRepository.StockInfoDetail_HtyRepository.QueryFirst(x => x.StockId == stockInfo_Hty.SourceId);
|
|
|
Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
|
{
|
MaterielSpec = stockInfoDetail_Hty.MaterielSpec,
|
BatchNo = stockInfoDetail_Hty?.BatchNo ?? "",
|
EffectiveDate = model.ExpirationDate,
|
MaterielCode = model.MaterialCode,
|
InboundOrderRowNo = stockInfoDetail_Hty?.InboundOrderRowNo ?? 0,
|
MaterielName = stockInfoDetail_Hty.MaterielName,
|
ProductionDate = model.ProductionDate,
|
OrderNo = stockInfoDetail_Hty?.OrderNo ?? "",
|
OutboundQuantity = 0,
|
SerialNumber = stockInfoDetail_Hty?.SerialNumber ?? "0",
|
StockQuantity = model.Quantity,
|
Status = model.Quantity <= 0.0 ? StockStatusEmun.MES空托退库.ObjToInt() : StockStatusEmun.MES退库.ObjToInt(),
|
Unit = model.Unit
|
};
|
Dt_StockInfo stockInfo = new Dt_StockInfo()
|
{
|
PalletCode = model.CarrierCode,
|
PalletType = palletTypeInfo.PalletType,
|
WarehouseId = warehouse.WarehouseId,
|
StockStatus = stockInfoDetail.StockQuantity <= 0.0 ? StockStatusEmun.MES空托退库.ObjToInt() : StockStatusEmun.MES退库.ObjToInt(),
|
Details = new List<Dt_StockInfoDetail> { stockInfoDetail },
|
Remark = stockInfoDetail.StockQuantity <= 0.0 ? StockStatusEmun.MES空托退库.ToString() : StockStatusEmun.MES退库.ToString()
|
};
|
//Dt_Task task = new Dt_Task()
|
//{
|
// PalletCode = stockInfo.PalletCode,
|
// CurrentAddress = "",
|
// NextAddress = "",
|
// PalletType = stockInfo.PalletType,
|
// Roadway = "RGV01_BC",
|
// SourceAddress = "RGV01_BC",
|
// TargetAddress = "",
|
// TaskStatus = TaskStatusEnum.New.ObjToInt(),
|
// TaskType = TaskTypeEnum.MesMatReturn.ObjToInt(),
|
// WarehouseId = warehouse.WarehouseId
|
//};
|
|
_unitOfWorkManage.BeginTran();
|
Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
|
//BaseDal.AddData(task);
|
_unitOfWorkManage.CommitTran();
|
|
return MesResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return MesResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// PP大卷出库-进行分卷
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public MesResponseContent PPSubsectionOut(PPSubsectionOutModel model)
|
{
|
MesResponseContent modelCount = new MesResponseContent();
|
try
|
{
|
|
Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString());
|
if (warehouse == null)
|
{
|
return MesResponseContent.Instance.Error("仓库信息未配置");
|
}
|
Dt_MesPPOutboundOrder mesPPOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPOutboundOrder>().Where(x => x.TaskNo == model.TaskNo).Includes(x => x.Details).First();
|
if (mesPPOutboundOrder != null)
|
{
|
return MesResponseContent.Instance.Error("已存在此任务单号");
|
}
|
List<Dt_MesPPOutboundOrderDetail> mesPPOutboundOrderDetail = new List<Dt_MesPPOutboundOrderDetail>();
|
foreach (var item in model.Carriers)
|
{
|
//mesPPOutboundOrderDetail.Add(_mapper.Map<Dt_MesPPOutboundOrderDetail>(item));
|
Dt_MesPPOutboundOrderDetail dt_MesPPOutboundOrderDetail = new Dt_MesPPOutboundOrderDetail
|
{
|
CarrierCode = item.CarrierCode,
|
Warehouse = item.Warehouse,
|
OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt()
|
};
|
mesPPOutboundOrderDetail.Add(dt_MesPPOutboundOrderDetail);
|
}
|
Dt_MesPPOutboundOrder mesOutboundOrder = new Dt_MesPPOutboundOrder()
|
{
|
CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
|
MaterialCode = model.MaterialCode,
|
MaterialName = model.MaterialName,
|
OrderQuantity = model.RequiredQuantity,
|
TaskNo = model.TaskNo,
|
Unit = model.Unit,//PP需要转换成米(需求平方(PNL数*面积)/宽度)
|
Width = model.Width,
|
TargetAddressCode = model.TargetAddressCode,
|
OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
|
OrderType = OutOrderTypeEnum.Issue.ObjToInt(),
|
WarehouseId = warehouse.WarehouseId,
|
Details = mesPPOutboundOrderDetail
|
};
|
#region
|
//Db.InsertNav(mesOutboundOrder).Include(x=>x.Details).ExecuteCommand();
|
// List<Dt_Task> tasks = new List<Dt_Task>();
|
|
// List<Dt_StockInfo>? stockInfos = null;
|
// List<Dt_OutStockLockInfo>? outStockLockInfos = null;
|
// List<Dt_LocationInfo>? locationInfos = null;
|
// {
|
//(List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesOutboundOrder);
|
// if (result.Item1 != null && result.Item1.Count > 0)
|
// {
|
// tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
|
// result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
// result.Item3.ForEach(x =>
|
// {
|
// x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
|
// });
|
|
// stockInfos = result.Item1;
|
// mesOutboundOrder = result.Item2;
|
// outStockLockInfos = result.Item3;
|
// locationInfos = result.Item4;
|
// mesPPOutboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
|
// }
|
// else
|
// {
|
// throw new Exception("无库存");
|
// }
|
// }
|
// tasks.ForEach(x =>
|
// {
|
// x.TargetAddress = model.TargetAddressCode;
|
// });
|
// _unitOfWorkManage.BeginTran();
|
|
// int id = BaseDal.AddData(tasks);
|
// outStockLockInfos.ForEach(x =>
|
// {
|
// x.OrderNo = mesOutboundOrder.TaskNo;
|
// x.OrderDetailId = id;
|
// });
|
// //_outboundService.MesPPOutboundOrderService.Repository.AddData(mesOutboundOrder);
|
// Db.InsertNav(mesOutboundOrder).Include(x => x.Details).ExecuteCommand();
|
// if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
|
// {
|
// WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
|
|
// if (!content.Status)
|
// {
|
// _unitOfWorkManage.RollbackTran();
|
// return MesResponseContent.Instance.Error(content.Message);
|
// }
|
// }
|
// _unitOfWorkManage.CommitTran();
|
// PushTasksToWCS(tasks);
|
|
//}
|
#endregion
|
_unitOfWorkManage.BeginTran();
|
Db.InsertNav(mesOutboundOrder).Include(x => x.Details).ExecuteCommand();
|
_unitOfWorkManage.CommitTran();
|
return MesResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return MesResponseContent.Instance.Error(ex.Message);
|
}
|
|
}
|
|
/// <summary>
|
/// PP小卷出库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public MesResponseContent PPCutOut(PPCutOutModle model)
|
{
|
try
|
{
|
|
Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString());
|
if (warehouse == null)
|
{
|
return MesResponseContent.Instance.Error("仓库基础信息未配置");
|
}
|
Dt_MesPPCutOutboundOrder mesPPCutOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPCutOutboundOrder>().Where(x => x.TaskNo == model.TaskNo).Includes(x => x.Details).First();
|
if (mesPPCutOutboundOrder != null)
|
{
|
return MesResponseContent.Instance.Error("已存在此任务单号");
|
}
|
List<Dt_MesPPCutOutboundOrderDetail> mesPPCutOutboundOrderDetail = new List<Dt_MesPPCutOutboundOrderDetail>();
|
foreach (var item in model.MaterialDetails)
|
{
|
mesPPCutOutboundOrderDetail.Add(_mapper.Map<Dt_MesPPCutOutboundOrderDetail>(item));
|
}
|
Dt_MesPPCutOutboundOrder mesPPOutboundOrder = new Dt_MesPPCutOutboundOrder()
|
{
|
CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
|
TaskNo = model.TaskNo,
|
OrderType = OutOrderTypeEnum.Issue.ObjToInt(),
|
OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
|
WarehouseId = warehouse.WarehouseId,
|
Details = mesPPCutOutboundOrderDetail,
|
};
|
_unitOfWorkManage.BeginTran();
|
Db.InsertNav(mesPPOutboundOrder).Include(x => x.Details).ExecuteCommand();
|
_unitOfWorkManage.CommitTran();
|
#region
|
//List<Dt_Task> tasks = new List<Dt_Task>();
|
|
//List<Dt_StockInfo>? stockInfos = null;
|
//List<Dt_OutStockLockInfo>? outStockLockInfos = null;
|
//List<Dt_LocationInfo>? locationInfos = null;
|
//{
|
//(List<Dt_StockInfo>, Dt_MesPPCutOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesPPOutboundOrder, mesPPCutOutboundOrderDetail);
|
// if (result.Item1 != null && result.Item1.Count > 0)
|
// {
|
// tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
|
// result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
// result.Item3.ForEach(x =>
|
// {
|
// x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
|
// });
|
|
// stockInfos = result.Item1;
|
// mesPPCutOutboundOrderDetail = result.Item2;
|
// outStockLockInfos = result.Item3;
|
// locationInfos = result.Item4;
|
|
// }
|
// else
|
// {
|
// throw new Exception("无库存");
|
// }
|
//}
|
//tasks.ForEach(x =>
|
//{
|
// x.TargetAddress = mesPPCutOutboundOrderDetail.TargetAddressCode;
|
//});
|
//_unitOfWorkManage.BeginTran();
|
|
//int id = BaseDal.AddData(tasks);
|
//outStockLockInfos.ForEach(x =>
|
//{
|
// x.OrderNo = mesPPOutboundOrder.TaskNo;
|
// x.OrderDetailId = id;
|
//});
|
////_outboundService.MesPPOutboundOrderService.Repository.AddData(mesOutboundOrder);
|
//Db.InsertNav(mesPPOutboundOrder).Include(x => x.Details).ExecuteCommand();
|
//if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
|
//{
|
// WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
|
|
// if (!content.Status)
|
// {
|
// _unitOfWorkManage.RollbackTran();
|
// return MesResponseContent.Instance.Error(content.Message);
|
// }
|
//}
|
//_unitOfWorkManage.CommitTran();
|
//PushTasksToWCS(tasks, "AGV_PP");
|
#endregion
|
return MesResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return MesResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// PP入库(大卷、小卷、张料)
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public MesResponseContent PPBack(PPBackModel model)
|
{
|
try
|
{
|
//一次只发一卷物料入库明细
|
foreach (var item in model.MaterialLotInfo)
|
{
|
//获取物料信息
|
Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterialCode);
|
if (materielInfo == null)
|
{
|
return MesResponseContent.Instance.Error($"物料{item.MaterialCode}不存在!");
|
}
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString());
|
if (warehouse == null)
|
{
|
return MesResponseContent.Instance.Error($"未找到仓库信息");
|
}
|
Dt_MesPPBackInboundOrderDetail mesPPBackInboundOrderDetail = new Dt_MesPPBackInboundOrderDetail()
|
{
|
MaterialLot = item.MaterialLot,
|
MaterielCode = item.MaterialCode,
|
OrderQuantity = item.Quantity,
|
CutedWidth = item.CutedWidth,
|
MaterialLotOld = item.MaterialLotOld,
|
Unit = item.Unit,
|
ProductionDate = item.ProductionDate,
|
EffectiveDate = item.ExpirationDate,
|
OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
|
};
|
Dt_MesPPBackInboundOrder mesPPBackInboundOrder = new Dt_MesPPBackInboundOrder()
|
{
|
WarehouseId = warehouse.WarehouseId,
|
SourceAddressCode = model.SourceAddressCode,
|
CarrierCode = model.CarrierCode,
|
OrderStatus = InOrderStatusEnum.未开始.ObjToInt(),
|
CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
|
Details = new List<Dt_MesPPBackInboundOrderDetail> { mesPPBackInboundOrderDetail }
|
};
|
|
Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
|
{
|
BatchNo = mesPPBackInboundOrderDetail.MaterialLot,
|
MaterielCode = mesPPBackInboundOrderDetail.MaterielCode,
|
MaterielName = materielInfo.MaterielName,
|
OrderNo = "",
|
SerialNumber = "",
|
StockQuantity = mesPPBackInboundOrderDetail.OrderQuantity,
|
OutboundQuantity = 0,
|
Unit = materielInfo.MaterielUnit,
|
Status = StockStatusEmun.组盘暂存.ObjToInt(),
|
ProductionDate = mesPPBackInboundOrderDetail.ProductionDate,
|
EffectiveDate = mesPPBackInboundOrderDetail.EffectiveDate,
|
InboundOrderRowNo = mesPPBackInboundOrderDetail.RowNo,
|
};
|
|
Dt_StockInfo stockInfo = new Dt_StockInfo()
|
{
|
PalletCode = model.CarrierCode,
|
StockStatus = StockStatusEmun.组盘暂存.ObjToInt(),
|
WarehouseId = mesPPBackInboundOrder.WarehouseId,
|
Details = new List<Dt_StockInfoDetail> { stockInfoDetail }
|
};
|
_unitOfWorkManage.BeginTran();
|
Db.InsertNav(mesPPBackInboundOrder).Include(x => x.Details).ExecuteCommand();
|
Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
|
WebResponseContent content = DeviceRequestInboundTask(mesPPBackInboundOrder, stockInfo);
|
if (!content.Status)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return MesResponseContent.Instance.Error(content.Message);
|
}
|
_unitOfWorkManage.CommitTran();
|
}
|
return MesResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return MesResponseContent.Instance.Error(ex.Message);
|
}
|
|
}
|
|
public WebResponseContent DeviceRequestInboundTask(Dt_MesPPBackInboundOrder mesPPBackInboundOrder, Dt_StockInfo stockInfo)
|
{
|
try
|
{
|
Dt_Task task = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
|
if (task != null)
|
{
|
PushTasksToWCS(new List<Dt_Task> { task });
|
return WebResponseContent.Instance.Error($"该托盘已生成任务");
|
}
|
if (Repository.QueryFirst(x => x.SourceAddress == stockInfo.PalletCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
|
{
|
return WebResponseContent.Instance.Error($"该站点已有未执行的任务");
|
}
|
//Dt_StockInfo stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
|
//if (stockInfos == null)
|
//{
|
// return WebResponseContent.Instance.Error($"未找到组盘信息");
|
//}
|
//if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.出库完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES退库.ObjToInt())
|
//{
|
// return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库");
|
//}
|
//if (!string.IsNullOrEmpty(stockInfo.LocationCode))
|
//{
|
// return WebResponseContent.Instance.Error($"该托盘已绑定货位");
|
//}
|
//只入平库,需判断平库定义货位类型。。。。。。。。。。。。
|
Dt_LocationInfo? locationInfos = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == stockInfo.WarehouseId && x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt());
|
Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(locationInfos.RoadwayNo, stockInfo.PalletType, stockInfo.WarehouseId);
|
if (locationInfo == null)
|
{
|
return WebResponseContent.Instance.Error($"货位分配失败,未找到可分配货位");
|
}
|
|
Dt_Task newTask = new Dt_Task()
|
{
|
CurrentAddress = mesPPBackInboundOrder.SourceAddressCode,
|
Grade = 0,
|
NextAddress = locationInfo.LocationCode,
|
PalletCode = stockInfo.PalletCode,
|
Roadway = locationInfo.RoadwayNo,//巷道号包含AGV
|
SourceAddress = mesPPBackInboundOrder.SourceAddressCode,
|
TargetAddress = locationInfo.LocationCode,
|
TaskType = TaskTypeEnum.Inbound.ObjToInt(),
|
TaskStatus = TaskStatusEnum.New.ObjToInt(),
|
WarehouseId = stockInfo.WarehouseId,
|
PalletType = stockInfo.PalletType,
|
};
|
string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
|
float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
|
if (MaterielCode != null && Quantity != null)
|
{
|
newTask.MaterielCode = MaterielCode;
|
newTask.Quantity = Quantity;
|
}
|
LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
|
_unitOfWorkManage.BeginTran();
|
_recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation);
|
_basicService.LocationInfoService.UpdateLocationStatus(locationInfo, newTask.PalletType, LocationStatusEnum.Lock, newTask.WarehouseId);
|
BaseDal.AddData(newTask);
|
_stockRepository.StockInfoRepository.UpdateData(stockInfo);
|
_unitOfWorkManage.CommitTran();
|
|
PushTasksToWCS(new List<Dt_Task> { newTask });
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// PP库存查询
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public MesResponseContent QueryPpByWidth(QueryPpByWidthModel model)
|
{
|
MesResponseContent content = new MesResponseContent();
|
try
|
{
|
//需判断查询立库,平库
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString());
|
List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
|
x.WarehouseId == warehouse.WarehouseId &&
|
x.StockStatus == (int)StockStatusEmun.入库完成).Includes(x => x.Details).ToList();
|
Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.MaterielCode == model.MaterialCode && x.CutedWidth == model.CutedWidth));
|
if (stockInfo == null)
|
{
|
return content.Error($"PP仓立库/平库:物料编号:{model.MaterialCode},裁切宽:{model.CutedWidth},未找到此物料库存信息");
|
}
|
var stock = stockInfo.Details.FirstOrDefault();
|
if (stock != null)
|
{
|
content.Content = new
|
{
|
MaterialCode = stock.MaterielCode,
|
Quantity = stock.StockQuantity,
|
Unit = stock.Unit,
|
Warehouse = warehouse.WarehouseCode,
|
WarehouseName = warehouse.WarehouseName,
|
CutedWidth = stock.CutedWidth,
|
CarrierCode = stockInfo.PalletCode,
|
MaterialLot = stock.BatchNo,
|
};
|
}
|
return content.OK();
|
}
|
catch (Exception ex)
|
{
|
return MesResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
|
|
|
/// <summary>
|
/// 生成PP大卷出库任务
|
/// </summary>
|
/// <param name="keys">出库单明细主键</param>
|
/// <returns></returns>
|
public WebResponseContent MESPPGenerateOutboundTasks(int[] keys)
|
{
|
try
|
{
|
List<Dt_Task> tasks = new List<Dt_Task>();
|
List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
|
List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
|
List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = new List<Dt_MesPPOutboundOrderDetail>();
|
List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
|
List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
|
|
(List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?, Dt_MesPPOutboundOrder mesPPOutboundOrder) result = MESPPOutboundTaskDataHandle(keys);
|
if (result.Item2 != null && result.Item2.Count > 0)
|
{
|
stockInfos.AddRange(result.Item2);
|
}
|
if (result.Item3 != null && result.Item3.Count > 0)
|
{
|
outboundOrderDetails.AddRange(result.Item3);
|
}
|
if (result.Item4 != null && result.Item4.Count > 0)
|
{
|
outStockLockInfos.AddRange(result.Item4);
|
}
|
if (result.Item5 != null && result.Item5.Count > 0)
|
{
|
locationInfos.AddRange(result.Item5);
|
}
|
if (result.Item1 != null && result.Item1.Count > 0)
|
{
|
tasks.AddRange(result.Item1);
|
}
|
if (result.mesPPOutboundOrder != null)
|
{
|
|
}
|
|
WebResponseContent content = MESPPGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, result.mesPPOutboundOrder);
|
return content;
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// PP大卷出库任务数据处理
|
/// </summary>
|
/// <param name="orderDetailId"></param>
|
/// <param name="stockSelectViews"></param>
|
/// <returns></returns>
|
/// <exception cref="Exception"></exception>
|
public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?, Dt_MesPPOutboundOrder mesPPOutboundOrder) MESPPOutboundTaskDataHandle(int[] keys)
|
{
|
List<Dt_Task> tasks = new List<Dt_Task>();
|
List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList();
|
if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
|
{
|
throw new Exception("未找到出库单明细信息");
|
}
|
if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
|
{
|
throw new Exception("所选出库单明细存在出库中或已完成");
|
}
|
List<Dt_StockInfo>? stockInfos = null;
|
List<Dt_MesPPOutboundOrderDetail>? orderDetails = null;
|
List<Dt_OutStockLockInfo>? outStockLockInfos = null;
|
List<Dt_LocationInfo>? locationInfos = null;
|
Dt_MesPPOutboundOrder? mesPPOutboundOrders = null;
|
if (outboundOrderDetails.FirstOrDefault().OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
|
{
|
(List<Dt_StockInfo>, List<Dt_MesPPOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>, Dt_MesPPOutboundOrder mesPPOutboundOrder) result = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
|
if (result.Item1 != null && result.Item1.Count > 0)
|
{
|
Dt_MesPPOutboundOrder outboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
|
TaskTypeEnum typeEnum = outboundOrder.OrderType switch
|
{
|
(int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
|
(int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
|
(int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
|
_ => new TaskTypeEnum()
|
};
|
tasks = GetTasks(result.Item1, typeEnum);
|
result.Item2.ForEach(x =>
|
{
|
x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
});
|
result.Item3.ForEach(x =>
|
{
|
x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
|
});
|
|
stockInfos = result.Item1;
|
orderDetails = result.Item2;
|
outStockLockInfos = result.Item3;
|
locationInfos = result.Item4;
|
mesPPOutboundOrders = result.mesPPOutboundOrder;
|
}
|
else
|
{
|
throw new Exception("无库存");
|
}
|
}
|
//else
|
//{
|
// List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetails.oi, OutLockStockStatusEnum.已分配);
|
// if (stockLockInfos != null && stockLockInfos.Count > 0)
|
// {
|
// List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
|
// tasks = GetTasks(stocks);
|
// }
|
//}
|
|
return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos, mesPPOutboundOrders);
|
}
|
|
/// <summary>
|
/// PP平库直接出库
|
/// </summary>
|
/// <param name="orderDetailId"></param>
|
/// <param name="stockSelectViews"></param>
|
/// <returns></returns>
|
public WebResponseContent PPGeneratePKOutboundTask(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews)
|
{
|
try
|
{
|
(List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = PPOutboundTaskDataHandle(orderDetailId, stockSelectViews);
|
|
WebResponseContent content = PPGenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5);
|
|
return content;
|
}
|
catch (Exception ex)
|
{
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
/// <summary>
|
/// PP立库小卷直接出库
|
/// </summary>
|
/// <param name="orderDetailId"></param>
|
/// <param name="stockSelectViews"></param>
|
/// <returns></returns>
|
public WebResponseContent PPCutOutGenerateOutboundTasks(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews)
|
{
|
try
|
{
|
(List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = PPOutboundTaskDataHandle(orderDetailId, stockSelectViews);
|
|
WebResponseContent content = PPGenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5);
|
|
return content;
|
}
|
catch (Exception ex)
|
{
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// 出库任务数据处理
|
/// </summary>
|
/// <param name="orderDetailId"></param>
|
/// <param name="stockSelectViews"></param>
|
/// <returns></returns>
|
/// <exception cref="Exception"></exception>
|
public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) PPOutboundTaskDataHandle(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews)
|
{
|
List<Dt_Task> tasks = new List<Dt_Task>();
|
Dt_MesPPCutOutboundOrderDetail outboundOrderDetail = _outboundService.MesPPCutOutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
|
|
if (outboundOrderDetail == null)
|
{
|
throw new Exception("未找到出库单明细信息");
|
}
|
|
if (stockSelectViews.Sum(x => x.UseableQuantity) > outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity)
|
{
|
throw new Exception("选择数量超出单据数量");
|
}
|
List<Dt_StockInfo>? stockInfos = null;
|
Dt_MesPPCutOutboundOrderDetail? orderDetail = null;
|
List<Dt_OutStockLockInfo>? outStockLockInfos = null;
|
List<Dt_LocationInfo>? locationInfos = null;
|
if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
|
{
|
(List<Dt_StockInfo>, Dt_MesPPCutOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPCutOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetail, stockSelectViews);
|
if (result.Item1 != null && result.Item1.Count > 0)
|
{
|
Dt_MesPPCutOutboundOrder outboundOrder = _outboundService.MesPPCutOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
|
TaskTypeEnum typeEnum = outboundOrder.OrderType switch
|
{
|
(int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
|
(int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
|
(int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
|
_ => new TaskTypeEnum()
|
};
|
tasks = GetTasks(result.Item1, TaskTypeEnum.Outbound);
|
result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
result.Item3.ForEach(x =>
|
{
|
x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
|
});
|
|
stockInfos = result.Item1;
|
orderDetail = result.Item2;
|
outStockLockInfos = result.Item3;
|
locationInfos = result.Item4;
|
}
|
else
|
{
|
throw new Exception("无库存");
|
}
|
}
|
else
|
{
|
List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId, OutLockStockStatusEnum.已分配);
|
if (stockLockInfos != null && stockLockInfos.Count > 0)
|
{
|
List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
|
tasks = GetTasks(stocks, TaskTypeEnum.Outbound);
|
}
|
}
|
|
return (tasks, stockInfos, orderDetail == null ? null : new List<Dt_MesPPCutOutboundOrderDetail> { orderDetail }, outStockLockInfos, locationInfos);
|
}
|
|
public WebResponseContent PPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPCutOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
|
{
|
try
|
{
|
_unitOfWorkManage.BeginTran();
|
|
BaseDal.AddData(tasks);
|
if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
|
{
|
stockInfos.ForEach(x =>
|
{
|
x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
|
});
|
WebResponseContent content = _outboundService.MesPPCutOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
|
if (!content.Status)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return content;
|
}
|
}
|
else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
|
{
|
outboundOrderDetails.ForEach(x =>
|
{
|
x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
});
|
|
_outboundService.MesPPCutOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
|
}
|
_unitOfWorkManage.CommitTran();
|
PushTasksToWCS(tasks);
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
|
}
|
#region
|
/// <summary>
|
/// 生成PP小卷出库任务
|
/// </summary>
|
/// <param name="keys">出库单明细主键</param>
|
/// <returns></returns>
|
//public WebResponseContent PPCutOutGenerateOutboundTasks(int[] keys)
|
//{
|
// try
|
// {
|
// List<Dt_Task> tasks = new List<Dt_Task>();
|
// List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
|
// List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
|
// List<Dt_MesPPCutOutboundOrderDetail> outboundOrderDetails = new List<Dt_MesPPCutOutboundOrderDetail>();
|
// List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
|
// List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
|
|
// (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = PPCutOutboundTaskDataHandle(keys);
|
// if (result.Item2 != null && result.Item2.Count > 0)
|
// {
|
// stockInfos.AddRange(result.Item2);
|
// }
|
// if (result.Item3 != null && result.Item3.Count > 0)
|
// {
|
// outboundOrderDetails.AddRange(result.Item3);
|
// }
|
// if (result.Item4 != null && result.Item4.Count > 0)
|
// {
|
// outStockLockInfos.AddRange(result.Item4);
|
// }
|
// if (result.Item5 != null && result.Item5.Count > 0)
|
// {
|
// locationInfos.AddRange(result.Item5);
|
// }
|
// if (result.Item1 != null && result.Item1.Count > 0)
|
// {
|
// tasks.AddRange(result.Item1);
|
// }
|
|
// WebResponseContent content = PPCutOutGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos);
|
// return content;
|
// }
|
// catch (Exception ex)
|
// {
|
// _unitOfWorkManage.RollbackTran();
|
// return WebResponseContent.Instance.Error(ex.Message);
|
// }
|
//}
|
|
///// <summary>
|
///// PP小卷出库任务数据处理
|
///// </summary>
|
///// <param name="orderDetailId"></param>
|
///// <param name="stockSelectViews"></param>
|
///// <returns></returns>
|
///// <exception cref="Exception"></exception>
|
//public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) PPCutOutboundTaskDataHandle(int[] keys)
|
//{
|
// List<Dt_Task> tasks = new List<Dt_Task>();
|
// List<Dt_MesPPCutOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPCutOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList();
|
// if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
|
// {
|
// throw new Exception("未找到出库单明细信息");
|
// }
|
// if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
|
// {
|
// throw new Exception("所选出库单明细存在出库中或已完成");
|
// }
|
// List<Dt_StockInfo>? stockInfos = null;
|
// List<Dt_MesPPCutOutboundOrderDetail>? orderDetails = null;
|
// List<Dt_OutStockLockInfo>? outStockLockInfos = null;
|
// List<Dt_LocationInfo>? locationInfos = null;
|
// if (outboundOrderDetails.FirstOrDefault().OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
|
// {
|
// (List<Dt_StockInfo>, List<Dt_MesPPCutOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPCutOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
|
// if (result.Item1 != null && result.Item1.Count > 0)
|
// {
|
// Dt_MesPPCutOutboundOrder outboundOrder = _outboundService.MesPPCutOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
|
// //TaskTypeEnum typeEnum = outboundOrder.OrderType switch
|
// //{
|
// // (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
|
// // (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
|
// // (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
|
// // _ => new TaskTypeEnum()
|
// //};
|
// tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
|
// result.Item2.ForEach(x =>
|
// {
|
// x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
// });
|
// result.Item3.ForEach(x =>
|
// {
|
// x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
|
// });
|
|
// stockInfos = result.Item1;
|
// orderDetails = result.Item2;
|
// outStockLockInfos = result.Item3;
|
// locationInfos = result.Item4;
|
// }
|
// else
|
// {
|
// throw new Exception("无库存");
|
// }
|
// }
|
// //else
|
// //{
|
// // List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetails.OrderId, OutLockStockStatusEnum.已分配);
|
// // if (stockLockInfos != null && stockLockInfos.Count > 0)
|
// // {
|
// // List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
|
// // tasks = GetTasks(stocks);
|
// // }
|
// //}
|
|
// return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos);
|
//}
|
|
///// <summary>
|
///// 生成PP小卷出库任务后数据更新到数据库
|
///// </summary>
|
///// <param name="tasks"></param>
|
///// <param name="stockInfos"></param>
|
///// <param name="outboundOrderDetails"></param>
|
///// <param name="outStockLockInfos"></param>
|
///// <param name="locationInfos"></param>
|
///// <returns></returns>
|
//public WebResponseContent PPCutOutGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPCutOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
|
//{
|
// try
|
// {
|
// _unitOfWorkManage.BeginTran();
|
|
// BaseDal.AddData(tasks);
|
// if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
|
// {
|
// stockInfos.ForEach(x =>
|
// {
|
// x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
|
// });
|
// WebResponseContent content = _outboundService.MesPPCutOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
|
|
// if (!content.Status)
|
// {
|
// _unitOfWorkManage.RollbackTran();
|
// return content;
|
// }
|
// }
|
// else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
|
// {
|
// outboundOrderDetails.ForEach(x =>
|
// {
|
// x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
// });
|
|
// _outboundService.MesPPCutOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
|
// }
|
// _unitOfWorkManage.CommitTran();
|
// PushTasksToWCS(tasks,"AGV_PP");
|
// return WebResponseContent.Instance.OK();
|
// }
|
// catch (Exception ex)
|
// {
|
// _unitOfWorkManage.RollbackTran();
|
// return WebResponseContent.Instance.Error(ex.Message);
|
// }
|
//}
|
#endregion
|
/// <summary>
|
/// 生成PP大卷出库任务后数据更新到数据库
|
/// </summary>
|
/// <param name="tasks"></param>
|
/// <param name="stockInfos"></param>
|
/// <param name="outboundOrderDetails"></param>
|
/// <param name="outStockLockInfos"></param>
|
/// <param name="locationInfos"></param>
|
/// <returns></returns>
|
public WebResponseContent MESPPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null, Dt_MesPPOutboundOrder? mesPPOutboundOrder = null)
|
{
|
try
|
{
|
_unitOfWorkManage.BeginTran();
|
|
BaseDal.AddData(tasks);
|
if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
|
{
|
stockInfos.ForEach(x =>
|
{
|
x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
|
});
|
WebResponseContent content = _outboundService.MesPPOutboundOrderDetailService.LockOutboundStockDataUpdate(mesPPOutboundOrder, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
|
|
if (!content.Status)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return content;
|
}
|
}
|
else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
|
{
|
outboundOrderDetails.ForEach(x =>
|
{
|
x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
|
});
|
|
_outboundService.MesPPOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
|
}
|
_unitOfWorkManage.CommitTran();
|
PushTasksToWCS(tasks);
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
/// <summary>
|
/// 获取MES阻焊批次信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public WebResponseContent GetZHMesMaterialLot(string materialLot)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_GetProductByLot.ToString());
|
object obj = new { LotNo = materialLot };
|
MESRoot<object> root = new MESRoot<object>()
|
{
|
From = "WMS",
|
DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
Content = obj
|
};
|
JsonSerializerSettings settings = new JsonSerializerSettings
|
{
|
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
};
|
string request = JsonConvert.SerializeObject(root, settings);
|
string response = HttpMesHelper.Post(apiInfo.ApiAddress, request);
|
MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
|
//调用接口
|
if (mesResponseContent.BSucc == true)
|
{
|
content.OK(mesResponseContent.StrMsg, mesResponseContent.Content);
|
}
|
else
|
{
|
content.Error(mesResponseContent.StrMsg);
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
}
|
}
|