@ -9248,7 +9248,7 @@ WHERE WorkPoint='{0}' AND Quantity>ISNULL(TransferQuantity, 0) order by Transfer
/// <returns></returns>
public static DataTable ExpressUnpacking ( ExpressModel JsonData )
{
var language = LanguageHelper . GetName ( "WMSAPIInfo" ) ;
var language = LanguageHelper . GetName ( "WMSAPIInfo" ) ;
using ( SqlConnection conn = new System . Data . SqlClient . SqlConnection ( connString ) )
{
conn . Open ( ) ;
@ -9306,5 +9306,310 @@ UPDATE ICSExpressage SET ISNew='1',UnpackMUSER='{2}',UnpackMUSERName=(SELECT F_R
}
}
}
/// <summary>
/// 形态转换整单
/// <param name="JsonData"></param>
/// <returns></returns>
public static DataTable MTDocCreateNew ( ICSMTDocModel JsonData )
{
var language = LanguageHelper . GetName ( "WMSAPIInfo" ) ;
if ( string . IsNullOrWhiteSpace ( JsonData . TransCode ) )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo007" ) ) ; //"传送数据为空!"
}
using ( SqlConnection conn = new System . Data . SqlClient . SqlConnection ( connString ) )
{
conn . Open ( ) ;
SqlTransaction sqlTran = conn . BeginTransaction ( ) ;
SqlCommand cmd = new SqlCommand ( ) ;
cmd . Transaction = sqlTran ;
cmd . Connection = conn ;
string BusinessCode = string . Empty ;
try
{
string TransType = string . Empty ;
string Identification = Guid . NewGuid ( ) . ToString ( ) ;
string doc = $ @ "SELECT ExtensionID,INVCode,MTDOCType,Sequence ,Quantity-MTDOCQuantity Quantity,WHCode,EATTRIBUTE1
FROM ICSMTDOC a WHERE a . MTDOCCode = ' { JsonData . TransCode } ' AND Quantity - MTDOCQuantity > 0 AND MTDOCType = 1 and WorkPoint = ' { JsonData . WorkPoint } '
ORDER BY CAST ( Sequence AS INT ) , MTDOCType ";
DataTable dataTable = DBHelper . SQlReturnData ( doc , cmd ) ;
string afterInvCode = String . Empty ;
string afterExtensionID = String . Empty ;
//string beforInvCode = String.Empty;
//string beforExtensionID = String.Empty;
foreach ( DataRow data in dataTable . Rows )
{
TransType = data [ "EATTRIBUTE1" ] . ToString ( ) ;
string beforInvCode = data [ "INVCode" ] . ToString ( ) ;
string sequence = data [ "Sequence" ] . ToString ( ) ;
string beforExtensionID = data [ "ExtensionID" ] . ToString ( ) ;
string whCode = data [ "WHCode" ] . ToString ( ) ;
decimal MTDQuantity = Convert . ToDecimal ( data [ "Quantity" ] . ToString ( ) ) ; //记录形态转换单此行需要转换数量
//查询形态转换单此行转换后信息
string doc2 = @ "SELECT ExtensionID,INVCode,MTDOCType,Sequence ,Quantity-MTDOCQuantity Quantity
FROM ICSMTDOC a WHERE a . MTDOCCode = ' { 0 } ' AND Quantity - MTDOCQuantity > 0 AND MTDOCType = 2
AND Sequence = ' { 2 } ' and WorkPoint = ' { 3 } ' and WHCode = ' { 4 } '
ORDER BY CAST ( Sequence AS INT ) , MTDOCType ";
doc2 = string . Format ( doc2 , JsonData . TransCode , beforInvCode , sequence , JsonData . WorkPoint , whCode ) ;
DataTable dt2 = DBHelper . SQlReturnData ( doc2 , cmd ) ;
if ( dt2 ! = null & & dt2 . Rows . Count > 0 )
{
afterInvCode = dt2 . Rows [ 0 ] [ "INVCode" ] . ToString ( ) ;
afterExtensionID = dt2 . Rows [ 0 ] [ "ExtensionID" ] . ToString ( ) ;
}
//获取转换前物料所匹配条码
string lotList = @ "SELECT a.*,b.ExtensionID 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 } '
ORDER BY a . mtime desc ";
lotList = string . Format ( lotList , beforInvCode , beforExtensionID , JsonData . WorkPoint ) ;
DataTable dtlotList = DBHelper . SQlReturnData ( lotList , cmd ) ;
foreach ( DataRow dr in dtlotList . Rows )
{
log . Info ( "1111111111" ) ;
string lotNo = dr [ "lotNo" ] . ToString ( ) ;
decimal Quantity = Convert . ToDecimal ( dr [ "Quantity" ] . ToString ( ) ) ;
decimal thisQuantity = 0 ;
string lotNoNew = lotNo ;
if ( MTDQuantity < = 0 )
{
continue ;
}
//形态转换自动分批:传入条码数量<原条码数量,则原条码修改库存数量,增加一条出库记录,创建新条码,新条码进行形态转换 20240515 yangtm
if ( MTDQuantity < Quantity )
{
log . Info ( "2222222222222" ) ;
int result = 0 ;
thisQuantity = MTDQuantity ;
#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 } ") + @" ' , 1 6 , 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 ',' 3 1 ',' 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 ',' 3 2 ',' 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 ") + @" ' , 1 6 , 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 } ") + @" ' , 1 6 , 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 ',' 3 2 ',' 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 = 0 ;
}
else
{
thisQuantity = Quantity ;
MTDQuantity = MTDQuantity - Quantity ;
}
log . Info ( "3333333333" ) ;
string updateData = "" ;
//单据类型 12:按单转移 13:按物料转移
if ( TransType = = "13" )
{
updateData + = $ @ "UPDATE ICSWareHouseLotInfo SET InvCode='{afterInvCode}' WHERE LotNo='{lotNoNew}' AND WorkPoint='{JsonData.WorkPoint}' AND InvCode='{beforInvCode}' AND WarehouseCode='{whCode}';
UPDATE ICSInventoryLot SET InvCode = ' { afterInvCode } ' WHERE LotNo = ' { lotNoNew } ' AND InvCode = ' { beforInvCode } ' AND WorkPoint = ' { JsonData . WorkPoint } ' AND ExtensionID = ' { beforExtensionID } ' ; ";
updateData + = $ @ "INSERT INTO [dbo].[ICSWareHouseLotInfoLog] ([ID], [Identification], [TransCode], [TransSequence], [LotNo], [InvCode], [FromWarehouseCode], [FromLocationCode], [ToWarehouseCode], [ToLocationCode], [Quantity], [Memo], [Lock], [TransType], [BusinessCode], [ERPUpload], [ERPID], [ERPDetailID], [ERPCode], [ERPSequence], [LogID], [MergeID], [MUSER], [MUSERName], [MTIME], [WorkPoint], [EATTRIBUTE1], [EATTRIBUTE2], [EATTRIBUTE3])
SELECT NEWID ( ) , NEWID ( ) , ' { JsonData . TransCode } ' , ' { sequence } ' , ' { lotNoNew } ' , ' { beforInvCode } ' , { whCode } , NULL , NULL , NULL , { thisQuantity } , NULL , '0' , N ' 1 0 ' , N ' 3 5 ' , '0' , NULL , NULL , NULL , NULL , NULL , NULL , f . F_Account , f . F_RealName , SYSDATETIME ( ) , ' { JsonData . WorkPoint } ' , NULL , NULL , ' { beforExtensionID } ' FROM Sys_SRM_User f WHERE f . F_Account = ' { JsonData . User } ' ; ";
updateData + = $ @ "INSERT INTO [dbo].[ICSWareHouseLotInfoLog] ([ID], [Identification], [TransCode], [TransSequence], [LotNo], [InvCode], [FromWarehouseCode], [FromLocationCode], [ToWarehouseCode], [ToLocationCode], [Quantity], [Memo], [Lock], [TransType], [BusinessCode], [ERPUpload], [ERPID], [ERPDetailID], [ERPCode], [ERPSequence], [LogID], [MergeID], [MUSER], [MUSERName], [MTIME], [WorkPoint], [EATTRIBUTE1], [EATTRIBUTE2], [EATTRIBUTE3])
SELECT NEWID ( ) , NEWID ( ) , ' { JsonData . TransCode } ' , ' { sequence } ' , ' { lotNoNew } ' , ' { afterInvCode } ' , { whCode } , NULL , NULL , NULL , { thisQuantity } , NULL , '0' , N ' 1 0 ' , N ' 3 6 ' , '0' , NULL , NULL , NULL , NULL , NULL , NULL , f . F_Account , f . F_RealName , SYSDATETIME ( ) , ' { JsonData . WorkPoint } ' , NULL , NULL , ' { beforExtensionID } ' FROM Sys_SRM_User f WHERE f . F_Account = ' { JsonData . User } ' ; ";
}
else if ( TransType = = "12" )
{
updateData + = $@"UPDATE ICSInventoryLot SET ExtensionID='{afterExtensionID}' WHERE LotNo='{lotNoNew}' AND InvCode='{beforInvCode}' AND WorkPoint='{JsonData.WorkPoint}' AND ExtensionID='{beforExtensionID}';" ;
updateData + = $ @ "INSERT INTO [dbo].[ICSWareHouseLotInfoLog] ([ID], [Identification], [TransCode], [TransSequence], [LotNo], [InvCode], [FromWarehouseCode], [FromLocationCode], [ToWarehouseCode], [ToLocationCode], [Quantity], [Memo], [Lock], [TransType], [BusinessCode], [ERPUpload], [ERPID], [ERPDetailID], [ERPCode], [ERPSequence], [LogID], [MergeID], [MUSER], [MUSERName], [MTIME], [WorkPoint], [EATTRIBUTE1], [EATTRIBUTE2], [EATTRIBUTE3])
SELECT NEWID ( ) , NEWID ( ) , ' { JsonData . TransCode } ' , ' { sequence } ' , ' { lotNoNew } ' , ' { beforInvCode } ' , { whCode } , NULL , NULL , NULL , { thisQuantity } , NULL , '0' , N ' 1 0 ' , N ' 3 5 ' , '0' , NULL , NULL , NULL , NULL , NULL , NULL , f . F_Account , f . F_RealName , SYSDATETIME ( ) , ' { JsonData . WorkPoint } ' , NULL , NULL , ' { beforExtensionID } ' FROM Sys_SRM_User f WHERE f . F_Account = ' { JsonData . User } ' ; ";
updateData + = $ @ "INSERT INTO [dbo].[ICSWareHouseLotInfoLog] ([ID], [Identification], [TransCode], [TransSequence], [LotNo], [InvCode], [FromWarehouseCode], [FromLocationCode], [ToWarehouseCode], [ToLocationCode], [Quantity], [Memo], [Lock], [TransType], [BusinessCode], [ERPUpload], [ERPID], [ERPDetailID], [ERPCode], [ERPSequence], [LogID], [MergeID], [MUSER], [MUSERName], [MTIME], [WorkPoint], [EATTRIBUTE1], [EATTRIBUTE2], [EATTRIBUTE3])
SELECT NEWID ( ) , NEWID ( ) , ' { JsonData . TransCode } ' , ' { sequence } ' , ' { lotNoNew } ' , ' { beforInvCode } ' , { whCode } , NULL , NULL , NULL , { thisQuantity } , NULL , '0' , N ' 1 0 ' , N ' 3 6 ' , '0' , NULL , NULL , NULL , NULL , NULL , NULL , f . F_Account , f . F_RealName , SYSDATETIME ( ) , ' { JsonData . WorkPoint } ' , NULL , NULL , ' { afterExtensionID } ' FROM Sys_SRM_User f WHERE f . F_Account = ' { JsonData . User } ' ; ";
}
else
{
throw new Exception ( "单据类型不存在" ) ;
}
log . Info ( "updateData" + updateData ) ;
if ( ! DBHelper . ExecuteNonQuery ( updateData , cmd ) )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo166" ) ) ;
}
//修改源头单据
ICSWareHouseService . MTDoc ( JsonData . TransCode , sequence , JsonData . User , thisQuantity . ToString ( ) , JsonData . WorkPoint , cmd , language ) ;
}
}
//上传ERP
if ( Convert . ToBoolean ( System . Configuration . ConfigurationManager . AppSettings [ "UploadERP" ] ) )
{
log . Info ( "111" ) ;
ICSWareHouseService . MTDocDocERP ( JsonData . TransCode , cmd , language , JsonData . WorkPoint ) ;
}
cmd . Transaction . Commit ( ) ;
return new DataTable ( ) ;
}
catch ( Exception ex )
{
if ( cmd . Transaction ! = null )
cmd . Transaction . Rollback ( ) ;
log . Error ( ex . Message ) ;
throw new Exception ( ex . Message ) ;
}
finally
{
if ( conn . State = = ConnectionState . Open )
{
conn . Close ( ) ;
}
conn . Dispose ( ) ;
}
}
}
}
}
xxxxxxxxxx