diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs index 6b7d455..2f89c79 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs @@ -2122,7 +2122,7 @@ INNER JOIN ICSConfiguration conStocknew ON a.WorkPoint=conStocknew.WorkPoint AND { #region ERP string sql = @"SELECT a.ToWarehouseCode+a.MUSER+a.LotNo AS Costre,ROW_NUMBER() OVER (ORDER BY a.ToWarehouseCode,a.MUSER,a.LotNo) AS Sequence, - a.ToWarehouseCode AS WarehouseCode,lot.MUSER, + a.ToWarehouseCode AS WarehouseCode,lot.MUSER AS LotMUSER,(select F_RealName from Sys_SRM_User s where s.F_Account=a.MUSER) AS MUSER, a.InvCode,SUM(a.Quantity) AS Quantity,CASE inv.AmountEnable WHEN '1' THEN SUM(a.Quantity*(lot.Amount/lot.Quantity)) ELSE '0' END AS Amount,con.Enable AS UpdateTodoQuantity,conStock.Enable AS UpdateStock,conStocknew.Enable AS IsFillClose ,a.WorkPoint,ISNULL(ext.ProjectCode, '') AS ProjectCode, CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode, @@ -2167,7 +2167,7 @@ INNER JOIN ICSConfiguration conStocknew ON a.WorkPoint=conStocknew.WorkPoint AND ISNULL(ext.cFree9, ''), ISNULL(ext.cFree10, '') - SELECT DISTINCT Costre,Sequence,WorkPoint,WarehouseCode AS WHCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity,'false' AS CompleteVerification,UpdateStock,IsFillClose + SELECT DISTINCT Costre,Sequence,WorkPoint,WarehouseCode AS WHCode,MUSER AS [UserName],LotMUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity,'false' AS CompleteVerification,UpdateStock,IsFillClose ,InvCode,Quantity,Amount,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 FROM #TempERP --SELECT Costre,TransSequence,Sequence,InvCode,Quantity,Amount,MODetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 --FROM #TempERP diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs index 6c498a2..4a2b5ae 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs @@ -2855,22 +2855,45 @@ a.ExtensionID } else { - columns = @"(a.Quantity-a.lockQuantity) AS Quantity, - (a.Quantity-a.lockQuantity)*(lot.Amount/lot.Quantity) AS Amount, - '' AS LogID, - a.WarehouseCode AS WHCode, - wh.WarehouseName AS WHName, - inv.LotEnable, - a.LocationCode, - loc.LocationName, - CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,"; - - tableName = @"ICSWareHouseLotInfo a - INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint - INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint - INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint - INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint - LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint"; + if(TransType == TransTypeEnum.Check.GetDescription()) + { + columns = @"case when inv.AmountEnable='1' then (a.Quantity-a.lockQuantity)*(lot.Amount/lot.Quantity) else (a.Quantity-a.lockQuantity) end AS Quantity, + (a.Quantity-a.lockQuantity)*(lot.Amount/lot.Quantity) AS Amount, + '' AS LogID, + a.WarehouseCode AS WHCode, + wh.WarehouseName AS WHName, + inv.LotEnable, + a.LocationCode, + loc.LocationName, + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,"; + + tableName = @"ICSWareHouseLotInfo a + INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint + INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint + INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint + INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint + LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint"; + } + else + { + columns = @"(a.Quantity-a.lockQuantity) AS Quantity, + (a.Quantity-a.lockQuantity)*(lot.Amount/lot.Quantity) AS Amount, + '' AS LogID, + a.WarehouseCode AS WHCode, + wh.WarehouseName AS WHName, + inv.LotEnable, + a.LocationCode, + loc.LocationName, + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,"; + + tableName = @"ICSWareHouseLotInfo a + INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint + INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint + INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint + INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint + LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint"; + } + } @@ -3447,21 +3470,25 @@ a.ExtensionID - //先进先出判断 - var result = CanOut(Lot, JsonData.WorkPoint, JsonData.ScanLotCode, sqlnew, cmd, language); - //0 - 已经是最早的批次 - //1 - 不管控 - //2 - 提醒 - //3 - 限制 - if (result == "2") - { - msg += string.Format(language.GetNameByCode("WMSAPIInfo178"), Lot) + Environment.NewLine; - } - else if (result == "3") + if(TransType != TransTypeEnum.OtherOutDoc.GetDescription()) { - msg += string.Format(language.GetNameByCode("WMSAPIInfo179"), Lot) + Environment.NewLine; - isLimit = true; + //先进先出判断 + var result = CanOut(Lot, JsonData.WorkPoint, JsonData.ScanLotCode, sqlnew, cmd, language); + //0 - 已经是最早的批次 + //1 - 不管控 + //2 - 提醒 + //3 - 限制 + if (result == "2") + { + msg += string.Format(language.GetNameByCode("WMSAPIInfo178"), Lot) + Environment.NewLine; + } + else if (result == "3") + { + msg += string.Format(language.GetNameByCode("WMSAPIInfo179"), Lot) + Environment.NewLine; + isLimit = true; + } } + } } @@ -11986,7 +12013,7 @@ END"; if (string.IsNullOrEmpty(item.User)) { throw new Exception(language.GetNameByCode("WMSAPIInfo018"));//"操作人不能为空!"); - } + } if (string.IsNullOrEmpty(item.WorkPoint)) { throw new Exception(language.GetNameByCode("WMSAPIInfo004"));//"站点不能为空!" @@ -12013,6 +12040,16 @@ END"; //创建盘点单 foreach (var itemInfo in item.detail) { + + string chekksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot c + INNER JOIN ICSInventory d on c.InvCode=d.InvCode and c.WorkPoint=d.WorkPoint + WHERE c.WorkPoint='{1}' and c.lotno='{2}' and d.AmountEnable='1'"; + chekksql = string.Format(chekksql, item.CheckCode, item.WorkPoint, itemInfo.LotNo); + DataTable dta = DBHelper.SQlReturnData(chekksql, cmd); + if (dta.Rows.Count > 0) + { + itemInfo.ActualQuantity = (decimal.Parse(itemInfo.ActualQuantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString(); + } sql = @"IF NOT EXISTS(SELECT LotNo FROM ICSWareHouseLotInfo WHERE LotNo='{1}' AND WorkPoint='{3}') BEGIN RAISERROR('" + language.GetNameByCode("WMSAPIInfo076") + @"',16,1); @@ -16304,7 +16341,47 @@ a.ExtensionID END " + sql; } - + + if (TransType == TransTypeEnum.Check.GetDescription()) + { + sql = @"IF EXISTS(SELECT LotNo FROM ICSCheckDetail a + LEFT JOIN ICSCheck b ON a.CheckID=b.ID AND a.WorkPoint=b.WorkPoint + WHERE b.CheckCode='{6}' AND a.LotNo='{2}' AND a.WorkPoint='{3}') + BEGIN + IF ('{8}'='初盘') + BEGIN + IF EXISTS(SELECT LotNo FROM ICSCheckDetail a + LEFT JOIN ICSCheck b ON a.CheckID=b.ID AND a.WorkPoint=b.WorkPoint + WHERE b.CheckCode='{6}' AND a.LotNo='{2}' AND a.WorkPoint='{3}' AND a.PrimaryQuantity>0) + BEGIN + RAISERROR('当前条码已初盘,请确认!', 16, 1); + RETURN; + END + END + ELSE IF ('{8}'='抽盘') + BEGIN + IF EXISTS(SELECT LotNo FROM ICSCheckDetail a + LEFT JOIN ICSCheck b ON a.CheckID=b.ID AND a.WorkPoint=b.WorkPoint + WHERE b.CheckCode='{6}' AND a.LotNo='{2}' AND a.WorkPoint='{3}' AND a.CheckQuantity>0) + BEGIN + RAISERROR('当前条码已抽盘,请确认!', 16, 1); + RETURN; + END + END + ELSE + BEGIN + IF EXISTS(SELECT LotNo FROM ICSCheckDetail a + LEFT JOIN ICSCheck b ON a.CheckID=b.ID AND a.WorkPoint=b.WorkPoint + WHERE b.CheckCode='{6}' AND a.LotNo='{2}' AND a.WorkPoint='{3}' AND a.ReplayQuantity>0) + BEGIN + RAISERROR('当前条码已复盘,请确认!', 16, 1); + RETURN; + END + END + END + " + sql; + } + if (iszl) { @@ -16329,23 +16406,44 @@ a.ExtensionID } else { - columns = @"(a.Quantity-a.lockQuantity) AS Quantity, - (a.Quantity-a.lockQuantity)*(lot.Amount/lot.Quantity) AS Amount, - '' AS LogID, - a.WarehouseCode AS WHCode, - wh.WarehouseName AS WHName, - inv.LotEnable, - a.LocationCode, - lot.ProductDate, - loc.LocationName, - CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,"; - - tableName = @"ICSWareHouseLotInfo a - INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint - INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint - INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint - INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint - LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint"; + if (TransType == TransTypeEnum.Check.GetDescription()) + { + columns = @"case when inv.AmountEnable='1' then (a.Quantity-a.lockQuantity)*(lot.Amount/lot.Quantity) else (a.Quantity-a.lockQuantity) end AS Quantity, + (a.Quantity-a.lockQuantity)*(lot.Amount/lot.Quantity) AS Amount, + '' AS LogID, + a.WarehouseCode AS WHCode, + wh.WarehouseName AS WHName, + inv.LotEnable, + a.LocationCode, + loc.LocationName, + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,"; + + tableName = @"ICSWareHouseLotInfo a + INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint + INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint + INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint + INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint + LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint"; + } + else + { + columns = @"(a.Quantity-a.lockQuantity) AS Quantity, + (a.Quantity-a.lockQuantity)*(lot.Amount/lot.Quantity) AS Amount, + '' AS LogID, + a.WarehouseCode AS WHCode, + wh.WarehouseName AS WHName, + inv.LotEnable, + a.LocationCode, + loc.LocationName, + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,"; + + tableName = @"ICSWareHouseLotInfo a + INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint + INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint + INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint + INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint + LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint"; + } } @@ -16786,7 +16884,7 @@ a.ExtensionID else { - sql = string.Format(sql, columns, tableName, JsonData.Code, JsonData.WorkPoint, zlqty, UName,JsonData.TransCode,JsonData.TransSequence); + sql = string.Format(sql, columns, tableName, JsonData.Code, JsonData.WorkPoint, zlqty, UName,JsonData.TransCode,JsonData.TransSequence,JsonData.CheckKind); log.Debug("条码sql:" + sql); table = DBHelper.SQlReturnData(sql, cmd); } diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs index 2bd5ae6..5bb063c 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs @@ -2673,6 +2673,12 @@ namespace ICSSoft.DataProject RETURN END + IF EXISTS(SELECT id FROM ICSInventoryLot WHERE LotNo='{0}' AND Quantity<'{9}') + BEGIN + RAISERROR('条码 {0} 盘点数量不能超过生成数量!',16,1); + RETURN + END + INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode, FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity, Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID, @@ -2687,7 +2693,7 @@ namespace ICSSoft.DataProject INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' "; - sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription(), CheckKind); + sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription(), CheckKind, Quantity); if (!DBHelper.ExecuteNonQuery(sql, cmd)) { diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.Entity/BarCodeModel.cs b/ICSSoft.WMS.WebAPI/ICSSoft.Entity/BarCodeModel.cs index 60837be..38275c5 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.Entity/BarCodeModel.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.Entity/BarCodeModel.cs @@ -35,5 +35,10 @@ namespace ICSSoft.Entity /// 是否拣配 /// public string IsPick { get; set; } + + /// + /// 盘点类型 + /// + public string CheckKind { get; set; } } }