锐腾搅拌上料功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

702 lines
33 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ICSSoft.Frame.Data.Entity;
using ICSSoft.Base.Config.AppConfig;
using System.Data;
using ICSSoft.Base.Config.DBHelper;
using System.Data.SqlClient;
namespace ICSSoft.Frame.Data.DAL
{
public static class ICSStorageInfoDAL
{
public static void import(List<string> barList)
{
SqlConnection conn = new SqlConnection(AppConfig.AppConnectString);
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
SqlTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
cmd.Connection = conn;
try
{
string barCodeStr = "";
string maxNo = @"select max(ToCheckNO ) as ToCheckNO from dbo.ICSToCheck";
DataTable dtNo = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, maxNo).Tables[0];
for (int i = 0; i < barList.Count;i++ )
{
if (barCodeStr == "")
{
barCodeStr = "'" + barList[i] + "'";
}
else
{
barCodeStr += ",'" + barList[i] + "'";
}
if (i % 200 == 0)
{
string lineSql = @"INSERT INTO [dbo].[ICSToCheckLog]
([Serial]
,[BarCode]
,[Mtime])
SELECT NEWID(),BarCode,GETDATE() FROM dbo.ICSStockBarCode WHERE BarCode IN ("+barCodeStr+@")
UNION ALL
SELECT NEWID(),BarCode,GETDATE() FROM dbo.ICSMOBarCode WHERE BarCode IN (" + barCodeStr + ")";
cmd.CommandText = lineSql;
cmd.ExecuteNonQuery();
lineSql = @"insert into dbo.ICSToChecks
select distinct NEWID(),'{0}',CASE WHEN b.ItemCode IS NULL THEN c.ItemCode ELSE b.ItemCode END AS ItemCode,
CASE WHEN b.BatchCode IS NULL THEN c.BatchCode ELSE b.ItemCode END AS BatchCode,
e.Free1,e.Free2,e.Free3,e.Free4,a.BarCode,
CASE WHEN b.Quantity IS NULL THEN c.Quantity ELSE b.Quantity END AS Quantity,
f.StorageCode,'{1}',GETDATE()
from dbo.ICSStorageInfo a
left join dbo.ICSStockBarCode b on a.BarCode = b.BarCode
left join dbo.ICSMOBarCode c on a.BarCode = c.BarCode
left join dbo.ICSPurchasingStorage d on b.cFree1 = d.Serial
left join dbo.ICSMO e on c.cFree1 = e.Serial
left join dbo.ICSStorage f on a.Storage_Serial = f.Serial
where a.barcode in (" + barCodeStr + @")";
lineSql = string.Format(lineSql, dtNo.Rows[0]["ToCheckNO"].ToString(), AppConfig.UserName);
cmd.CommandText = lineSql;
cmd.ExecuteNonQuery();
barCodeStr = "";
}
}
string Sql = @"insert into dbo.ICSToChecks
select distinct NEWID(),'{0}',CASE WHEN b.ItemCode IS NULL THEN c.ItemCode ELSE b.ItemCode END AS ItemCode,
CASE WHEN b.BatchCode IS NULL THEN c.BatchCode ELSE b.ItemCode END AS BatchCode,
e.Free1,e.Free2,e.Free3,e.Free4,a.BarCode,
CASE WHEN b.Quantity IS NULL THEN c.Quantity ELSE b.Quantity END AS Quantity,
f.StorageCode,'{1}',GETDATE()
from dbo.ICSStorageInfo a
left join dbo.ICSStockBarCode b on a.BarCode = b.BarCode
left join dbo.ICSMOBarCode c on a.BarCode = c.BarCode
left join dbo.ICSPurchasingStorage d on b.cFree1 = d.Serial
left join dbo.ICSMO e on c.cFree1 = e.Serial
left join dbo.ICSStorage f on a.Storage_Serial = f.Serial
where a.barcode in (" + barCodeStr + @")";
Sql = string.Format(Sql, dtNo.Rows[0]["ToCheckNO"].ToString(), AppConfig.UserName);
cmd.CommandText = Sql;
cmd.ExecuteNonQuery();
Sql = @"INSERT INTO [dbo].[ICSToCheckLog]
([Serial]
,[BarCode]
,[Mtime])
SELECT NEWID(),BarCode,GETDATE() FROM dbo.ICSStockBarCode WHERE BarCode IN (" + barCodeStr + @")
UNION ALL
SELECT NEWID(),BarCode,GETDATE() FROM dbo.ICSMOBarCode WHERE BarCode IN (" + barCodeStr + ")";
cmd.CommandText = Sql;
cmd.ExecuteNonQuery();
barCodeStr = "";
Sql = @"UPDATE dbo.ICSToCheck SET ActualQty = ISNULL(ActualQty,0)+ISNULL(b.qty,0)
FROM dbo.ICSToCheck a
INNER JOIN (SELECT distinct CASE WHEN d.[ItemCode] IS NULL THEN e.ItemCode ELSE d.[ItemCode] END AS ItemCode,
isnull(e.Free1,'') as Free1,isnull(e.Free2,'') as Free2,
isnull(e.Free3,'') as Free3,isnull(e.Free4,'') as Free4,
sum(a.BarCodeQty) AS qty,a.StorageCode,info.ItemType
FROM [ICSToChecks] a
left join dbo.ICSStorageInfo info on a.BarCode = info.BarCode
LEFT JOIN ICSMOBarCode b
ON a.BarCode=b.BarCode
LEFT JOIN dbo.ICSStockBarCode c
ON a.BarCode=c.BarCode
LEFT JOIN dbo.ICSPurchasingStorage d
ON c.cFree1 = d.Serial
LEFT JOIN dbo.ICSMO e ON b.cFree1 = e.Serial
GROUP BY d.[ItemCode],e.ItemCode,e.Free1,e.Free2,e.Free3,
e.Free4,a.StorageCode,info.ItemType) b
ON a.ItemCode = b.ItemCode AND a.Free1 = b.Free1 AND a.Free2 = b.Free2
AND a.Free3 = b.Free3 AND a.Free4 = b.Free4 AND a.StorageCode = b.StorageCode
AND a.itemtype = b.ItemType";
cmd.CommandText = Sql;
cmd.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
public static void StorageIn(string barCodeStr, string storage, string stack)
{
SqlConnection conn = new SqlConnection(AppConfig.AppConnectString);
conn.Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
cmd.Connection = conn;
try
{
string strSql = @"INSERT INTO [dbo].[ICSStorageInfo]
([Serial]
,[BarCode]
,[Storage_Serial]
,[Stack_Serial]
,[Mtime]
,[Muser]
,[WorkPoint],ItemType)
SELECT NEWID(),BarCode,'{0}','{1}',GETDATE(),'{2}','{3}','原料'
FROM dbo.ICSStockBarCode WHERE BarCode IN ({4})";
strSql = string.Format(strSql, storage, stack, AppConfig.UserName, AppConfig.WorkPointCode, barCodeStr);
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
strSql = @" UPDATE dbo.ICSStockBarCode SET Status = '入库'
WHERE BarCode IN ({0})";
strSql = string.Format(strSql, barCodeStr);
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
trans.Commit();
}
catch(Exception ex)
{
trans.Rollback();
throw ex;
}
}
public static void Delete(string delStr)
{
SqlConnection conn = new SqlConnection(AppConfig.AppConnectString);
conn.Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
cmd.Connection = conn;
try
{
string strSql = @"DELETE dbo.ICSStorageInfo WHERE barCode in ({0})";
strSql = string.Format(strSql, delStr);
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
strSql = @"DELETE dbo.ICSMOStorageINERP WHERE BarCode IN ({0})";
strSql = string.Format(strSql, delStr);
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
strSql = @" UPDATE dbo.ICSStockBarCode SET Status = '新增'
WHERE BarCode IN ({0})";
strSql = string.Format(strSql, delStr);
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
public static void StorageInERP(string barCodeStr, storageInfoContext Context)
{
string sql = "";
string ConnectString = AppConfig.AppConnectString;
#region 默认代码
Context.ERPCardNumber = "24";
#endregion
#region 取得out库单的默认显示模版
sql = @" SELECT DEF_ID FROM {0}.dbo.Vouchers WHERE CardNumber = '{1}' ";
sql = string.Format(sql, Context.ERPDataName, Context.ERPCardNumber);
DataTable DEF_ID = DBHelper.ExecuteDataset(ConnectString, CommandType.Text, sql).Tables[0];
if (DEF_ID.Rows.Count == 0)
{
throw new Exception("产成品入库单的默认显示模版取得失败");
}
Context.ERPDEF_ID = DEF_ID.Rows[0]["DEF_ID"].ToString();
DEF_ID.Clear();
#endregion
SqlConnection conn = new System.Data.SqlClient.SqlConnection(ConnectString);
conn.Open();
SqlTransaction sqlTran = conn.BeginTransaction();
SqlCommand cmd = new SqlCommand();
cmd.Transaction = sqlTran;
cmd.Connection = conn;
try
{
#region 修改MES数据库表
sql = @"INSERT INTO [dbo].[ICSStorageInfo]
([Serial]
,[BarCode]
,[Storage_Serial]
,[Stack_Serial]
,[Mtime]
,[Muser]
,[WorkPoint],ItemType)
SELECT NEWID(),BarCode,'{0}','{1}',GETDATE(),'{2}','{3}','原料'
FROM dbo.ICSStockBarCode WHERE BarCode IN ({4})";
sql = string.Format(sql, Context.Storage_Serial, Context.Stack_Serial,
AppConfig.UserName, AppConfig.WorkPointCode, barCodeStr);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = @"SELECT BarCode FROM dbo.ICSStockBarCode
WHERE BarCode IN ({0}) AND Status != '新增'";
sql = string.Format(sql, barCodeStr);
cmd.CommandText = sql;
DataTable barDt = SQlReturnData(cmd);
if (barDt != null && barDt.Rows.Count > 0)
{
throw new Exception("请选择状态为新增的条码进行入库!!");
}
sql = @" UPDATE dbo.ICSStockBarCode SET Status = '入库'
WHERE BarCode IN ({0})";
sql = string.Format(sql, barCodeStr);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
#endregion
sql = @"SELECT d.ID,d.cVenCode,d.cpocode,d.cCode,d.dDate FROM dbo.ICSStockBarCode a
LEFT JOIN dbo.ICSPurchasingStorage b
ON a.cFree1 = b.Serial
LEFT JOIN {0}.dbo.PU_ArrivalVouchs c ON b.Rd01AutoID = c.autoid
LEFT JOIN {0}.dbo.PU_ArrivalVouch d ON c.id=d.id
WHERE a.BarCode IN ({1})
GROUP BY d.ID,d.cVenCode,d.cpocode,d.cCode,d.dDate";
sql = string.Format(sql, Context.ERPDataName, barCodeStr);
cmd.CommandText = sql;
DataTable Hdt = SQlReturnData(cmd);
for (int j = 0; j < Hdt.Rows.Count;j++ )
{
#region 修改ERP信息
#region 汇总信息
sql = @"SELECT ROW_NUMBER() OVER(ORDER BY a.ItemCode) AS row,b.Rd01AutoID,d.cVenCode,
d.ID,d.cCode,c.iPOsID,c.iOriCost AS 原币无税单价,c.iOriTaxCost AS 原币含税单价,
SUM(a.Quantity) AS qty,a.ItemCode,a.BatchCode,0 as erpdid,c.btaxcost,c.iinvexchrate,
SUM(a.Quantity)*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END) as sQty,
inv.cComUnitCode,b.AssComUnit as cAssComUnitCode into #t1 FROM dbo.ICSStockBarCode a
LEFT JOIN dbo.ICSPurchasingStorage b ON a.cFree1 = b.Serial
LEFT JOIN {0}.dbo.PU_ArrivalVouchs c ON b.Rd01AutoID = c.autoid
LEFT JOIN {0}.dbo.PU_ArrivalVouch d ON c.id=d.id
LEFT JOIN {0}.dbo.Inventory inv ON a.ItemCode=inv.cInvCode
WHERE d.ID = '{1}' AND a.BarCode IN ({2})
GROUP BY a.ItemCode,a.BatchCode,inv.cComUnitCode,b.AssComUnit,b.Rd01AutoID
,d.cVenCode,d.ID,c.iPOsID,c.iOriCost,c.iOriTaxCost,c.btaxcost,d.cCode,c.iinvexchrate
select *,sQty*原币无税单价 as 原币无税金额,sQty*原币含税单价 as 原币价税合计,
sQty*原币含税单价-sQty*原币无税单价 as 原币税额 into ##rdqty from #t1
select * from ##rdqty
drop table #t1";
sql = string.Format(sql, Context.ERPDataName, Hdt.Rows[j]["ID"].ToString(), barCodeStr);
cmd.CommandText = sql;
DataTable temp = SQlReturnData(cmd);
#endregion
#region 取得ERP的ID
string num = "1000000000";
sql = @"select count(*) from ##rdqty";
cmd.CommandText = sql;
DataTable RowCountDt = SQlReturnData(cmd);
Context.ERPrdRowCount = Convert.ToInt32(RowCountDt.Rows[0][0]);
int id = 0;
int did = 0;
SaveGetrdIDandAutoID(ConnectString, "采购入库单", "rd", Context.ERPDataName.Substring(7, 3), Context.ERPrdRowCount, out id, out did);
string strId = id.ToString();
Context.ERPrdID = int.Parse(num.Substring(0, num.Length - strId.Length) + strId);
string strDid = did.ToString();
Context.ERPrdDid = int.Parse(num.Substring(0, num.Length - strDid.Length) + strDid);
#endregion
#region 取得ERP的Code
sql = @"DECLARE @Code nvarchar(100)
set @Code = ''
UPDATE VoucherHistory SET cNumber = cNumber + 1
FROM {0}.dbo.VoucherHistory WHERE CardNumber = '{1}'
SELECT @Code = '0000000000' + CAST(cNumber AS NVARCHAR(50)) FROM {0}.dbo.VoucherHistory WHERE CardNumber = '{1}'
SET @Code = RIGHT(@Code,10)
select @Code";
sql = string.Format(sql, Context.ERPDataName, Context.ERPCardNumber);
cmd.CommandText = sql;
DataTable codedt = SQlReturnData(cmd);
if (codedt.Rows[0][0].ToString() == "")
{
sql = "insert into {0}.dbo.VoucherHistory values('24',null,'日期','月','null',1,0)";
sql = string.Format(sql, Context.ERPDataName);
SQlInsertAndUpdate(sql, conn, sqlTran, cmd);
Context.ERPrdCode = "0000000001";
}
if (codedt.Rows[0][0].ToString() != "")
{
Context.ERPrdCode = codedt.Rows[0][0].ToString();
}
if (Context.ERPrdCode == "")
{
throw new Exception("产成品入库单号取得失败");
}
sql = @"IF EXISTS (SELECT cCode FROM {1}.dbo.RdRecord01 WHERE ccode = '{0}' and cVouchType = '10')
RAISERROR('产成品入库单号重复,保存失败',16,0)";
sql = string.Format(sql, Context.ERPrdCode, Context.ERPDataName);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
#endregion
#region 写入表头
sql = @"INSERT INTO {0}.dbo.RdRecord01 (id,bRdFlag,cVouchType,cBusType,cSource,cBusCode,cWhCode,dDate,cCode,cRdCode,
cVenCode,cOrderCode,cHandler,bTransFlag,cMaker,dVeriDate,bpufirst,biafirst,VT_ID,bIsSTQc,
ipurorderid,iTaxRate,iExchRate,cExch_Name,bOMFirst,bFromPreYear,bIsComplement,
iDiscountTaxType,ireturncount,iverifystate,iswfcontrolled,dnmaketime,dnverifytime,
bredvouch,bCredit,cARVCode,ipurarriveid,dARVDate)
VALUES
(@id,'1','01','普通采购','采购到货单',null,@cWhCode,CONVERT(varchar(15), GETDATE(), 23),@cCode,@cRdCode,
@cVenCode,@cOrderCode,@cHandler,'0',@cMaker,GETDATE(),'0','0',@VT_ID,'0',
@ipurorderid,'17.000000','1','人民币','0','0','0',
'0','0','0','0',GETDATE(),GETDATE(),'0','0',@cARVCode,@ipurorderid,@dARVDate)";
sql = string.Format(sql, Context.ERPDataName);
cmd.CommandText = sql;
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@id", Context.ERPrdID);
cmd.Parameters.AddWithValue("@cWhCode", Context.ERPcWhCode);
cmd.Parameters.AddWithValue("@cCode", Context.ERPrdCode);
cmd.Parameters.AddWithValue("@cRdCode", Context.ERPrdcRdCode);
cmd.Parameters.AddWithValue("@cVenCode", Hdt.Rows[j]["cVenCode"].ToString());
cmd.Parameters.AddWithValue("@cHandler", Context.UserName);
cmd.Parameters.AddWithValue("@cMaker", Context.UserName);
cmd.Parameters.AddWithValue("@VT_ID", Context.ERPDEF_ID);
cmd.Parameters.AddWithValue("@cOrderCode", Hdt.Rows[j]["cpocode"].ToString());
cmd.Parameters.AddWithValue("@ipurorderid", Hdt.Rows[j]["ID"].ToString());
cmd.Parameters.AddWithValue("@cARVCode", Hdt.Rows[j]["cCode"].ToString());
cmd.Parameters.AddWithValue("@dARVDate", Hdt.Rows[j]["dDate"].ToString());
cmd.ExecuteNonQuery();
#endregion
#region 更新表体ID
sql = @"SELECT * FROM ##rdqty";
cmd.CommandText = sql;
DataTable dt = SQlReturnData(cmd);
int rowNo = 1;
for (int i = 0; i < dt.Rows.Count; i++)
{
sql = @"update ##rdqty set erpdid = {0} where row='{1}' ";
sql = string.Format(sql, Context.ERPrdDid, rowNo);
Context.ERPrdDid -= 1;
rowNo++;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
#endregion
#region 写入表体
sql = @"INSERT INTO {0}.dbo.rdrecords01
(AutoID,ID,cInvCode,iNum,iQuantity,iUnitCost,iPrice,iAPrice,iFlag,iSQuantity,iSNum,iMoney,
iPOsID,fACost,iNQuantity,iNNum,cAssUnit,chVencode,iOriTaxCost,iOriCost,iOriMoney,iOriTaxPrice,
ioriSum,iTaxRate,iTaxPrice,iSum,bTaxCost,cPOID,iMatSettleState,iBillSettleCount,bLPUseFree,
iOriTrackID,bCosting,iExpiratDateCalcu,iordertype,isotype,irowno,bgift,iArrsId,cbarvcode,iinvexchrate)
SELECT erpdid,@ID,ItemCode,qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 0 ELSE 1 END),
qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END),
原币无税单价,原币无税金额,原币无税金额,'0','0','0','0',iPOsID,原币无税单价,
qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END),
qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 0 ELSE 1 END),cAssComUnitCode,
cVenCode,原币含税单价,原币无税单价,原币无税金额,原币税额,
原币价税合计,'17.000000',原币税额,原币价税合计,btaxcost,@cPOID,'0','0','0',
'0','0','0','0','0',row,'0',Rd01AutoID,cCode,iinvexchrate FROM ##rdqty";
sql = string.Format(sql, Context.ERPDataName);
cmd.CommandText = sql;
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@ID", Context.ERPrdID);
cmd.Parameters.AddWithValue("@cPOID", Hdt.Rows[j]["cpocode"].ToString());
cmd.ExecuteNonQuery();
#endregion
#region 改变现存量
foreach (DataRow dr in dt.Rows)
{
int ItemID = -1;
double qty = 0;
string change = dr["iinvexchrate"].ToString();
if (change != "")
{
qty = double.Parse(dr["qty"].ToString()) * double.Parse(dr["iinvexchrate"].ToString());
}
else {
qty = double.Parse(dr["qty"].ToString());
}
string invcode = dr["itemcode"].ToString();
string batchCode = dr["batchCode"].ToString();
string autoID = dr["itemcode"].ToString();
#region 取得物料的itemID
sql = @"IF NOT EXISTS(
SELECT Id FROM {0}.dbo.SCM_Item WHERE
cFree1 = '' AND cFree2 = '' AND cFree3 = '' AND cFree4 = ''
AND cFree5 = '' AND cFree6 = '' AND cFree7 = '' AND cFree8 = ''
AND cFree9 = '' AND cFree10 = '' AND cinvcode = '{1}')
BEGIN
INSERT INTO {0}.dbo.SCM_Item(cInvCode ,
cFree1 ,
cFree2 ,
cFree3 ,
cFree4 ,
cFree5 ,
cFree6 ,
cFree7 ,
cFree8 ,
cFree9 ,
cFree10 ,
PartId) VALUES('{1}','','','','','','','','','','',0)
END
SELECT Id FROM
{0}.dbo.SCM_Item WHERE
cFree1 = '' AND cFree2 = '' AND cFree3 = '' AND cFree4 = ''
AND cFree5 = '' AND cFree6 = '' AND cFree7 = '' AND cFree8 = ''
AND cFree9 = '' AND cFree10 = '' AND cinvcode = '{1}'";
sql = string.Format(sql, Context.ERPDataName, invcode);
cmd.CommandText = sql;
DataTable Itemdt = SQlReturnData(cmd);
if (Itemdt.Rows.Count == 0)
{
throw new Exception("物料的ItemID取得失败");
}
ItemID = int.Parse(Itemdt.Rows[0]["Id"].ToString());
#endregion
//将物料插入到现存两表中
//先更新现存量
#region 更新失败,插入现存量
sql = @"IF EXISTS (SELECT AutoID FROM {0}.dbo.CurrentStock
WHERE cWhCode = @cWhCode AND cInvCode = @cInvCode
AND cBatch = @cBatch AND ItemId = @ItemId)
BEGIN
UPDATE {0}.dbo.CurrentStock SET iQuantity = iQuantity + @iQuantity
WHERE cWhCode = @cWhCode AND cInvCode = @cInvCode AND cBatch = @cBatch
AND ItemId = @ItemId
END
ELSE
BEGIN
INSERT INTO {0}.dbo.CurrentStock
(cWhCode,cInvCode,ItemId,cBatch,iSoType,iQuantity,
iNum,cFree1,fOutQuantity,fOutNum,fInQuantity,fInNum,cFree2,
cFree3,bStopFlag,fTransInQuantity,fTransInNum,
fTransOutQuantity,fTransOutNum,fPlanQuantity,fPlanNum,fDisableQuantity,
fDisableNum,fAvaQuantity,fAvaNum,BGSPSTOP,fStopQuantity,
fStopNum,ipeqty,ipenum)
SELECT @cWhCode,@cInvCode,@ItemId,@cBatch,'0',@iQuantity,
'0',@cFree1,'0','0','0','0',@cFree2,
@cFree3,'0','0','0','0','0','0','0','0',
'0','0','0','0','0','0','0','0' FROM ##rdqty
where batchCode = '{1}'
END ";
sql = string.Format(sql, Context.ERPDataName, batchCode);
cmd.CommandText = sql;
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@cWhCode", Context.ERPcWhCode);
cmd.Parameters.AddWithValue("@cInvCode", invcode);
cmd.Parameters.AddWithValue("@ItemId", ItemID);
cmd.Parameters.AddWithValue("@cBatch", batchCode);
cmd.Parameters.AddWithValue("@iQuantity", qty);
cmd.Parameters.AddWithValue("@cFree1", "");
cmd.Parameters.AddWithValue("@cFree2", "");
cmd.Parameters.AddWithValue("@cFree3", "");
cmd.ExecuteNonQuery();
#endregion
}
#endregion
#region 将入库单的ID,DID,Code,ERPName 回写 MES数据库
sql = @"INSERT INTO [dbo].[ICSMOStorageINERP]
([Serial]
,[BarCode]
,[rdTypeName]
,[rdID]
,[rdDID]
,[rdCode]
,[rdDate]
,[WorkPoint])
SELECT NEWID(),a.BarCode,'采购入库','{0}',b.erpdid,'{1}','{2}','{3}'
FROM dbo.ICSStockBarCode a inner join ##rdqty b on a.BatchCode = b.BatchCode
where BarCode in ({4}) ";
sql = string.Format(sql, id, Context.ERPrdCode, Context.UserTime, AppConfig.WorkPointCode, barCodeStr);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
#endregion
#region 更新采购,到货单入库数量
sql = @"SELECT Rd01AutoID,SUM(qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END)) AS qty,
sum(qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 0 ELSE 1 END)) as num INTO ##sumQty FROM ##rdqty
GROUP BY Rd01AutoID";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = @"SELECT iPOsID,SUM(qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END)) AS qty,
sum(qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 0 ELSE 1 END)) as num INTO ##POsumQty FROM ##rdqty
GROUP BY iPOsID";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = @"UPDATE b SET fValidInQuan = ISNULL(fValidInQuan,0)+a.qty,fValidInNum = ISNULL(fValidInNum,0)+a.num
FROM ##sumQty a INNER JOIN {0}.dbo.PU_ArrivalVouchs b ON a.Rd01AutoID= b.AutoID";
sql = string.Format(sql, Context.ERPDataName);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
sql = @"UPDATE b SET freceivedqty = ISNULL(freceivedqty,0)+a.qty,freceivednum = ISNULL(freceivednum,0)+a.num
FROM ##POsumQty a INNER JOIN {0}.dbo.PO_Podetails b ON a.iPOsID= b.ID ";
sql = string.Format(sql, Context.ERPDataName);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
#endregion
#region 写入记账表
sql = @" INSERT INTO {0}.[dbo].[IA_ST_UnAccountVouch01]
SELECT '{1}',erpdid,'{2}','{3}' FROM ##rdqty
drop table ##rdqty
drop table ##sumQty
drop table ##POsumQty";
sql = string.Format(sql, Context.ERPDataName, Context.ERPrdID, "01", "普通采购");
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
#endregion
#endregion
}
//throw new Exception("操作完成那个,取消保存,来进行下一次测试");
cmd.Transaction.Commit();
}
catch (Exception ex)
{
cmd.Transaction.Rollback();
throw ex;
}
}
#region SQL事物操作函数以及ERP的ID的读取与写入的
/// 插入或更新的操作
/// </summary>
/// <param name="SQl"></param>
/// <param name="conn"></param>
/// <param name="sqlTran"></param>
/// <returns></returns>
private static int SQlInsertAndUpdate(string SQl, SqlConnection conn, SqlTransaction sqlTran, SqlCommand cmd)
{
cmd.Connection = conn;
cmd.CommandText = SQl;
cmd.Transaction = sqlTran;
return cmd.ExecuteNonQuery();
}
/// <summary>
/// 查询SQL
/// </summary>
/// <param name="SQl"></param>
/// <param name="conn"></param>
/// <param name="sqlTran"></param>
/// <returns></returns>
private static DataTable SQlReturnData(SqlCommand cmd)
{
DataTable dt = new DataTable();
SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter();
dr.SelectCommand = cmd;
dr.Fill(dt);
return dt;
}
private static void SaveGetrdIDandAutoID(string connectstring, string returnTxt, string IDtype, string cAcc_id, int rowCount, out int id, out int autoID)
{
try
{
string str = @"DECLARE @ID int
DECLARE @DID int
SET @ID = 0
SET @DID = 0
IF NOT EXISTS (SELECT * FROM ufsystem..ua_identity WHERE cacc_id = '{0}' AND cVouchType = '{1}')
INSERT INTO ufsystem..ua_identity(cAcc_Id,cVouchType,iFatherId,iChildId) VALUES('{0}','{1}',1,1)
SELECT @ID = ifatherID + 1 ,@DID = ichildID + {2}
FROM ufsystem..ua_identity
WHERE cVouchType = '{1}'
AND cAcc_id = '{0}'
UPDATE ufsystem..ua_identity
SET ifatherID = ifatherID + 1,ichildID = ichildID + {2}
WHERE cVouchType = '{1}' AND cAcc_id = '{0}'
select @ID as ID,@DID as DID";
str = string.Format(str, cAcc_id, IDtype, rowCount.ToString());
DataTable dt = DBHelper.ExecuteDataset(connectstring, CommandType.Text, str).Tables[0];
if (dt.Rows.Count == 0)
{
throw new Exception("ID取得失败");
}
id = Convert.ToInt32(dt.Rows[0]["ID"]);
autoID = Convert.ToInt32(dt.Rows[0]["DID"]);
}
catch (Exception ex)
{
throw new Exception(returnTxt + ex.Message);
}
}
#endregion
}
public class storageInfoContext
{
public string ERPDataName { get; set; }
public string WorkPointCode { get; set; }
public string UserName { get; set; }
public DateTime UserTime { get; set; }
public string Storage_Serial { get; set; }
public string Stack_Serial { get; set; }
public string ERPDeptCode { get; set; }
public string ERPrdCode { get; set; }
public string ERPrdcRdCode { get; set; }
public int ERPrdID { get; set; }
public int ERPrdDid { get; set; }
public int ERPrdRowCount { get; set; }
public string ERPcWhCode { get; set; }
public string ERPrdPerson { get; set; }
public string ERPcMaker { get; set; }
public string ERPrdcDate { get; set; }
public string ERPDEF_ID { get; set; }
public string ERPCardNumber { get; set; }
public string ERPcPersonCode { get; set; }
}
}