From f6fc28d2608176b34eaa44d44fe89b7339ca1d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E9=B9=8F?= Date: Mon, 26 Jun 2023 16:51:00 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BA=A7=E6=88=90=E5=93=81=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E4=B8=BB=E4=BA=A7=E5=93=81=E5=A2=9E=E5=8A=A0=E5=8D=A1?= =?UTF-8?q?=E6=8E=A7=EF=BC=8C=E5=BF=85=E9=A1=BB=E4=B8=8A=E4=BC=A0=E6=89=8D?= =?UTF-8?q?=E8=83=BD=E5=85=A5=E5=BA=93=202=E3=80=81=E4=BA=A7=E6=88=90?= =?UTF-8?q?=E5=93=81=E5=85=A5=E5=BA=93=E5=89=AF=E4=BA=A7=E5=93=81BUG?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ICSManufactureService.cs | 191 +++++++++++------- .../ICSWareHouseLotInfoService.cs | 12 ++ 2 files changed, 127 insertions(+), 76 deletions(-) diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs index 5f1cee0..5922202 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSManufactureService.cs @@ -722,7 +722,19 @@ namespace ICSSoft.DataProject { try { - string sql = @"DECLARE @Status VARCHAR(10) + string sql = @" + IF NOT EXISTS(SELECT 1 + FROM ICSMO a + LEFT JOIN ICSInventoryLotDetail b ON b.TransCode=a.MoCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint + LEFT JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint + LEFT JOIN ICSExtension d ON d.ID=c.ExtensionID AND d.WorkPoint=c.WorkPoint + LEFT JOIN ICSBackflushBCLog bclog ON a.MOCode=bclog.TransCode AND a.Sequence=bclog.TransSequence AND bclog.BatchCode=d.BatchCode + WHERE c.LotNo='{0}') + BEGIN + RAISERROR('" + language.GetNameByCode("WMSAPIInfo468") + @"',16,1); + END + + DECLARE @Status VARCHAR(10) SELECT @Status=c.ERPStatus FROM ICSInventoryLot a INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint @@ -947,93 +959,119 @@ ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10,a. log.Debug(resultStr); } - //副产品生成产成品入库单 - sql = @"SELECT c.BatchCode--,COUNT(*) AS batchCount - FROM ICSWareHouseLotInfoLog a - LEFT JOIN ICSInventoryLot b ON b.LotNo = a.LotNo AND b.WorkPoint = a.WorkPoint - LEFT JOIN ICSExtension c ON c.ID = b.ExtensionID AND c.WorkPoint = b.WorkPoint - LEFT JOIN ICSInventoryLotDetail d ON d.LotNo = b.LotNo AND d.WorkPoint = b.WorkPoint - LEFT JOIN ICSMO e ON e.MOCode = d.TransCode AND e.WorkPoint = d.WorkPoint - LEFT JOIN ICSMOPick f ON f.MODetailID = e.MODetailID AND f.WorkPoint = d.WorkPoint - WHERE a.Identification = '{0}' - AND(SELECT 1 FROM ICSMOByProductLog bypro WHERE bypro.MoCode = e.MoCode AND bypro.Sequence = f.Sequence AND bypro.BatchCode = c.BatchCode AND bypro.WorkPoint = a.WorkPoint) IS NULL - GROUP BY c.BatchCode"; - sql = string.Format(sql, Identification); - log.Debug("查询主产品批次数目:"); - log.Debug(sql); - DataTable dt = DBHelper.SQlReturnData(sql, cmd); - int times = dt.Rows.Count; - sql = @"SELECT e.DepCode+f.WHCode+e.MOCode+a.MUSER AS Costre,e.DepCode,f.WHCode AS WarehouseCode,e.MoCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY e.DepCode,f.WHCode,e.MOCode,e.MODetailID,f.InvCode) AS Sequence,f.InvCode,f.EATTRIBUTE2 AS Quantity,0 AS Amount,e.MODetailID,Enable AS UpdateTodoQuantity,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,ISNULL(ext.Version, '') AS Version,ISNULL(ext.Brand, '') AS Brand,ISNULL(ext.cFree1, '') AS cFree1,ISNULL(ext.cFree2, '') AS cFree2,ISNULL(ext.cFree3, '') AS cFree3,ISNULL(ext.cFree4, '') AS cFree4,ISNULL(ext.cFree5, '') AS cFree5,ISNULL(ext.cFree6, '') AS cFree6,ISNULL(ext.cFree7, '') AS cFree7,ISNULL(ext.cFree8, '') AS cFree8,ISNULL(ext.cFree9, '') AS cFree9,ISNULL(ext.cFree10, '') AS cFree10 - INTO #TempERP - FROM ICSWareHouseLotInfoLog a - LEFT JOIN ICSInventoryLot b ON b.LotNo=a.LotNo AND b.WorkPoint=a.WorkPoint - LEFT JOIN ICSExtension ext ON ext.ID=b.ExtensionID AND ext.WorkPoint=b.WorkPoint - LEFT JOIN ICSInventoryLotDetail d ON d.LotNo=b.LotNo AND d.WorkPoint=b.WorkPoint - LEFT JOIN ICSMO e ON e.MOCode=d.TransCode AND e.WorkPoint=d.WorkPoint - LEFT JOIN ICSMOPick f ON f.MODetailID=e.MODetailID AND f.WorkPoint=d.WorkPoint - INNER JOIN ICSInventory inv ON f.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint - LEFT JOIN ICSInventoryBatchEnable invBat ON f.InvCode=invBat.InvCode AND f.WHCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint - INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint - WHERE a.Identification='{0}' - AND f.EATTRIBUTE1='1' - AND (SELECT 1 FROM ICSMOByProductLog bypro WHERE bypro.MoCode=e.MoCode AND bypro.Sequence=f.Sequence AND bypro.BatchCode=ext.BatchCode AND bypro.WorkPoint=a.WorkPoint) IS NULL - GROUP BY e.DepCode,f.WHCode,e.MoCode,a.MUSER,f.InvCode,f.EATTRIBUTE2,e.MODetailID,Enable,a.WorkPoint - ,ISNULL(ext.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,ISNULL(ext.Version, ''),ISNULL(ext.Brand, ''),ISNULL(ext.cFree1, ''),ISNULL(ext.cFree2, ''),ISNULL(ext.cFree3, ''),ISNULL(ext.cFree4, ''),ISNULL(ext.cFree5, ''),ISNULL(ext.cFree6, ''),ISNULL(ext.cFree7, ''),ISNULL(ext.cFree8, ''),ISNULL(ext.cFree9, ''),ISNULL(ext.cFree10, '') - - SELECT DISTINCT Costre,WorkPoint,DepCode,WarehouseCode AS WHCode,MOCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP - SELECT Costre,Sequence,InvCode,Quantity*{1} AS Quantity,Amount,MODetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 - FROM #TempERP - - DROP TABLE #TempERP"; - sql = string.Format(sql, Identification, times); - log.Debug("副产品生成成品入库单:"); - log.Debug(sql); - ds = DBHelper.SQlReturnDataSet(sql, cmd); - - string ByProductInputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre"); - string byProductResultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ManufactureReceiveDocURL, ByProductInputstr); - result = new Result(); - result = JsonConvert.DeserializeObject(byProductResultStr); - if (result.Success) - { - //向副产品生成入库单记录表中插入数据 - sql = @"SELECT a.TransCode,a.TransSequence,a.Quantity,c.BatchCode,b.InvCode,a.WorkPoint - FROM ICSWareHouseLotInfoLog a - LEFT JOIN ICSInventoryLot b ON b.LotNo=a.LotNo AND b.WorkPoint=a.WorkPoint - LEFT JOIN ICSExtension c ON c.ID=b.ExtensionID AND c.WorkPoint=a.WorkPoint - WHERE a.Identification='{0}'"; - DataTable dtt = DBHelper.SQlReturnData(sql, cmd); - Inputstr = dtt.ToString(); - List moStockIns = JsonConvert.DeserializeObject>(Inputstr); - foreach (MoStockInModel moStockIn in moStockIns) + #region 副产品生成产成品入库单 + try { + sql = @"-- 判断本工单中对应行号与本批次副产品是否已生成入库单号 + IF( + SELECT DISTINCT bypro.BatchCode + FROM ICSWareHouseLotInfoLog a + LEFT JOIN ICSInventoryLot b ON b.LotNo = a.LotNo AND b.WorkPoint = a.WorkPoint + LEFT JOIN ICSExtension c ON c.ID = b.ExtensionID AND c.WorkPoint = b.WorkPoint + LEFT JOIN ICSMOByProductLog bypro ON bypro.MoCode = a.TransCode AND bypro.Sequence = a.TransSequence AND bypro.BatchCode = c.BatchCode AND bypro.WorkPoint = a.WorkPoint + WHERE a.Identification='{0}' + ) IS NULL + BEGIN + -- 查找主产品批次种类数量 + DECLARE @BatchCount VARCHAR(10) + SELECT @BatchCount=COUNT(DISTINCT c.BatchCode) + FROM ICSWareHouseLotInfoLog a + LEFT JOIN ICSInventoryLot b ON b.LotNo = a.LotNo AND b.WorkPoint = a.WorkPoint + LEFT JOIN ICSExtension c ON c.ID = b.ExtensionID AND c.WorkPoint = b.WorkPoint + LEFT JOIN ICSInventoryLotDetail d ON d.LotNo = b.LotNo AND d.WorkPoint = b.WorkPoint + LEFT JOIN ICSMO e ON e.MOCode = d.TransCode AND e.WorkPoint = d.WorkPoint + LEFT JOIN ICSMOPick f ON f.MODetailID = e.MODetailID AND f.WorkPoint = d.WorkPoint + WHERE a.Identification = '{0}' + AND(SELECT 1 FROM ICSMOByProductLog bypro WHERE bypro.MoCode = a.TransCode AND bypro.Sequence = a.TransSequence AND bypro.BatchCode = c.BatchCode AND bypro.WorkPoint = a.WorkPoint) IS NULL + + -- SELECT @BatchCount + + -- 查询副产品生成入库单所需数据 + SELECT e.DepCode+f.WHCode+e.MOCode+a.MUSER AS Costre,e.DepCode,f.WHCode AS WarehouseCode,e.MoCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY e.DepCode,f.WHCode,e.MOCode,e.MODetailID,f.InvCode) AS Sequence,f.InvCode,f.EATTRIBUTE2 AS Quantity,0 AS Amount,e.MODetailID,Enable AS UpdateTodoQuantity,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,ISNULL(ext.Version, '') AS Version,ISNULL(ext.Brand, '') AS Brand,ISNULL(ext.cFree1, '') AS cFree1,ISNULL(ext.cFree2, '') AS cFree2,ISNULL(ext.cFree3, '') AS cFree3,ISNULL(ext.cFree4, '') AS cFree4,ISNULL(ext.cFree5, '') AS cFree5,ISNULL(ext.cFree6, '') AS cFree6,ISNULL(ext.cFree7, '') AS cFree7,ISNULL(ext.cFree8, '') AS cFree8,ISNULL(ext.cFree9, '') AS cFree9,ISNULL(ext.cFree10, '') AS cFree10 + INTO #TempERP + FROM ICSWareHouseLotInfoLog a + LEFT JOIN ICSInventoryLot b ON b.LotNo=a.LotNo AND b.WorkPoint=a.WorkPoint + LEFT JOIN ICSExtension ext ON ext.ID=b.ExtensionID AND ext.WorkPoint=b.WorkPoint + LEFT JOIN ICSInventoryLotDetail d ON d.LotNo=b.LotNo AND d.WorkPoint=b.WorkPoint + LEFT JOIN ICSMO e ON e.MOCode=d.TransCode AND e.WorkPoint=d.WorkPoint + LEFT JOIN ICSMOPick f ON f.MODetailID=e.MODetailID AND f.WorkPoint=d.WorkPoint + INNER JOIN ICSInventory inv ON f.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint + LEFT JOIN ICSInventoryBatchEnable invBat ON f.InvCode=invBat.InvCode AND f.WHCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint + INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint + WHERE a.Identification='{0}' + AND f.EATTRIBUTE1='1' + AND (SELECT 1 FROM ICSMOByProductLog bypro WHERE bypro.MoCode=e.MoCode AND bypro.Sequence=f.Sequence AND bypro.BatchCode=ext.BatchCode AND bypro.WorkPoint=a.WorkPoint) IS NULL + GROUP BY e.DepCode,f.WHCode,e.MoCode,a.MUSER,f.InvCode,f.EATTRIBUTE2,e.MODetailID,Enable,a.WorkPoint + ,ISNULL(ext.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,ISNULL(ext.Version, ''),ISNULL(ext.Brand, ''),ISNULL(ext.cFree1, ''),ISNULL(ext.cFree2, ''),ISNULL(ext.cFree3, ''),ISNULL(ext.cFree4, ''),ISNULL(ext.cFree5, ''),ISNULL(ext.cFree6, ''),ISNULL(ext.cFree7, ''),ISNULL(ext.cFree8, ''),ISNULL(ext.cFree9, ''),ISNULL(ext.cFree10, '') + + SELECT DISTINCT Costre,WorkPoint,DepCode,WarehouseCode AS WHCode,MOCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP + SELECT Costre,Sequence,InvCode,Quantity*@BatchCount AS Quantity,Amount,MODetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 + FROM #TempERP + + DROP TABLE #TempERP + END + ELSE + BEGIN + RAISERROR('" + language.GetNameByCode("WMSAPIInfo467") + @"',16,1); + -- RAISERROR('本次副产品不需要生成入库单',16,1) + END"; + sql = string.Format(sql, Identification); + log.Debug("副产品生成入库单逻辑:"); + log.Debug(sql); + ds = DBHelper.SQlReturnDataSet(sql, cmd); + + string ByProductInputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre"); + string byProductResultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ManufactureReceiveDocURL, ByProductInputstr); + result = new Result(); + result = JsonConvert.DeserializeObject(byProductResultStr); + if (result.Success) { - try - { - sql = @"INSERT INTO ICSMOByProductLog VALUES(NEWID(),'{0}','{1}',{2},'{3}','{4}','{5}')"; - sql = string.Format(sql, moStockIn.TransCode, moStockIn.TransSequence, moStockIn.Quantity, moStockIn.BatchCode, moStockIn.InvCode, moStockIn.WorkPoint); - log.Debug("向副产品生成入库单记录表中插入数据:"); - log.Debug(sql); - DBHelper.ExecuteNonQuery(sql, cmd); - } - catch + //向ICSMOByProductLog表中插入数据 + sql = @"SELECT a.TransCode,a.TransSequence,a.Quantity,c.BatchCode,b.InvCode,a.WorkPoint + FROM ICSWareHouseLotInfoLog a + LEFT JOIN ICSInventoryLot b ON b.LotNo=a.LotNo AND b.WorkPoint=a.WorkPoint + LEFT JOIN ICSExtension c ON c.ID=b.ExtensionID AND c.WorkPoint=a.WorkPoint + WHERE a.Identification='{0}'"; + sql = string.Format(sql,Identification); + log.Debug("查询入库的主产品及批次SQL:"); + log.Error(sql); + DataTable dtt = DBHelper.SQlReturnData(sql, cmd); + string jsonStr = JsonConvert.SerializeObject(dtt); + log.Debug("SQL执行结果:" + jsonStr); + List moStockIns = JsonConvert.DeserializeObject>(jsonStr); + foreach (MoStockInModel moStockIn in moStockIns) { - throw new Exception(language.GetNameByCode("WMSAPIInfo466")); + try + { + sql = @"INSERT INTO ICSMOByProductLog VALUES(NEWID(),'{0}','{1}',{2},'{3}','{4}','{5}')"; + sql = string.Format(sql, moStockIn.TransCode, moStockIn.TransSequence, moStockIn.Quantity, moStockIn.BatchCode, moStockIn.InvCode, moStockIn.WorkPoint); + log.Debug("向ICSMOByProductLog表中插入数据:"); + log.Debug(sql); + DBHelper.ExecuteNonQuery(sql, cmd); + } + catch + { + throw new Exception(language.GetNameByCode("WMSAPIInfo466")); + } } + log.Debug(language.GetNameByCode("WMSAPIInfo465") + ":" + result.ToString()); + } + else + { + log.Debug(language.GetNameByCode("WMSAPIInfo080") + result.Message); } - log.Debug(language.GetNameByCode("WMSAPIInfo465") + ":" + result.ToString()); + } - else + catch(Exception ex) { - log.Debug(language.GetNameByCode("WMSAPIInfo080") + result.Message); + log.Debug(ex.Message); } - + #endregion } else { throw new Exception(language.GetNameByCode("WMSAPIInfo080") + result.Message); } - #endregion } catch (Exception) { @@ -1364,3 +1402,4 @@ ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10,a. #endregion } } +#endregion \ No newline at end of file diff --git a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs index 0f5652e..4c18a92 100644 --- a/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs +++ b/ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSWareHouseLotInfoService.cs @@ -68,6 +68,18 @@ namespace ICSSoft.DataProject RETURN END "; } + sql += @" + IF NOT EXISTS(SELECT 1 + FROM ICSMO a + LEFT JOIN ICSInventoryLotDetail b ON b.TransCode=a.MoCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint + LEFT JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint + LEFT JOIN ICSExtension d ON d.ID=c.ExtensionID AND d.WorkPoint=c.WorkPoint + LEFT JOIN ICSBackflushBCLog bclog ON a.MOCode=bclog.TransCode AND a.Sequence=bclog.TransSequence AND bclog.BatchCode=d.BatchCode + WHERE c.LotNo='{0}') + BEGIN + RAISERROR('" + language.GetNameByCode("WMSAPIInfo468") + @"',16,1); + END + "; sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}') BEGIN RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);