From 695571c6009ecbc12e7d4a4fb147df7967a1260e Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 07 七月 2025 20:21:19 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn
---
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs | 831 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 812 insertions(+), 19 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
index f0659a8..3deae56 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
@@ -1,17 +1,25 @@
-锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+锘縰sing Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Text.RegularExpressions;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.OtherEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
+using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
+using WIDESEA_DTO;
+using WIDESEA_DTO.MES;
using WIDESEA_DTO.Task;
using WIDESEA_Model.Models;
@@ -22,8 +30,7 @@
/// <summary>
/// 鐢宠鍏ュ簱浠诲姟(PDA浣跨敤锛屼粎鎵樼洏缁戝畾鍏ュ簱绔欏彴锛屼笉鍒嗛厤璐т綅)
/// </summary>
- /// <param name="palletCode">鎵樼洏鍙�</param>
- /// <param name="stationCode">绔欏彴鍙�</param>
+ /// <param name="saveModel"></param>
/// <returns></returns>
public WebResponseContent RequestInboundTask(SaveModel saveModel)
{
@@ -37,23 +44,24 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒板簱鍖�");
}
+
Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode && x.WarehouseId == warehouseId);
if (task != null)
{
return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡鐢熸垚浠诲姟");
}
- if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
+ if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null && warehouse.WarehouseCode != WarehouseEnum.HA60.ToString())
{
return WebResponseContent.Instance.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�");
}
- Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
+ Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.PalletCode== palletCode).Includes(x=>x.Details).First();
if (stockInfo == null)
{
return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
}
- if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
+ if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎷i�夊畬鎴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.閫佹搴撳瓨瀹屾垚.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鐩樼偣搴撳瓨瀹屾垚.ObjToInt())
{
return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
}
@@ -69,6 +77,10 @@
{
Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouseId);
if (locationInfo == null) return WebResponseContent.Instance.Error($"鏈壘鍒板綋鍓嶅簱鍖鸿揣浣嶄俊鎭�");
+ if (stationCode!= "8005")
+ {
+ return WebResponseContent.Instance.Error($"璧风偣閿欒锛歿stationCode}");
+ }
return DeviceRequestInboundTask(stationCode, locationInfo.RoadwayNo, palletCode);
}
else
@@ -85,16 +97,66 @@
TaskType = TaskTypeEnum.Inbound.ObjToInt(),
TaskStatus = TaskStatusEnum.New.ObjToInt(),
WarehouseId = stockInfo.WarehouseId,
- PalletType = stockInfo.PalletType
+ PalletType = stockInfo.PalletType,
+ MaterielCode = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode,
+ Quantity = (float)stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity),
};
-
+ //鑾峰彇鏄惁瀛樺湪鍏ュ簱鍗�
+ Dt_InboundOrder? inboundOrder = null;
+ if (stockInfo!=null && stockInfo.Details.Count>0)
+ {
+ string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? "";
+ inboundOrder =_inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt());
+ if (inboundOrder!=null)
+ {
+ newTask.OrderNo = inboundOrder.InboundOrderNo;
+ }
+ }
+
+ if (inboundOrder != null)
+ {
+ if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt())
+ {
+ newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt();
+ newTask.OrderNo = inboundOrder.InboundOrderNo;
+ }
+ else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
+ {
+ newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt();
+ newTask.OrderNo = inboundOrder.InboundOrderNo;
+ }
+ }
if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
{
stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
}
+ else if (stockInfo.StockStatus == StockStatusEmun.鎷i�夊畬鎴�.ObjToInt())
+ {
+ stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+ newTask.TaskType = TaskTypeEnum.InPick.ObjToInt();
+ }
+ else if (stockInfo.StockStatus == StockStatusEmun.閫佹搴撳瓨瀹屾垚.ObjToInt())
+ {
+ stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
+ newTask.TaskType = TaskTypeEnum.InQuality.ObjToInt();
+ }
+ else if(stockInfo.StockStatus == StockStatusEmun.鐩樼偣搴撳瓨瀹屾垚.ObjToInt())
+ {
+ stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
+ newTask.TaskType = TaskTypeEnum.InInventory.ObjToInt();
+ }
else
{
stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+ }
+
+ if (warehouse.WarehouseCode==WarehouseEnum.HA57.ToString())
+ {
+ Dt_Task dt_TaskMesReturn = BaseDal.QueryFirst(x=>x.TaskType==TaskTypeEnum.MesMatReturn.ObjToInt() && x.TaskStatus!=TaskStatusEnum.SC_Executing.ObjToInt());
+ if (dt_TaskMesReturn!=null)
+ {
+ return WebResponseContent.Instance.Error($"閫�鏂欎换鍔℃鎵ц");
+ }
}
_unitOfWorkManage.BeginTran();
int taskId = BaseDal.AddData(newTask);
@@ -112,8 +174,57 @@
}
}
/// <summary>
+ /// 鏌ヨ璐ㄦ鏁伴噺
+ /// </summary>
+ /// <param name="palletCode">鎵樼洏鍙�</param>
+ /// <returns></returns>
+ public WebResponseContent InQualityConfirm(string palletCode)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(palletCode);
+ if (stockInfo == null)
+ {
+ return content.Error($"鏈壘鍒拌鎵樼洏搴撳瓨淇℃伅");
+ }
+ if (stockInfo.Details.Count<=0)
+ {
+ return content.Error($"璇ユ墭鐩樺簱瀛樻槑缁嗕负绌�");
+ }
+ if (stockInfo.StockStatus != StockStatusEmun.閫佹搴撳瓨瀹屾垚.ObjToInt())
+ {
+ return content.Error($"璇ユ墭鐩樿繕鏈�佹妫�楠屽畬鎴�");
+ }
+ Dt_OutStockLockInfo? outStockLockInfo = _outboundRepository.OutboundStockLockInfoRepository.QueryData(x => x.PalletCode == palletCode && x.Status == OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && x.OrderType== OutOrderTypeEnum.Quality.ObjToInt()).OrderByDescending(x=>x.Id).FirstOrDefault();
+ if (outStockLockInfo != null)
+ {
+ //鑾峰彇瀵瑰簲妫�楠屽崟
+ Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x=>x.ReceiveDetailRowNo== outStockLockInfo.Id && x.CheckOrderStatus==CheckOrderStatusEnum.Checked.ObjToInt());
+ if (checkOrder == null)
+ {
+ return content.Error($"璇ユ墭鐩橀�佹淇℃伅鏈");
+ }
+ content.OK("鎴愬姛", data:new { stockInfo.Details.FirstOrDefault()?.MaterielCode,checkOrder.ReceivedQuantity,checkOrder.ScrappedQuantity,checkOrder.DefectedQuantity,checkOrder.QualifiedQuantity,stockQuantity= stockInfo.Details.Sum(x=>x.StockQuantity) }) ;
+ }
+ else
+ {
+ content.Error("璇ユ墭鐩橀�佹鍑哄簱璇︽儏涓嶅瓨鍦�");
+ }
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ /// <summary>
/// 鍏ョ┖绠�
/// </summary>
+ /// <param name="barcode"></param>
+ /// <param name="address"></param>
+ /// <param name="WarehouseId"></param>
/// <returns></returns>
public WebResponseContent InEmpty(string barcode, string address, int WarehouseId)
{
@@ -164,7 +275,7 @@
_stockRepository.StockInfoRepository.AddData(stockInfo);
_unitOfWorkManage.CommitTran();
PushTasksToWCS(new List<Dt_Task> { newTask });
- PutFinish(address);
+ PutFinish(address, newTask.PalletCode, newTask.TaskNum.ToString());
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
@@ -173,7 +284,16 @@
return WebResponseContent.Instance.Error(ex.Message);
}
}
- public WebResponseContent OutEmpty(int qty, string address, int WarehouseId)
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="qty"></param>
+ /// <param name="address"></param>
+ /// <param name="WarehouseId"></param>
+ /// <param name="barcode"></param>
+ /// <returns></returns>
+ public WebResponseContent OutEmpty(int qty, string address, int WarehouseId, string barcode)
{
try
{
@@ -182,8 +302,17 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒板簱鍖�");
}
- var stockInfos = _stockRepository.StockInfoRepository.QueryData(x => x.WarehouseId == WarehouseId && x.PalletType == PalletTypeEnum.Empty.ObjToInt() && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), qty, nameof(Dt_StockInfo.CreateDate));
- if (stockInfos == null) return WebResponseContent.Instance.Error($"{warehouse.WarehouseName}鏈壘鍒扮┖绠卞簱瀛�");
+ List<Dt_StockInfo> stockInfos = null;
+ if (string.IsNullOrEmpty(barcode))
+ {
+ stockInfos = _stockRepository.StockInfoRepository.QueryData(x => x.WarehouseId == WarehouseId && x.PalletType == PalletTypeEnum.Empty.ObjToInt() && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), qty, nameof(Dt_StockInfo.CreateDate));
+ }
+ else
+ {
+ stockInfos = _stockRepository.StockInfoRepository.QueryData(x => x.WarehouseId == WarehouseId && x.PalletType == PalletTypeEnum.Empty.ObjToInt() && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt() && x.PalletCode == barcode);
+ if (stockInfos.Count == 0) return WebResponseContent.Instance.Error($"{warehouse.WarehouseName}鏈壘鍒扮┖绠便�恵barcode}銆�");
+ }
+
if (stockInfos.Count < qty) return WebResponseContent.Instance.Error($"{warehouse.WarehouseName}绌虹搴撳瓨涓嶈冻,搴撳瓨鏁般�恵stockInfos.Count}銆�");
List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutEmpty);
stockInfos.ForEach(x =>
@@ -207,27 +336,109 @@
return WebResponseContent.Instance.Error(ex.Message);
}
}
- public WebResponseContent DeviceRequestInboundTask(string stationCode, string roadwayNo, string palletCode)
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="stationCode"></param>
+ /// <param name="roadwayNo"></param>
+ /// <param name="palletCode"></param>
+ /// <returns></returns>
+ public WebResponseContent DeviceRequestInboundTask(string stationCode, string roadwayNo, string palletCode,string materielBoxCode = "")
{
try
{
Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
if (task != null)
{
+ PushTasksToWCS(new List<Dt_Task> { task });
return WebResponseContent.Instance.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task));
}
- if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
+ if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null && stationCode != "8005")//杈呮枡浠撲笉闄愬埗鍏ュ簱浠诲姟
{
return WebResponseContent.Instance.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�");
}
+ if (!string.IsNullOrEmpty(materielBoxCode))
+ {
+ _unitOfWorkManage.BeginTran();
+ WebResponseContent responseGroup = _inboundOrderService.MaterielPPorGM(materielBoxCode);
+ if (!responseGroup.Status)
+ {
+ return WebResponseContent.Instance.Error($"{responseGroup.Message}");
+ }
+ Dt_StockInfo stockInfoPPorGM = responseGroup.Data as Dt_StockInfo ?? null;
+ if (stockInfoPPorGM==null)
+ {
+ return WebResponseContent.Instance.Error($"缁勭洏鏁版嵁杞崲澶辫触");
+ }
+ Dt_LocationInfo? locationInfoPPorGM = _basicService.LocationInfoService.AssignLocation(roadwayNo, stockInfoPPorGM.PalletType, stockInfoPPorGM.WarehouseId);
+ if (locationInfoPPorGM == null)
+ {
+ return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅");
+ }
+ Dt_Task newTaskPPorGM = new Dt_Task()
+ {
+ CurrentAddress = stationCode,
+ Grade = 0,
+ NextAddress = locationInfoPPorGM.LocationCode,
+ PalletCode = stockInfoPPorGM.PalletCode,
+ Roadway = roadwayNo,
+ SourceAddress = stationCode,
+ TargetAddress = locationInfoPPorGM.LocationCode,
+ TaskType = TaskTypeEnum.Inbound.ObjToInt(),
+ TaskStatus = TaskStatusEnum.New.ObjToInt(),
+ WarehouseId = stockInfoPPorGM.WarehouseId,
+ PalletType = stockInfoPPorGM.PalletType,
+ TaskLength= stockInfoPPorGM.StockLength,
+
+ };
+ string MaterielCodeGMPP = stockInfoPPorGM.Details?.Where(x => x.StockId == stockInfoPPorGM.Id).FirstOrDefault()?.MaterielCode;
+ float QuantityGMPP = (float)stockInfoPPorGM.Details?.Where(x => x.StockId == stockInfoPPorGM.Id).Sum(x => x.StockQuantity);
+ if (MaterielCodeGMPP != null && QuantityGMPP != null)
+ {
+ newTaskPPorGM.MaterielCode = MaterielCodeGMPP;
+ newTaskPPorGM.Quantity = QuantityGMPP;
+ }
- Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
+ //鑾峰彇鏄惁瀛樺湪鍏ュ簱鍗�
+ Dt_InboundOrder? inboundOrderPPorGM = null;
+ if (stockInfoPPorGM != null && stockInfoPPorGM.Details.Count > 0)
+ {
+ string? orderNo = stockInfoPPorGM.Details.FirstOrDefault()?.OrderNo ?? "";
+ inboundOrderPPorGM = _inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt());
+ }
+
+ if (inboundOrderPPorGM != null)
+ {
+ if (inboundOrderPPorGM.OrderType == InOrderTypeEnum.Allocat.ObjToInt())
+ {
+ newTaskPPorGM.TaskType = TaskTypeEnum.InAllocate.ObjToInt();
+ }
+ else if (inboundOrderPPorGM.OrderType == InOrderTypeEnum.Return.ObjToInt())
+ {
+ newTaskPPorGM.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt();
+ }
+ }
+ stockInfoPPorGM.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+ LocationStatusEnum lastStatusPPorGM = (LocationStatusEnum)locationInfoPPorGM.LocationStatus;
+ _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfoPPorGM, lastStatusPPorGM, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation);
+ _basicService.LocationInfoService.UpdateLocationStatus(locationInfoPPorGM, newTaskPPorGM.PalletType, LocationStatusEnum.Lock, newTaskPPorGM.WarehouseId);
+ int taskIdPPorGM = BaseDal.AddData(newTaskPPorGM);
+ newTaskPPorGM.TaskId = taskIdPPorGM;
+ _stockRepository.StockInfoRepository.Db.InsertNav(stockInfoPPorGM).Include(x => x.Details).ExecuteCommand();
+ _unitOfWorkManage.CommitTran();
+ WMSTaskDTO wMSTaskDTOPPorGM = _mapper.Map<WMSTaskDTO>(newTaskPPorGM);
+
+ PushTasksToWCS(new List<Dt_Task> { newTaskPPorGM });
+ return WebResponseContent.Instance.OK(data: wMSTaskDTOPPorGM);
+ }
+ Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
if (stockInfo == null)
{
return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
}
- if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
+ if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎷i�夊畬鎴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.閫�搴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES閫�搴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.閫佹搴撳瓨瀹屾垚.ObjToInt() && stockInfo.StockStatus!=StockStatusEmun.鐩樼偣搴撳瓨瀹屾垚.ObjToInt())
{
return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
}
@@ -254,17 +465,63 @@
TaskType = TaskTypeEnum.Inbound.ObjToInt(),
TaskStatus = TaskStatusEnum.New.ObjToInt(),
WarehouseId = stockInfo.WarehouseId,
- PalletType = stockInfo.PalletType
+ 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;
+ }
+ //鑾峰彇鏄惁瀛樺湪鍏ュ簱鍗�
+ Dt_InboundOrder? inboundOrder = null;
+ if (stockInfo != null && stockInfo.Details.Count > 0)
+ {
+ string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? "";
+ inboundOrder = _inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt());
+ }
+
+ if (inboundOrder != null)
+ {
+ if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt())
+ {
+ newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt();
+ }
+ else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
+ {
+ newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt();
+ }
+ }
if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
{
stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
+ }
+ else if (stockInfo.StockStatus == StockStatusEmun.MES閫�搴�.ObjToInt())
+ {
+ newTask.TaskType = TaskTypeEnum.MesMatReturn.ObjToInt();
+ }
+ else if (stockInfo.StockStatus == StockStatusEmun.鎷i�夊畬鎴�.ObjToInt())
+ {
+ stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+ newTask.TaskType = TaskTypeEnum.InPick.ObjToInt();
+ }
+ else if (stockInfo.StockStatus == StockStatusEmun.閫佹搴撳瓨瀹屾垚.ObjToInt())
+ {
+ stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
+ newTask.TaskType = TaskTypeEnum.InQuality.ObjToInt();
+ }
+ else if (stockInfo.StockStatus == StockStatusEmun.鐩樼偣搴撳瓨瀹屾垚.ObjToInt())
+ {
+ stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
+ newTask.TaskType = TaskTypeEnum.InInventory.ObjToInt();
}
else
{
stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
}
+
LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
_unitOfWorkManage.BeginTran();
_recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation);
@@ -276,7 +533,200 @@
WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
PushTasksToWCS(new List<Dt_Task> { newTask });
- if (newTask.WarehouseId == 5) PutFinish(stationCode);
+ if (newTask.WarehouseId == 5) PutFinish(stationCode.ToString(),newTask.PalletCode, newTask.TaskNum.ToString());
+ return WebResponseContent.Instance.OK(data: wMSTaskDTO);
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ /// <summary>
+ /// 浠呯敵璇蜂换鍔★紝璁¦CS鏍规嵁璺敱纭畾涓嬩竴鍦板潃
+ /// </summary>
+ /// <param name="stationCode"></param>
+ /// <param name="palletCode"></param>
+ /// <returns></returns>
+ public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string palletCode)
+ {
+ try
+ {
+ Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
+ if (task != null)
+ {
+ PushTasksToWCS(new List<Dt_Task> { task });
+ return WebResponseContent.Instance.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task));
+ }
+
+ if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
+ {
+ return WebResponseContent.Instance.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�");
+ }
+ Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
+ if (stockInfo == null)
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
+ }
+ if (stockInfo.StockStatus != StockStatusEmun.閫�搴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES閫�搴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES绌烘墭閫�搴�.ObjToInt())
+ {
+ return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
+ }
+ if (!string.IsNullOrEmpty(stockInfo.LocationCode))
+ {
+ return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
+ }
+
+ Dt_Task newTask = new Dt_Task()
+ {
+ CurrentAddress = stationCode,
+ Grade = 0,
+ NextAddress = "",
+ PalletCode = palletCode,
+ Roadway = "",
+ SourceAddress = stationCode,
+ TargetAddress = "",
+ 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 = (float)Quantity;
+ }
+
+ if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
+ {
+ stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
+ }
+ else if (stockInfo.StockStatus == StockStatusEmun.MES閫�搴�.ObjToInt())
+ {
+ newTask.TaskType = TaskTypeEnum.MesMatReturn.ObjToInt();
+ }
+ else if (stockInfo.StockStatus == StockStatusEmun.MES绌烘墭閫�搴�.ObjToInt())
+ {
+ Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x=>x.WarehouseId==stockInfo.WarehouseId && x.PalletType==stockInfo.PalletType);
+ //todo 灏忔墭鐩樻殏鏃舵湭鍚敤
+ if (palletTypeInfo.LocaitonCount==2)
+ {
+ newTask.TaskType = TaskTypeEnum.MesPalletLargeReturn.ObjToInt();
+ }
+ else
+ {
+ newTask.TaskType = TaskTypeEnum.MesPalletSmallReturn.ObjToInt();
+ }
+ }
+ else
+ {
+ stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+ }
+
+ _unitOfWorkManage.BeginTran();
+ int taskId = BaseDal.AddData(newTask);
+ newTask.TaskId = taskId;
+ _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+ _unitOfWorkManage.CommitTran();
+ WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
+
+ PushTasksToWCS(new List<Dt_Task> { newTask });
+ if (newTask.WarehouseId == 5) PutFinish(stationCode, newTask.PalletCode, newTask.TaskNum.ToString());
+ return WebResponseContent.Instance.OK(data: wMSTaskDTO);
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="stationCode"></param>
+ /// <param name="palletCode"></param>
+ /// <param name="staions"></param>
+ /// <param name="heightType"></param>
+ /// <returns></returns>
+ public WebResponseContent DeviceRequestInboundTaskByRoadways(string stationCode, string palletCode, List<string> staions, int heightType)
+ {
+ try
+ {
+ Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
+ if (task != null)
+ {
+ PushTasksToWCS(new List<Dt_Task> { task });
+ return WebResponseContent.Instance.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task));
+ }
+
+ if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
+ {
+ return WebResponseContent.Instance.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�");
+ }
+
+ string roadwayNo = AssignRoadwayNo(staions, palletCode, heightType);
+
+ Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
+ if (stockInfo == null)
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
+ }
+ if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎷i�夊畬鎴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.閫�搴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES閫�搴�.ObjToInt())
+ {
+ return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
+ }
+ if (!string.IsNullOrEmpty(stockInfo.LocationCode))
+ {
+ return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
+ }
+
+ Dt_Task newTask = new Dt_Task()
+ {
+ CurrentAddress = stationCode,
+ Grade = 0,
+ NextAddress = "",
+ PalletCode = palletCode,
+ Roadway = roadwayNo,
+ SourceAddress = stationCode,
+ TargetAddress = roadwayNo,
+ 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;
+ }
+ if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
+ {
+ stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
+ }
+ else if (stockInfo.StockStatus == StockStatusEmun.MES閫�搴�.ObjToInt())
+ {
+ newTask.TaskType = TaskTypeEnum.MesMatReturn.ObjToInt();
+ }
+ else
+ {
+ stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+ }
+
+ _unitOfWorkManage.BeginTran();
+ int taskId = BaseDal.AddData(newTask);
+ newTask.TaskId = taskId;
+ _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+ _unitOfWorkManage.CommitTran();
+ WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
+
+ PushTasksToWCS(new List<Dt_Task> { newTask });
+ //if (newTask.WarehouseId == 5) PutFinish(stationCode);
return WebResponseContent.Instance.OK(data: wMSTaskDTO);
}
catch (Exception ex)
@@ -306,8 +756,64 @@
{
return WebResponseContent.Instance.OK(data: task.TargetAddress);
}
-
+
Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, task.PalletType, task.WarehouseId);
+ if (locationInfo == null)
+ {
+ return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅");
+ }
+
+ task.Roadway = roadwayNo;
+ task.TargetAddress = locationInfo.LocationCode;
+ if (task.Roadway.Contains("AGV"))
+ {
+ task.TaskStatus = TaskStatusEnum.AGV_Execute.ObjToInt();
+ }
+ else
+ {
+ task.TaskStatus = TaskStatusEnum.SC_Execute.ObjToInt();
+ }
+
+
+ LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
+
+ _unitOfWorkManage.BeginTran();
+ _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation);
+ _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, task.PalletType, LocationStatusEnum.Lock, task.WarehouseId);
+ BaseDal.UpdateData(task);
+ _unitOfWorkManage.CommitTran();
+ return WebResponseContent.Instance.OK(data: locationInfo.LocationCode);
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="taskNum"></param>
+ /// <param name="roadwayNo"></param>
+ /// <param name="heightType"></param>
+ /// <returns></returns>
+ public WebResponseContent AssignInboundTaskLocationByHeight(int taskNum, string roadwayNo, int heightType)
+ {
+ try
+ {
+ Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+ if (task == null)
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒拌鍏ュ簱浠诲姟");
+ }
+
+ if (_basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress) != null)
+ {
+ return WebResponseContent.Instance.OK(data: task.TargetAddress);
+ }
+
+ Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, task.PalletType, task.WarehouseId, heightType: heightType);
if (locationInfo == null)
{
return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅");
@@ -332,5 +838,292 @@
return WebResponseContent.Instance.Error(ex.Message);
}
}
+
+ public WebResponseContent RequestZHInboundTask(string agvTaskCode, string palletCode, string palletType, string materialLot)
+ {
+ WebResponseContent content = new WebResponseContent();
+ 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.PalletCode== palletCode).Includes(x => x.Details).ToList();
+ if (stockInfos.Count > 0)
+ {
+ return content.Error($"杞藉叿鎵樼洏宸插瓨鍦�");
+ }
+ Dt_StockInfo? stockInfoOld = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == materialLot));
+ if (stockInfoOld != null)
+ {
+ return content.Error($"搴撳瓨淇℃伅宸插瓨鍦�");
+ }
+ Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x=>x.CodeStartStr== palletType);
+ if (palletTypeInfo == null)
+ {
+ return content.Error($"鎵樼洏绫诲瀷淇℃伅涓嶅瓨鍦�");
+ }
+ ////鑾峰彇闃荤剨鎵规
+ //WebResponseContent requestLotInfo = GetZHMesMaterialLot(materialLot);
+ //if (!requestLotInfo.Status)
+ //{
+ // return content.Error($"璇锋眰闃荤剨鎵规淇℃伅澶辫触,{requestLotInfo.Message}");
+ //}
+ //MesLotInfoModel mesLotInfo = JsonConvert.DeserializeObject<MesLotInfoModel>(requestLotInfo.Data.ToString());
+ MesLotInfoModel mesLotInfo = new MesLotInfoModel()
+ {
+ Product="FH001",
+ ProductVersion="A1",
+ Qty=20,
+ LotNo= materialLot,
+ IsFullNumber=true
+ };
+ Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
+ {
+ MaterielSpec = mesLotInfo.ProductVersion,
+ BatchNo = materialLot,
+ EffectiveDate = mesLotInfo.DateCode ?? " ",
+ MaterielCode = mesLotInfo.Product,
+ InboundOrderRowNo = 0,
+ MaterielName = mesLotInfo.Product,
+ ProductionDate = mesLotInfo.DateCode ?? " ",
+ OrderNo = "",
+ OutboundQuantity = 0,
+ SerialNumber = materialLot,
+ StockQuantity = (float)mesLotInfo.Qty,
+ Status = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
+ Unit = "Lot",
+ Remark= mesLotInfo.IsFullNumber?"婊ot":"涓嶆弧Lot"
+ };
+ Dt_StockInfo stockInfo = new Dt_StockInfo()
+ {
+ PalletCode = palletCode,
+ PalletType = palletTypeInfo.PalletType,
+ WarehouseId = warehouse.WarehouseId,
+ StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
+ Details = new List<Dt_StockInfoDetail> { stockInfoDetail }
+ };
+
+ //鐢熸垚閫�搴撲换鍔�
+ Dt_Task taskIn = new()
+ {
+ CurrentAddress = "AGV_ZH",
+ Grade = 0,
+ PalletCode = palletCode,
+ NextAddress = "",
+ Roadway = "SC01_ZH",
+ SourceAddress = "AGV_ZH",
+ TargetAddress = "",
+ TaskStatus = (int)TaskStatusEnum.New,
+ TaskType = palletTypeInfo.LocaitonCount==2? (int)TaskTypeEnum.InZHProductLarge : (int)TaskTypeEnum.InZHProductSmall,
+ TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+ PalletType = palletTypeInfo.PalletType,
+ WarehouseId = warehouse.WarehouseId,
+ MaterielCode = mesLotInfo.Product,
+ Quantity = (float)mesLotInfo.Qty,
+ };
+ _unitOfWorkManage.BeginTran();
+ Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
+ BaseDal.AddData(taskIn);
+ //BaseDal.AddData(task);
+ _unitOfWorkManage.CommitTran();
+ //灏嗕换鍔℃帹閫佸埌WCS
+ PushTasksToWCS(new List<Dt_Task>() { taskIn }, "AGV_ZH", agvTaskCode);
+ content.OK(data: taskIn);
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+
+ public readonly string[] OutStartPonits = { "5230", "5237", "5244" };
+ /// <summary>
+ /// 鎴愬搧浣欐枡閫�搴撳叆浠�
+ /// </summary>
+ /// <param name="barCode"></param>
+ /// <param name="startPoint"></param>
+ /// <returns></returns>
+ public WebResponseContent BackProductTask(string barCode, string startPoint)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string palletCode = @"^C\d{5}$"; // 姝e垯琛ㄨ揪寮�
+ bool isValid = Regex.IsMatch(barCode, palletCode);
+ if (!isValid)
+ {
+ return content.Error($"妗嗙爜鏍煎紡閿欒{barCode}");
+ }
+ if (!OutStartPonits.Contains(startPoint))
+ {
+ return content.Error($"璧风偣閿欒{startPoint}");
+ }
+ //鍒ゆ柇褰撳墠鐐逛綅鏄惁閲嶅
+ Dt_Task taskOldPoint = BaseDal.QueryFirst(x=>x.SourceAddress==startPoint && (x.TaskStatus == TaskStatusEnum.New.ObjToInt()||x.TaskStatus==TaskStatusEnum.Line_Execute.ObjToInt()|| x.TaskStatus == TaskStatusEnum.Line_Executing.ObjToInt() || x.TaskStatus == TaskStatusEnum.AGV_Takeing.ObjToInt()));
+ if (taskOldPoint != null)
+ {
+ return content.Error($"绔欑偣{startPoint}宸插瓨鍦ㄤ换鍔�");
+ }
+ Dt_Task taskOld = BaseDal.QueryFirst(x => x.PalletCode == barCode);
+ if (taskOld != null)
+ {
+ return content.Error($"鑳舵{barCode}浠诲姟宸插瓨鍦�");
+ }
+ //鑾峰彇鑳舵浣欐枡
+ Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x=>x.PalletCode== barCode).Includes(x=>x.proStockInfoDetails).First();
+ if (proStockInfo==null)
+ {
+ return content.Error($"鏈壘鍒皗barCode}鑳舵淇℃伅");
+ }
+ if (proStockInfo.proStockInfoDetails==null || proStockInfo.proStockInfoDetails.Count<=0)
+ {
+ return content.Error($"{barCode}鑳舵淇℃伅涓虹┖");
+ }
+ if (proStockInfo.StockStatus!=StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
+ {
+ return content.Error($"{barCode}鑳舵淇℃伅鐘舵�佸紓甯�");
+ }
+ //鑾峰彇鎴愬搧骞冲簱
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
+ if (proStockInfo.WarehouseId != warehouse.WarehouseId && proStockInfo.LocationCode!= "鎴愬搧鍖呰鎷h揣鍖�")
+ {
+ return content.Error($"{barCode}鑳舵淇℃伅涓嶅湪鎷h揣鍖�");
+ }
+ //鑾峰彇褰撳墠鐨勫簱瀛樺睘鎬�
+ Dt_Warehouse? warePoint = null;
+ switch (proStockInfo.ProStockAttribute)
+ {
+ case (int)ProStockAttributeEnum.鎴愬搧:
+ warePoint = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString());
+ break;
+ case (int)ProStockAttributeEnum.灏炬暟:
+ warePoint = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA72.ToString());
+ break;
+ case (int)ProStockAttributeEnum.鐮斿彂:
+ warePoint = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA73.ToString());
+ break;
+ default:
+ throw new Exception($"鏈壘鍒皗barCode}鑳舵淇℃伅搴撳瓨灞炴��");
+ }
+ Dt_Warehouse warehouseLocation = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString());
+ Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouseLocation.WarehouseId);
+ if (locationInfo == null)
+ {
+ return content.Error($"鏈壘鍒皗warehouse.WarehouseCode}璐т綅淇℃伅");
+ }
+ proStockInfo.StockStatus = StockStatusEmun.鎴愬搧浣欐枡鍥炲簱.ObjToInt();
+ proStockInfo.proStockInfoDetails.ForEach(x =>
+ {
+ x.ProOutDetailStatus = StockStatusEmun.鎴愬搧浣欐枡鍥炲簱.ObjToInt();
+ });
+ Dt_Task newTask = new Dt_Task()
+ {
+ CurrentAddress = startPoint,
+ Grade = 0,
+ NextAddress = "",
+ PalletCode = proStockInfo.PalletCode,
+ Roadway = locationInfo.RoadwayNo,
+ SourceAddress = startPoint,
+ TargetAddress = "",
+ TaskType = TaskTypeEnum.InProductBack.ObjToInt(),
+ TaskStatus = TaskStatusEnum.New.ObjToInt(),
+ WarehouseId = warePoint.WarehouseId,
+ PalletType = proStockInfo.PalletType,
+ MaterielCode = proStockInfo.proStockInfoDetails?.Where(x => x.ProStockId == proStockInfo.Id).FirstOrDefault()?.ProductCode,
+ Quantity = (float)proStockInfo.proStockInfoDetails?.Where(x => x.ProStockId == proStockInfo.Id).Sum(x => x.StockPcsQty)
+ };
+ _unitOfWorkManage.BeginTran();
+ int taskId = BaseDal.AddData(newTask);
+ newTask.TaskId = taskId;
+ _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);
+ _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails);
+ _unitOfWorkManage.CommitTran();
+ //鎺ㄩ�佷换鍔�
+ PushTasksToWCS(new List<Dt_Task> { newTask });
+ content.OK("鍙戦�佹垚鍔�");
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ /// <summary>
+ /// 绌烘鍥炲簱
+ /// </summary>
+ public WebResponseContent EmptyBackTask(string barCode, string startPoint)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string palletCode = @"^C\d{5}$"; // 姝e垯琛ㄨ揪寮�
+ bool isValid = Regex.IsMatch(barCode, palletCode);
+ if (!isValid)
+ {
+ return content.Error($"妗嗙爜鏍煎紡閿欒{barCode}");
+ }
+ if (!OutStartPonits.Contains(startPoint))
+ {
+ return content.Error($"璧风偣閿欒{startPoint}");
+ }
+ //鍒ゆ柇褰撳墠鐐逛綅鏄惁閲嶅
+ Dt_Task taskOldPoint = BaseDal.QueryFirst(x => x.SourceAddress == startPoint && (x.TaskStatus == TaskStatusEnum.New.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Execute.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Executing.ObjToInt()));
+ //if (taskOldPoint != null)
+ //{
+ // return content.Error($"绔欑偣{startPoint}宸插瓨鍦ㄤ换鍔�");
+ //}
+ Dt_Task taskOld = BaseDal.QueryFirst(x => x.PalletCode == barCode);
+ if (taskOld != null)
+ {
+ return content.Error($"鑳舵{barCode}浠诲姟宸插瓨鍦�");
+ }
+ //if (_stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == barCode) != null)
+ //{
+ // return content.Error($"鑳舵{barCode}搴撳瓨淇℃伅宸插瓨鍦�");
+ //}
+ //todo:涓存椂瑙g粦
+ Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == barCode);
+ if (_stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == barCode) != null)
+ {
+ proStockInfo.PalletCode = proStockInfo.PalletCode + ":" + DateTime.Now.ToString("MM/dd");
+ }
+ //鑾峰彇鎴愬搧骞冲簱
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
+ Dt_Task newTask = new Dt_Task()
+ {
+ CurrentAddress = startPoint,
+ Grade = 0,
+ NextAddress = "",
+ PalletCode = barCode,
+ Roadway = "CL01_CP",
+ SourceAddress = startPoint,
+ TargetAddress = "",
+ TaskType = TaskTypeEnum.EmptyProductBack.ObjToInt(),
+ TaskStatus = TaskStatusEnum.New.ObjToInt(),
+ WarehouseId = warehouse.WarehouseId,
+ PalletType = 1
+ };
+ _unitOfWorkManage.BeginTran();
+ int taskId = BaseDal.AddData(newTask);
+ if (proStockInfo!=null)
+ {
+ _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);
+ }
+ newTask.TaskId = taskId;
+ _unitOfWorkManage.CommitTran();
+ //鎺ㄩ�佷换鍔�
+ PushTasksToWCS(new List<Dt_Task> { newTask });
+ content.OK("鍙戦�佹垚鍔�");
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
}
}
--
Gitblit v1.9.3