From 5d9e0037e2690c79aae441d4b187167c9c8b4841 Mon Sep 17 00:00:00 2001
From: Administrator <Administrator@DESKTOP-5BIMHQ3>
Date: 星期三, 19 六月 2024 16:58:36 +0800
Subject: [PATCH] 编写入库任务完成接口
---
Wms/WMS.BLL/BllTransServer/NoticeServer.cs | 494 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
Wms/WMS.Entity/LogEntity/LogTask.cs | 5
2 files changed, 497 insertions(+), 2 deletions(-)
diff --git a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs
index 28ead5b..fee3032 100644
--- a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs
+++ b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs
@@ -6,6 +6,9 @@
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.Context;
+using WMS.Entity.DataEntity;
+using WMS.Entity.LogEntity;
+using WMS.Entity.SysEntity;
using WMS.IBLL.IBllTransServer;
namespace WMS.BLL.BllTransServer
@@ -16,7 +19,11 @@
public NoticeServer() : base(Db)
{
}
-
+ /// <summary>
+ /// 涓嬪彂鍏ュ簱鍗�
+ /// </summary>
+ /// <param name="model"></param>
+ /// <returns></returns>
public ErpModel CreateAsn(AsnInfo model)
{
try
@@ -78,7 +85,7 @@
SkuName = asnDetailModel.SkuName,
LotNo = asnDetailModel.LotNo,
LotText = "",
- Qty = (decimal)asnDetailModel.Qty,
+ Qty = (decimal)asnDetailModel.Qty,//杩欓噷鏄《鏁伴噺
FactQty = 0,
CompleteQty = 0,
SupplierLot = asnDetailModel.SupplierLot,
@@ -108,5 +115,488 @@
throw ex;
}
}
+ /// <summary>
+ /// 浠诲姟瀹屾垚
+ /// </summary>
+ /// <param name="TaskNo"></param>
+ /// <param name="Status"></param>
+ /// <returns></returns>
+ public ErpModel FinishTask(string TaskNo,string Status)
+ {
+ try
+ {
+ #region 鏉′欢鍒ゆ柇
+ var resultModel = new ErpModel() { Success = -1, Message = "" };
+ if (string.IsNullOrEmpty(TaskNo))
+ {
+ resultModel.Message = "浠诲姟鍙蜂笉鍙负绌�!";
+ return resultModel;
+ }
+ //浠诲姟淇℃伅
+ var taskInfo = Db.Queryable<LogTask>().First(w => w.TaskNo == TaskNo);
+ if (taskInfo == null)
+ {
+ resultModel.Message = $"浠诲姟鍙蜂负:{TaskNo}鐨勪换鍔′笉瀛樺湪!";
+ return resultModel;
+ }
+ if (taskInfo.Status != "1")
+ {
+ resultModel.Message = $"浠诲姟鍙蜂负:{TaskNo}鐨勪换鍔$姸鎬佸紓甯�!";
+ return resultModel;
+ }
+ #endregion
+ //寮�鍚簨鍔�
+ Db.BeginTran();
+ var comTime = DateTime.Now;
+
+ if (Status == "0")
+ {
+ taskInfo.Status = "3";//寮傚父缁撴潫
+ //淇敼浠诲姟鐘舵��
+ Db.Updateable(taskInfo).ExecuteCommand();
+
+ resultModel.Success = 0;
+ resultModel.Message = "鎴愬姛";
+ return resultModel;
+ }
+ switch (taskInfo.OrderType)
+ {
+ //鍏ュ簱瀹屾垚
+ case "0":
+ //鍏ュ簱鍗曟槑缁嗕俊鎭�
+ var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.ASNDetailNo);
+ if (noticeDetail == null)
+ {
+ resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曟槑缁嗕笉瀛樺湪!";
+ return resultModel;
+ }
+ //鍏ュ簱鍗曚俊鎭�
+ var notice = Db.Queryable<BllArrivalNotice>().First(w => w.ASNNo == noticeDetail.ASNNo);
+ if (notice == null)
+ {
+ resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曚笉瀛樺湪!";
+ return resultModel;
+ }
+ if (notice.Status == "3" || notice.Status == "4")
+ {
+ resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曞凡鎵ц瀹屾垚!";
+ return resultModel;
+ }
+ //鐩爣鍌ㄤ綅淇℃伅
+ var locatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0");
+ if (locatInfo == null)
+ {
+ resultModel.Message = "鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�!";
+ return resultModel;
+ }
+ //搴撳瓨鏄庣粏
+ var sd1 = new DataStockDetail()
+ {
+ LotNo = noticeDetail.LotNo,
+ LotText = noticeDetail.LotText,
+ SupplierLot = noticeDetail.SupplierLot,
+ SkuNo = noticeDetail.SkuNo,
+ SkuName = noticeDetail.SkuName,
+ Standard = noticeDetail.Standard,
+ Qty = 1,
+ LockQty = 0,
+ FrozenQty = 0,
+ InspectQty = 0,
+ ASNNo = noticeDetail.ASNNo,
+ ASNDetailNo = noticeDetail.Id,
+ WareHouseNo = locatInfo.WareHouseNo,//鎵�灞炰粨搴�
+ RoadwayNo = locatInfo.RoadwayNo,//鎵�灞炲贩閬�
+ AreaNo = locatInfo.AreaNo,//鎵�灞炲尯鍩�
+ LocatNo = locatInfo.LocatNo,//鍌ㄤ綅鍦板潃
+ PalletNo = taskInfo.PalletNo,
+ PalletNo2 = "",
+ PalletNo3 = "",
+ PalletTags = "0",
+ CompleteTime = comTime,
+ ProductionTime = null,
+ ExpirationTime = null,
+ Status = "0",
+ InspectMark = "0",
+ InspectStatus = "0",//寰呮楠�
+ BitPalletMark = "0",
+ PackagNo = "",
+ IsBale = "0",
+ IsBelt = "0",
+
+ IsDel = "0",
+ CreateUser = 0,
+ CreateTime = comTime
+ };
+ //鎻掑叆搴撳瓨鏄庣粏
+ Db.Insertable(sd1).ExecuteCommand();
+
+ noticeDetail.CompleteQty += 1;//瀹屾垚鏁伴噺
+ noticeDetail.Status = "1";//0锛氱瓑寰呮墽琛� 1锛氭鍦ㄦ墽琛� 2锛氭墽琛屽畬鎴�
+ if (noticeDetail.CompleteQty >= noticeDetail.Qty)
+ {
+ noticeDetail.Status = "2";
+ noticeDetail.CompleteTime = comTime;
+ }
+ noticeDetail.UpdateUser = 0;
+ noticeDetail.UpdateTime = comTime;
+ //鏇存柊鍏ュ簱鍗曟槑缁�
+ Db.Updateable(noticeDetail).ExecuteCommand();
+
+ notice.UpdateUser = 0;
+ notice.UpdateTime = comTime;
+ if (notice.Status == "0")
+ {
+ notice.Status = "1";
+ }
+ var asnDetailNum = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.ASNNo == noticeDetail.ASNNo && m.Status != "2");
+ if (asnDetailNum == 0)
+ {
+ notice.Status = "2";
+ notice.CompleteTime = comTime;//瀹屾垚鏃堕棿
+ }
+ //鏇存柊鍏ュ簱鍗�
+ Db.Updateable(notice).ExecuteCommand();
+
+ locatInfo.Status = "1";//鏈夌墿鍝�
+ //鏇存柊鍌ㄤ綅鐘舵��
+ Db.Updateable(locatInfo).ExecuteCommand();
+ break;
+ }
+ taskInfo.Status = "2";//鎵ц瀹屾垚
+ //淇敼浠诲姟鐘舵��
+ Db.Updateable(taskInfo).ExecuteCommand();
+
+ //鎻愪氦浜嬪姟
+ Db.CommitTran();
+
+ resultModel.Success = 0;
+ resultModel.Message = "鎴愬姛";
+ return resultModel;
+ }
+ catch (Exception ex)
+ {
+ //鍥炴粴浜嬪姟
+ Db.RollbackTran();
+ throw ex;
+ }
+ }
+ /*public SoResInfo ErpAddExportNotice(SoInfo model)
+ {
+ try
+ {
+ if (string.IsNullOrEmpty(model.SoType))
+ {
+ throw new Exception("鍗曟嵁绫诲瀷涓嶅彲涓虹┖!");
+ }
+ if (string.IsNullOrEmpty(model.OrderCode))
+ {
+ throw new Exception("绯荤粺鍗曞彿涓嶅彲涓虹┖!");
+ }
+ if (model.SoDetails.Count <= 0)
+ {
+ throw new Exception("鍑哄簱鍗曟槑缁嗕笉鍙负绌�!");
+ }
+ //杩斿洖淇℃伅
+ SoResInfo result = new SoResInfo();
+
+ //鑾峰彇搴撳瓨鏄庣粏
+ var stockDetailList = Db.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0 && s.InspectStatus == "1").ToList();
+ //鑾峰彇搴撳瓨
+ var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList();
+
+ string CustomerName = string.Empty;
+ if (!string.IsNullOrEmpty(model.Customer))
+ {
+ //瀹㈡埛淇℃伅
+ var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer);
+ if (customer == null)
+ {
+ throw new Exception("瀹㈡埛淇℃伅涓嶅瓨鍦�!");
+ }
+ CustomerName = customer.CustomerName;
+ }
+ //鎵胯繍鍟嗕俊鎭�
+ var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo);
+ int? logisticsId = null;
+ if (logistics != null)
+ {
+ logisticsId = logistics.Id;
+ }
+ var billNo = "";
+ var bl = true;
+ do
+ {
+ //鑾峰彇鑷鍗曟嵁鍙�
+ billNo = new Common().GetMaxNo("SO");
+ var no = billNo;
+ bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no);
+ } while (bl);
+
+ List<SoDetailInfo> soDetailList = new List<SoDetailInfo>();
+ //寮�鍚簨鍔�
+ Db.BeginTran();
+ try
+ {
+ var list = new List<BllExportNoticeDetail>();
+ //娣诲姞鍑哄簱鍗�
+ foreach (var d in model.SoDetails)
+ {
+ if (d.Qty < 1)
+ {
+ throw new Exception("鍑哄簱鏁伴噺蹇呴』澶т簬0");
+ }
+ var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo);
+ if (sku == null)
+ {
+ throw new Exception($"鐗╂枡淇℃伅涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}");
+ }
+ //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�3锛氱墿鏂欏彇鏍峰嚭搴撱��4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///2:鎶芥鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱
+ if (model.SoType == "0" || model.SoType == "3" || model.SoType == "4" || model.SoType == "7")
+ {
+ if (string.IsNullOrWhiteSpace(d.LotNo))
+ {
+ throw new Exception("鎵规涓嶅彲涓虹┖!");
+ }
+ }
+ //搴撳瓨鏄庣粏
+ List<DataStockDetail> stockDetails;
+ //鎸囧畾鎵规
+ if (!string.IsNullOrWhiteSpace(d.LotNo))
+ {
+ stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList();
+ if (stockDetails.Count < 1)
+ {
+ throw new Exception($"搴撳瓨涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}");
+ }
+ //鍒ゆ柇鏁伴噺
+ var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty);
+ if (d.Qty > qty)
+ {
+ throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻");
+ }
+ //搴撳瓨淇℃伅
+ var stockInfo = stockList.First(w => w.SkuNo == d.SkuNo && w.LotNo == d.LotNo);
+ if (stockInfo == null)
+ {
+ throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}");
+ }
+ //鍒ゆ柇鎬诲簱瀛樻暟閲�
+ if (d.Qty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty)
+ {
+ throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻");
+ }
+ //娣诲姞鍑哄簱鍗曟槑缁�
+ var noticeDetail = new BllExportNoticeDetail()
+ {
+ SONo = billNo,
+ SkuNo = sku.SkuNo,
+ SkuName = sku.SkuName,
+ Standard = sku.Standard,
+ LotNo = d.LotNo,
+ LotText = stockInfo.LotText,
+ Qty = d.Qty,
+ AllotQty = 0,
+ FactQty = 0,
+ CompleteQty = 0,
+ PackagNo = sku.PackagNo,
+ Price = sku.Price,
+ Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
+ IsBale = "",
+ IsBelt = "",
+ SupplierLot = stockInfo.SupplierLot,
+ IsWave = "0",
+ WaveNo = "",
+ IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1",
+
+ OrderDetailCode = d.OrderDetailCode,
+
+ CreateUser = 0,
+ };
+ list.Add(noticeDetail);
+ //鏇存柊搴撳瓨閿佸畾鏁伴噺
+ stockInfo.LockQty += d.Qty;
+ var i = Db.Updateable(stockInfo).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
+
+ SoDetailInfo soDetail = new SoDetailInfo();
+ soDetail.OrderDetailCode = d.OrderDetailCode;
+ soDetail.LockQty = d.Qty;
+ soDetail.LotNo = d.LotNo;
+
+ soDetailList.Add(soDetail);
+ }
+ else//鏈寚瀹氭壒娆�
+ {
+ Dictionary<int, decimal> dic = new Dictionary<int, decimal>();
+ decimal q1 = 0;
+ //棣栧厛鏌ヨ褰撳墠杩欑鐗╂枡鎵规鍙蜂负绌虹殑
+ stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
+ if (stockDetails.Count > 0)
+ {
+ q1 = (decimal)stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty);
+ //搴撳瓨淇℃伅
+ var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(w.LotNo));
+ if (stockInfo != null)
+ {
+ var q2 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty;
+ if (q2 < q1)
+ {
+ q1 = q2;
+ }
+ if (d.Qty > q1)
+ {
+ dic.Add(stockInfo.Id, q1);
+ }
+ else
+ {
+ dic.Add(stockInfo.Id, d.Qty);
+ }
+ }
+ }
+ //濡傛灉鎵规鍙蜂负绌虹殑鏁伴噺涓嶅锛屾牴鎹壒娆″厛杩涘厛鍑哄師鍒欐煡鎵惧叾瀹冩壒娆$殑
+ if (d.Qty > q1)
+ {
+ stockDetails = stockDetailList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList();
+ foreach (var demo in stockDetails)
+ {
+ if (q1 >= d.Qty)
+ {
+ break;
+ }
+ var q2 = demo.Qty - demo.FrozenQty - demo.LockQty;
+ //搴撳瓨淇℃伅
+ var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && w.LotNo == demo.LotNo);
+ if (stockInfo == null)
+ {
+ continue;
+ }
+ decimal q4 = 0;
+ if (dic.ContainsKey(stockInfo.Id))
+ {
+ q4 = dic[stockInfo.Id];
+ }
+ var q3 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty - q4;
+ if (q3 < q2)
+ {
+ q2 = q3;
+ }
+ if (q2 > d.Qty - q1)
+ {
+ if (!dic.ContainsKey(stockInfo.Id))
+ {
+ dic.Add(stockInfo.Id, d.Qty - q1);
+ }
+ else
+ {
+ //鏇存柊鍊�
+ dic[stockInfo.Id] += d.Qty - q1;
+ }
+ q1 += d.Qty - q1;
+ }
+ else
+ {
+ if (!dic.ContainsKey(stockInfo.Id))
+ {
+ dic.Add(stockInfo.Id, (decimal)q2);
+ }
+ else
+ {
+ //鏇存柊鍊�
+ dic[stockInfo.Id] = dic[stockInfo.Id] + (decimal)q2;
+ }
+ q1 += (decimal)q2;
+ }
+ }
+ }
+ if (d.Qty > q1)
+ {
+ throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo} 搴撳瓨鏁伴噺涓嶈冻");
+ }
+ foreach (var s in dic)
+ {
+ var st = stockList.First(a => a.Id == s.Key);
+ var item = new BllExportNoticeDetail()
+ {
+ SONo = billNo,
+ OrderDetailCode = d.OrderDetailCode,
+ SkuNo = sku.SkuNo,
+ SkuName = sku.SkuName,
+ Standard = sku.Standard,
+ LotNo = st.LotNo,
+ LotText = st.LotText,
+ Qty = s.Value,
+ AllotQty = 0,
+ FactQty = 0,
+ CompleteQty = 0,
+ PackagNo = sku.PackagNo,
+ Price = sku.Price,
+ Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
+ IsBale = "",
+ IsBelt = "",
+ SupplierLot = st.SupplierLot,
+ IsWave = "0",
+ WaveNo = "",
+ IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1",
+
+ CreateUser = 0,
+ };
+ list.Add(item);
+
+ st.LockQty += s.Value;//閿佸畾鏁伴噺
+ var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
+
+ SoDetailInfo soDetail = new SoDetailInfo();
+ soDetail.OrderDetailCode = d.OrderDetailCode;
+ soDetail.LockQty = s.Value;
+ soDetail.LotNo = st.LotNo;
+
+ soDetailList.Add(soDetail);
+ }
+ }
+ }
+ var notice = new BllExportNotice()
+ {
+ SONo = billNo,
+ OrderCode = model.OrderCode,
+ Type = model.SoType,
+ Status = "0",
+ Origin = "WMS",
+ CustomerNo = model.Customer,
+ CustomerName = CustomerName,
+ LogisticsId = logisticsId,
+ IsWave = "0",
+ WaveNo = "",
+ IsDespatch = "0",
+
+ CreateUser = 0,
+ };
+
+ var n = Db.Insertable<BllExportNotice>(notice).ExecuteCommand();
+ var m = Db.Insertable<BllExportNoticeDetail>(list).ExecuteCommand();
+
+ if (n <= 0 || m <= 0)
+ {
+ Db.RollbackTran();
+ throw new Exception("鎿嶄綔澶辫触");
+ }
+ Db.CommitTran();
+ //鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺淇℃伅
+ result.Success = "0";
+ result.Message = "鎿嶄綔鎴愬姛";
+ result.SoDetails = soDetailList;
+ return result;
+
+ }
+ catch (Exception ex)
+ {
+ Db.RollbackTran();
+ throw new Exception(ex.Message);
+ }
+ }
+ catch (Exception ex)
+ {
+ Db.RollbackTran();
+ throw new Exception(ex.Message);
+ }
+ }*/
}
}
diff --git a/Wms/WMS.Entity/LogEntity/LogTask.cs b/Wms/WMS.Entity/LogEntity/LogTask.cs
index 53d440d..d3a679b 100644
--- a/Wms/WMS.Entity/LogEntity/LogTask.cs
+++ b/Wms/WMS.Entity/LogEntity/LogTask.cs
@@ -20,6 +20,11 @@
public string TaskNo {get;set;}
/// <summary>
+ /// 鍏ュ簱鏄庣粏鍙�
+ /// </summary>
+ public int ASNDetailNo { get; set; }
+
+ /// <summary>
/// Desc:鍙戦�佹柟
/// Default:
/// Nullable:True
--
Gitblit v1.8.0