锐腾搅拌上料功能
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.

494 lines
20 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 class FormPhysicalInventoryDAL
{
#region ERPCheckVouch
public static void ERPCheckVouch(CheckContext Context, string Appconstr)
{
string sql = "";
SqlConnection conn = new SqlConnection(Appconstr);
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
SqlTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
cmd.Connection = conn;
try
{
string maxNo = @"select max(ToCheckNO ) as ToCheckNO from dbo.ICSToCheck";
DataTable dtNo = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, maxNo).Tables[0];
string strSql = @"SELECT a.[ItemCode]
,SUM(LotQty) AS inum
,SUM(LotQty) AS iquantity
,b.WHCode as StorageCode INTO ##sum
FROM [dbo].[ICSToChecks] a
LEFT JOIN dbo.ICSWareHouseLotInfo b ON a.BarCode = b.LotNO
WHERE a.ToCheckNO = '" + dtNo.Rows[0]["ToCheckNO"].ToString() + "' and a.ItemCode = '" + Context.itemCode + @"'
and b.WHCode = '" + Context.whCode + "' group by a.[ItemCode],b.WHCode";
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
strSql = @"SELECT cWhCode,cInvCode,ISNULL(cFree1,'') AS cFree1,ISNULL(cFree2,'') AS cFree2
,ISNULL(cFree3,'') AS cFree3,ISNULL(cFree4,'') AS cFree4,SUM(iQuantity) AS qty INTO ##stock
FROM {0}.dbo.CurrentStock
GROUP BY cWhCode,cInvCode,cFree1,cFree2,cFree3,cFree4";
strSql = string.Format(strSql, Context.ERPDataName);
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
#region 更新表体
sql = @"update a set a.icvquantity =isnull(d.qty,0),
icvcnum=isnull(c.inum,0),
icvcquantity=isnull(c.iquantity,0),
iactualwaste=select( CASE WHEN c.iquantity-d.qty>0 AND d.qty <> 0 THEN ((c.iquantity-d.qty)/d.qty)*100
WHEN c.iquantity-d.qty < 0 AND d.qty <> 0 THEN ((d.qty-c.iquantity)/d.qty)*100*-1 ELSE 0 END )
from {0}.dbo.checkvouchs a
left join CheckVouch b on a.ID=b.ID
inner join ##sum c ON b.cWhCode = c.StorageCode AND a.cItemCode = c.ItemCode
left join ##stock d c.b.StorageCode = d.cWhCode AND c.ItemCode=d.cInvCode
inner join ICSToCheck b on a.INVCode = b.ItemCode
where b.ToCheckNO ='" + dtNo.Rows[0]["ToCheckNO"] + "' ";
sql = @"update e
set icvquantity =isnull(a.qty,0),
icvcnum=isnull(b.inum,0),
icvcquantity=isnull(b.iquantity,0),
iactualwaste=(select CASE WHEN b.iquantity-a.qty>0 AND a.qty <> 0 THEN ((b.iquantity-a.qty)/a.qty)*100
WHEN b.iquantity-a.qty < 0 AND a.qty <> 0 THEN ((a.qty-b.iquantity)/a.qty)*100*-1 ELSE 0 END)
FROM ##stock a
INNER JOIN ##sum b ON a.cWhCode = b.StorageCode AND a.cInvCode = b.ItemCode
LEFT JOIN {0}.dbo.Inventory c ON a.cInvCode = c.cInvCode
LEFT JOIN {0}.dbo.CheckVouch d on b. StorageCode=d.cWhCode
LEFT JOIN {0}.dbo.CheckVouchs e ON b.ItemCode = e.cInvCode and d.ID=e.ID
WHERE a.cWhCode = '{1}' and b.ItemCode='{2}' and e.checkcode='{3}'";
sql = string.Format(sql, Context.ERPDataName, Context.whCode, Context.itemCode, Context.ckNO);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
#endregion
#endregion
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
#region AddandEdit
public static void AddandEdit(ICSToCheck ItemLot, string Appconstr)
{
FramDataContext db = new FramDataContext(Appconstr);
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();
try
{
string sql = @"SELECT Serial FROM dbo.ICSToCheck WHERE ToCheckNO='" + ItemLot.ToCheckNO + "'";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
throw new Exception("盘点单号已经存在!!");
}
sql = @"select * from ICSWareHouseLotInfo where WHCode='" + ItemLot.StorageCode + "'";
dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt.Rows.Count == 0)
{
throw new Exception("所选仓库没有库存!!");
}
// insert into icstocheck
//values
//('newid', 'Tocheckno', 'tocheckdate', 'itemcode', 'itemname'
//, 'CurrentQty', 'actualqty', 'muser', 'musername', 'mtime', 'workpoint', 'cfree1', 'itemtype', 'checksource', 'storagecode')
string insertsql = @" insert into dbo.ICSToCheck
SELECT distinct '{0}','{1}','{2}',
a.INVCode AS ItemCode,
c.INVNAME AS ItemName,
SUM(a.LotQty) AS CurrentQty,
'0','{3}','{4}','{5}',
'{6}','',
'' as ItemType,
'WMS' as CheckSource,
'{7}' as StorageCode
FROM dbo.ICSWareHouseLotInfo a
LEFT JOIN dbo.ICSITEMLot b ON a.LotNO=b.LotNO
LEFT JOIN dbo.ICSINVENTORY c on a.INVCode=c.INVCODE
where a.WHCode = '{7}'
GROUP BY
a.INVCode,
c.INVNAME,
a.WHCode";
insertsql = string.Format(insertsql, AppConfig.GetGuid(), ItemLot.ToCheckNO,
ItemLot.ToCheckDate, AppConfig.UserCode, AppConfig.UserName, AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss")
, AppConfig.WorkPointCode, ItemLot.StorageCode);
DBHelper.ExecuteNonQuery(Appconstr, CommandType.Text, insertsql);
db.SubmitChanges();
db.Transaction.Commit();
}
catch (Exception ex)
{
db.Transaction.Rollback();
throw new Exception(ex.Message);
}
}
#endregion
#region AddToCheck
public static void AddToCheck(ICSToCheck ToCheck, string Appconstr)
{
FramDataContext db = new FramDataContext(Appconstr);
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();
try
{
string sql = @"SELECT * FROM ICSToCheck WHERE ToCheckNO = '" + ToCheck.ToCheckNO + "' AND StorageCode = '" + ToCheck.StorageCode + "'";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
throw new Exception("盘点单号已经存在!!");
}
string insertsql = @"INSERT INTO ICSToCheck
SELECT DISTINCT '{0}', '{1}', '{2}', A.INVCode AS ItemCode, C.INVNAME AS ItemName, SUM(a.LotQty) AS CurrentQty,
'0', '{3}', '{4}', '{5}', '{6}', '', '' AS ItemType, 'WMS' AS CheckSource, '{7}'
FROM ICSWareHouseLotInfo A
LEFT JOIN dbo.ICSITEMLot B ON A.LotNO = B.LotNO
LEFT JOIN dbo.ICSINVENTORY C on A.INVCode = C.INVCODE
WHERE A.WHCode = '{7}' GROUP BY A.INVCode, C.INVNAME";
insertsql = string.Format(insertsql, AppConfig.GetGuid(), ToCheck.ToCheckNO, ToCheck.ToCheckDate, AppConfig.UserCode,
AppConfig.UserName, AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"), AppConfig.WorkPointCode, ToCheck.StorageCode);
DBHelper.ExecuteNonQuery(Appconstr, CommandType.Text, insertsql);
db.SubmitChanges();
db.Transaction.Commit();
}
catch (Exception ex)
{
db.Transaction.Rollback();
throw new Exception(ex.Message);
}
}
#endregion
#region select
public static ICSToCheck select(String guid, String Appconstr)
{
FramDataContext db = new FramDataContext(Appconstr);
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();
try
{
var line = db.ICSToCheck.SingleOrDefault(a => a.Serial == guid);
return (ICSToCheck)line;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
#endregion
#region FindAll
public static DataTable FindAll(string Appconstr)
{
try
{
string sql = @"SELECT distinct a.ItemCode,
b.INVNAME as ItemName,
b.INVSTD as ItemStd,
a.BarCode,
a.BarCodeQty,
a.BarCodeActualQty,
b.INVUOM as ComUnit,
c.VenderLotNO as Lot,
a.ToCheckNO,
d.WHCode as StorageCode,
d.BinCode as StackCode,
CAST((c.EATTRIBUTE3*c.LOTQTY) as NUMERIC(10,2)) as MeasureQtys,
b.INVEXPORTIMPORT as AssComUnit
FROM ICSToChecks a
left join ICSINVENTORY b on a.ItemCode=b.INVCODE
left join ICSITEMLot c on a.BarCode=c.LotNO
left join ICSWareHouseLotInfo d on c.LotNO=d.LotNO
";
return DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region delete
public static void delete(string ToCheckNO, string Appconstr)
{
SqlConnection conn = new SqlConnection(Appconstr);
conn.Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
cmd.Connection = conn;
try
{
string sqls = @"DELETE dbo.ICSToChecks WHERE ToCheckNO='" + ToCheckNO + "'";
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqls;
cmd.ExecuteNonQuery();
string sql = @"DELETE dbo.ICSToCheck WHERE ToCheckNO='" + ToCheckNO + "'";
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
#endregion
#region deletedetail 删除盘点详情
public static void deletedetail(string LotNo, string ToCheckNO, decimal Actualqty, string itemno, string Appconstr)
{
SqlConnection conn = new SqlConnection(Appconstr);
conn.Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
cmd.Connection = conn;
try
{
string sqls = @"DELETE dbo.ICSToChecks WHERE ToCheckNO='" + ToCheckNO + "' AND BarCode='" + LotNo + "'";
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqls;
cmd.ExecuteNonQuery();
string sql = "";
sql = @"Update ICSToCheck set ActualQty=ActualQty-" + Actualqty + " where ToCheckNO='" + ToCheckNO + "' AND ItemCode='" + itemno + "'";
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
#endregion
#region Update
public static void CheckIn(string CheckNo, string BarCode, string LotQty, string Appconstr)
{
SqlConnection conn = new SqlConnection(Appconstr);
conn.Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
cmd.Connection = conn;
try
{
//string maxNo = @"select max(ToCheckNO ) as ToCheckNO from dbo.ICSToCheck";
//DataTable dtNo = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, maxNo).Tables[0];
string Sql = @"SELECT Serial,BarCodeActualQty FROM dbo.ICSToChecks WHERE BarCode ='" + BarCode + "' and ToCheckNO='" + CheckNo + "'";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, Sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
string strSql = @"update b set b.ActualQty = b.ActualQty-'" + Convert.ToDecimal(dt.Rows[0]["BarCodeActualQty"].ToString()) + @"'
from (select LotQty,INVCode,WHCode from ICSWareHouseLotInfo where LotNO= '" + BarCode + @"') a
inner join ICSToCheck b on a.INVCode = b.ItemCode AND a.WHCode = b.StorageCode
where b.ToCheckNO ='" + CheckNo + @"'
update b set b.ActualQty = b.ActualQty+'" + Convert.ToDecimal(LotQty) + @"'
from (select LotQty,INVCode,WHCode from ICSWareHouseLotInfo where LotNO= '" + BarCode + @"') a
inner join ICSToCheck b on a.INVCode = b.ItemCode AND a.WHCode = b.StorageCode
where b.ToCheckNO ='" + CheckNo + @"'";
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
string lineSql = @"UPDATE ICSToChecks set BarCodeActualQty={0},Mtime=GETDATE(),Updater='{3}',UpdateTime=GetDate(),Status='Update'
where BarCode='{1}' AND ToCheckNO='{2}'";
lineSql = string.Format(lineSql, Convert.ToDecimal(LotQty), BarCode, CheckNo, AppConfig.UserCode);
cmd.CommandType = CommandType.Text;
cmd.CommandText = lineSql;
cmd.ExecuteNonQuery();
}
else
{
string strSql = @"update b set b.ActualQty = b.ActualQty+'" + Convert.ToDecimal(LotQty) + @"'
from (select LotQty,INVCode,WHCode from ICSWareHouseLotInfo where LotNO= '" + BarCode + @"') a
inner join ICSToCheck b on a.INVCode = b.ItemCode AND a.WHCode = b.StorageCode
where b.ToCheckNO ='" + CheckNo + "' ";
cmd.CommandType = CommandType.Text;
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
string lineSql = @"insert into dbo.ICSToChecks
select NEWID(),a.INVCode AS ItemCode,
a.LotNO AS BarCode,
a.LotQty AS BarCodeQty,
'{5}',
'{1}',GETDATE(),'{3}',
'{0}',
b.VenderLotNO as BatchCodes,
'{4}',
'Insert',
'{4}',
GETDATE()
from dbo.ICSWareHouseLotInfo a
left join dbo.ICSITEMLot b on a.LotNO = b.LotNO
where a.LotNO = '{2}'";
lineSql = string.Format(lineSql, CheckNo, AppConfig.UserName, BarCode, AppConfig.WorkPointCode, AppConfig.UserCode, LotQty);
cmd.CommandType = CommandType.Text;
cmd.CommandText = lineSql;
cmd.ExecuteNonQuery();
}
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
#endregion
public static DataTable Check(string BarCode, string ToCheckNo, string Appconstr)
{
try
{
string lineSql = @"SELECT a.ItemCode
FROM ICSToCheck a
left join ICSWareHouseLotInfo b on a.ItemCode=b.INVCode
WHERE b.LotNO = '" + BarCode + "'and a.ToCheckNO='" + ToCheckNo + "'";
return DBHelper.ExecuteDataset(Appconstr, CommandType.Text, lineSql).Tables[0];
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public static DataTable CheckNo(string BarCode, string Appconstr)
{
try
{
string lineSql = @"SELECT LotNO,WHCode FROM dbo.ICSWareHouseLotInfo WHERE LotNO = '" + BarCode + "'";
return DBHelper.ExecuteDataset(Appconstr, CommandType.Text, lineSql).Tables[0];
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
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);
}
}
}
public class CheckContext
{
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; }
public string MoDid { get; set; }
public string MoId { get; set; }
public string ckNO { get; set; }
public string whCode { get; set; }
public string itemCode { get; set; }
public Dictionary<string, string> Bar_Qty { get; set; }
}
}