陆晔 21 hours ago
parent
commit
5106cef307
  1. 176
      ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs

176
ICSSoft.WMS.WebAPI/ICSSoft.DataProject/ICSSubmitService.cs

@ -9341,7 +9341,7 @@ GROUP BY ExtensionID,INVCode,WHCode) a
LEFT JOIN (SELECT a.INVCode,b.ExtensionID,SUM(a.Quantity) Quantity,a.WarehouseCode WHCode
FROM ICSWareHouseLotInfo a
LEFT JOIN ICSInventoryLot b ON a.lotno=b.lotno and a.WorkPoint=b.WorkPoint
WHERE a.Quantity>0 and a.WorkPoint='{1}'
WHERE a.Quantity>0 and a.WorkPoint='{1}' and a.Quantity-a.LockQuantity>0
GROUP BY a.INVCode,b.ExtensionID,a.WarehouseCode) b ON a.ExtensionID=b.ExtensionID AND a.INVCode=b.INVCode AND a.WHCode=b.WHCode
WHERE b.INVCode is NULL OR a.Quantity>isnull(b.Quantity,0)";
sql = string.Format(sql, JsonData.TransCode, JsonData.WorkPoint);
@ -9390,9 +9390,9 @@ ORDER BY CAST(Sequence AS INT),MTDOCType";
}
//获取转换前物料所匹配条码
string lotList = @"SELECT a.*,b.ExtensionID FROM ICSWareHouseLotInfo a
string lotList = @"SELECT a.*,b.ExtensionID,a.Quantity-a.LockQuantity newQuantity FROM ICSWareHouseLotInfo a
LEFT JOIN ICSInventoryLot b ON a.lotno=b.lotno and a.WorkPoint=b.WorkPoint
WHERE a.Quantity>0 AND a.INVCode='{0}' AND b.ExtensionID='{1}' and a.WorkPoint='{2}' and a.WarehouseCode='{3}'
WHERE a.Quantity>0 AND a.INVCode='{0}' AND b.ExtensionID='{1}' and a.WorkPoint='{2}' and a.WarehouseCode='{3}' and a.Quantity-a.LockQuantity>0
ORDER BY a.mtime ";
lotList = string.Format(lotList, beforInvCode, beforExtensionID, JsonData.WorkPoint, whCode);
DataTable dtlotList = DBHelper.SQlReturnData(lotList, cmd);
@ -9400,17 +9400,18 @@ ORDER BY a.mtime ";
{
log.Info("1111111111");
string lotNo = dr["lotNo"].ToString();
decimal Quantity = Convert.ToDecimal(dr["Quantity"].ToString());
decimal Quantity = Convert.ToDecimal(dr["newQuantity"].ToString());
decimal LockQuantity = Convert.ToDecimal(dr["LockQuantity"].ToString());//占料数量,有占料数量的条码形态转换需要分批
decimal thisQuantity = 0;
string lotNoNew = lotNo;
if (MTDQuantity <= 0)
{
continue;
}
log.Info("转换数量:" + MTDQuantity + ",条码可用量:" + Quantity + ",占料数量:" + LockQuantity);
//形态转换自动分批:传入条码数量<原条码数量,则原条码修改库存数量,增加一条出库记录,创建新条码,新条码进行形态转换 20240515 yangtm
if (MTDQuantity < Quantity)
{
log.Info("2222222222222");
int result = 0;
thisQuantity = MTDQuantity;
#region 分批前添加日志
@ -9573,12 +9574,175 @@ ORDER BY a.mtime ";
#endregion
MTDQuantity = 0;
}
else if (MTDQuantity >= Quantity && LockQuantity > 0)
{
int result = 0;
thisQuantity = Quantity;
#region 分批前添加日志
string lotSql = @"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);
RETURN
END
INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
MTIME,WorkPoint,EATTRIBUTE1)
SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
c.WarehouseCode,c.LocationCode,'','',c.Quantity,
'','0','4','31','0','',
'','','',f.F_Account ,f.F_RealName ,
SYSDATETIME() ,a.WorkPoint ,''
FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
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}'
";
lotSql = string.Format(lotSql, lotNo, JsonData.WorkPoint, JsonData.User, Identification);
if (!DBHelper.ExecuteNonQuery(lotSql, cmd))
{
throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
}
#endregion
#region 获取分批后的条码(lotNoNew)
lotSql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
lotSql = string.Format(lotSql, lotNo, JsonData.WorkPoint);
DataTable dt = DBHelper.SQlReturnData(lotSql, cmd);
if (dt.Rows.Count == 0)
{
lotNoNew = lotNo + "-" + 1;
}
else
{
lotNoNew = lotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
}
#endregion
#region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
lotSql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
Quantity,Amount,ExtensionID,Type,PrintTimes,
LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
WorkPoint,EATTRIBUTE1)
SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
'{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
a.WorkPoint ,'{1}'
From ICSInventoryLot a
where a.LotNo='{1}' and a.WorkPoint='{3}'";
lotSql = string.Format(lotSql, lotNoNew, lotNo, thisQuantity, JsonData.WorkPoint);
cmd.CommandText = lotSql;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
}
lotSql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'{2}',InDate,0
,MUSER,MUSERName,GETDATE(),'{3}',''
from ICSWareHouseLotInfo
where LotNO='{1}' AND WorkPoint='{3}'";
lotSql = string.Format(lotSql, lotNoNew, lotNo, thisQuantity, JsonData.WorkPoint);
cmd.CommandText = lotSql;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
}
//插入条码单据表
lotSql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
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}'";
lotSql = string.Format(lotSql, lotNo, JsonData.WorkPoint, JsonData.User, lotNoNew);
if (!DBHelper.ExecuteNonQuery(lotSql, cmd))
{
throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
}
lotSql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
MTIME,WorkPoint,EATTRIBUTE1,LogID)
SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,'{5}' ,a.InvCode ,
c.WarehouseCode,c.LocationCode,'','','{4}',
'','0','4','32','0','',
'','','',f.F_Account ,f.F_RealName ,
SYSDATETIME() ,a.WorkPoint ,'',null
FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
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}'
";
lotSql = string.Format(lotSql, lotNo, JsonData.WorkPoint, JsonData.User, Identification, thisQuantity, lotNoNew);
cmd.CommandText = lotSql;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
}
///更新原条码库存
lotSql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
BEGIN
RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
RETURN
END";
lotSql = string.Format(lotSql, lotNo, JsonData.WorkPoint, thisQuantity);
if (!DBHelper.ExecuteNonQuery(lotSql, cmd))
{
throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
}
///添加日志
lotSql = @"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);
RETURN
END
INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
MTIME,WorkPoint,EATTRIBUTE1,MergeID)
SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
c.WarehouseCode,c.LocationCode,'','',c.Quantity,
'','0','4','32','0','',
'','','',f.F_Account ,f.F_RealName ,
SYSDATETIME() ,a.WorkPoint ,'',null
FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
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}'
";
lotSql = string.Format(lotSql, lotNo, JsonData.WorkPoint, JsonData.User, Identification);
if (!DBHelper.ExecuteNonQuery(lotSql, cmd))
{
throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
}
#endregion
MTDQuantity = MTDQuantity - Quantity;
}
else
{
thisQuantity = Quantity;
MTDQuantity = MTDQuantity - Quantity;
}
log.Info("3333333333");
string updateData = "";
//单据类型 12:按单转移 13:按物料转移
if (TransType == "13")

Loading…
Cancel
Save