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

4176 lines
203 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;
using Newtonsoft.Json;
using System.Net;
using System.IO;
using ICSSoft.Entity;
using ICSSoft.Entity.mom_order;
using ICSSoft.Entity.Dispatchlist;
using ICSSoft.Entity.PU_ArrivalVouch;
using ICSSoft.Entity.TransVouch;
using ICSSoft.Entity.mom_orderdetail;
namespace ICSSoft.Frame.Data.DAL
{
public class ICSWareHouseLotInfoDAL
{
static string message = System.Configuration.ConfigurationSettings.AppSettings["SysIsOpen"].ToString();
static string APIURL = System.Configuration.ConfigurationSettings.AppSettings["APIURL"].ToString();
static string IStockIN = APIURL + "APICreateRdrecord01";
static string IInvOut = APIURL + "APICreateRdrecord11";
//static string IInvOutPick = APIURL + "APICreateRdrecord11ByMaterial";
static string IInvTrans = APIURL + "APIConfimTranVouch";
//static string IInvTransMO = APIURL + "APICreateTransVouch";
static string IDispatch = APIURL + "APICreateRdrecord32";
static string IStockINForMO = APIURL + "APICreateRdrecord10";
static string IOtherOut = ""; //System.Configuration.ConfigurationSettings.AppSettings["IOtherOut"].ToString();
/// <summary>
/// 获取货位信息
/// </summary>
/// <param name="StackCode"></param>
/// <param name="workpointCode"></param>
/// <returns></returns>
public static DataTable GetBinCode(string LotNO, string WorkPoint, string dsconn)
{
string sql = @"SELECT B.BinCode FROM ICSWareHouseInfo B LEFT JOIN ICSITEMLot A ON A.ItemCode = B.INVCode
WHERE A.LotNO = '{0}' AND A.WorkPoint = '{1}' ORDER BY B.QTY DESC ";
sql = string.Format(sql, LotNO, WorkPoint);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证库位信息
/// </summary>
/// <param name="StackCode"></param>
/// <param name="workpointCode"></param>
/// <returns></returns>
public static DataTable CheckStackCode(string StackCode, string workpointCode, string dsconn)
{
string sql = @"select A.StackCode,B.StorageCode from ICSStack A
LEFT JOIN ICSStorage B
ON B.Serial=A.Storage_Serial
WHERE A.StackCode='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, StackCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证条码信息(采购上架)
/// </summary>
/// <param name="lotNo"></param>
/// <param name="workpointCode"></param>
/// <returns></returns>
public static DataTable CheckLotNoForStockIn(string lotNo, string workpointCode, string dsconn)
{
string sql = @"
select A.LotNO,A.TYPE,
'' AS LogLot,
D.LotNO AS BarCode,
A.EATTRIBUTE2,
C.cInvCode from ICSITEMLot A
LEFT JOIN ICSPOArrive C
ON A.TransNO=C.cCode AND A.TransLine=C.irowno
LEFT JOIN ICSWareHouseLotInfo D
ON D.LotNO=A.LotNO
where A.LotNO='{0}' and A.WorkPoint='{1}'";
sql = string.Format(sql, lotNo, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证条码信息(半成品/成品上架)
/// </summary>
/// <param name="lotNo"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotNoForMOIn(string lotNo, string workpointCode, string dsconn)
{
string sql = @"select A.LotNO,A.TYPE,D.LotNO AS BarCode,A.TransNO,B.MOCODE,E.ISCOM,G.Result,G.TResult from ICSITEMLot A
LEFT JOIN ICSMO B
ON B.MOCODE=A.TransNO AND B.MOSEQ=A.TransLine
LEFT JOIN ICSWareHouseLotInfo D
ON D.LotNO=A.LotNO
LEFT JOIN ICSLOTSIMULATION E
ON E.LOTNO=A.LotNO
LEFT JOIN ICSLOTONWIP F
ON F.LOTNO=E.LOTNO AND F.OPCODE=E.OPCODE
LEFT JOIN ICSLOTONWIPCheck G
ON G.ONWIPID=F.ID
where A.LotNO='{0}' and A.WorkPoint='{1}' AND A.TYPE='工单'";
sql = string.Format(sql, lotNo, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 采购入库
/// </summary>
/// <param name="barcodeList"></param>
/// <param name="bincodeList"></param>
/// <param name="wrokpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool StockIn(SqlConnection sqlConnection, SqlTransaction trans, string[] barcodeList, string[] bincodeList, string userCode, string userName, string wrokpointCode, string Type, string ScanType, string dsconn)
{
string sql = "";
string BarCode = "";
string BinCode = "";
string cBarCode = "";
int result = 0;
string ConnectString = dsconn;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
for (int i = 0; i < barcodeList.Length; i++)
{
try
{
BarCode = barcodeList[i];
BinCode = bincodeList[i];
if (cBarCode == "")
{
cBarCode += "'" + BarCode + "'";
}
else
{
cBarCode += ",'" + BarCode + "'";
}
#region 获取仓库库位信息
string WHGuid = "";
string BinGuid = "";
string WHCode = "";
sql = @"select A.Serial,B.Serial AS WHGUID,B.StorageCode from ICSStack A
INNER JOIN ICSStorage B
on B.Serial=A.Storage_Serial
where StackCode='{0}'";
sql = string.Format(sql, BinCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
WHGuid = dt.Rows[0]["WHGUID"].ToString();
BinGuid = dt.Rows[0]["Serial"].ToString();
WHCode = dt.Rows[0]["StorageCode"].ToString();
}
#endregion
#region 获取物料信息
string INVCode = "";
string INVGuid = "";
decimal LotQTY = 0;
string TransNo = "";
string TransLine = "";
string cVenCode = "";
DateTime ReceDate = DateTime.Now;
sql = @"SELECT DISTINCT A.TransNO, A.TransLine, B.INVCODE, B.ID, A.LOTQTY, A.PRODUCTDATE, A.VENDORCODE, A.EATTRIBUTE2,
C.EATTRIBUTE6, ISNULL(A.EATTRIBUTE3,0) AS EATTRIBUTE3, ISNULL(A.EATTRIBUTE4,0) AS EATTRIBUTE4
FROM ICSITEMLot A LEFT JOIN ICSINVENTORY B ON A.ItemCode = B.INVCODE LEFT JOIN ICSINVInfo C ON C.INVCODE = A.ItemCode
WHERE LotNO = '{0}' ";
sql = string.Format(sql, BarCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取物料信息失败");
}
else
{
INVCode = dt.Rows[0]["INVCODE"].ToString();
INVGuid = dt.Rows[0]["ID"].ToString();
if (dt.Rows[0]["EATTRIBUTE6"].ToString() == "免检" || dt.Rows[0]["EATTRIBUTE2"].ToString() == "合格" || dt.Rows[0]["EATTRIBUTE2"].ToString() == "让步")
{
LotQTY = Convert.ToDecimal(dt.Rows[0]["LOTQTY"].ToString());
}
else
{
throw new Exception("条码" + BarCode + "尚未检验或者为不合格,无法入库!");
}
#region
//else
//{
// if (Convert.ToDecimal(dt.Rows[0]["EATTRIBUTE3"].ToString()) == 0)
// {
// throw new Exception("条码" + BarCode + "尚未进行检验数据录入或合格数为0,无法入库!");
// }
// else
// {
// LotQTY = Convert.ToDecimal(dt.Rows[0]["EATTRIBUTE3"].ToString());
// }
//}
#endregion
ReceDate = Convert.ToDateTime(dt.Rows[0]["PRODUCTDATE"].ToString());
TransNo = dt.Rows[0]["TransNO"].ToString();
TransLine = dt.Rows[0]["TransLine"].ToString();
cVenCode = dt.Rows[0]["VENDORCODE"].ToString();
}
#endregion
#region 存入ICSWareHouseInfo表
sql = @"select * from ICSWareHouseInfo
where INVCode='{0}' AND WHCode='{1}' AND BinCode='{2}'";
sql = string.Format(sql, INVCode, WHCode, BinCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
sql = @"insert into ICSWareHouseInfo
Values
('{0}','{1}','{2}','{3}','{4}','{5}',{6},'{7}','{8}','{9}','{10}','')";
sql = string.Format(sql, WHGuid, WHCode, BinGuid, BinCode, INVGuid, INVCode, LotQTY, wrokpointCode, userCode, userName, DateTime.Now);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表存入失败!");
}
}
else
{
sql = @"update ICSWareHouseInfo
set QTY=QTY+{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, LotQTY, DateTime.Now, INVCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表更新失败");
}
}
#endregion
#region 存入ICSWareHouseLotInfo表
sql = @"insert into ICSWareHouseLotInfo
Values
(NEWID(),'{0}','{1}','{2}','{3}','{4}','{5}','{6}',{7},GETDATE(),'{8}','{9}','{10}',GETDATE(),'','','')";
sql = string.Format(sql, BarCode, WHGuid, WHCode, BinGuid, BinCode, INVGuid, INVCode, LotQTY, wrokpointCode, userCode, userName);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表存入失败");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}',null,null,'{4}','{5}'
,{6},null,'{7}','采购入库','{8}','{9}',GETDATE(),'{10}','','','','','')";
sql = string.Format(sql, TransNo, TransLine, INVCode, BarCode, WHCode, BinCode, LotQTY, Type, userCode, userName, wrokpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志存入失败");
}
#endregion
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
if (message == "Open")
{
#region 接口调用
try
{
sql = @"SELECT A.VENDORCODE, A.TransNO, B.WHCode, C.ErpID AS WBS, A.ItemCode, B.LotQty, A.VenderLotNO, C.ERPAutoid AS Free1, A.EATTRIBUTE3 * A.LOTQTY iNum
FROM ICSITEMLot A INNER JOIN ICSWareHouseLotInfo B ON B.LotNO = A.LotNO
INNER JOIN ICSPOArrive C ON C.cCode = A.TransNO AND C.irowno = A.TransLine AND Free3 = '到货'
WHERE A.LotNO IN ({0}) ORDER BY A.TransNO ";
sql = string.Format(sql, cBarCode);
DataTable dt = SQlReturnData(sql, cmd);
List<PU_ArrivalVouch> contextlist = new List<PU_ArrivalVouch>();
PU_ArrivalVouch context = new PU_ArrivalVouch();
List<PU_ArrivalVouchs> contextlists = new List<PU_ArrivalVouchs>();
PU_ArrivalVouchs contexts = new PU_ArrivalVouchs();
string POCode = "";
string WareHouse = "";
for (int i = 0; i < dt.Rows.Count; i++)
{
if (POCode != dt.Rows[i]["TransNO"].ToString() || WareHouse != dt.Rows[i]["WHCode"].ToString())
{
if (i > 0)
{
context.list = contextlists;
contextlist.Add(context);
}
context = new PU_ArrivalVouch();
POCode = dt.Rows[i]["TransNO"].ToString();
WareHouse = dt.Rows[i]["WHCode"].ToString();
context.cWhCode = dt.Rows[i]["WHCode"].ToString();
context.ID = dt.Rows[i]["WBS"].ToString(); ;
context.UserCode = userCode;
context.IsReturn = "0";
contextlists = new List<PU_ArrivalVouchs>();
}
contexts = new PU_ArrivalVouchs();
contexts.cInvCode = dt.Rows[i]["ItemCode"].ToString();
contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["LotQty"].ToString());
contexts.cBatch = dt.Rows[i]["VenderLotNO"].ToString();
contexts.AutoID = dt.Rows[i]["Free1"].ToString();
contexts.iNum = Convert.ToDecimal(dt.Rows[i]["iNum"].ToString());
contextlists.Add(contexts);
if (i == dt.Rows.Count - 1)
{
context.list = contextlists;
contextlist.Add(context);
}
}
string Istr = JsonConvert.SerializeObject(contextlist);
string iresult = HttpPost(IStockIN, Istr);
Result StockInResult = new Result();
StockInResult = JsonConvert.DeserializeObject<Result>(iresult);
if (StockInResult.code != "200")
{
throw new Exception(StockInResult.msg);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
return isSuccess;
}
/// <summary>
/// 半成品入库
/// </summary>
/// <param name="sqlConnection"></param>
/// <param name="trans"></param>
/// <param name="pocodeList"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeList"></param>
/// <param name="bincodeList"></param>
/// <param name="wrokpointCode"></param>
/// <param name="Type"></param>
/// <param name="ScanType"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool StockInForMo(SqlConnection sqlConnection, SqlTransaction trans, string[] barcodeList, string[] bincodeList, string userCode, string userName, string wrokpointCode, string Type, string ScanType, string dsconn)
{
string sql = "";
string BarCode = "";
string BinCode = "";
string cBarCode = "";
int result = 0;
string ConnectString = dsconn;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < barcodeList.Length; i++)
{
BarCode = barcodeList[i];
BinCode = bincodeList[i];
if (cBarCode == "")
{
cBarCode += "'" + BarCode + "'";
}
else
{
cBarCode += ",'" + BarCode + "'";
}
#region 获取仓库库位信息
string WHGuid = "";
string BinGuid = "";
string WHCode = "";
sql = @"select A.Serial,B.Serial AS WHGUID,B.StorageCode from ICSStack A
INNER JOIN ICSStorage B
on B.Serial=A.Storage_Serial
where StackCode='{0}'";
sql = string.Format(sql, BinCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
WHGuid = dt.Rows[0]["WHGUID"].ToString();
BinGuid = dt.Rows[0]["Serial"].ToString();
WHCode = dt.Rows[0]["StorageCode"].ToString();
}
#endregion
#region 获取物料信息
string INVCode = "";
string INVGuid = "";
decimal LotQTY = 0;
string TransNo = "";
string TransLine = "";
DateTime ReceDate = DateTime.Now;
sql = @"select A.TransNO
,A.TransLine
,B.INVCODE
,B.ID,A.LOTQTY
,A.PRODUCTDATE
from ICSITEMLot A
left join ICSINVENTORY B
on A.ItemCode=B.INVCODE
where LotNO='{0}'";
sql = string.Format(sql, BarCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取物料信息失败!");
}
else
{
INVCode = dt.Rows[0]["INVCODE"].ToString();
INVGuid = dt.Rows[0]["ID"].ToString();
LotQTY = Convert.ToDecimal(dt.Rows[0]["LOTQTY"].ToString());
ReceDate = Convert.ToDateTime(dt.Rows[0]["PRODUCTDATE"].ToString());
TransNo = dt.Rows[0]["TransNO"].ToString();
TransLine = dt.Rows[0]["TransLine"].ToString();
}
#endregion
#region 存入ICSWareHouseInfo表
sql = @"select * from ICSWareHouseInfo
where INVCode='{0}' AND WHGUID='{1}' AND BinGUID='{2}'";
sql = string.Format(sql, INVCode, WHGuid, BinGuid);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
sql = @"insert into ICSWareHouseInfo
Values
('{0}','{1}','{2}','{3}','{4}','{5}',{6},'{7}','{8}','{9}','{10}','')";
sql = string.Format(sql, WHGuid, WHCode, BinGuid, BinCode, INVGuid, INVCode, LotQTY, wrokpointCode, userCode, userName, DateTime.Now);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表存入失败!");
}
}
else
{
sql = @"update ICSWareHouseInfo
set QTY=QTY+{0},MTIME='{1}'
where INVCode='{2}' AND WHGUID='{3}' AND BinGUID='{4}'";
sql = string.Format(sql, LotQTY, DateTime.Now, INVCode, WHGuid, BinGuid);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表更新失败!");
}
}
#endregion
#region 存入ICSWareHouseLotInfo表
sql = @"insert into ICSWareHouseLotInfo
Values
(NEWID(),'{0}','{1}','{2}','{3}','{4}','{5}','{10}',{6},GETDATE(),'{7}','{8}','{9}',GETDATE(),'','','')";
sql = string.Format(sql, BarCode, WHGuid, WHCode, BinGuid, BinCode, INVGuid, LotQTY, wrokpointCode, userCode, userName, INVCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表存入失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}',null,null,'{4}','{5}'
,{6},null,'{7}','(半)成品入库','{8}','{9}',GETDATE(),'{10}','','','','','')";
sql = string.Format(sql, TransNo, TransLine, INVCode, BarCode, WHCode, BinCode, LotQTY, Type, userCode, userName, wrokpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (message == "Open")
{
#region 接口调用
try
{
sql = @"select A.EATTRIBUTE2
,A.EATTRIBUTE1
,B.LotNO
,A.MOCODE
,A.MOSEQ
,C.WHCode
,B.ItemCode
,C.LotQty
,B.VenderLotNO
,ISNULL(B.EATTRIBUTE3,1) AS EATTRIBUTE3
,A.CUSITEMCODE
from ICSMO A
LEFT JOIN ICSITEMLot B
ON B.TransNO=A.MOCODE AND B.TransLine=A.MOSEQ
LEFT JOIN ICSWareHouseLotInfo C
ON C.LotNO=B.LotNO
WHERE C.LotNO IN ({0})";
sql = string.Format(sql, cBarCode);
DataTable dt = SQlReturnData(sql, cmd);
List<mom_order> contextlist = new List<mom_order>();
mom_order context = new mom_order();
List<ICSSoft.Entity.mom_order.mom_orderdetail> contextlists = new List<ICSSoft.Entity.mom_order.mom_orderdetail>();
ICSSoft.Entity.mom_order.mom_orderdetail contexts = new ICSSoft.Entity.mom_order.mom_orderdetail();
string MOCODE = "";
string WareHouse = "";
string DeptCode = "";
for (int i = 0; i < dt.Rows.Count; i++)
{
if (MOCODE != dt.Rows[i]["MOCODE"].ToString() || WareHouse != dt.Rows[i]["WHCode"].ToString()
|| DeptCode != dt.Rows[i]["CUSITEMCODE"].ToString())
{
if (i > 0)
{
context.list = contextlists;
contextlist.Add(context);
}
context = new mom_order();
MOCODE = dt.Rows[i]["MOCODE"].ToString();
WareHouse = dt.Rows[i]["WHCode"].ToString();
DeptCode = dt.Rows[i]["CUSITEMCODE"].ToString();
context.MoCode = dt.Rows[i]["MOCODE"].ToString();
context.cWhCode = dt.Rows[i]["WHCode"].ToString();
context.MoId = dt.Rows[i]["EATTRIBUTE2"].ToString();
context.UserCode = userCode;
context.IsReturn = "0";
context.MDeptCode = dt.Rows[i]["CUSITEMCODE"].ToString(); ;
contextlists = new List<ICSSoft.Entity.mom_order.mom_orderdetail>();
}
contexts = new ICSSoft.Entity.mom_order.mom_orderdetail();
contexts.cInvCode = dt.Rows[i]["ItemCode"].ToString();
contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["LotQty"].ToString());
contexts.cBatch = dt.Rows[i]["VenderLotNO"].ToString();
contexts.MoDId = dt.Rows[i]["EATTRIBUTE1"].ToString();
contexts.SortSeq = dt.Rows[i]["MOSEQ"].ToString();
contexts.iNum = Convert.ToDecimal(dt.Rows[i]["LotQty"].ToString()) * Convert.ToDecimal(dt.Rows[i]["EATTRIBUTE3"].ToString());
contextlists.Add(contexts);
if (i == dt.Rows.Count - 1)
{
context.list = contextlists;
contextlist.Add(context);
}
}
string Istr = JsonConvert.SerializeObject(contextlist);
string iresult = HttpPost(IStockINForMO, Istr);
Result MOInResult = new Result();
MOInResult = JsonConvert.DeserializeObject<Result>(iresult);
if (MOInResult.code != "200")
{
throw new Exception(MOInResult.msg);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
return isSuccess;
}
/// <summary>
/// SQL执行方法
/// </summary>
/// <param name="SQl"></param>
/// <param name="cmd"></param>
/// <returns></returns>
public static DataTable SQlReturnData(string SQl, SqlCommand cmd)
{
DataTable dt = new DataTable();
cmd.CommandText = SQl;
SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter();
dr.SelectCommand = cmd;
dr.Fill(dt);
return dt;
}
/// <summary>
/// 验证采购退货单信息(采购退货)
/// </summary>
/// <param name="lotNo"></param>
/// <param name="workpointCode"></param>
/// <returns></returns>
public static DataTable CheckPOCode(string cCode, string workpointCode, string dsconn)
{
string sql = @"select * from ICSPOArrive
where cCode='{0}'
AND Free3='退货'
AND WorkPoint='{1}'
ORDER BY irowno";
sql = string.Format(sql, cCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取采购退货信息(采购退货)
/// </summary>
/// <param name="POCode"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable GetPOReturnData(string POCode, string workpointCode, string dsconn)
{
string sql = @"SELECT A.cCode AS POCode, A.irowno AS PORow, A.cInvCode AS INVCODE, B.INVNAME AS INVNAME,
B.INVSTD AS INVSTD, ISNULL(A.iQuantity,0) AS RequestQty, ISNULL(A.INQty,0) AS Inqty,
B.INVUOM AS INVUOM, A.Batch, A.cWhCode FROM ICSPOArrive A
LEFT JOIN ICSINVENTORY B ON B.INVCODE=A.cInvCode WHERE A.cCode = '{0}' AND A.WorkPoint = '{1}'
ORDER BY INVCODE ";
sql = string.Format(sql, POCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证条码信息(采购退货)
/// </summary>
/// <param name="BarCode"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotnoForReturn(string BarCode, string workpointCode, string dsconn)
{
string sql = @"select A.LotNO
,B.LotNO AS WHLotno
,B.INVCode
,B.BinCode
,C.INVNAME
,C.INVSTD
,C.INVUOM
,B.LotQty
,B.WHCode
,A.EATTRIBUTE3
,ISNULL(A.VenderLotNO,'') AS VenderLotNO
from ICSITEMLot A
left join ICSWareHouseLotInfo B
ON B.LotNO=A.LotNO
LEFT JOIN ICSINVENTORY C
ON C.INVCODE=B.INVCode
WHERE A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证条码信息(工单领料)
/// </summary>
/// <param name="BarCode"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotnoForMOOut(string BarCode, string workpointCode, string dsconn)
{
string sql = @"select ISNULL(D.cBatchProperty6,'') as cBatchProperty6
,ISNULL(D.cDefine22,'') as cDefine22
,ISNULL(D.cDefine24,'') as cDefine24
,A.LotNO
,B.LotNO AS WHLotno
,B.INVCode
,B.BinCode
,C.INVNAME
,C.INVSTD
,C.INVUOM
,B.LotQty
,B.WHCode
,A.EATTRIBUTE3
,ISNULL(A.VenderLotNO,'') AS VenderLotNO
from ICSITEMLot A
left join ICSWareHouseLotInfo B
ON B.LotNO=A.LotNO
LEFT JOIN ICSINVENTORY C
ON C.INVCODE=B.INVCode
LEFT JOIN ICSPOArrive D
ON D.cCode=A.TransNO AND D.irowno=A.TransLine
WHERE A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证条码信息(移库)
/// </summary>
/// <param name="BarCode"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotnoForStackTrans(string BarCode, string workpointCode, string dsconn)
{
string sql = @"select A.LotNO
,B.LotNO AS WHLotno,B.INVCode
,B.BinCode
,C.INVNAME
,C.INVSTD
,C.INVUOM
,B.LotQty
,B.WHCode
from ICSITEMLot A
left join ICSWareHouseLotInfo B
ON B.LotNO=A.LotNO
LEFT JOIN ICSINVENTORY C
ON C.INVCODE=B.INVCode
WHERE A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证库位信息(移库)
/// </summary>
/// <param name="BarCode"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckBinCodeForStackTrans(string BinCode, string workpointCode, string dsconn)
{
string sql = @"SELECT A.LotNO, B.LotNO AS WHLotno, B.BinCode, C.INVNAME, C.INVSTD, C.INVUOM, B.LotQty, B.WHCode,A.ItemCode
FROM ICSITEMLot A INNER JOIN ICSWareHouseLotInfo B ON B.LotNO = A.LotNO
LEFT JOIN ICSINVENTORY C ON C.INVCODE = B.INVCode WHERE B.BinCode = '{0}' AND A.WorkPoint = '{1}' AND B.LotQty > 0 ";
sql = string.Format(sql, BinCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证箱号信息(移库)
/// </summary>
/// <param name="BarCode"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckBoxnoForStackTrans(string BarCode, string workpointCode, string dsconn)
{
string sql = @"select A.LotNO
,B.LotNO AS WHLotno
,B.BinCode
,C.INVNAME
,C.INVSTD
,C.INVUOM
,B.LotQty
,B.WHCode
from ICSITEMLot A
left join ICSWareHouseLotInfo B
ON B.LotNO=A.LotNO
LEFT JOIN ICSINVENTORY C
ON C.INVCODE=B.INVCode
LEFT JOIN ICSPalletLotNO E
ON E.LotNO=B.LotNO
WHERE E.PalletCode='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证销售出库条码信息
/// </summary>
/// <param name="SOCode"></param>
/// <param name="BarCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotnoForSO(string SOCode, string BarCode, string workpointCode, string dsconn)
{
string sql = @"select A.LotNO
,B.LotNO AS WHLotno
,B.INVCode
,B.BinCode
,C.INVNAME
,C.INVSTD
,C.INVUOM
,B.LotQty AS LotQty
,B.WHCode
,A.VenderLotNO
,A.EATTRIBUTE3
from ICSITEMLot A
left join ICSWareHouseLotInfo B
ON B.LotNO=A.LotNO
LEFT JOIN ICSINVENTORY C
ON C.INVCODE=B.INVCode
WHERE A.LotNO='{1}' AND A.WorkPoint='{2}'";
sql = string.Format(sql, SOCode, BarCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证销售退库条码信息
/// </summary>
/// <param name="SOCode"></param>
/// <param name="BarCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotnoForSOReturn(string BarCode, string workpointCode, string dsconn)
{
string sql = @" select B.DispatchCode
,B.DispatchRow
,A.LotNO
,A.ItemCode
,C.INVNAME
,C.INVSTD
,C.INVUOM
,A.LotQty
,A.EATTRIBUTE3
,A.VenderLotNO
,B.cBatch
,B.WHCode
from ICSITEMLot A
LEFT JOIN ICSSODispatch B
ON B.DispatchCode=A.TransNO AND B.DispatchRow=A.TransLine
LEFT JOIN ICSINVENTORY C
ON C.INVCODE=A.ItemCode
WHERE A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 采购退货
/// </summary>
/// <param name="POCode"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool StockReturn(SqlConnection sqlConnection, SqlTransaction trans, string cCode, string[] irownoList, string[] inqtyList, string[] barcoderowList, string[] barcodeList, string[] barcodeqtyList, string userCode, string userName, string workpointCode, string Type, string dsconn)
{
string sql = "";
string BarCode = "";
decimal BarCodeQty = 0;
string BarCodeRow = "";
string Errormessage = "";
string cBarCode = "";
string irowno = "";
decimal INQty = 0;
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < irownoList.Length; i++)
{
#region 更新ICSPOArrive表
irowno = irownoList[i];
INQty = Convert.ToDecimal(inqtyList[i]);
sql = @"update ICSPOArrive set INQty=INQty+{0}
where cCode='{1}' AND irowno='{2}' AND WorkPoint='{3}'";
sql = string.Format(sql, INQty, cCode, irowno, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("采购订单表更新失败!");
}
#endregion
}
for (int i = 0; i < barcodeList.Length; i++)
{
if (cBarCode == "")
{
cBarCode += "'" + barcodeList[i] + "'";
}
{
cBarCode += ",'" + barcodeList[i] + "'";
}
BarCode = barcodeList[i];
BarCodeQty = Convert.ToDecimal(barcodeqtyList[i]);
BarCodeRow = barcoderowList[i];
#region 获取仓库库位等信息
string INVCode = "";
string BinCode = "";
string WHCode = "";
string TranNo = "";
string TranLine = "";
sql = @"select WHCode
,BinCode
,INVCode
,B.TransNO
,B.TransLine
from ICSWareHouseLotInfo A
left join ICSITEMLot B
on B.LotNO=A.LotNO
where A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
INVCode = dt.Rows[0]["INVCode"].ToString();
BinCode = dt.Rows[0]["BinCode"].ToString();
WHCode = dt.Rows[0]["WHCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY-{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表更新失败!");
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"update ICSWareHouseLotInfo set LotQty=LotQty-{0}
where LotNO='{1}'";
sql = string.Format(sql, BarCodeQty, BarCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表更新失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}','{4}','{5}',null,null
,{6},null,'{7}','采购退货','{8}','{9}',GETDATE(),'{10}','','','','','未回写')";
sql = string.Format(sql, cCode, BarCodeRow, INVCode, BarCode, WHCode, BinCode, BarCodeQty, Type, userCode, userName, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (message == "Open")
{
#region 接口调用
try
{
sql = @"SELECT A.VENDORCODE, B.TransNO, B.FRMStorageCODE AS WHCode, C.ErpID AS WBS, A.ItemCode,
B.TransQTY, A.VenderLotNO, C.ERPAutoid AS Free1, A.EATTRIBUTE3 * B.TransQTY iNum FROM ICSITEMLot A
INNER JOIN ICSWareHouseLotInfoLog B ON B.LotNO = A.LotNO AND B.BusinessCode = '采购退货' AND B.EATTRIBUTE5 = '未回写'
INNER JOIN ICSPOArrive C ON C.cCode = B.TransNO AND C.irowno = B.TransLine AND Free3 = '退货'
WHERE A.LotNO IN ({0}) ORDER BY A.TransNO ";
sql = string.Format(sql, cBarCode);
DataTable dt = SQlReturnData(sql, cmd);
List<PU_ArrivalVouch> contextlist = new List<PU_ArrivalVouch>();
PU_ArrivalVouch context = new PU_ArrivalVouch();
List<PU_ArrivalVouchs> contextlists = new List<PU_ArrivalVouchs>();
PU_ArrivalVouchs contexts = new PU_ArrivalVouchs();
string POCode = "";
string WareHouse = "";
for (int i = 0; i < dt.Rows.Count; i++)
{
if (POCode != dt.Rows[i]["TransNO"].ToString() || WareHouse != dt.Rows[i]["WHCode"].ToString())
{
if (i > 0)
{
context.list = contextlists;
contextlist.Add(context);
}
context = new PU_ArrivalVouch();
POCode = dt.Rows[i]["TransNO"].ToString();
WareHouse = dt.Rows[i]["WHCode"].ToString();
context.cWhCode = dt.Rows[i]["WHCode"].ToString();
context.ID = dt.Rows[i]["WBS"].ToString(); ;
context.UserCode = userCode;
context.IsReturn = "1";
contextlists = new List<PU_ArrivalVouchs>();
}
contexts = new PU_ArrivalVouchs();
contexts.cInvCode = dt.Rows[i]["ItemCode"].ToString();
contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString());
contexts.cBatch = dt.Rows[i]["VenderLotNO"].ToString();
contexts.AutoID = dt.Rows[i]["Free1"].ToString();
contexts.iNum = Convert.ToDecimal(dt.Rows[i]["iNum"].ToString());
contextlists.Add(contexts);
if (i == dt.Rows.Count - 1)
{
context.list = contextlists;
contextlist.Add(context);
}
}
sql = @"UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE5 = '已回写'
where LotNO in ({0}) AND BusinessCode='采购退货'";
sql = string.Format(sql, cBarCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表更新失败!");
}
string Istr = JsonConvert.SerializeObject(contextlist);
string iresult = HttpPost(IStockIN, Istr);
Result StockInResult = new Result();
StockInResult = JsonConvert.DeserializeObject<Result>(iresult);
if (StockInResult.code != "200")
{
throw new Exception(StockInResult.msg);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
return isSuccess;
}
/// <summary>
/// 验证调拨申请单号
/// </summary>
/// <param name="TransferNo"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckTransferNoMO(string TransferNo, string TransferLine, string workpointCode, string dsconn)
{
string sql = @"SELECT a.MOCODE,
a.SEQ AS TransferLine
FROM
ICSMOBOM a
where a.WorkPoint = '{0}' AND a.MOCODE='{1}' AND a.SEQ='{2}' ORDER BY a.SEQ,a.MOBOMLINE";
sql = string.Format(sql, workpointCode, TransferNo, TransferLine);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取调拨申请单信息
/// </summary>
/// <param name="TransferNo"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable GetTransferDataMO(string TransferNo, string TransferLine, string workpointCode, string dsconn)
{
string sql = @"SELECT a.MOCODE,
a.SEQ AS 行号,
a.MOBOMLINE AS TransferLine,
a.MOBITEMCODE AS ITEMCODE,
a.MOBITEMNAME AS INVNAME,
c.INVSTD AS INVSTD,
a.MOBITEMQTY AS PLANQTY,
ISNULL(b.HasQuantity, 0) AS ACTQTY
,c.INVUOM AS INVUOM
,'' AS FROMStorageCode
,'' AS TOStorageCode
FROM
ICSMOBOM a
left join ICSMOPickLog b
on b.MOCODE=a.MOCODE and b.MOSEQ=a.MOBOMLINE And b.SEQ=a.SEQ AND b.EATTRIBUTE1='调拨'
left join ICSINVENTORY c
on c.INVCODE=a.MOBITEMCODE
where a.WorkPoint = '{0}' AND a.MOCODE='{1}' AND a.SEQ='{2}' ORDER BY a.SEQ,a.MOBOMLINE";
sql = string.Format(sql, workpointCode, TransferNo, TransferLine);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
//验证ICSMaterial表状态
public static DataTable CheckMaterialStatus(string VouchCode, string workpointCode, string dsconn)
{
string sql = @"SELECT PickingSTATUS FROM ICSMaterial
where VouchCode='{0}' and WorkPoint='{1}'";
sql = string.Format(sql, VouchCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证调拨申请单号
/// </summary>
/// <param name="TransferNo"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckTransferNo(string TransferNo, string workpointCode, string dsconn)
{
string sql = @"select * from ICSTransVouchs
where TransferNO='{0}' and WorkPoint='{1}'
ORDER BY TransferLine ";
sql = string.Format(sql, TransferNo, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取调拨申请单信息
/// </summary>
/// <param name="TransferNo"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable GetTransferData(string TransferNo, string workpointCode, string dsconn)
{
string sql = @"select TransferLine
,FROMStorageCode
,TOStorageCode
,ITEMCODE
,B.INVNAME
,B.INVSTD
,A.PLANQTY
,A.ACTQTY
,B.INVUOM
,A.EATTRIBUTE4
,ISNULL(A.cTVBatch,'') AS cTVBatch
from ICSTransVouchs A
LEFT JOIN ICSINVENTORY B
ON B.INVCODE=A.ITEMCODE
where TransferNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, TransferNo, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 物料调拨
/// </summary>
/// <param name="POCode"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool WareHouseTrans(SqlConnection sqlConnection, SqlTransaction trans, string POCode, string[] porowList, string[] poqtyList, string[] barcoderowList, string[] barcodeList, string[] barcodeqtyList, string[] bincodeList, string userCode, string userName, string workpointCode, string Type, string dsconn)
{
string sql = "";
string BarCode = "";
decimal BarCodeQty = 0;
string cBarCode = "";
string BarCodeRow = "";
string Errormessage = "";
string PORow = "";
decimal POQty = 0;
string NewBinCode = "";
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < porowList.Length; i++)
{
#region 更新ICSTransVouchs表
PORow = porowList[i];
POQty = Convert.ToDecimal(poqtyList[i]);
sql = @"update ICSTransVouchs
set ACTQTY=ACTQTY+{0}
where TransferNO='{1}' AND TransferLine='{2}'
and WorkPoint='{3}'";
sql = string.Format(sql, POQty, POCode, PORow, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("调拨申请单已调拨数量更新失败!");
}
#endregion
}
for (int i = 0; i < barcodeList.Length; i++)
{
BarCode = barcodeList[i];
BarCodeQty = Convert.ToDecimal(barcodeqtyList[i]);
BarCodeRow = barcoderowList[i];
NewBinCode = bincodeList[i];
if (cBarCode == "")
{
cBarCode += "'" + barcodeList[i] + "'";
}
else
{
cBarCode += ",'" + barcodeList[i] + "'";
}
string INVCode = "";
string OldBinCode = "";
string NewWHCode = "";
string OldWHCode = "";
string TranNo = "";
string TranLine = "";
#region 获取调拨申请单目标仓库信息
sql = @"select TOStorageCode from ICSTransVouchs
where TransferNO='{0}' AND WorkPoint='{1}'";
sql = string.Format(sql, POCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取调拨申请单信息失败!");
}
else
{
NewWHCode = dt.Rows[0]["TOStorageCode"].ToString();
}
#endregion
#region 获取仓库库位等信息
sql = @"select WHCode
,BinCode
,INVCode
,B.TransNO
,B.TransLine
from ICSWareHouseLotInfo A
left join ICSITEMLot B
on B.LotNO=A.LotNO
where A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
INVCode = dt.Rows[0]["INVCode"].ToString();
OldBinCode = dt.Rows[0]["BinCode"].ToString();
OldWHCode = dt.Rows[0]["WHCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY-{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, OldWHCode, OldBinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表库存扣减失败!");
}
sql = @"select * from ICSWareHouseInfo
where WHCode='{0}' AND BinCode='{1}' AND INVCode='{2}'";
sql = string.Format(sql, NewWHCode, NewBinCode, INVCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count != 0)
{
sql = @"update ICSWareHouseInfo
set QTY=QTY+{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, NewWHCode, NewBinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表数量增加失败!");
}
}
else
{
sql = @"INSERT INTO dbo.ICSWareHouseInfo
( WHGUID ,WHCode ,BinGUID ,BinCode ,INVGUID ,
INVCode ,QTY ,WorkPoint ,MUSER ,MUSERName ,
MTIME ,EATTRIBUTE1)
SELECT A.Serial,'{0}',B.Serial,'{1}',C.ID,'{2}',{3},'{4}','{5}','{6}','{7}','' FROM ICSStorage A
LEFT JOIN ICSStack B
ON B.Storage_Serial=A.Serial
LEFT JOIN ICSINVENTORY C
ON C.WorkPoint=B.WorkPoint
WHERE A.StorageCode='{0}' AND
B.StackCode='{1}' AND
C.INVCODE='{2}'";
sql = string.Format(sql, NewWHCode, NewBinCode, INVCode, BarCodeQty, workpointCode, userCode, userName, DateTime.Now);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表存入失败!");
}
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"update ICSWareHouseLotInfo set
WHGUID=(select Serial from ICSStorage where StorageCode='{0}'),
WHCode='{0}',
BinGUID=(select Serial from ICSStack where StackCode='{1}'),
BinCode='{1}'
where LotNO='{2}'";
sql = string.Format(sql, NewWHCode, NewBinCode, BarCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表更新失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}','{11}','{12}','{4}','{5}'
,{6},null,'{7}','物料调拨','{8}','{9}',GETDATE(),'{10}','','','','','未回写')";
sql = string.Format(sql, POCode, BarCodeRow, INVCode, BarCode, NewWHCode, NewBinCode, BarCodeQty, Type, userCode, userName, workpointCode, OldWHCode, OldBinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志存入失败!");
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (message == "Open")
{
#region 接口调用
try
{
sql = @"select A.TransferNO
,A.ITEMCODE
,B.TransQTY
,A.EATTRIBUTE1 ,A.EATTRIBUTE2,A.FROMStorageCode,A.TOStorageCode
,C.VenderLotNO AS Batch
,C.EATTRIBUTE3
from ICSTransVouchs A
inner join ICSWareHouseLotInfoLog B
on B.TransNO=A.TransferNO AND B.TransLine=A.TransferLine
LEFT JOIN ICSITEMLot C
ON C.LotNO=B.LotNO
WHERE B.LotNO IN ({0}) AND B.BusinessCode='物料调拨'
AND B.EATTRIBUTE5 = '未回写'";
sql = string.Format(sql, cBarCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt == null || dt.Rows.Count <= 0)
return false;
List<TransVouch> contextlist = new List<TransVouch>();
TransVouch context = new TransVouch();
List<TransVouchs> contextlists = new List<TransVouchs>();
TransVouchs contexts = new TransVouchs();
context.UserCode = userCode;
context.ID = dt.Rows[0]["EATTRIBUTE2"].ToString();
context.cTVCode = dt.Rows[0]["TransferNO"].ToString();
context.UserCode = userCode;
for (int i = 0; i < dt.Rows.Count; i++)
{
contexts = new TransVouchs();
contexts.cInvCode = dt.Rows[i]["ITEMCODE"].ToString();
contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString());
contexts.AutoID = dt.Rows[i]["EATTRIBUTE1"].ToString();
contexts.cTVBatch = dt.Rows[i]["Batch"].ToString();
contexts.iNum = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString()) * Convert.ToDecimal(dt.Rows[i]["EATTRIBUTE3"].ToString());
contextlists.Add(contexts);
}
context.list = contextlists;
contextlist.Add(context);
sql = @"UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE5='已回写'
where LotNO in ({0}) AND BusinessCode='物料调拨'
AND EATTRIBUTE5 = '未回写'";
sql = string.Format(sql, cBarCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表更新失败!");
}
string Istr = JsonConvert.SerializeObject(contextlist);
string iresult = HttpPost(IInvTrans, Istr);
Result INVTransResult = new Result();
INVTransResult = JsonConvert.DeserializeObject<Result>(iresult);
if (INVTransResult.code != "200")
{
throw new Exception(INVTransResult.msg);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
return isSuccess;
}
/// <summary>
/// 验证材料出申请单信息(工单)
/// </summary>
/// <param name="VouchCode"></param>
/// <param name="WorkPointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckVouchCode(string VouchCode, string WorkPointCode, string dsconn)
{
string sql = @" SELECT d.MOTYPE,d.REMOITEMDESC,a.MOCODE,
a.SEQ AS 生产订单行号,
a.MOBOMLINE AS 子件行号,
a.MOBITEMCODE AS 存货编码,
a.MOBITEMNAME AS 存货名称,
c.INVSTD AS 规格型号,
a.MOBITEMQTY AS 计划数量,
ISNULL(b.HasQuantity, 0) AS 已发数量
,c.INVUOM AS 单位
FROM ICSMOBOM a
left join ICSMOPickLog b
on b.MOCODE=a.MOCODE and b.MOSEQ=a.SEQ And b.SEQ=a.MOBOMLINE AND b.EATTRIBUTE1='领料'
left join ICSINVENTORY c
on c.INVCODE=a.MOBITEMCODE
left join ICSMO d
on d.MOCODE=a.MOCODE AND d.MOSEQ=a.SEQ
where a.WorkPoint = '{0}' AND a.MOCODE='{1}' ORDER BY a.SEQ, a.MOBOMLINE";
sql = string.Format(sql, WorkPointCode, VouchCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证材料出申请单信息(领料单)
/// </summary>
/// <param name="VouchCode"></param>
/// <param name="WorkPointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckMaterialPickCode(string VouchCode, string WorkPointCode, string dsconn)
{
string sql = @" SELECT a.VouchCode,
a.VouchRow AS 行号,
a.InvCode AS 存货编码,
b.INVNAME AS 存货名称,
b.INVSTD AS 规格型号,
a.Quantity AS 计划数量,
ISNULL(a.HasQuantity, 0) AS 已发数量
,b.INVUOM AS 单位
,c.PickingSTATUS AS 单据状态
FROM ICSMaterialPick a
left join ICSINVENTORY b
on b.INVCODE=a.InvCode
left join ICSMaterial c
on c.VouchCode=a.VouchCode
where a.WorkPoint = '{0}' AND a.VouchCode='{1}' AND MoveType='领料'
Order BY VouchRow";
sql = string.Format(sql, WorkPointCode, VouchCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证材料出申请单信息
/// </summary>
/// <param name="VouchCode"></param>
/// <param name="WorkPointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckVouchCodePick(string VouchCode, string WorkPointCode, string dsconn)
{
string sql = @"SELECT a.VouchCode AS MOCODE,
a.VouchRow AS 主行号,
a.VouchRow AS 子行号,
a.SubInvCode AS 存货编码,
c.INVNAME AS 存货名称,
c.INVSTD AS 规格型号,
a.Quantity AS 计划数量,
ISNULL(a.HasQuantity, 0) AS 已发数量
,c.INVUOM AS 单位
FROM
ICSMaterialPick a
left join ICSINVENTORY c
on c.INVCODE=a.SubInvCode
where a.WorkPoint = '{0}' AND a.VouchCode='{1}' AND a.MoveType='领料' ORDER BY a.VouchRow";
sql = string.Format(sql, WorkPointCode, VouchCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取销售出库单信息
/// </summary>
/// <param name="SOCode"></param>
/// <param name="WrokPointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckSOCode(string SOCode, string WorkPointCode, string dsconn)
{
string sql = @"select DispatchRow
,A.InvCode
,INVNAME
,INVSTD
,ISNULL(Quantity,0) AS Quantity
,ISNULL(HasQuantity,0) AS HasQuantity
,INVUOM
,WHCode
,A.cBatch
from ICSSODispatch A
LEFT JOIN ICSINVENTORY B
ON B.INVCODE=A.InvCode
where DispatchCode='{0}' AND A.WorkPoint='{1}'
AND Type='发货'
ORDER BY DispatchRow";
sql = string.Format(sql, SOCode, WorkPointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取销售退库单信息
/// </summary>
/// <param name="SOCode"></param>
/// <param name="WorkPointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckSOCodeForReturn(string SOCode, string WorkPointCode, string dsconn)
{
string sql = @"select DispatchRow
,A.InvCode
,INVNAME
,INVSTD
,ISNULL(Quantity,0) AS Quantity
,ISNULL(HasQuantity,0) AS HasQuantity
,INVUOM
,WHCode
,A.cBatch
from ICSSODispatch A
LEFT JOIN ICSINVENTORY B
ON B.INVCODE=A.InvCode
where DispatchCode='{0}' AND A.WorkPoint='{1}'
AND Type='退货' AND A.Class='合格'
ORDER BY DispatchRow";
sql = string.Format(sql, SOCode, WorkPointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 材料出库(领料单)
/// </summary>
/// <param name="POCode"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="bincodeList"></param>
/// <param name="userCodt"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool WareHouseMterialOut(SqlConnection sqlConnection, SqlTransaction trans, string POCode, string[] porowList, string[] poqtyList, string[] barcodeRowList, string[] barcodeList, string[] barcodeqtyList, string SubmitUserName, string userCode, string userName, string workpointCode, string Type, string dsconn)
{
string sql = "";
string BarCode = "";
decimal BarCodeQty = 0;
string BarCodeRow = "";
string Errormessage = "";
string POMainRow = "";
string PORow = "";
decimal POQty = 0;
string NewBinCode = "";
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < porowList.Length; i++)
{
#region 更新ICSMaterialPick表已领数量
PORow = porowList[i];
POQty = Convert.ToDecimal(poqtyList[i]);
sql = @"Update ICSMaterialPick set HasQuantity=HasQuantity+{0}
where VouchCode='{1}' AND VouchRow='{2}' AND WorkPoint='{3}' AND MoveType='领料'";
sql = string.Format(sql, POQty, POCode, PORow, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("领料单表更新失败!");
}
#endregion
}
for (int i = 0; i < barcodeList.Length; i++)
{
BarCode = barcodeList[i];
BarCodeQty = Convert.ToDecimal(barcodeqtyList[i]);
BarCodeRow = barcodeRowList[i];
string INVCode = "";
string WHCode = "";
string BinCode = "";
string TranNo = "";
string TranLine = "";
#region 获取仓库库位等信息
sql = @"select WHCode
,BinCode
,INVCode
,B.TransNO
,B.TransLine
from ICSWareHouseLotInfo A
left join ICSITEMLot B
on B.LotNO=A.LotNO
where A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
INVCode = dt.Rows[0]["INVCode"].ToString();
BinCode = dt.Rows[0]["BinCode"].ToString();
WHCode = dt.Rows[0]["WHCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY-{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表更新失败!");
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"update ICSWareHouseLotInfo
set LotQty=LotQty-{0}
where LotNO='{1}'
and WorkPoint='{2}'";
sql = string.Format(sql, BarCodeQty, BarCode, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表更新失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}','{9}','{10}','',''
,{4},null,'{5}','领料单领料','{6}','{7}',GETDATE(),'{8}','','','','','未回写')";
sql = string.Format(sql, POCode, BarCodeRow, INVCode, BarCode, BarCodeQty, Type, userCode, userName, workpointCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (message == "Open")
{
#region 接口调用
try
{
string IBarCodeList = "";
for (int i = 0; i < barcodeList.Length; i++)
{
if (IBarCodeList == "")
{
IBarCodeList += "'" + barcodeList[i] + "'";
}
else
{
IBarCodeList += ",'" + barcodeList[i] + "'";
}
}
sql = @"select C.FRMStorageCODE
,A.OutCategory
,C.ITEMCODE
,D.VenderLotNO
,C.TransQTY
,D.EATTRIBUTE3
,B.Dept
,B.RDCode,a.MEMO
,A.VENDORCODE,A.VouchCode
from ICSMaterial A
LEFT JOIN ICSMaterialPick B
ON B.VouchCode=A.VouchCode
LEFT JOIN ICSWareHouseLotInfoLog C
ON C.TransNO=B.VouchCode AND C.TransLine=B.VouchRow
LEFT JOIN ICSITEMLot D
ON D.LotNO=C.LotNO
WHERE C.LotNO IN ({0}) AND C.WorkPoint='{1}' AND C.BusinessCode='领料单领料'
AND C.EATTRIBUTE5='未回写'";
sql = string.Format(sql, IBarCodeList, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
List<ICSSoft.Entity.mom_orderdetail.mom_orderdetail> contextlist = new List<ICSSoft.Entity.mom_orderdetail.mom_orderdetail>();
ICSSoft.Entity.mom_orderdetail.mom_orderdetail context = new ICSSoft.Entity.mom_orderdetail.mom_orderdetail();
List<mom_moallocate> contextlists = new List<mom_moallocate>();
mom_moallocate contexts = new mom_moallocate();
List<root> rootlist = new List<root>();
root rootinfo = new root();
string WareHouse = "";
string Dept = "";
decimal AssQTY = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
AssQTY = Convert.ToDecimal(dt.Rows[i]["TransQTY"]) * Convert.ToDecimal(dt.Rows[i]["EATTRIBUTE3"]);
if (WareHouse != dt.Rows[i]["FRMStorageCODE"].ToString()
|| Dept != dt.Rows[i]["Dept"].ToString())
{
if (i > 0)
{
context.list = contextlists;
contextlist.Add(context);
}
context = new ICSSoft.Entity.mom_orderdetail.mom_orderdetail();
WareHouse = dt.Rows[i]["FRMStorageCODE"].ToString();
Dept = dt.Rows[i]["Dept"].ToString();
context.UserCode = userCode;
context.cWhCode = dt.Rows[i]["FRMStorageCODE"].ToString();
context.IsReturn = "0";
context.cRdCode = dt.Rows[i]["OutCategory"].ToString();
context.cBatch = dt.Rows[i]["Dept"].ToString();
context.cDefine1 = dt.Rows[i]["RDCode"].ToString();
context.cDefine2 = SubmitUserName;
context.cDefine9 = dt.Rows[i]["VENDORCODE"].ToString();
context.cDefine10 = dt.Rows[i]["VouchCode"].ToString();
context.MEMO = dt.Rows[i]["MEMO"].ToString();
contextlists = new List<mom_moallocate>();
}
contexts = new mom_moallocate();
contexts.cInvCode = dt.Rows[i]["ITEMCODE"].ToString();
contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString());
contexts.cBatch = dt.Rows[i]["VenderLotNO"].ToString();
contexts.iNum = AssQTY;
contextlists.Add(contexts);
if (i == dt.Rows.Count - 1)
{
context.list = contextlists;
contextlist.Add(context);
}
}
rootinfo.NoSourceBills = contextlist;
rootlist.Add(rootinfo);
sql = @"UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE5='已回写'
where LotNO in ({0}) AND BusinessCode='领料单领料'
UPDATE ICSMaterial SET EATTRIBUTE1='{1}'
WHERE VouchCode='{2}' AND WorkPoint='{3}'";
sql = string.Format(sql, IBarCodeList, SubmitUserName, POCode, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表更新失败!");
}
//Root root = new Root();
//root.Bills = contextlist;
//root.RedBills = null;
//string Istr = JsonConvert.SerializeObject(root);
string Istr = JsonConvert.SerializeObject(rootinfo);
string iresult = HttpPost(IInvOut, Istr);
Result INVOUTResult = new Result();
INVOUTResult = JsonConvert.DeserializeObject<Result>(iresult);
if (INVOUTResult.code != "200")
{
throw new Exception(INVOUTResult.msg);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
return isSuccess;
}
/// <summary>
/// 材料出库(工单)
/// </summary>
/// <param name="sqlConnection"></param>
/// <param name="trans"></param>
/// <param name="POCode"></param>
/// <param name="pomainrowlist"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeRowList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="rateList"></param>
/// <param name="userCode"></param>
/// <param name="userName"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool WareHouseMOMterialOut(SqlConnection sqlConnection, SqlTransaction trans, string POCode, string[] pomainrowlist, string[] porowList, string[] poqtyList, string[] barcodeRowList, string[] barcodeList, string[] barcodeqtyList, string userCode, string userName, string workpointCode, string Type, string dsconn)
{
string sql = "";
string BarCode = "";
decimal BarCodeQty = 0;
string BarCodeRow = "";
string Errormessage = "";
string POMainRow = "";
string PORow = "";
decimal POQty = 0;
string NewBinCode = "";
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < porowList.Length; i++)
{
#region 更新ICSMOPickLog表
POMainRow = pomainrowlist[i];
PORow = porowList[i];
POQty = Convert.ToDecimal(poqtyList[i]);
sql = @"select * from ICSMOPickLog
where MOCODE='{0}' AND SEQ='{3}' AND MOSEQ='{1}' AND WorkPoint='{2}' AND EATTRIBUTE1='领料'";
sql = string.Format(sql, POCode, POMainRow, workpointCode, PORow);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count != 0)
{
sql = @"update ICSMOPickLog
set HasQuantity=ISNULL(HasQuantity,0)+{0}
where MOCODE='{4}' AND MOSEQ='{1}' AND SEQ='{2}'
and WorkPoint='{3}' AND EATTRIBUTE1='领料'";
sql = string.Format(sql, POQty, POMainRow, PORow, workpointCode, POCode);
}
else
{
sql = @"Insert into ICSMOPickLog
VALUES
('{0}',(select ITEMCODE from ICSMOBOM where MOCODE='{0}' AND SEQ='{1}' AND MOBOMLINE='{5}')
,'{5}',(select MOBITEMCODE from ICSMOBOM where MOCODE='{0}' AND SEQ='{1}' AND MOBOMLINE='{5}')
,'{1}',{2},'领料','{3}',GETDATE(),'{4}')";
sql = string.Format(sql, POCode, POMainRow, POQty, userCode, workpointCode, PORow);
}
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("领料单表更新失败!");
}
#endregion
}
for (int i = 0; i < barcodeList.Length; i++)
{
BarCode = barcodeList[i];
BarCodeQty = Convert.ToDecimal(barcodeqtyList[i]);
BarCodeRow = barcodeRowList[i];
string INVCode = "";
string WHCode = "";
string BinCode = "";
string TranNo = "";
string TranLine = "";
#region 获取仓库库位等信息
sql = @"select WHCode
,BinCode
,INVCode
,B.TransNO
,B.TransLine
from ICSWareHouseLotInfo A
left join ICSITEMLot B
on B.LotNO=A.LotNO
where A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
INVCode = dt.Rows[0]["INVCode"].ToString();
BinCode = dt.Rows[0]["BinCode"].ToString();
WHCode = dt.Rows[0]["WHCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY-{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表更新失败!");
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"update ICSWareHouseLotInfo
set LotQty=LotQty-{0}
where LotNO='{1}'
and WorkPoint='{2}'";
sql = string.Format(sql, BarCodeQty, BarCode, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表更新失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}','{9}','{10}','',''
,{4},null,'{5}','工单领料','{6}','{7}',GETDATE(),'{8}','','','','','未回写')";
sql = string.Format(sql, POCode, BarCodeRow, INVCode, BarCode, BarCodeQty, Type, userCode, userName, workpointCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (message == "Open")
{
#region 接口调用
try
{
string IBarCodeList = "";
for (int i = 0; i < barcodeList.Length; i++)
{
if (IBarCodeList == "")
{
IBarCodeList += "'" + barcodeList[i] + "'";
}
else
{
IBarCodeList += ",'" + barcodeList[i] + "'";
}
}
sql = @"select A.MOCODE,A.MOSEQ,A.ITEMCODE,A.EATTRIBUTE1
,B.MOBITEMECN,B.MOBITEMCODE AS BOMITEMCODE,B.MOBOMLINE
,C.FRMStorageCODE,C.TransQTY,D.VenderLotNO,D.EATTRIBUTE3
,A.MOVER
from ICSMO A
INNER JOIN ICSMOBOM B
ON B.MOCODE=A.MOCODE AND B.SEQ=A.MOSEQ
INNER JOIN ICSWareHouseLotInfoLog C
ON C.TransNO=A.MOCODE AND C.TransLine=A.MOSEQ AND B.MOBITEMCODE=C.ITEMCODE AND C.BusinessCode='工单领料'
INNER JOIN ICSITEMLot D
ON D.LotNO=C.LotNO
WHERE A.MOCODE='{0}'
AND C.EATTRIBUTE5 = '未回写'
ORDER BY MOSEQ,ITEMCODE,FRMStorageCODE,VenderLotNO";
sql = string.Format(sql, POCode);
DataTable dt = SQlReturnData(sql, cmd);
List<ICSSoft.Entity.mom_orderdetail.mom_orderdetail> contextlist = new List<ICSSoft.Entity.mom_orderdetail.mom_orderdetail>();
ICSSoft.Entity.mom_orderdetail.mom_orderdetail context = new ICSSoft.Entity.mom_orderdetail.mom_orderdetail();
List<mom_moallocate> contextlists = new List<mom_moallocate>();
mom_moallocate contexts = new mom_moallocate();
List<root> rootlist = new List<root>();
root rootinfo = new root();
string WareHouse = "";
string SEQ = "";
string ITEMCODE = "";
decimal AssQTY = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
AssQTY = Convert.ToDecimal(dt.Rows[i]["EATTRIBUTE3"]) * Convert.ToDecimal(dt.Rows[i]["TransQTY"]);
if (WareHouse != dt.Rows[i]["FRMStorageCODE"].ToString()
|| SEQ != dt.Rows[i]["MOSEQ"].ToString()
|| ITEMCODE != dt.Rows[i]["ITEMCODE"].ToString())
{
if (i > 0)
{
context.list = contextlists;
contextlist.Add(context);
}
context = new ICSSoft.Entity.mom_orderdetail.mom_orderdetail();
WareHouse = dt.Rows[i]["FRMStorageCODE"].ToString();
SEQ = dt.Rows[i]["MOSEQ"].ToString();
ITEMCODE = dt.Rows[i]["ITEMCODE"].ToString();
context.MoDId = dt.Rows[i]["EATTRIBUTE1"].ToString();
context.UserCode = userCode;
context.cWhCode = dt.Rows[i]["FRMStorageCODE"].ToString();
context.IsReturn = "0";
context.MoCode = POCode;
context.SortSeq = dt.Rows[i]["MOSEQ"].ToString();
contextlists = new List<mom_moallocate>();
}
contexts = new mom_moallocate();
contexts.AllocateId = dt.Rows[i]["MOBITEMECN"].ToString();
contexts.cInvCode = dt.Rows[i]["BOMITEMCODE"].ToString();
contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString());
contexts.cBatch = dt.Rows[i]["VenderLotNO"].ToString();
contexts.iNum = AssQTY;
contexts.MoLotCode = dt.Rows[i]["MOVER"].ToString();
contextlists.Add(contexts);
if (i == dt.Rows.Count - 1)
{
context.list = contextlists;
contextlist.Add(context);
}
}
rootinfo.Bills = contextlist;
rootlist.Add(rootinfo);
sql = @"UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE5='已回写'
where LotNO in ({0}) AND BusinessCode='工单领料'";
sql = string.Format(sql, IBarCodeList);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表更新失败!");
}
//Root root = new Root();
//root.Bills = contextlist;
//root.RedBills = null;
//string Istr = JsonConvert.SerializeObject(root);
string Istr = JsonConvert.SerializeObject(rootinfo);
string iresult = HttpPost(IInvOut, Istr);
Result INVOUTResult = new Result();
INVOUTResult = JsonConvert.DeserializeObject<Result>(iresult);
if (INVOUTResult.code != "200")
{
throw new Exception(INVOUTResult.msg);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
return isSuccess;
}
/// <summary>
/// 销售出库
/// </summary>
/// <param name="sqlConnection"></param>
/// <param name="trans"></param>
/// <param name="POCode"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="userCode"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool WareHouseDisPatchOut(SqlConnection sqlConnection, SqlTransaction trans, string POCode, string[] porowList, string[] poqtyList, string[] barcoderowList, string[] barcodeList, string[] barcodeqtyList, string userCode, string userName, string workpointCode, string Type, string dsconn)
{
string sql = "";
string BarCode = "";
decimal BarCodeQty = 0;
string BarCodeRow = "";
string Errormessage = "";
string PORow = "";
decimal POQty = 0;
string NewBinCode = "";
string IBarCodeList = "";
string cBarCode = "";
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < porowList.Length; i++)
{
#region 更新ICSSODispatch表
PORow = porowList[i];
POQty = Convert.ToDecimal(poqtyList[i]);
sql = @"update ICSSODispatch
set HasQuantity=ISNULL(HasQuantity,0)+{0}
where DispatchCode='{1}' AND DispatchRow='{2}' AND WorkPoint='{3}'";
sql = string.Format(sql, POQty, POCode, PORow, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("销售订单已发数量更新失败!");
}
#endregion
}
for (int i = 0; i < barcodeList.Length; i++)
{
if (IBarCodeList == "")
{
IBarCodeList += "'" + barcodeList[i] + "'";
}
else
{
IBarCodeList += ",'" + barcodeList[i] + "'";
}
BarCode = barcodeList[i];
BarCodeQty = Convert.ToDecimal(barcodeqtyList[i]);
BarCodeRow = barcoderowList[i];
if (cBarCode == "")
{
cBarCode += "'" + barcodeList[i] + "'";
}
else
{
cBarCode += ",'" + barcodeList[i] + "'";
}
string INVCode = "";
string WHCode = "";
string BinCode = "";
string TranNo = "";
string TranLine = "";
#region 获取仓库库位等信息
sql = @"select WHCode
,BinCode
,INVCode
,B.TransNO
,B.TransLine
from ICSWareHouseLotInfo A
left join ICSITEMLot B
on B.LotNO=A.LotNO
where A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
INVCode = dt.Rows[0]["INVCode"].ToString();
BinCode = dt.Rows[0]["BinCode"].ToString();
WHCode = dt.Rows[0]["WHCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY-{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表数量扣减失败!");
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"update ICSWareHouseLotInfo
set LotQty=LotQty-{0}
where LotNO='{1}'
and WorkPoint='{2}'";
sql = string.Format(sql, BarCodeQty, BarCode, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表数量扣减失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}','{9}','{10}','',''
,{4},null,'{5}','销售出库','{6}','{7}',GETDATE(),'{8}','','','','','未回写')";
sql = string.Format(sql, POCode, BarCodeRow, INVCode, BarCode, BarCodeQty, Type, userCode, userName, workpointCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (message == "Open")
{
#region 接口调用
try
{
sql = @"select A.Term1
,A.DispatchCode
,B.FRMStorageCODE
,A.Term2
,B.TransQTY
,C.VenderLotNO AS Batch
,C.ItemCode
,C.EATTRIBUTE3
,case when (c.EATTRIBUTE6 like '02%' or c.EATTRIBUTE6 like 'qichu%')
then c.VoucherNO else arr.cDefine22 end cBatchProperty7 ----cBatchProperty7
,case when (c.EATTRIBUTE6 like '02%' or c.EATTRIBUTE6 like 'qichu%')
then c.TwoMUSER else arr.cBatchProperty6 end cBatchProperty6 ------cBatchProperty6
from ICSSODispatch A
INNER JOIN ICSWareHouseLotInfoLog B
ON B.TransNO=A.DispatchCode AND B.TransLine=A.DispatchRow
AND B.BusinessCode='销售出库' AND B.EATTRIBUTE5='未回写'
INNER JOIN ICSITEMLot C
ON C.LotNO=B.LotNO
left join ICSITEMLot item on item.LotNO=c.EATTRIBUTE6
left join ICSPOArrive arr on arr.cCode=item.TransNO and arr.irowno=item.TransLine
WHERE B.LotNO IN ({0}) AND A.DispatchCode='{1}'";
sql = string.Format(sql, cBarCode, POCode);
DataTable dt = SQlReturnData(sql, cmd);
List<Dispatchlist> contextlist = new List<Dispatchlist>();
Dispatchlist context = new Dispatchlist();
List<Dispatchlists> contextlists = new List<Dispatchlists>();
Dispatchlists contexts = new Dispatchlists();
string SOCode = "";
string WareHouse = "";
decimal AssQTY = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
AssQTY = Convert.ToDecimal(dt.Rows[i]["EATTRIBUTE3"]) * Convert.ToDecimal(dt.Rows[i]["TransQTY"]);
if (SOCode != dt.Rows[i]["DispatchCode"].ToString()
|| WareHouse != dt.Rows[i]["FRMStorageCODE"].ToString())
{
if (i > 0)
{
context.list = contextlists;
contextlist.Add(context);
}
context = new Dispatchlist();
SOCode = dt.Rows[i]["DispatchCode"].ToString();
WareHouse = dt.Rows[i]["FRMStorageCODE"].ToString();
context.DLID = dt.Rows[i]["Term1"].ToString();
context.cDLCode = dt.Rows[i]["DispatchCode"].ToString();
context.cWhCode = dt.Rows[i]["FRMStorageCODE"].ToString();
context.UserCode = userCode;
context.IsReturn = "0";
contextlists = new List<Dispatchlists>();
}
contexts = new Dispatchlists();
contexts.iDLsID = dt.Rows[i]["Term2"].ToString();
contexts.cInvCode = dt.Rows[i]["ItemCode"].ToString();
contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString());
contexts.cBatch = dt.Rows[i]["Batch"].ToString();
contexts.iNum = AssQTY;
contexts.cBatchProperty6 = dt.Rows[i]["cBatchProperty6"].ToString();
contexts.cBatchProperty7 = dt.Rows[i]["cBatchProperty7"].ToString();
contextlists.Add(contexts);
if (i == dt.Rows.Count - 1)
{
context.list = contextlists;
contextlist.Add(context);
}
}
sql = @"UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE5='已回写'
where LotNO in ({0}) AND BusinessCode='销售出库'";
sql = string.Format(sql, IBarCodeList);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表更新失败!");
}
string Istr = JsonConvert.SerializeObject(contextlist);
string iresult = HttpPost(IDispatch, Istr);
Result DispatchResult = new Result();
DispatchResult = JsonConvert.DeserializeObject<Result>(iresult);
if (DispatchResult.code != "200")
{
throw new Exception(DispatchResult.msg);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
return isSuccess;
}
/// <summary>
/// 销售退库
/// </summary>
/// <param name="sqlConnection"></param>
/// <param name="trans"></param>
/// <param name="POCode"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="userCode"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool WareHouseDisPatchIN(SqlConnection sqlConnection, SqlTransaction trans, string POCode, string[] porowList, string[] barcodeList, string[] barcodeqtyList, string[] stackcodeList, string userCode, string userName, string workpointCode, string Type, string dsconn)
{
string sql = "";
string cBarCode = "";
string PORow = "";
decimal BarCodeQty = 0;
string BarCode = "";
string BinCode = "";
string BinGUID = "";
string WHCODE = "";
string WHGUID = "";
string INVGUID = "";
string INVCODE = "";
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < porowList.Length; i++)
{
#region 更新ICSSODispatch表
PORow = porowList[i];
BarCodeQty = Convert.ToDecimal(barcodeqtyList[i]);
BarCode = barcodeList[i];
BinCode = stackcodeList[i];
if (cBarCode == "")
{
cBarCode += "'" + BarCode + "'";
}
else
{
cBarCode += ",'" + BarCode + "'";
}
sql = @"update ICSSODispatch
set HasQuantity=ISNULL(HasQuantity,0)+{0}
where DispatchCode='{1}' AND DispatchRow='{2}' AND WorkPoint='{3}'";
sql = string.Format(sql, BarCodeQty, POCode, PORow, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("销售订单表已退数量更新失败!");
}
#endregion
#region 获取仓库信息
sql = @"select A.Serial AS BinGUID
,B.Serial AS WHGUID
,B.StorageCode AS WHCODE
from ICSStack A
LEFT JOIN ICSStorage B
ON B.Serial=A.Storage_Serial
where A.StackCode='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BinCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count > 0)
{
BinGUID = dt.Rows[0]["BinGUID"].ToString();
WHGUID = dt.Rows[0]["WHGUID"].ToString();
WHCODE = dt.Rows[0]["WHCODE"].ToString();
}
else
{
throw new Exception("仓库信息获取失败");
}
#endregion
#region 获取物料信息
sql = @"SELECT A.INVCODE,A.ID
FROM ICSINVENTORY A
LEFT JOIN ICSITEMLot B
ON B.ItemCode=A.INVCODE
WHERE B.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count > 0)
{
INVGUID = dt.Rows[0]["ID"].ToString();
INVCODE = dt.Rows[0]["INVCODE"].ToString();
}
else
{
throw new Exception("物料信息获取失败!");
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"IF EXISTS (SELECT * FROM ICSWareHouseInfo WHERE WHCode='{0}' AND BinCode='{1}'
AND INVCode=(SELECT ItemCode FROM ICSITEMLot WHERE LotNO='{2}'))
UPDATE ICSWareHouseInfo SET QTY=QTY+{3}
WHERE WHCode='{0}' AND BinCode='{1}' AND INVCode=(SELECT ItemCode FROM ICSITEMLot WHERE LotNO='{2}')
ELSE
INSERT INTO ICSWareHouseInfo
VALUES
('{4}','{0}','{5}','{1}','{6}','{7}',{3},'{8}','{9}','{10}',GETDATE(),'' )";
sql = string.Format(sql, WHCODE, BinCode, BarCode, BarCodeQty, WHGUID, BinGUID, INVGUID, INVCODE
, workpointCode, userCode, userName);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表数量更新失败!");
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"select * from ICSWareHouseLotInfo
where LotNO='{0}' AND WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count != 0)
{
throw new Exception("条码已经入库!");
}
sql = @"insert into ICSWareHouseLotInfo
Values
(NEWID(),'{0}','{1}','{2}','{3}','{4}','{5}','{6}',{7}
,GETDATE(),'{8}','{9}','{10}',GETDATE(),'',NULL,NULL)";
sql = string.Format(sql, BarCode, WHGUID, WHCODE, BinGUID, BinCode, INVGUID, INVCODE, BarCodeQty
, workpointCode, userCode, userName);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表数量更新失败!");
}
#endregion
#region 更新ICSWareHouseLotInfoLog表
sql = @"insert into ICSWareHouseLotInfoLog
VALUES
(NEWID(),'{0}','{1}','{2}','{3}','','','{4}','{5}'
,{6},NULL,'{7}','销售退库','{8}','{9}',GETDATE(),'{10}',NULL,NULL,NULL,NULL,'未回写')";
sql = string.Format(sql, POCode, PORow, INVCODE, BarCode, WHCODE, BinCode, BarCodeQty, Type
, userCode, userName, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表表存入失败!");
}
#endregion
}
if (message == "Open")
{
#region 接口调用
try
{
sql = @"select A.Term1
,A.DispatchCode
,B.TOStorageCODE
,A.Term2
,B.TransQTY
,C.VenderLotNO AS Batch
,C.ItemCode
,C.EATTRIBUTE3
from ICSSODispatch A
INNER JOIN ICSWareHouseLotInfoLog B
ON B.TransNO=A.DispatchCode AND B.TransLine=A.DispatchRow AND B.BusinessCode='销售退库' AND B.EATTRIBUTE5='未回写'
INNER JOIN ICSITEMLot C
ON C.LotNO=B.LotNO
WHERE B.LotNO IN ({0})";
sql = string.Format(sql, cBarCode);
DataTable dt = SQlReturnData(sql, cmd);
List<Dispatchlist> contextlist = new List<Dispatchlist>();
Dispatchlist context = new Dispatchlist();
List<Dispatchlists> contextlists = new List<Dispatchlists>();
Dispatchlists contexts = new Dispatchlists();
string SOCode = "";
string WareHouse = "";
decimal AssQTY = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
AssQTY = Convert.ToDecimal(dt.Rows[i]["EATTRIBUTE3"]) * Convert.ToDecimal(dt.Rows[i]["TransQTY"]);
if (SOCode != dt.Rows[i]["DispatchCode"].ToString()
|| WareHouse != dt.Rows[i]["TOStorageCODE"].ToString())
{
if (i > 0)
{
context.list = contextlists;
contextlist.Add(context);
}
context = new Dispatchlist();
SOCode = dt.Rows[i]["DispatchCode"].ToString();
WareHouse = dt.Rows[i]["TOStorageCODE"].ToString();
context.DLID = dt.Rows[i]["Term1"].ToString();
context.cDLCode = dt.Rows[i]["DispatchCode"].ToString();
context.cWhCode = dt.Rows[i]["TOStorageCODE"].ToString();
context.UserCode = userCode;
context.IsReturn = "1";
contextlists = new List<Dispatchlists>();
}
contexts = new Dispatchlists();
contexts.iDLsID = dt.Rows[i]["Term2"].ToString();
contexts.cInvCode = dt.Rows[i]["ItemCode"].ToString();
contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString());
contexts.cBatch = dt.Rows[i]["Batch"].ToString();
contexts.iNum = AssQTY;
contextlists.Add(contexts);
if (i == dt.Rows.Count - 1)
{
context.list = contextlists;
contextlist.Add(context);
}
}
sql = @"UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE5='已回写'
where LotNO in ({0}) AND BusinessCode='销售退库'";
sql = string.Format(sql, cBarCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表更新失败!");
}
string Istr = JsonConvert.SerializeObject(contextlist);
string iresult = HttpPost(IDispatch, Istr);
Result DispatchResult = new Result();
DispatchResult = JsonConvert.DeserializeObject<Result>(iresult);
if (DispatchResult.code != "200")
{
throw new Exception(DispatchResult.msg);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return isSuccess;
}
/// <summary>
/// 物料退料
/// </summary>
/// <param name="POCode"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="userCode"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool MaterialIN(SqlConnection sqlConnection, SqlTransaction trans, string[] pocodeList, string[] porowList, string[] poqtyList, string[] barcoderowList, string[] barcodeList, string[] barcodeqtyList, string[] bincodelist, string userCode, string userName, string workpointCode, string Type, string VouchType, string dsconn)
{
string sql = "";
string BarCode = "";
decimal BarCodeQty = 0;
string BarCodeRow = "";
string Errormessage = "";
string PORow = "";
string POCode = "";
decimal POQty = 0;
string IBarCodeList = "";
string NewBinCode = "";
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < porowList.Length; i++)
{
#region 更新ICSMaterialPick表
POCode = pocodeList[i];
PORow = porowList[i];
POQty = Convert.ToDecimal(poqtyList[i]);
sql = @"update ICSMaterialPick
set HasQuantity=ISNULL(HasQuantity,0)+{0}
where VouchCode='{1}' AND VouchRow='{2}'
and WorkPoint='{3}'";
sql = string.Format(sql, POQty, POCode, PORow, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("退料表已退数量更新失败!");
}
#endregion
if (VouchType != "MRO")
{
#region 扣减领料单已领数量
sql = @"update ICSMOPickLog set HasQuantity=HasQuantity-{2}
where MOCODE=
(select MOCODE from ICSMaterialPick where VouchCode='{0}' and VouchRow='{1}')
AND MOSEQ=
(select MORow from ICSMaterialPick where VouchCode='{0}' and VouchRow='{1}')
AND MOBITEMCODE=
(SELECT SubInvCode FROM ICSMaterialPick where VouchCode='{0}' and VouchRow='{1}')
AND WorkPoint='{3}'";
sql = string.Format(sql, POCode, PORow, POQty, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("领料表已领数量扣减失败!");
}
}
#endregion
}
for (int i = 0; i < barcodeList.Length; i++)
{
if (IBarCodeList == "")
{
IBarCodeList += "'" + barcodeList[i] + "'";
}
else
{
IBarCodeList += ",'" + barcodeList[i] + "'";
}
BarCode = barcodeList[i];
BarCodeQty = Convert.ToDecimal(barcodeqtyList[i]);
BarCodeRow = barcoderowList[i];
NewBinCode = bincodelist[i];
string INVCode = "";
string WHCode = "";
string TranNo = "";
string TranLine = "";
#region 获取仓库库位等信息
sql = @"select ItemCode
,TransNO
,TransLine
from ICSITEMLot
where LotNO='{0}' AND WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取条码信息失败!");
}
else
{
INVCode = dt.Rows[0]["ItemCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
}
sql = @"select B.StorageCode
from ICSStack A
LEFT JOIN ICSStorage B
ON B.Serial=A.Storage_Serial
where StackCode='{0}'";
sql = string.Format(sql, NewBinCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
WHCode = dt.Rows[0]["StorageCode"].ToString();
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY+{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, WHCode, NewBinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
sql = @"insert into ICSWareHouseInfo
values
((select Serial from ICSStorage where StorageCode='{0}')
,'{0}'
,(SELECT Serial FROM ICSStack WHERE StackCode='{1}')
,'{1}'
,(SELECT ID FROM ICSINVENTORY WHERE INVCODE='{2}')
,'{2}',{3},'{4}','{5}','{6}',GETDATE(),NULL)";
sql = string.Format(sql, WHCode, NewBinCode, INVCode, BarCodeQty, workpointCode, userCode, userName);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表存入失败!");
}
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"insert into ICSWareHouseLotInfo
Values
(NEWID(),'{0}',
(select Serial from ICSStorage where StorageCode='{1}'),
'{1}',
(SELECT Serial FROM ICSStack WHERE StackCode='{2}'),
'{2}',
(SELECT ID FROM ICSINVENTORY WHERE INVCODE='{3}'),
'{3}',{4},GETDATE(),'{5}','{6}','{7}',GETDATE(),'','','')";
sql = string.Format(sql, BarCode, WHCode, NewBinCode, INVCode, BarCodeQty, workpointCode, userCode, userName);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表数量增加失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}','','','{9}','{10}'
,{4},null,'{5}','物料退料','{6}','{7}',GETDATE(),'{8}','','','','','未回写')";
sql = string.Format(sql, TranNo, TranLine, INVCode, BarCode, BarCodeQty, Type, userCode, userName, workpointCode, WHCode, NewBinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (message == "Open")
{
#region 接口调用
try
{
string CodeList = "";
for (int i = 0; i < pocodeList.Length; i++)
{
if (CodeList == "")
{
CodeList += "'" + pocodeList[i] + "'";
}
else
{
CodeList += ",'" + pocodeList[i] + "'";
}
}
sql = @"select A.MOCODE,A.MORow AS MOSEQ,A.InvCode AS ITEMCODE,E.EATTRIBUTE1,A.VoucherNO
,B.MOBITEMECN,B.MOBITEMCODE,B.SEQ
,C.TOStorageCODE,C.TransQTY,D.VenderLotNO AS VenderLotNO
,D.EATTRIBUTE3,F.OutCategory,E.MOVER,C.ItemCode AS CItemCode,f.MEMO,a.Dept
from ICSMaterialPick A
INNER JOIN ICSWareHouseLotInfoLog C
ON C.TransNO=A.VouchCode AND C.TransLine=A.VouchRow
AND C.BusinessCode='物料退料' AND C.EATTRIBUTE5='未回写'
LEFT JOIN ICSMO E
ON E.MOCODE=A.MOCode AND E.MOSEQ=A.MORow
LEFT JOIN ICSMOBOM B
ON B.MOCODE=A.MOCODE AND B.SEQ=A.MORow AND B.MOBITEMCODE=A.SubInvCode
LEFT JOIN ICSITEMLot D
ON D.LotNO=C.LotNO
LEFT JOIN ICSMaterial F
ON F.VouchCode=A.VouchCode
WHERE A.VouchCode in ({0})
ORDER BY MOSEQ,E.ITEMCODE,TOStorageCODE,VenderLotNO";
sql = string.Format(sql, CodeList);
DataTable dt = SQlReturnData(sql, cmd);
decimal ASSQTY = 0;
List<ICSSoft.Entity.mom_orderdetail.mom_orderdetail> contextlist = new List<ICSSoft.Entity.mom_orderdetail.mom_orderdetail>();
List<mom_moallocate> contextlists = new List<mom_moallocate>();
List<ICSSoft.Entity.mom_orderdetail.mom_orderdetail> contextlistMO = new List<ICSSoft.Entity.mom_orderdetail.mom_orderdetail>();
List<mom_moallocate> contextlistsMO = new List<mom_moallocate>();
if (VouchType == "MRO")
{
#region 无来源单据的退料单
ICSSoft.Entity.mom_orderdetail.mom_orderdetail context = new ICSSoft.Entity.mom_orderdetail.mom_orderdetail();
mom_moallocate contexts = new mom_moallocate();
string WareHouse = "";
string SEQ = "";
string ITEMCODE = "";
for (int i = 0; i < dt.Rows.Count; i++)
{
ASSQTY = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString()) * Convert.ToDecimal(dt.Rows[i]["EATTRIBUTE3"].ToString());
if (WareHouse != dt.Rows[i]["TOStorageCODE"].ToString()
|| ITEMCODE != dt.Rows[i]["ITEMCODE"].ToString())
{
if (i > 0)
{
context.list = contextlists;
contextlist.Add(context);
}
context = new ICSSoft.Entity.mom_orderdetail.mom_orderdetail();
WareHouse = dt.Rows[i]["TOStorageCODE"].ToString();
ITEMCODE = dt.Rows[i]["ITEMCODE"].ToString();
context.UserCode = userCode;
context.cWhCode = dt.Rows[i]["TOStorageCODE"].ToString();
context.IsReturn = "1";
context.cRdCode = dt.Rows[i]["OutCategory"].ToString();
context.MEMO = dt.Rows[i]["MEMO"].ToString();
context.cBatch = dt.Rows[i]["Dept"].ToString();
contextlists = new List<mom_moallocate>();
}
contexts = new mom_moallocate();
contexts.cInvCode = dt.Rows[i]["CItemCode"].ToString();
contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString());
contexts.cBatch = dt.Rows[i]["VenderLotNO"].ToString();
contexts.iNum = ASSQTY;
contextlists.Add(contexts);
if (i == dt.Rows.Count - 1)
{
context.list = contextlists;
contextlist.Add(context);
}
}
#endregion
}
else
{
#region 工单退料单
ICSSoft.Entity.mom_orderdetail.mom_orderdetail contextMO = new ICSSoft.Entity.mom_orderdetail.mom_orderdetail();
mom_moallocate contextsMO = new mom_moallocate();
string WareHouseMO = "";
string SEQMO = "";
string ITEMCODEMO = "";
for (int i = 0; i < dt.Rows.Count; i++)
{
ASSQTY = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString()) * Convert.ToDecimal(dt.Rows[i]["EATTRIBUTE3"].ToString());
if (WareHouseMO != dt.Rows[i]["TOStorageCODE"].ToString()
|| SEQMO != dt.Rows[i]["MOSEQ"].ToString()
|| ITEMCODEMO != dt.Rows[i]["ITEMCODE"].ToString())
{
if (i > 0)
{
contextMO.list = contextlistsMO;
contextlistMO.Add(contextMO);
}
contextMO = new ICSSoft.Entity.mom_orderdetail.mom_orderdetail();
WareHouseMO = dt.Rows[i]["TOStorageCODE"].ToString();
SEQMO = dt.Rows[i]["MOSEQ"].ToString();
ITEMCODEMO = dt.Rows[i]["ITEMCODE"].ToString();
contextMO.MoDId = dt.Rows[i]["EATTRIBUTE1"].ToString();
contextMO.MoCode = dt.Rows[i]["MOCODE"].ToString();
contextMO.SortSeq = dt.Rows[i]["MOSEQ"].ToString();
contextMO.UserCode = userCode;
contextMO.cWhCode = dt.Rows[i]["TOStorageCODE"].ToString();
contextMO.IsReturn = "1";
contextlistsMO = new List<mom_moallocate>();
}
contextsMO = new mom_moallocate();
contextsMO.AllocateId = dt.Rows[i]["MOBITEMECN"].ToString();
contextsMO.cInvCode = dt.Rows[i]["MOBITEMCODE"].ToString();
contextsMO.iQuantity = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString());
contextsMO.cBatch = dt.Rows[i]["VenderLotNO"].ToString();
contextsMO.iNum = ASSQTY;
contextsMO.MoLotCode = dt.Rows[i]["MOVER"].ToString();
contextlistsMO.Add(contextsMO);
if (i == dt.Rows.Count - 1)
{
contextMO.list = contextlistsMO;
contextlistMO.Add(contextMO);
}
}
#endregion
}
List<root> rootlist = new List<root>();
root rootinfo = new root();
rootinfo.Bills = contextlistMO;
rootinfo.NoSourceBills = contextlist;
rootlist.Add(rootinfo);
sql = @"UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE5='已回写'
where LotNO in ({0}) AND BusinessCode='物料退料'";
sql = string.Format(sql, IBarCodeList);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表更新失败!");
}
//Root root = new Root();
//root.Bills = contextlistMO;
//root.RedBills = contextlist;
//string IstrMO = JsonConvert.SerializeObject(root);
string IstrMO = JsonConvert.SerializeObject(rootinfo);
string iresultMO = HttpPost(IInvOut, IstrMO);
Result INVINResultMO = new Result();
INVINResultMO = JsonConvert.DeserializeObject<Result>(iresultMO);
if (INVINResultMO.code != "200")
{
throw new Exception(INVINResultMO.msg);
}
// List<ZYPDAServiceForINVOut.mom_orderdetail> contextList = new List<ZYPDAServiceForINVOut.mom_orderdetail>();
// List<ZYPDAServiceForINVOut.mom_moallocate> contextLists = new List<ZYPDAServiceForINVOut.mom_moallocate>();
// ZYPDAServiceForINVOut.mom_orderdetail context = new ZYPDAServiceForINVOut.mom_orderdetail();
// ZYPDAServiceForINVOut.mom_moallocate contexts = new ZYPDAServiceForINVOut.mom_moallocate();
// string WareHouse = "";
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// if (WareHouse != dt.Rows[i]["TOStorageCODE"].ToString())
// {
// if (i > 0)
// {
// context.bodyList = contextLists.ToArray();
// contextList.Add(context);
// }
// context = new ZYPDAServiceForINVOut.mom_orderdetail();
// WareHouse = dt.Rows[i]["TOStorageCODE"].ToString();
// context.MoCode = dt.Rows[i]["MOCODE"].ToString();
// context.SortSeq = dt.Rows[i]["SEQ"].ToString();
// context.UserCode = userCode;
// context.cWhCode = dt.Rows[i]["TOStorageCODE"].ToString();
// context.ItemCode = dt.Rows[i]["InvCode"].ToString();
// contextLists = new List<ZYPDAServiceForINVOut.mom_moallocate>();
// }
// contexts = new ZYPDAServiceForINVOut.mom_moallocate();
// contexts.AllocateId = dt.Rows[i]["MOBITEMECN"].ToString();
// contexts.cInvCode = dt.Rows[i]["BOMITEMCODE"].ToString();
// contexts.iQuantity = Convert.ToDecimal(dt.Rows[i]["TransQTY"].ToString());
// contexts.cBatch = dt.Rows[i]["VenderLotNO"].ToString();
// //contexts.modid = dt.Rows[i]["Free1"].ToString();
// contextLists.Add(contexts);
// if (i == dt.Rows.Count - 1)
// {
// context.bodyList = contextLists.ToArray();
// contextList.Add(context);
// }
// }
// ZYPDAServiceForINVOut.Imom2Rd11Client client = new ZYPDAServiceForINVOut.Imom2Rd11Client();
// ZYPDAServiceForINVOut.Result cresult = new ZYPDAServiceForINVOut.Result();
// sql = @"UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE5='已回写'
// where LotNO in ({0}) AND BusinessCode='物料退料'";
// sql = string.Format(sql, IBarCodeList);
// cmd.CommandText = sql;
// result = cmd.ExecuteNonQuery();
// if (isSuccess && result <= 0)
// {
// throw new Exception("日志表更新失败!");
// }
// cresult = client.InsertRd11(contextList.ToArray(), "1");
// if (cresult.IsSuccess == false)
// {
// throw new Exception(cresult.MESSAGE);
// }
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
return isSuccess;
}
/// <summary>
/// 移库扫描
/// </summary>
/// <param name="sqlConnection"></param>
/// <param name="trans"></param>
/// <param name="oldBinCodeList"></param>
/// <param name="newBinCodeList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="userCode"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool StackTransfer(SqlConnection sqlConnection, SqlTransaction trans, string[] oldBinCodeList, string[] newBinCodeList, string[] barcodeList, string[] barcodeqtyList, string userCode, string userName, string workpointCode, string Type, string dsconn)
{
string sql = "";
string BarCode = "";
decimal BarCodeQty = 0;
string NewBinCode = "";
string OldBinCode = "";
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < barcodeList.Length; i++)
{
BarCode = barcodeList[i];
BarCodeQty = Convert.ToDecimal(barcodeqtyList[i].ToString());
NewBinCode = newBinCodeList[i];
OldBinCode = oldBinCodeList[i];
string INVCode = "";
string WHCode = "";
string TranNo = "";
string TranLine = "";
#region 获取仓库库位等信息
sql = @"select WHCode
,BinCode
,INVCode
,B.TransNO
,B.TransLine
from ICSWareHouseLotInfo A
left join ICSITEMLot B
on B.LotNO=A.LotNO
where A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
INVCode = dt.Rows[0]["INVCode"].ToString();
WHCode = dt.Rows[0]["WHCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY-{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, WHCode, OldBinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表数量扣减失败!");
}
sql = @"select * from ICSWareHouseInfo
where WHCode='{0}' AND BinCode='{1}' AND INVCode='{2}'";
sql = string.Format(sql, WHCode, NewBinCode, INVCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count != 0)
{
sql = @"update ICSWareHouseInfo
set QTY=QTY+{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, WHCode, NewBinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表数量增加失败!");
}
}
else
{
sql = @"INSERT INTO dbo.ICSWareHouseInfo
( WHGUID ,WHCode ,BinGUID ,BinCode ,INVGUID ,
INVCode ,QTY ,WorkPoint ,MUSER ,MUSERName ,
MTIME ,EATTRIBUTE1)
SELECT A.Serial,'{0}',B.Serial,'{1}',C.ID,'{2}',{3},'{4}','{5}','{6}','{7}','' FROM ICSStorage A
LEFT JOIN ICSStack B
ON B.Storage_Serial=A.Serial
LEFT JOIN ICSINVENTORY C
ON C.WorkPoint=B.WorkPoint
WHERE A.StorageCode='{0}' AND
B.StackCode='{1}' AND
C.INVCODE='{2}'";
sql = string.Format(sql, WHCode, NewBinCode, INVCode, BarCodeQty, workpointCode, userCode, userName, DateTime.Now);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表数量存入失败!");
}
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"update ICSWareHouseLotInfo set
BinGUID=(select Serial from ICSStack where StackCode='{0}'),
BinCode='{0}'
where LotNO='{1}'";
sql = string.Format(sql, NewBinCode, BarCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表数量更新失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}','{4}','{5}','{6}'
,'{7}',{8},null,'{9}','物料移库','{10}','{11}',GETDATE(),'{12}','','','','','')";
sql = string.Format(sql, TranNo, TranLine, INVCode, BarCode, WHCode, OldBinCode, WHCode, NewBinCode, BarCodeQty, Type, userCode, userName, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
return isSuccess;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 验证盘点单号信息
/// </summary>
/// <param name="CheckNo"></param>
/// <param name="WorkPointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckCheckNo(string CheckNo, string WorkPointCode, string dsconn)
{
string sql = @"select * from ICSToCheck
where ToCheckNO='{0}' AND WorkPoint='{1}'";
sql = string.Format(sql, CheckNo, WorkPointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证盘点条码信息
/// </summary>
/// <param name="CheckNo"></param>
/// <param name="BarCode"></param>
/// <param name="WorkPointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotnoForCheck(string CheckNo, string BarCode, string WorkPointCode, string dsconn)
{
DataTable dts = new DataTable();
#region 获取盘点单物料及仓库信息
string sql = @"select ItemCode,StorageCode from ICSToCheck
where ToCheckNO='{0}' AND WorkPoint='{1}'";
sql = string.Format(sql, CheckNo, WorkPointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
sql = @"select WHCode
,BinCode
,A.LotNO
,A.INVCode
,B.INVNAME
,B.INVSTD
,A.LotQty
,D.LOTQTY AS ItemLotQTY
,ISNULL(BarCodeQty,0) AS BarCodeQty
,B.INVUOM
from ICSWareHouseLotInfo A
left join ICSINVENTORY B
on B.INVCODE=A.INVCode
LEFT JOIN ICSToChecks C
ON C.BarCode=A.LotNO
left join ICSITEMLot D
ON D.LOTNO=A.LotNO
where A.LotNO='{0}' AND A.INVCode='{1}' AND A.WHCode='{2}' AND A.WorkPoint='{3}'";
sql = string.Format(sql, BarCode, dt.Rows[i]["ItemCode"].ToString(), dt.Rows[i]["StorageCode"].ToString(), WorkPointCode);
DataTable lotdt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
if (lotdt.Rows.Count != 0)
{
dts = lotdt.Copy();
}
}
}
#endregion
return dts;
}
/// <summary>
/// 盘点扫描
/// </summary>
/// <param name="sqlConnection"></param>
/// <param name="trans"></param>
/// <param name="CheckNo"></param>
/// <param name="BarCodeList"></param>
/// <param name="BarCodeQtyList"></param>
/// <param name="UserCode"></param>
/// <param name="WorkPointCode"></param>
/// <param name="Type"></param>
/// <param name="EditType"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool CheckIn(SqlConnection sqlConnection, SqlTransaction trans, string CheckNo, string[] BarCodeList, string[] BarCodeQtyList, string userCode, string userName, string WorkPointCode, string Type, string EditType, string dsconn)
{
string sql = "";
string BarCode = "";
decimal BarCodeQty = 0;
decimal ItemLotQTY = 0;
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < BarCodeList.Length; i++)
{
BarCode = BarCodeList[i];
BarCodeQty = Convert.ToDecimal(BarCodeQtyList[i].ToString());
string INVCode = "";
string WHCode = "";
string TranNo = "";
string TranLine = "";
decimal LotQty = 0;
string BinCode = "";
#region 获取仓库库位等信息
sql = @"select WHCode
,A.LotQty
,BinCode
,INVCode
,B.TransNO
,B.TransLine
from ICSWareHouseLotInfo A
left join ICSITEMLot B
on B.LotNO=A.LotNO
where A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, WorkPointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
LotQty = Convert.ToDecimal(dt.Rows[0]["LotQty"].ToString());
INVCode = dt.Rows[0]["INVCode"].ToString();
WHCode = dt.Rows[0]["WHCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
BinCode = dt.Rows[0]["BinCode"].ToString();
}
#endregion
#region 更新ICSToCheck表
sql = @"update ICSToCheck set ActualQty=ActualQty+{0}
where ToCheckNO='{1}' AND ItemCode='{2}' AND StorageCode='{3}' AND WorkPoint='{4}'";
sql = string.Format(sql, BarCodeQty, CheckNo, INVCode, WHCode, WorkPointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("盘点主表实盘数量增加失败!");
}
#endregion
#region 更新ICSToChecks表
sql = @"select * from ICSToChecks where BarCode='{0}'";
sql = string.Format(sql, BarCode);
dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
sql = @"insert into ICSToChecks
values
(NEWID(),'{0}','{1}',{7},{2},'{3}',GETDATE(),'{4}','{5}','','{6}','insert','{6}',GETDATE())";
sql = string.Format(sql, INVCode, BarCode, BarCodeQty, userName, WorkPointCode, CheckNo, userCode, LotQty);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("盘点子表存入失败!");
}
}
else
{
sql = @"update ICSToChecks
set BarCodeQty={0},Status='Update'
,Updater='{1}',UpdateTime=GETDATE()
where BarCode='{2}'
update ICSToCheck
set ActualQty=ActualQty-{3}
where ToCheckNO='{4}' and ItemCode='{5}' and StorageCode='{6}'
update ICSToCheck
set ActualQty=ActualQty+{0}
where ToCheckNO='{4}' and ItemCode='{5}' and StorageCode='{6}'";
sql = string.Format(sql, BarCodeQty, userCode, BarCode, Convert.ToDecimal(dt.Rows[0]["BarCodeQty"].ToString()), CheckNo, INVCode, WHCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("盘点子表复盘数量更新失败!");
}
}
#endregion
if (EditType == "修正")
{
#region 检查原条码数量
sql = @"select LotQty from ICSWareHouseLotInfo
where LotNO='{0}' AND WorkPoint='{1}'";
sql = string.Format(sql, BarCode, WorkPointCode);
DataTable lotdt = SQlReturnData(sql, cmd);
ItemLotQTY = Convert.ToDecimal(lotdt.Rows[0]["LotQty"]);
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY-{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'
update ICSWareHouseInfo
set QTY=QTY+{5},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, LotQty, DateTime.Now, INVCode, WHCode, BinCode, BarCodeQty);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表库存调整失败!");
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"update ICSWareHouseLotInfo set
LotQty={0}
where LotNO='{1}'";
sql = string.Format(sql, BarCodeQty, BarCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存表库存调整失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
if (BarCodeQty > ItemLotQTY)
{
sql = @"insert into ICSWareHouseLotInfoLog(ID,TransNO,TransLine,ITEMCODE,LotNO,FRMStorageCODE,FRMStackCODE,TOStorageCODE,TOStackCODE,TransQTY,TransType,BusinessCode,MUSER,MUSERName,MTIME,WorkPoint)
Values
(NEWID(),'{0}','{1}','{2}','{3}','{4}','{5}',null,null,'{6}','盈','盘点','{7}','{8}',GETDATE(),'{9}')";
}
else
{
sql = @"insert into ICSWareHouseLotInfoLog(ID,TransNO,TransLine,ITEMCODE,LotNO,FRMStorageCODE,FRMStackCODE,TOStorageCODE,TOStackCODE,TransQTY,TransType,BusinessCode,MUSER,MUSERName,MTIME,WorkPoint)
Values
(NEWID(),'{0}','{1}','{2}','{3}','{4}','{5}',null,null,'{6}','亏','盘点','{7}','{8}',GETDATE(),'{9}')";
}
sql = string.Format(sql, CheckNo, "1", INVCode, BarCode, WHCode, BinCode, BarCodeQty - ItemLotQTY, userCode, userName, WorkPointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
return isSuccess;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 验证条码信息(其他出库)
/// </summary>
/// <param name="lotNo"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotNoForOtherOut(string lotNo, string workpointCode, string dsconn)
{
string sql = @"select LotNO from ICSWareHouseLotInfo
WHERE LotNO='{0}' AND WorkPoint='{1}'";
sql = string.Format(sql, lotNo, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证条码信息(其他入库)
/// </summary>
/// <param name="lotNo"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotNoForOtherIN(string TransferNO, string lotNo, string workpointCode, string dsconn)
{
string sql = @"select A.LotNO,B.cCode from ICSITEMLot A
LEFT JOIN ICSRdrecord09s B
ON B.cCode=A.TransNO AND B.iRSRowNO=A.TransLine AND FREE3='入'
WHERE A.LotNO='{0}' AND A.WorkPoint='{1}' AND B.cCode='{2}'";
sql = string.Format(sql, lotNo, workpointCode, TransferNO);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 验证物料退料库位信息
/// </summary>
/// <param name="Stack"></param>
/// <param name="WHCode"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckStackCodeForBack(string Stack, string workpointCode, string dsconn)
{
string sql = @"select B.StorageCode from ICSStack A
LEFT JOIN ICSStorage B
ON B.Serial=A.Storage_Serial
WHERE StackCode='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, Stack, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取其他出库单源头单据信息
/// </summary>
/// <param name="TransferNO"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckCodeForOtherOut(string TransferNO, string workpointCode, string dsconn)
{
string sql = @"select iRSRowNO
,cInvCode
,B.INVNAME
,B.INVSTD
,ISNULL(A.iQuantity,0) AS iQuantity
,ISNULL(A.iFQuantity,0) AS iFQuantity
,B.INVUOM
,A.cWhCode
from ICSRdrecord09s A
LEFT JOIN ICSINVENTORY B
ON B.INVCODE=A.cInvCode
WHERE cCode='{0}' AND Free3='出'";
sql = string.Format(sql, TransferNO);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取条码信息(其他出库)
/// </summary>
/// <param name="BarCode"></param>
/// <param name="WorkPointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable GetLotDataForOtherOut(string BarCode, string WorkPointCode, string dsconn)
{
string sql = @"select A.LotNO
,A.WHCode
,A.INVCode
,B.INVNAME
,ISNULL(A.LotQty,0) AS LotQty
,A.BinCode
from ICSWareHouseLotInfo A
left join ICSINVENTORY B
ON B.INVCODE=A.INVCode
WHERE A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, WorkPointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取条码信息(其他入库)
/// </summary>
/// <param name="BarCode"></param>
/// <param name="WorkPointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable GetLotDataForOtherIN(string BarCode, string WorkPointCode, string dsconn)
{
string sql = @"select A.LotNO
,C.cWhCode
,A.ItemCode
,B.INVNAME
,ISNULL(A.LotQty,0) AS LotQty
from ICSITEMLot A
left join ICSINVENTORY B
ON B.INVCODE=A.ItemCode
left join ICSRdrecord09s C
on C.cCode=A.TransNO AND C.iRSRowNO=A.TransLine AND FREE3='入'
WHERE A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, WorkPointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 其他出库
/// </summary>
/// <param name="POCode"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="bincodeList"></param>
/// <param name="userCodt"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool WareHouseOtherOut(SqlConnection sqlConnection, SqlTransaction trans, string[] barcodeList, string OutType, string userCode, string userName, string workpointCode, string Type, string dsconn)
{
string sql = "";
string BarCode = "";
string cBarCode = "";
string Errormessage = "";
decimal LotQTY = 0;
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < barcodeList.Length; i++)
{
BarCode = barcodeList[i];
if (cBarCode == "")
{
cBarCode += "'" + barcodeList[i] + "'";
}
else
{
cBarCode += ",'" + barcodeList[i] + "'";
}
string INVCode = "";
string WHCode = "";
string BinCode = "";
string TranNo = "";
string TranLine = "";
#region 获取仓库库位等信息
sql = @"select WHCode
,BinCode
,INVCode
,A.LotQty
,B.TransNO
,B.TransLine
from ICSWareHouseLotInfo A
left join ICSITEMLot B
on B.LotNO=A.LotNO
where A.LotNO='{0}' AND A.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
LotQTY = Convert.ToDecimal(dt.Rows[0]["LotQty"].ToString());
INVCode = dt.Rows[0]["INVCode"].ToString();
BinCode = dt.Rows[0]["BinCode"].ToString();
WHCode = dt.Rows[0]["WHCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY-{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, LotQTY, DateTime.Now, INVCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表更新失败!");
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"update ICSWareHouseLotInfo
set LotQty=LotQty-{0}
where LotNO='{1}'
and WorkPoint='{2}'";
sql = string.Format(sql, LotQTY, BarCode, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表更新失败!");
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}','{9}','{10}','',''
,{4},null,'{5}','其他出库','{6}','{7}',GETDATE(),'{8}','','','','','未回写')";
sql = string.Format(sql, "", "", INVCode, BarCode, LotQTY, Type, userCode, userName, workpointCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (message == "Open")
{
#region WEBAPI接口调用
// try
// {
// sql = @"select INVCode,WHCode,A.LotQty,B.VenderLotNO from ICSWareHouseLotInfo A
// LEFT JOIN ICSITEMLot B
// ON B.LotNO=A.LotNO
// where A.LotNO in ({0})
// Order by INVCode,WHCode";
// sql = string.Format(sql, cBarCode);
// DataTable dt = SQlReturnData(sql, cmd);
// List<RdRecord09> contextlist = new List<RdRecord09>();
// RdRecord09 context = new RdRecord09();
// List<rdrecords09> contextlists = new List<rdrecords09>();
// rdrecords09 contexts = new rdrecords09();
// string WareHouse = "";
// string ItemCode = "";
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// if (WareHouse != dt.Rows[i]["WHCode"].ToString() || ItemCode != dt.Rows[i]["INVCode"].ToString())
// {
// if (i > 0)
// {
// context.list = contextlists;
// contextlist.Add(context);
// }
// context = new RdRecord09();
// WareHouse = dt.Rows[0]["WHCode"].ToString();
// ItemCode = dt.Rows[0]["INVCode"].ToString();
// context.cWhCode = dt.Rows[0]["WHCode"].ToString();
// context.cRdCode = OutType;
// context.UserCode = userCode;
// contextlists = new List<rdrecords09>();
// }
// contexts = new rdrecords09();
// contexts.iQuantity = Convert.ToDecimal(dt.Rows[0]["LotQty"].ToString());
// contexts.cInvCode = dt.Rows[0]["INVCode"].ToString();
// contextlists.Add(contexts);
// if (i == dt.Rows.Count - 1)
// {
// context.list = contextlists;
// contextlist.Add(context);
// }
// }
// string Istr = JsonConvert.SerializeObject(contextlist);
// string iresult = HttpPost(IOtherOut, Istr);
// Result OtherOutResult = new Result();
// OtherOutResult = JsonConvert.DeserializeObject<Result>(iresult);
// if (OtherOutResult.code != "200")
// {
// throw new Exception(OtherOutResult.msg);
// }
// }
// catch (Exception ex)
// {
// throw new Exception(ex.Message);
// }
#endregion
}
return isSuccess;
}
/// <summary>
/// 验证条码信息(物料退料)
/// </summary>
/// <param name="BarCode"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckLotnoForINVIN(string BarCode, string workpointCode, string dsconn)
{
string sql = @"select A.VouchCode
,A.VouchRow
,A.InvCode
,C.INVNAME
,C.INVSTD
,D.LOTNO AS WHLOTNO
,ISNULL(B.LOTQTY,0) LOTQTY
,ISNULL(A.Quantity,0) Quantity
,ISNULL(A.HasQuantity,0) HasQuantity
,C.INVUOM
,A.WHCode
,ISNULL(E.IsMROItem,0) AS IsMROItem
from ICSMaterialPick A
LEFT JOIN ICSITEMLot B
ON B.TransNO=A.VouchCode AND B.TransLine=A.VouchRow
LEFT JOIN ICSINVENTORY C
ON C.INVCODE=A.InvCode
LEFT JOIN ICSWareHouseLotInfo D
ON D.LOTNO=B.LOTNO
LEFT JOIN ICSMaterial E
ON E.VouchCode=A.VouchCode
WHERE B.LotNO='{0}' AND A.WorkPoint='{1}' AND A.MoveType='退料'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取其他入库单源头单据信息
/// </summary>
/// <param name="TransferNO"></param>
/// <param name="workpointCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable CheckCodeForOtherIN(string TransferNO, string workpointCode, string dsconn)
{
string sql = @"select iRSRowNO
,cInvCode
,B.INVNAME
,B.INVSTD
,ISNULL(A.iQuantity,0) AS iQuantity
,ISNULL(A.iFQuantity,0) AS iFQuantity
,B.INVUOM
,A.cWhCode
from ICSRdrecord09s A
LEFT JOIN ICSINVENTORY B
ON B.INVCODE=A.cInvCode
WHERE cCode='{0}' AND Free3='入'";
sql = string.Format(sql, TransferNO);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 获取用户信息
/// </summary>
/// <param name="UserCode"></param>
/// <param name="WorkPoint"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static DataTable GetUserInfo(string UserCode, string WorkPoint, string dsconn)
{
string sql = @"select UserCode,UserName from Sys_User
where UserCode='{0}' AND WorkPointCode='{1}'";
sql = string.Format(sql, UserCode, WorkPoint);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
/// <summary>
/// 其他入库
/// </summary>
/// <param name="POCode"></param>
/// <param name="porowList"></param>
/// <param name="poqtyList"></param>
/// <param name="barcodeList"></param>
/// <param name="barcodeqtyList"></param>
/// <param name="bincodeList"></param>
/// <param name="userCodt"></param>
/// <param name="workpointCode"></param>
/// <param name="Type"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static bool WareHouseOtherIN(SqlConnection sqlConnection, SqlTransaction trans, string POCode, string[] porowList, string[] poqtyList, string[] barcodeRowList, string[] barcodeList, string[] barcodeqtyList, string[] bincodelist, string userCode, string userName, string workpointCode, string Type, string dsconn)
{
string sql = "";
string BarCode = "";
decimal BarCodeQty = 0;
string BarCodeRow = "";
string cBarCode = "";
string Errormessage = "";
string PORow = "";
decimal POQty = 0;
string NewBinCode = "";
string ConnectString = dsconn;
int result = 0;
bool isSuccess = true;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < porowList.Length; i++)
{
#region 更新ICSRdrecord09s表
PORow = porowList[i];
POQty = Convert.ToDecimal(poqtyList[i]);
sql = @"update ICSRdrecord09s set iQuantity=iQuantity+{0}
where cCode='{1}' and iRSRowNO='{2}'";
sql = string.Format(sql, POQty, POCode, PORow);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("源头单据更新失败!");
}
#endregion
}
for (int i = 0; i < barcodeList.Length; i++)
{
string INVCode = "";
string WHCode = "";
string BinCode = "";
string TranNo = "";
string TranLine = "";
BarCode = barcodeList[i];
BarCodeQty = Convert.ToDecimal(barcodeqtyList[i]);
BarCodeRow = barcodeRowList[i];
BinCode = bincodelist[i];
if (cBarCode == "")
{
cBarCode += "'" + barcodeList[i] + "'";
}
else
{
cBarCode += ",'" + barcodeList[i] + "'";
}
#region 获取仓库库位等信息
sql = @"select A.cWhCode
,B.ItemCode
,B.TransNO
,B.TransLine
from ICSRdrecord09s A
left join ICSITEMLot B
on B.TransNO=A.cCode AND B.TransLine=A.iRSRowNO
where B.LotNO='{0}' AND B.WorkPoint='{1}'";
sql = string.Format(sql, BarCode, workpointCode);
DataTable dt = SQlReturnData(sql, cmd);
if (dt.Rows.Count == 0)
{
throw new Exception("获取仓库信息失败!");
}
else
{
INVCode = dt.Rows[0]["ItemCode"].ToString();
WHCode = dt.Rows[0]["cWhCode"].ToString();
TranNo = dt.Rows[0]["TransNO"].ToString();
TranLine = dt.Rows[0]["TransLine"].ToString();
}
#endregion
#region 更新ICSWareHouseInfo表
sql = @"update ICSWareHouseInfo
set QTY=QTY+{0},MTIME='{1}'
where INVCode='{2}' AND WHCode='{3}' AND BinCode='{4}'";
sql = string.Format(sql, BarCodeQty, DateTime.Now, INVCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
sql = @"insert into ICSWareHouseInfo
values
((select Serial from ICSStorage where StorageCode='{0}')
,'{0}'
,(SELECT Serial FROM ICSStack WHERE StackCode='{1}')
,'{1}'
,(SELECT ID FROM ICSINVENTORY WHERE INVCODE='{2}')
,'{2}',{3},'{4}','{5}','{6}',GETDATE(),NULL)";
sql = string.Format(sql, WHCode, BinCode, INVCode, BarCodeQty, workpointCode, userCode, userName);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存主表存入失败!");
}
}
#endregion
#region 更新ICSWareHouseLotInfo表
sql = @"update ICSWareHouseLotInfo
set LotQty=LotQty+{0}
where LotNO='{1}'
and WorkPoint='{2}'";
sql = string.Format(sql, BarCodeQty, BarCode, workpointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
sql = @"insert into ICSWareHouseLotInfo
Values
(NEWID(),'{0}',
(select Serial from ICSStorage where StorageCode='{1}'),
'{1}',
(SELECT Serial FROM ICSStack WHERE StackCode='{2}'),
'{2}',
(SELECT ID FROM ICSINVENTORY WHERE INVCODE='{3}'),
'{3}',{4},GETDATE(),'{5}','{6}','{7}',GETDATE(),'','','')";
sql = string.Format(sql, BarCode, WHCode, BinCode, INVCode, BarCodeQty, workpointCode, userCode, userName);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("库存子表存入失败!");
}
}
#endregion
#region 存入ICSWareHouseLotInfoLog表(日志)
sql = @"insert into ICSWareHouseLotInfoLog
Values
(NEWID(),'{0}','{1}','{2}','{3}','','','{9}','{10}'
,{4},null,'{5}','其他入库','{6}','{7}',GETDATE(),'{8}','','','','','')";
sql = string.Format(sql, POCode, BarCodeRow, INVCode, BarCode, BarCodeQty, Type, userCode, userName, workpointCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (isSuccess && result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (message == "Open")
{
#region 接口调用
// try
// {
// sql = @"select ID,
// cCode,
// cWhCode,
// cInvCode,
// AutoID,
// cBatch
// from ICSRdrecord09s
// where cCode='{0}' AND Free3='入'
// ORDER BY iRSRowNO";
// sql = string.Format(sql, POCode);
// DataTable dt = SQlReturnData(sql, cmd);
// List<ZYPDAServiceForOtherIN.Rdrecord08> contextList = new List<ZYPDAServiceForOtherIN.Rdrecord08>();
// List<ZYPDAServiceForOtherIN.Rdrecords08> contextLists = new List<ZYPDAServiceForOtherIN.Rdrecords08>();
// ZYPDAServiceForOtherIN.Rdrecord08 context = new ZYPDAServiceForOtherIN.Rdrecord08();
// ZYPDAServiceForOtherIN.Rdrecords08 contexts = new ZYPDAServiceForOtherIN.Rdrecords08();
// string WareHouse = "";
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// if (WareHouse != dt.Rows[i]["cWhCode"].ToString())
// {
// if (i > 0)
// {
// context.bodyList = contextLists.ToArray();
// contextList.Add(context);
// }
// context = new ZYPDAServiceForOtherIN.Rdrecord08();
// WareHouse = dt.Rows[i]["cWhCode"].ToString();
// context.ID = dt.Rows[i]["ID"].ToString();
// context.cCode = dt.Rows[i]["cCode"].ToString();
// context.cWhCode = dt.Rows[i]["cWhCode"].ToString();
// context.UserCode = userCode;
// contextLists = new List<ZYPDAServiceForOtherIN.Rdrecords08>();
// }
// contexts = new ZYPDAServiceForOtherIN.Rdrecords08();
// contexts.cInvCode = dt.Rows[i]["cInvCode"].ToString();
// contexts.iQuantity = Convert.ToDecimal(poqtyList[i].ToString());
// contexts.cBatch = dt.Rows[i]["cBatch"].ToString();
// contexts.AutoID = dt.Rows[i]["AutoID"].ToString();
// contextLists.Add(contexts);
// if (i == dt.Rows.Count - 1)
// {
// context.bodyList = contextLists.ToArray();
// contextList.Add(context);
// }
// }
// ZYPDAServiceForOtherIN.VerifiRd08Client client = new ZYPDAServiceForOtherIN.VerifiRd08Client();
// ZYPDAServiceForOtherIN.Result cresult = new ZYPDAServiceForOtherIN.Result();
// cresult = client.Verifi08(contextList.ToArray());
// if (cresult.IsSuccess == false)
// {
// throw new Exception(cresult.MESSAGE);
// }
// }
// catch (Exception ex)
// {
// throw new Exception(ex.Message);
// }
#endregion
}
return isSuccess;
}
/// <summary>
/// 先进先出批次管控
/// </summary>
/// <param name="LotNo"></param>
/// <param name="WorkPoitCode"></param>
/// <param name="dsconn"></param>
/// <returns></returns>
public static string CanOut(string LotNo, string WorkPoitCode, string dsconn)
{
try
{
string sql = @"DECLARE @CountNO INT
SET @CountNO=(
SELECT
COUNT(LotNO)
FROM
ICSWareHouseLotInfo a
WHERE CONVERT(varchar(100), MTIME, 23)<(SELECT CONVERT(varchar(100), MTIME, 23) FROM ICSWareHouseLotInfo WHERE INVCode=a.INVCode AND LotNO='{0}' AND WorkPoint='{1}' AND ISNULL(LotQty,0)>0)
AND WorkPoint='{1}' AND ISNULL(LotQty,0)>0
)
IF @CountNO>0
BEGIN
SELECT TOP 1 CASE EnumValue WHEN '0000501' THEN '1' WHEN '0000502' THEN '2' ELSE '3' END AS Type
FROM Sys_EnumValues
WHERE EnumKey='00005' AND StartFlag='1'
ORDER BY ID DESC
END
ELSE
BEGIN
SELECT @CountNO
END";
//0 - 已经是最早的批次
//1 - 不管控
//2 - 提醒
//3 - 限制
sql = string.Format(sql, LotNo, WorkPoitCode);
DataTable whDt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
if (whDt == null || whDt.Rows.Count == 0)
{
throw new Exception("查询管控信息失败!!");
}
else
return whDt.Rows[0][0].ToString();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 接口调用方法
/// </summary>
/// <param name="url"></param>
/// <param name="body"></param>
/// <returns></returns>
public static string HttpPost(string url, string body)
{
try
{
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
request.ContentType = "application/json; charset=utf-8";
byte[] buffer = encoding.GetBytes(body);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
{
return reader.ReadToEnd();
}
}
catch (WebException ex)
{
var res = (HttpWebResponse)ex.Response;
StringBuilder sb = new StringBuilder();
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
sb.Append(sr.ReadToEnd());
//string ssb = sb.ToString();
throw new Exception(sb.ToString());
}
}
#region
public static DataTable FormINVSer(string INVCode, string WorkPoint, string dsconn)
{
string sql = @"select A.WHCode
, A.BinCode
, A.INVCode
, B.INVNAME
, B.INVSTD
, A.LotQty
,C.BinQTY
,D.WHLotQTY
,E.VenderLotNO
from ICSWareHouseLotInfo A
LEFT JOIN ICSINVENTORY B
ON B.INVCODE=A.INVCode
LEFT JOIN ICSITEMLot E
ON E.LotNO=A.LotNO
LEFT JOIN (select SUM(LotQty) as BinQTY,BinCode from ICSWareHouseLotInfo
where BinCode IN
(select BinCode from ICSWareHouseLotInfo
where INVCode=
(select INVCode from ICSWareHouseLotInfo
where LotNO='{0}'
AND WorkPoint='{1}')
AND WorkPoint='{1}')
AND INVCode=
(select INVCode from ICSWareHouseLotInfo
where LotNO='{0}'
AND WorkPoint='{1}') GROUP BY BinCode) C
ON C.BinCode=A.BinCode
LEFT JOIN (select Sum(LotQty) AS WHLotQTY,INVCode from ICSWareHouseLotInfo
where INVCode =
(select INVCode from ICSWareHouseLotInfo
where LotNO='{0}'
AND WorkPoint='{1}') GROUP BY INVCode) D
ON D.INVCode=A.INVCode
WHERE A.INVCode=
(select ItemCode from ICSITEMLot
where LotNO='{0}'
AND WorkPoint='{1}')
AND A.WorkPoint='{1}' AND A.LotQty > 0";
sql = string.Format(sql, INVCode, WorkPoint);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
public static DataTable FormBinSer(string BinCode, string WorkPoint, string dsconn)
{
string sql = @"SELECT A.WHCode, A.BinCode, A.INVCode, B.INVNAME, B.INVSTD, A.LotQty, B.INVUOM,C.VenderLotNO
FROM ICSWareHouseLotInfo A LEFT JOIN ICSINVENTORY B ON A.INVCode = B.INVCODE
LEFT JOIN ICSITEMLot C ON C.LotNO=A.LotNO
WHERE 1=1 AND A.BinCode = '{0}' AND A.WorkPoint = '{1}' AND A.LotQty > 0 ";
sql = string.Format(sql, BinCode, WorkPoint);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
public static DataTable FormLotSer(string LotNO, string WorkPoint, string dsconn)
{
string sql = @"SELECT A.WHCode, A.BinCode, A.INVCode, B.INVNAME, B.INVSTD, A.LotQty, B.INVUOM,
QTY = (SELECT SUM(C.QTY) FROM ICSWareHouseInfo C LEFT JOIN ICSWareHouseLotInfo D ON C.INVCode = D.INVCode
WHERE 1=1 AND D.LotNO = '{0}' AND D.WorkPoint = '{1}')
FROM ICSWareHouseLotInfo A LEFT JOIN ICSINVENTORY B ON A.INVCode = B.INVCODE
WHERE 1=1 AND A.LotNO = '{0}' AND A.WorkPoint = '{1}' ";
sql = string.Format(sql, LotNO, WorkPoint);
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
return dt;
}
#endregion
}
}