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

568 lines
28 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ICSSoft.Frame.Data.Entity;
using ICSSoft.Base.Config.DBHelper;
using System.Data;
using ICSSoft.Base.Config.AppConfig;
using System.Data.SqlClient;
using Newtonsoft.Json;
using ICSSoft.Entity;
using System.Net;
using System.IO;
using ICSSoft.Entity.AssemVouch;
namespace ICSSoft.Frame.Data.DAL
{
public class ICSWBSSpecailTransferDAL
{
static string message = System.Configuration.ConfigurationSettings.AppSettings["IsOpen"].ToString();
static string APIURL = System.Configuration.ConfigurationSettings.AppSettings["APIURL"].ToString();
static string IAssemVouch = APIURL + "APIConfirmAssemVouch";
public static void AddAndEdit(List<ICSWBSSpecialTransfer> InfoList, string dsconn)
{
FramDataContext db = new FramDataContext(dsconn);
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();
try
{
foreach (ICSWBSSpecialTransfer TransferInfo in InfoList)
{
var line = new ICSWBSSpecialTransfer();
line.ProjectType = TransferInfo.ProjectType;
line.WareHouseCode = TransferInfo.WareHouseCode;
line.LotNo = TransferInfo.LotNo;
line.BATCHNew = TransferInfo.BATCHNew;
line.BATCHOld = TransferInfo.BATCHOld;
line.INVCOENew = TransferInfo.INVCOENew;
line.INVCOEOld = TransferInfo.INVCOEOld;
line.TransferReason = TransferInfo.TransferReason;
line.MUSER = TransferInfo.MUSER;
line.MUSERNAME = TransferInfo.MUSERNAME;
line.MTIME = TransferInfo.MTIME;
line.WorkPoint = TransferInfo.WorkPoint;
line.EATTRIBUTE1 = TransferInfo.EATTRIBUTE1;
db.ICSWBSSpecialTransfer.InsertOnSubmit(line);
db.SubmitChanges();
}
db.Transaction.Commit();
}
catch (Exception ex)
{
db.Transaction.Rollback();
throw ex;
}
}
public static void UpdateTransfer(string ItemCode, string WbsOld, string WbsNew, string TransferQTY, string WareHouse, string dsonn)
{
string sql = @"select * from ICSWBS
WHERE ItemCode='" + ItemCode + "'";
sql += " AND WBSCode='" + WbsNew + "'";
sql = string.Format(sql);
DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
if (dt.Rows.Count == 0)
{
sql = @"Insert into ICSWBS VALUES
('" + ItemCode + "','" + WbsNew + "','" + TransferQTY + "','" + WareHouse + "','" + AppConfig.WorkPointCode + "','" + AppConfig.UserId + "','" + AppConfig.UserName + "','" + DateTime.Now + "','')";
}
else
{
sql = @"Update ICSWBS set ItemNumber=ItemNumber+" + TransferQTY + " where WBSCode='" + WbsNew + "'";
}
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
string strsql = @"Update ICSWBS set ItemNumber=ItemNumber-" + TransferQTY + " where WBSCode='" + WbsOld + "'";
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, strsql);
}
#region 非标件WBS转换
public static void UpdateWBS(SqlConnection sqlConnection, SqlTransaction trans, string LotCod, string QtyCode, string IDCode, string dsconn)
{
decimal LotQTY = 0;
string LotNo = "";
string NewLotNo = "";
string cIDCode = "";
string TransID = "";
string invcode = "";
string batch = "";
string MinvId = "";//物料ID
string sql = "";
int result = 0;
string[] Lotcodelist = LotCod.Split(',');
string[] QtyCodeList = QtyCode.Split(',');
string[] IDCodeList = IDCode.Split(',');
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.Transaction = trans;
try
{
for (int i = 0; i < IDCodeList.Length; i++)
{
if (cIDCode == "")
{
cIDCode += "'" + IDCodeList[i] + "'";
}
else
{
cIDCode += ",'" + IDCodeList[i] + "'";
}
}
sql = @"select C.LotNO
,A.TransNO
,A.TransLine
,B.INVCODE
,C.INVCOENew
,ISNULL(B.LotQty, 0) as LOTQTY
,B.WHCode
,A.VenderLotNO
,C.BATCHNew,ISNULL(A.EATTRIBUTE3, 0.00) EATTRIBUTE3
from ICSWBSSpecialTransfer C
LEFT JOIN ICSITEMLot A ON C.LotNo=A.LotNO AND A.WorkPoint=C.WorkPoint
LEFT JOIN ICSWareHouseLotInfo B ON A.LotNO=B.LotNO AND A.WorkPoint=B.WorkPoint
WHERE C.ID IN ({0}) AND A.WorkPoint='{1}'
ORDER BY A.VenderLotNO,B.INVCODE ";
sql = string.Format(sql, cIDCode, AppConfig.WorkPointCode);
DataTable dw = SQlReturnData(sql, cmd);
if (dw == null || dw.Rows.Count <= 0)
return;
List<AssemVouch> contextlist = new List<AssemVouch>();
AssemVouch context = new AssemVouch();
List<AssemVouchs> contextlists = new List<AssemVouchs>();
AssemVouchs contexts = new AssemVouchs();
string cWBC = "";
string cBatch = "";
string transfer = "";
string cInvcode = "";
for (int i = 0; i < dw.Rows.Count; i++)
{
if (i > 0)
{
context.list = contextlists;
contextlist.Add(context);
}
context = new AssemVouch();
context.UserCode = AppConfig.UserCode;
context.cTVCode = dw.Rows[i]["TransNO"].ToString();
context.cIWhCode = dw.Rows[i]["WHCode"].ToString();
context.cOWhCode = dw.Rows[i]["WHCode"].ToString();
context.UserCode = AppConfig.UserCode;
contextlists = new List<AssemVouchs>();
contexts = new AssemVouchs();
//批号
if (dw.Rows[i]["BATCHNew"].ToString() == "")
{
contexts.cTVBatchAfter = dw.Rows[i]["VenderLotNO"].ToString();
}
else
{
contexts.cTVBatchAfter = dw.Rows[i]["BATCHNew"].ToString();
}
contexts.cTVBatchBefore = dw.Rows[i]["VenderLotNO"].ToString();
//料品
if (dw.Rows[i]["INVCOENew"].ToString() == "")
{
contexts.cInvCodeAfter = dw.Rows[i]["INVCODE"].ToString();
}
else
{
contexts.cInvCodeAfter = dw.Rows[i]["INVCOENew"].ToString();
}
contexts.cInvCodeBefore = dw.Rows[i]["INVCODE"].ToString();
contexts.iQuantity = Convert.ToDecimal(dw.Rows[i]["LOTQTY"].ToString());
contexts.iNum = Convert.ToDecimal(dw.Rows[i]["LOTQTY"].ToString()) * Convert.ToDecimal(dw.Rows[i]["EATTRIBUTE3"].ToString());
contexts.cWhCode = dw.Rows[i]["WHCode"].ToString();
contexts.bAVType = "转换";
contextlists.Add(contexts);
if (i == dw.Rows.Count - 1)
{
context.list = contextlists;
contextlist.Add(context);
}
}
sql = @"UPDATE ICSWBSSpecialTransfer SET LotStatus = '已审核' WHERE ID IN ({0}) AND WorkPoint = '{1}' ";
sql = string.Format(sql, cIDCode, AppConfig.WorkPointCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception("审核状态更新失败!");
}
for (int i = 0; i < IDCodeList.Length; i++)
{
LotNo = Lotcodelist[i];
TransID = IDCodeList[i];
LotQTY = Convert.ToDecimal(QtyCodeList[i]);
string sqltr = @"select LotNo,NewLotNo,INVCOENew,INVCOEOld,BATCHNew,BATCHOld,WareHouseCode from ICSWBSSpecialTransfer
where ID='{0}'AND WorkPoint='{1}'";
sqltr = string.Format(sqltr, TransID, AppConfig.WorkPointCode);
DataTable dttr = SQlReturnData(sqltr, cmd);
if (dttr != null || dttr.Rows.Count != 0)
{
invcode = dttr.Rows[0]["INVCOENew"].ToString();
batch = dttr.Rows[0]["BATCHNew"].ToString();
NewLotNo = dttr.Rows[0]["NewLotNo"].ToString();
}
#region 物料更新
if (invcode != "")
{
string WHGUID = "";
string WHCode = "";
string BinGUID = "";
string BinCode = "";
string INVGUID = "";
string INVCode = "";
sql = @"select ID,INVCODE from ICSINVENTORY
where INVCODE='{0}'AND WorkPoint='{1}'";
sql = string.Format(sql, invcode, AppConfig.WorkPointCode);
DataTable dtc = DBHelper.ExecuteDataset(AppConfig.GetDataBaseConnectStringByKey("[DB.SYS]"), CommandType.Text, sql).Tables[0];
if (dtc.Rows.Count > 0)
{
MinvId = dtc.Rows[0]["ID"].ToString();
}
string sqlv = @"select * from ICSWareHouseLotInfo
where lotNO='{0}'AND WorkPoint='{1}'";
sqlv = string.Format(sqlv, LotNo, AppConfig.WorkPointCode);
DataTable dtv = SQlReturnData(sqlv, cmd);
if (dtv != null || dtv.Rows.Count != 0)
{
WHGUID = dtv.Rows[0]["WHGUID"].ToString();
WHCode = dtv.Rows[0]["WHCode"].ToString();
BinGUID = dtv.Rows[0]["BinGUID"].ToString();
BinCode = dtv.Rows[0]["BinCode"].ToString();
INVGUID = dtv.Rows[0]["INVGUID"].ToString();
INVCode = dtv.Rows[0]["INVCode"].ToString();
}
//原库存主表
string sqls = @"select * from ICSWareHouseInfo
where INVGUID='{0}' AND WHGUID='{1}' AND BinGUID='{2}' AND WorkPoint='{3}'";
sqls = string.Format(sqls, INVGUID, WHGUID, BinGUID, AppConfig.WorkPointCode);
DataTable dt = SQlReturnData(sqls, cmd);
//目标库存主表
string sqly = @"select * from ICSWareHouseInfo
where INVGUID='{0}' AND WHGUID='{1}' AND BinGUID='{2}' AND WorkPoint='{3}'";
sqly = string.Format(sqly, MinvId, WHGUID, BinGUID, AppConfig.WorkPointCode);
DataTable dy = SQlReturnData(sqly, cmd);
//更新原库存数据
if (dt.Rows.Count != 0)
{
#region 更新原条码ICSWareHouseLotInfo表
string sqln = @"Update ICSWareHouseLotInfo
SET LotQty=0 WHERE LotNO='" + LotNo + "' AND WorkPoint='" + AppConfig.WorkPointCode + "'";
sqln = string.Format(sqln);
cmd.CommandText = sqln;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception("库存物料更新失败!");
}
#endregion
string sqlw = @"Update ICSWareHouseInfo
SET QTY=QTY-{0} where INVGUID='{1}' AND WHGUID='{2}' AND BinGUID='{3}' AND WorkPoint='{4}'";
sqlw = string.Format(sqlw, LotQTY, INVGUID, WHGUID, BinGUID, AppConfig.WorkPointCode);
cmd.CommandText = sqlw;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception("库存主表物料更新失败!");
}
#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, LotNo, LotQTY, "形态", AppConfig.UserCode, AppConfig.UserName, AppConfig.WorkPointCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
//更新目标库存数据
if (dy.Rows.Count != 0)
{
string sqlh = @"Update ICSWareHouseInfo
SET QTY=QTY+{0} where INVGUID='{1}' AND WHGUID='{2}' AND BinGUID='{3}' AND WorkPoint='{4}'";
sqlh = string.Format(sqlh, LotQTY, MinvId, WHGUID, BinGUID, AppConfig.WorkPointCode);
cmd.CommandText = sqlh;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception("库存主表物料更新失败!");
}
#region 存入ICSWareHouseLotInfo表
sql = @"insert into ICSWareHouseLotInfo
Values
(NEWID(),'{0}','{1}','{2}','{3}','{4}','{5}','{6}',{7},GETDATE(),'{9}','{10}','{11}',GETDATE(),'{13}','','')";
sql = string.Format(sql, NewLotNo, WHGUID, WHCode, BinGUID, BinCode, MinvId, invcode, LotQTY, DateTime.Now, AppConfig.WorkPointCode, AppConfig.UserCode, AppConfig.UserName, DateTime.Now, "形态转换", 0);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (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, NewLotNo, LotQTY, "形态", AppConfig.UserCode, AppConfig.UserName, AppConfig.WorkPointCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
//更新目标库存数据
if (dy.Rows.Count == 0)
{
#region 存入ICSWareHouseLotInfo表
sql = @"insert into ICSWareHouseLotInfo
Values
(NEWID(),'{0}','{1}','{2}','{3}','{4}','{5}','{6}',{7},GETDATE(),'{9}','{10}','{11}',GETDATE(),'{13}','','')";
sql = string.Format(sql, NewLotNo, WHGUID, WHCode, BinGUID, BinCode, MinvId, invcode, LotQTY, DateTime.Now, AppConfig.WorkPointCode, AppConfig.UserCode, AppConfig.UserName, DateTime.Now, "形态转换", 0);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception("库存物料更新失败!");
}
#endregion
#region 更新原条码ICSWareHouseLotInfo表
string sqln = @"Update ICSWareHouseLotInfo
SET LotQty=0 WHERE LotNO='" + LotNo + "' AND WorkPoint='" + AppConfig.WorkPointCode + "'";
sqln = string.Format(sqln);
cmd.CommandText = sqln;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception("库存物料更新失败!");
}
#endregion
#region 存入ICSWareHouseInfo表
sql = @"insert into ICSWareHouseInfo
Values
('{0}','{1}','{2}','{3}','{4}','{5}',{6},'{7}','{8}','{9}','{10}','')";
sql = string.Format(sql, WHGUID, WHCode, BinGUID, BinCode, MinvId, invcode, LotQTY, AppConfig.WorkPointCode, AppConfig.UserCode, AppConfig.UserName, DateTime.Now);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (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, NewLotNo, LotQTY, "形态", AppConfig.UserCode, AppConfig.UserName, AppConfig.WorkPointCode, WHCode, BinCode);
cmd.CommandText = sql;
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
throw new Exception("日志表存入失败!");
}
#endregion
}
}
#endregion
#region 批次更新
// if (batch!="")
// {
// sql = @"Update ICSITEMLot
// SET VenderLotNO='" + batch + "' WHERE LotNO='" + LotNo + "'AND WorkPoint='" + AppConfig.WorkPointCode + "'";
// sql = string.Format(sql);
// cmd.CommandText = sql;
// result = cmd.ExecuteNonQuery();
// if (result <= 0)
// {
// throw new Exception("条码批次更新失败!");
// }
// }
#endregion
}
if (message == "true")
{
#region 接口调用
string Istr = JsonConvert.SerializeObject(contextlist);
string iresult = HttpPost(IAssemVouch, Istr);
Result INVDismResult = new Result();
INVDismResult = JsonConvert.DeserializeObject<Result>(iresult);
if (INVDismResult.code != "200")
{
throw new Exception(INVDismResult.msg);
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
#endregion
#region 更新WMS
public static void UpdateTransWMS(SqlConnection sqlConnection, SqlTransaction trans, List<ICSWBSSpecialTransfer> InfoList, List<ICSITEMLot> lotList, string dsconn)
{
string sql = "";
int result = 0;
FramDataContext db = new FramDataContext(dsconn);
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();
try
{
foreach (ICSWBSSpecialTransfer TransferInfo in InfoList)
{
bool isNew = false;
var line = db.ICSWBSSpecialTransfer.SingleOrDefault(a => a.ID == TransferInfo.ID && a.WorkPoint == AppConfig.WorkPointCode);
if (line == null)
{
isNew = true;
line = new ICSWBSSpecialTransfer();
}
line.ProjectType = TransferInfo.ProjectType;
line.WareHouseCode = TransferInfo.WareHouseCode;
line.LotNo = TransferInfo.LotNo;
line.WBSCodeOld = TransferInfo.WBSCodeOld;
line.WBSCodeNew = TransferInfo.WBSCodeNew;
line.TransferReason = TransferInfo.TransferReason;
line.INVCOEOld = TransferInfo.INVCOEOld;
line.INVCOENew = TransferInfo.INVCOENew;
line.BATCHOld = TransferInfo.BATCHOld;
line.BATCHNew =TransferInfo.BATCHNew;
line.LotStatus = TransferInfo.LotStatus;
line.NewLotNo = TransferInfo.NewLotNo;
line.MUSER = AppConfig.UserCode;
line.MUSERNAME = AppConfig.UserName;
line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
line.WorkPoint = AppConfig.WorkPointCode;
if (isNew)
{
db.ICSWBSSpecialTransfer.InsertOnSubmit(line);
}
db.SubmitChanges();
}
foreach (ICSITEMLot info in lotList)
{
var inv = db.ICSINVENTORY.SingleOrDefault(a => a.INVCODE == info.ItemCode && a.WorkPoint == AppConfig.WorkPointCode);
if (inv == null)
throw new Exception("物料不存在!");
var lines = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == info.LotNO && a.WorkPoint == AppConfig.WorkPointCode);
if (lines != null)
throw new Exception("条码已存在!");
bool isNew = false;
var line = db.ICSITEMLot.SingleOrDefault(a => a.ID == info.ID && a.WorkPoint == AppConfig.WorkPointCode);
if (line == null)
{
isNew = true;
line = new ICSITEMLot();
line.ID = AppConfig.GetGuid();
}
line.LotNO = info.LotNO;
line.ItemCode = info.ItemCode;
line.TransNO = info.TransNO;
line.TransLine = info.TransLine;
line.VENDORITEMCODE = info.VENDORITEMCODE;
line.VENDORCODE = info.VENDORCODE;
line.VenderLotNO = info.VenderLotNO;
line.PRODUCTDATE = info.PRODUCTDATE;
line.LOTQTY = info.LOTQTY;
line.EATTRIBUTE3 = info.LOTQTY;
line.EATTRIBUTE4 = 0;
line.ACTIVE = info.ACTIVE;
line.Exdate = info.Exdate;
line.TYPE = "形态转换";
line.EATTRIBUTE3 = info.EATTRIBUTE3;
line.MUSER = AppConfig.UserCode;
line.MUSERName = AppConfig.UserName;
line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
line.WorkPoint = AppConfig.WorkPointCode;
if (isNew)
{
db.ICSITEMLot.InsertOnSubmit(line);
}
db.SubmitChanges();
}
db.Transaction.Commit();
}
catch (Exception ex)
{
db.Transaction.Rollback();
throw ex;
}
}
#endregion
/// <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());
}
}
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;
}
}
}