From ded9c653b4bd5f45cb23124068687135c29e6915 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 12 一月 2026 15:06:11 +0800
Subject: [PATCH] 多个功能优化,逻辑修改等
---
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs | 179 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 146 insertions(+), 33 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
index 0dd2c7b..ff193fb 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
@@ -41,29 +41,24 @@
/// <param name="stationCode"></param>
/// <param name="palletCode"></param>
/// <returns></returns>
- public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string palletCode)
+ public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode)
{
try
{
- Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
+ Dt_Task task = Repository.QueryFirst(x => x.PalletCode == stationCode);
if (task != null)
{
PushTasksToWCS(new List<Dt_Task> { task });
return WebResponseContent.Instance.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task));
}
-
- Dt_ProStockInfo stockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
+ Dt_ProStockInfo stockInfo = BaseDal.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == stationCode).Includes(x => x.proStockInfoDetails).First(); ;
if (stockInfo == null)
{
return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
}
- if (stockInfo.StockStatus != StockStatusEmun.MES浣欐枡閫�搴�.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES绌烘墭閫�搴�.ObjToInt())
+ if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())
{
return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
- }
- if (!string.IsNullOrEmpty(stockInfo.LocationCode))
- {
- return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
}
Dt_Task newTask = new Dt_Task()
@@ -71,35 +66,28 @@
CurrentAddress = stationCode,
Grade = 0,
NextAddress = "",
- PalletCode = palletCode,
+ PalletCode = stationCode,
Roadway = "",
SourceAddress = stationCode,
TargetAddress = "",
- TaskType = TaskTypeEnum.Inbound.ObjToInt(),
+ TaskType = TaskTypeEnum.InProduct.ObjToInt(),
TaskStatus = TaskStatusEnum.New.ObjToInt(),
WarehouseId = stockInfo.WarehouseId,
PalletType = stockInfo.PalletType,
};
-
-
- if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
+ stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+ stockInfo.proStockInfoDetails.ForEach(x =>
{
- stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
- }
- else
- {
- stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
- }
-
+ x.ProStockDetailStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+ });
_unitOfWorkManage.BeginTran();
int taskId = BaseDal.AddData(newTask);
newTask.TaskId = taskId;
_stockRepository.ProStockInfoRepository.UpdateData(stockInfo);
+ _stockRepository.ProStockInfoDetailRepository.UpdateData(stockInfo.proStockInfoDetails);
_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)
@@ -372,7 +360,7 @@
stockInfoOld.IsPick = WhetherEnum.False.ObjToInt();
}
decimal stockLength = bSTStockInfoDTO.StockMeter;
- if (weight != bSTStockInfoDTO.Qty)
+ if (weight != bSTStockInfoDTO.Qty && weight < stockInfoOld.InitialWeight)
{
Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterialSourceId == stockInfoOld.MaterielId);
int gramWeight = (int)(materielInfo.MaterielWeight * 1000);
@@ -393,13 +381,13 @@
throw new Exception($"涓婃姤绉伴噸澶辫触");
}
stockLength = weight / bSTStockInfoDTO.W / gramWeight * 1000000;
+ stockInfoOld.IsFull = WhetherEnum.True.ObjToInt();
+ stockInfoOld.MaterielWeight = weight;
}
stockInfoOld.StockStatus = StockStatusEmun.鑰佸巶閫�搴�.ObjToInt();
stockInfoOld.MaterielThickness = bSTStockInfoDTO.Thick;
- stockInfoOld.MaterielWeight = weight;
stockInfoOld.MaterielWide = bSTStockInfoDTO.W;
stockInfoOld.StockLength = stockLength;
- stockInfoOld.IsFull = WhetherEnum.True.ObjToInt();
stockInfoOld.StockOutLength = 0;
stockInfoOld.WarehouseId = WarehouseEnum.LLDYL.ObjToInt();
if (thickness < 400)
@@ -672,6 +660,7 @@
MaterielThickness = bSTStockInfoDTO.Thick,
MaterielWide = bSTStockInfoDTO.W,
MaterielWeight = bSTStockInfoDTO.Qty,
+ InitialWeight = bSTStockInfoDTO.Qty,
MaterielCode = materielInfo.MaterielCode,
MaterielName = materielInfo.MaterielName,
StockLength = bSTStockInfoDTO.StockMeter,
@@ -757,6 +746,7 @@
MaterielThickness = purchaseBSTOrderDetail.MaterialThick,
MaterielWide = purchaseBSTOrderDetail.MaterialWide,
MaterielWeight = purchaseBSTOrderDetail.DeliveryQty,
+ InitialWeight=purchaseBSTOrderDetail.DeliveryQty,
MaterielCode = materielInfo.MaterielCode,
MaterielName = materielInfo.MaterielName,
StockLength = purchaseBSTOrderDetail.ProcurementLength,
@@ -1004,6 +994,28 @@
_stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails);
_basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId);
BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐瀹屾垚 : WIDESEA_Core.Enums.OperateTypeEnum.鑷姩瀹屾垚);
+ if (task.TaskType==TaskTypeEnum.InProduct.ObjToInt())
+ {
+ ERPProInUpModel proInUpModel = new ERPProInUpModel();
+ List<PB_INV_PRODUCT_INItem> pRODUCT_INItems = new List<PB_INV_PRODUCT_INItem>();
+ foreach (var item in proStockInfo.proStockInfoDetails)
+ {
+ PB_INV_PRODUCT_INItem pB_INV_PRODUCT_INItem = new PB_INV_PRODUCT_INItem()
+ {
+ WP_ID=item.LotNumber.ObjToInt(),
+ INV_BARCODE=item.ProductNo,
+ QTY=(int)item.StockQty,
+ REMARK="鎴愬搧鍏ュ簱"
+ };
+ pRODUCT_INItems.Add(pB_INV_PRODUCT_INItem);
+ }
+ proInUpModel.PB_INV_PRODUCT_IN= pRODUCT_INItems;
+ string request = _invokeERPService.ERPProInUp(proInUpModel) ?? throw new Exception("鎴愬搧鍏ュ簱鎺ュ彛璇锋眰澶辫触");
+ if (!request.Contains("Success"))
+ {
+ throw new Exception($"鎴愬搧鍏ュ簱澶辫触");
+ }
+ }
_unitOfWorkManage.CommitTran();
_recordService.StockQuantityChangeRecordService.AddStockChangeRecord(proStockInfo, 0, proStockInfo.proStockInfoDetails.Sum(x => x.StockQty), StockChangeTypeEnum.Inbound);
}
@@ -1022,7 +1034,7 @@
}
//鑾峰彇璐т綅淇℃伅
Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
- if (locationInfoEnd == null && task.TaskType!=TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
+ if (locationInfoEnd == null && task.TaskType!=TaskTypeEnum.WFBBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
{
return content.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
}
@@ -1034,7 +1046,7 @@
Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
_basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
}
- if (task.TaskType != TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
+ if (task.TaskType != TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBBackInbound.ObjToInt() && task.TaskType != TaskTypeEnum.WFBYLInbound.ObjToInt())
{
stockInfo.LocationCode = locationInfoEnd.LocationCode;
}
@@ -1838,16 +1850,24 @@
if (AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()).Count() > 0)
{
//鐢熸垚鍗婃垚鍝佸叆搴�
- WebResponseContent webResponse = PrintInbound(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()).ToList());
+ WebResponseContent webResponse = SemiProInbound(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鍗婃垚鍝�.ObjToInt()).ToList());
if (!webResponse.Status)
{
throw new Exception(webResponse.Message);
}
tasks = webResponse.Data as List<Dt_Task>;
WebResponseContent taskResponse = PushTasksToWCS(tasks);
- if (taskResponse.Status)
+ if (!taskResponse.Status)
{
throw new Exception(taskResponse.Message);
+ }
+ }
+ if (AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鎴愬搧.ObjToInt()).Count() > 0)
+ {
+ WebResponseContent webResponse = PushPackaxisTaskToWCS(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.鎴愬搧.ObjToInt()).ToList());
+ if (!webResponse.Status)
+ {
+ throw new Exception(webResponse.Message);
}
}
_unitOfWorkManage.CommitTran();
@@ -1862,9 +1882,9 @@
return content;
}
/// <summary>
- /// 鍗板埛涓嬫枡MES浠诲姟
+ /// 鍗婃垚鍝佷笅鏂橫ES浠诲姟
/// </summary>
- public WebResponseContent PrintInbound(List<Dt_MESProInOrderInfo> mESProInOrderInfos)
+ public WebResponseContent SemiProInbound(List<Dt_MESProInOrderInfo> mESProInOrderInfos)
{
WebResponseContent content = new WebResponseContent();
try
@@ -1879,11 +1899,16 @@
List<Dt_Task> tasks = new List<Dt_Task>();
//鑾峰彇鎵�鏈堿GV鐐逛綅
List<Dt_AGVStationInfo> aGVStationInfos = _basicRepository.AGVStationInfoRepository.QueryData(x => !string.IsNullOrEmpty(x.MESPointCode));
+ List<Dt_AGVStationInfo> _AGVStationInfos = new List<Dt_AGVStationInfo>();
//鏍规嵁鍗婃垚鍝佷俊鎭懠鍙搴斾换鍔�
foreach (var item in mESProInOrderInfos)
{
Dt_AGVStationInfo? CheckPointCode = aGVStationInfos.FirstOrDefault(x => x.MESPointCode == item?.PointCode);
Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterialCode);
+ if (CheckPointCode==null)
+ {
+ return content.Error($"鏈壘鍒皗item?.PointCode}鐐逛綅");
+ }
if (materielInfo == null)
{
return content.Error("鏈壘鍒扮墿鏂欎俊鎭�");
@@ -1924,7 +1949,7 @@
//鍗婃垚鍝佸叆搴撲换鍔�
Dt_Task newTask = new Dt_Task()
{
- CurrentAddress = CheckPointCode.AGVStationCode,
+ CurrentAddress = item.PointCode.StartsWith("YS") ? CheckPointCode.AGVStationCode : CheckPointCode.MESPointCode,
Grade = 0,
NextAddress = "",
PalletCode = item.BarCode,
@@ -1940,17 +1965,54 @@
TaskTypeEnum taskTypeEnum = CheckPointCode.StationArea switch
{
nameof(StationAreaEnum.涓�妤煎嵃鍒�) => TaskTypeEnum.PrintYLInbound,
+ nameof(StationAreaEnum.涓�妤煎垎鍒�) => TaskTypeEnum.PartOffInbound,
+ nameof(StationAreaEnum.涓�妤肩焊寮犳穻鑶�) => TaskTypeEnum.PaperFilmInbound,
+ nameof(StationAreaEnum.涓�妤兼棤绾烘穻鑶�) => TaskTypeEnum.WFBYLInbound,
_ => throw new Exception("鏈壘鍒板搴斾换鍔�")
};
+ if (taskTypeEnum == TaskTypeEnum.WFBYLInbound)
+ {
+ Dt_AGVStationInfo? stationInfo = AssignWFBStation(_AGVStationInfos?.Select(x => x.AGVStationCode).ToList()) ?? throw new Exception("鏈壘鍒板彲鐢ㄦ棤绾哄竷鏆傚瓨鏋�");
+ newTask.NextAddress = stationInfo.AGVStationCode;
+ newTask.TargetAddress = stationInfo.AGVStationCode;
+ newTask.Roadway = "AGV";
+ stationInfo.IsOccupied = 1;
+ _AGVStationInfos.Add(stationInfo);
+ }
newTask.TaskType = taskTypeEnum.ObjToInt();
stockInfos.Add(stockInfo);
tasks.Add(newTask);
}
//鎿嶄綔鍏ュ簱鏁版嵁
BaseDal.AddData(tasks);
+ _basicRepository.AGVStationInfoRepository.UpdateData(_AGVStationInfos);
_stockRepository.StockInfoRepository.AddData(stockInfos);
//鎺ㄩ�佷换鍔�
content.OK("鍙戦�佹垚鍔�",data:tasks);
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ /// <summary>
+ /// 鎺ㄩ�佺爜鍨涙暟鎹嚦WCS
+ /// </summary>
+ /// <returns></returns>
+ public WebResponseContent PushPackaxisTaskToWCS(List<Dt_MESProInOrderInfo> mESProInOrderInfos)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string url = AppSettings.Get("WCS");
+ if (string.IsNullOrEmpty(url))
+ {
+ throw new Exception($"鏈壘鍒癢CSAApi鍦板潃,璇锋鏌ラ厤缃枃浠�");
+ }
+ string response = HttpHelper.Post($"{url}/api/Packinfo/ReceivePackaxisTask", mESProInOrderInfos.Serialize());
+
+ return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("杩斿洖閿欒");
}
catch (Exception ex)
{
@@ -1974,5 +2036,56 @@
throw new Exception(ex.Message);
}
}
+ public WebResponseContent BoxingInBound(string stationCode,List<string> barCodes)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ //鑾峰彇鎴愬搧搴撳瓨
+ Dt_ProStockInfo proStockInfoOld = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == stationCode);
+ if (proStockInfoOld != null)
+ {
+ return content.Error($"鎵樼洏{stationCode}宸插瓨鍦�");
+ }
+ //鑾峰彇鏉$爜淇℃伅
+ List<Dt_MESProInOrderInfo> proInOrderInfos = _inboundRepository.MESProInOrderInfoRepository.QueryData(x=> barCodes.Contains(x.BarCode));
+ Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode== proInOrderInfos.FirstOrDefault().MaterialCode);
+ List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+ foreach (var item in proInOrderInfos)
+ {
+ Dt_ProStockInfoDetail proStockInfoDetail = new Dt_ProStockInfoDetail()
+ {
+ ProductCode = materielInfo.MaterielCode,
+ ProductNo = item.BarCode,
+ ProductName = materielInfo.MaterielName,
+ ProductSpec = materielInfo.MaterielSpec,
+ LotNumber = item.ProcessNum.ToString(),
+ ProductUnit = materielInfo.MaterielUnit,
+ StockQty = item.ProQuantity,
+ ProStockDetailStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt()
+ };
+ proStockInfoDetails.Add(proStockInfoDetail);
+ }
+
+ Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo()
+ {
+ PalletCode = stationCode,
+ ProInOrderNo = proInOrderInfos.FirstOrDefault().ProductOrderNo,
+ ProStockAttribute = materielInfo.MaterielSourceType,
+ PalletType = 1,
+ LocationCode = "",
+ WarehouseId = materielInfo.WarehouseId,
+ StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
+ proStockInfoDetails = proStockInfoDetails
+ };
+ BaseDal.Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
+ content.OK();
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
}
}
--
Gitblit v1.9.3