diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs index 17455bd..884f6df 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs @@ -75,6 +75,7 @@ namespace ICSSoft.DataProject inv.AmountUnit, wh.WarehouseName AS WHName, ISNULL(ext.ProjectCode, '') AS ProjectCode, + a.ExtensionID, CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode, ISNULL(ext.Version, '') AS Version, ISNULL(ext.Brand, '') AS Brand, @@ -247,6 +248,7 @@ namespace ICSSoft.DataProject a.FromWarehouseCode AS WHCode, inv.AmountUnit, wh.WarehouseName AS WHName, + a.ExtensionID, ext.ProjectCode, CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode, ext.Version, @@ -587,6 +589,7 @@ namespace ICSSoft.DataProject '' AS WHCode, inv.AmountUnit, '' AS WHName, + a.ExtensionID, ext.ProjectCode, CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode, ext.Version, @@ -677,6 +680,7 @@ namespace ICSSoft.DataProject inv.InvUnit, {0} inv.AmountUnit, + ext.ID AS ExtensionID, ext.ProjectCode, ext.Version, ext.Brand, @@ -949,8 +953,23 @@ namespace ICSSoft.DataProject CheckTrans(dataView, rowFilter, string.Format(language.GetNameByCode("WMSAPIInfo055"), Lot, drLot["cFree9"])); rowFilter += " AND cFree10='" + drLot["cFree10"] + "'"; CheckTrans(dataView, rowFilter, string.Format(language.GetNameByCode("WMSAPIInfo056"), Lot, drLot["cFree10"])); + //保质期管理 + var resultEffective = Effective(Lot, JsonData.WorkPoint, cmd, language); + //0 - 已经是最早的批次 + //1 - 不管控 + //2 - 提醒 + //3 - 限制 + if(resultEffective == "2") + { + msg += string.Format(language.GetNameByCode("WMSAPIInfo181"), Lot)+Environment.NewLine; + } + else if (resultEffective == "3") + { + msg += string.Format(language.GetNameByCode("WMSAPIInfo182"), Lot) + Environment.NewLine; + isLimit = true; + } //先进先出判断 - var result = CanOut(Lot, JsonData.WorkPoint, cmd); + var result = CanOut(Lot, JsonData.WorkPoint, JsonData.ScanLotCode, cmd, language); //0 - 已经是最早的批次 //1 - 不管控 //2 - 提醒 @@ -3595,7 +3614,7 @@ namespace ICSSoft.DataProject /// /// /// - public static string CanOut(string LotNo, string WorkPoitCode, SqlCommand cmd) + public static string CanOut(string LotNo, string WorkPoitCode, string ScanLotCode, SqlCommand cmd, Dictionary language) { try { @@ -3606,7 +3625,7 @@ namespace ICSSoft.DataProject SET @CountNO=( SELECT COUNT(a.LotNO) FROM ICSWareHouseLotInfo a INNER JOIN ICSInventoryLot b ON a.LotNO=b.LotNO AND a.WorkPoint=b.WorkPoint - WHERE a.WorkPoint='{1}' AND ISNULL(a.Quantity,0)>0 + WHERE a.WorkPoint='{1}' AND ISNULL(a.Quantity,0)>0 AND 1=1 AND CONVERT(varchar(100), a.InDate, 23)< (SELECT DATEADD(DAY, -@Days, CONVERT(varchar(100), x.InDate, 23)) FROM ICSWareHouseLotInfo x INNER JOIN ICSInventoryLot y ON x.LotNO=y.LotNO AND x.WorkPoint=y.WorkPoint @@ -3614,7 +3633,7 @@ namespace ICSSoft.DataProject ) IF @CountNO>0 BEGIN - SELECT TOP 1 CASE a.F_ItemCode WHEN '0000501' THEN '1' WHEN '0000502' THEN '2' ELSE '3' END AS Type + SELECT TOP 1 CASE a.F_ItemCode WHEN 'FIFO01' THEN '1' WHEN 'FIFO02' THEN '2' ELSE '3' END AS Type FROM Sys_SRM_ItemsDetail a INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id WHERE b.F_EnCode='FIFO' AND a.F_EnabledMark='1' @@ -3629,10 +3648,62 @@ namespace ICSSoft.DataProject //2 - 提醒 //3 - 限制 sql = string.Format(sql, LotNo, WorkPoitCode); + if(!string.IsNullOrWhiteSpace(ScanLotCode)) + { + sql = sql.Replace("1=1", "a.LotNO NOT IN (" + ScanLotCode + ")"); + } + var res = DBHelper.ExecuteScalar(sql, cmd).ToString(); + if (string.IsNullOrWhiteSpace(res)) + { + throw new Exception(language.GetNameByCode("WMSAPIInfo183"));//"查询管控信息失败!"); + } + else + return res; + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } + + /// + /// 保质期管控 + /// + /// + /// + /// + /// + public static string Effective(string LotNo, string WorkPoitCode, SqlCommand cmd, Dictionary language) + { + try + { + //根据Sys_SRM_Items.F_Description备注列维护的提前天数,比如维护的是1,最早条码是2022.5.16,现在扫描2022.5.17的条码也能出库,扫描2022.5.18的条码不能直接出,需要校验以下逻辑 + string sql = @"DECLARE @CountNO INT,@Days INT,@CurrentDays INT + SELECT @CountNO=EffectiveEnable,@Days=EffectiveDays,@CurrentDays=DATEDIFF(DAY, c.InDate, GETDATE()) FROM ICSInventory a + INNER JOIN ICSInventoryLot b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint + INNER JOIN ICSWareHouseLotInfo c ON b.LotNO=c.LotNO AND b.WorkPoint=c.WorkPoint + WHERE b.LotNO='{0}' AND b.WorkPoint='{1}' + IF @CountNO='1' AND @CurrentDays>@Days + BEGIN + SELECT TOP 1 CASE a.F_ItemCode WHEN 'Effective01' THEN '1' WHEN 'Effective02' THEN '2' ELSE '3' END AS Type + FROM Sys_SRM_ItemsDetail a + INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id + WHERE b.F_EnCode='Effective' AND a.F_EnabledMark='1' + ORDER BY a.F_SortCode DESC + END + ELSE + BEGIN + SELECT @CountNO + END"; + //0 - 已经是最早的批次 + //1 - 不管控 + //2 - 提醒 + //3 - 限制 + sql = string.Format(sql, LotNo, WorkPoitCode); var res = DBHelper.ExecuteScalar(sql, cmd).ToString(); if (string.IsNullOrWhiteSpace(res)) { - throw new Exception(LanguageHelper.GetNameSingle("WMSAPI004"));//"查询管控信息失败!"); + throw new Exception(language.GetNameByCode("WMSAPIInfo183"));//"查询管控信息失败!"); } else return res; @@ -4233,13 +4304,13 @@ namespace ICSSoft.DataProject } else { - throw new Exception(LanguageHelper.GetNameSingle("WMSAPI005"));//"密码不正确,请重新输入"); + throw new Exception(LanguageHelper.GetNameSingle("WMSAPI004"));//"密码不正确,请重新输入"); } } } else { - throw new Exception(LanguageHelper.GetNameSingle("WMSAPI006"));//"用户名不存在,请重新输入!"); + throw new Exception(LanguageHelper.GetNameSingle("WMSAPI005"));//"用户名不存在,请重新输入!"); } return null; } diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.Entity/BarCodeModel.cs b/ICSSoft.WMS.WebAPI/ICSSoft.Entity/BarCodeModel.cs index 98cf8cf..1eb32b7 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.Entity/BarCodeModel.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.Entity/BarCodeModel.cs @@ -17,8 +17,9 @@ namespace ICSSoft.Entity /// 源头单据 /// public string TransCode { get; set; } - - - + /// + /// 用于排除本次已扫描的条码(多个用'',分割,如:'001','002') + /// + public string ScanLotCode { get; set; } } } diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.WMS.WebAPI/Web.config b/ICSSoft.WMS.WebAPI/ICSSoft.WMS.WebAPI/Web.config index 6b0bf57..460d676 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.WMS.WebAPI/Web.config +++ b/ICSSoft.WMS.WebAPI/ICSSoft.WMS.WebAPI/Web.config @@ -6,8 +6,8 @@ - - + +