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.
1856 lines
81 KiB
1856 lines
81 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 System.Linq.Expressions;
|
|
using System.Reflection;
|
|
|
|
namespace ICSSoft.Frame.Data.DAL
|
|
{
|
|
public class ICSITEMLOTDAL
|
|
{
|
|
|
|
#region 新增和修改
|
|
public static void Add(ICSITEMLot tbinfo, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
bool isNew = false;
|
|
var line = db.ICSITEMLot.SingleOrDefault(a => a.ID == tbinfo.ID);
|
|
if (line == null)
|
|
{
|
|
isNew = true;
|
|
line = new ICSITEMLot();
|
|
line.ID = tbinfo.ID;
|
|
|
|
}
|
|
line.LotNO = tbinfo.LotNO;
|
|
line.MCODE = tbinfo.MCODE;
|
|
line.TransNO = tbinfo.TransNO;
|
|
line.TransLine = tbinfo.TransLine;
|
|
line.VENDORITEMCODE = tbinfo.VENDORITEMCODE;
|
|
line.VENDORCODE = tbinfo.VENDORCODE;
|
|
line.VenderLotNO = tbinfo.VenderLotNO;
|
|
line.PRODUCTDATE = tbinfo.PRODUCTDATE;
|
|
line.LOTQTY = tbinfo.LOTQTY;
|
|
line.ACTIVE = tbinfo.ACTIVE;
|
|
line.Exdate = tbinfo.Exdate;
|
|
line.WorkPoint = tbinfo.WorkPoint;
|
|
line.MUSER = tbinfo.MUSER;
|
|
line.MUSERName = tbinfo.MUSERName;
|
|
line.MTIME = tbinfo.MTIME;
|
|
if (isNew)
|
|
db.ICSITEMLot.InsertOnSubmit(line);
|
|
db.SubmitChanges();
|
|
|
|
|
|
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 删除
|
|
public static void deleteInfo(List<string> codeList, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var lines = db.ICSITEMLot.Where(a => codeList.Contains(a.ID));
|
|
db.ICSITEMLot.DeleteAllOnSubmit(lines);
|
|
db.SubmitChanges();
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
|
|
//详细表 增加
|
|
public static void DetailADD(ICSITEMLotDetail tbinfo, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
bool isNew = false;
|
|
var line = db.ICSITEMLotDetail.SingleOrDefault(a => a.ID == tbinfo.ID);
|
|
if (line == null)
|
|
{
|
|
isNew = true;
|
|
line = new ICSITEMLotDetail();
|
|
line.ID = tbinfo.ID;
|
|
|
|
}
|
|
line.SERIALNO = tbinfo.SERIALNO;
|
|
line.LotNO = tbinfo.LotNO;
|
|
line.MCODE = tbinfo.MCODE;
|
|
line.StorageCODE = tbinfo.StorageCODE;
|
|
line.StackCODE = tbinfo.StackCODE;
|
|
line.SerialStatus = tbinfo.SerialStatus;
|
|
line.WorkPoint = tbinfo.WorkPoint;
|
|
line.MUSER = tbinfo.MUSER;
|
|
line.MUSERName = tbinfo.MUSERName;
|
|
line.MTIME = tbinfo.MTIME;
|
|
|
|
|
|
if (isNew)
|
|
db.ICSITEMLotDetail.InsertOnSubmit(line);
|
|
db.SubmitChanges();
|
|
|
|
|
|
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
//详细表 删除
|
|
public static void DetaildeleteInfo(List<string> codeList, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var lines = db.ICSITEMLotDetail.Where(a => codeList.Contains(a.SERIALNO));
|
|
db.ICSITEMLotDetail.DeleteAllOnSubmit(lines);
|
|
db.SubmitChanges();
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public static void insert(string NO, string code, int count)
|
|
{
|
|
string sql = @"update ICSINVReceiptDetail set ACTQTY+='" + count + "' where ITEMCODE='" + code + "' and ReceiptNO='" + NO + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
|
|
sql = string.Format(sql);
|
|
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
|
|
}
|
|
|
|
public static void delete(string NO, string code, int count)
|
|
{
|
|
string sql = @"update ICSINVReceiptDetail set ACTQTY-='" + count + "' where ITEMCODE='" + code + "' and ReceiptNO='" + NO + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
|
|
sql = string.Format(sql);
|
|
DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
|
|
}
|
|
/// <summary>
|
|
/// 获取条码状态
|
|
/// </summary>
|
|
/// <param name="lotNo"></param>
|
|
/// <param name="workpointCode"></param>
|
|
/// <returns></returns>
|
|
public static DataTable CheckLotNO(string lotNo, string workpointCode, string dsconn)
|
|
{
|
|
string sql = @"select A.LotNO,TYPE,B.LotNO AS BarCode from ICSITEMLot A
|
|
LEFT JOIN ICSWareHouseLotInfo B
|
|
ON B.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>
|
|
/// 验证ASN单信息
|
|
/// </summary>
|
|
/// <param name="lotNo"></param>
|
|
/// <param name="workpointCode"></param>
|
|
/// <returns></returns>
|
|
public static DataTable CheckASNNO(string lotNo, string workpointCode, string dsconn)
|
|
{
|
|
string sql = @"select * from ICSPO_PoMain
|
|
where POCode='{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>
|
|
/// <returns></returns>
|
|
public static DataTable CheckLOTNum(string INVCode, string workpointCode, string dsconn)
|
|
{
|
|
string sql = @"select A.INVCODE,B.WHCode,B.BinCode from ICSINVENTORY A
|
|
LEFT JOIN ICSWareHouseLotInfo B
|
|
ON B.INVCode=A.INVCODE
|
|
WHERE A.INVCODE='{0}' AND A.WorkPoint='{1}'";
|
|
sql = string.Format(sql, INVCode, workpointCode);
|
|
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
|
|
return dt;
|
|
}
|
|
/// <summary>
|
|
/// 获取条码信息
|
|
/// </summary>
|
|
/// <param name="barCode"></param>
|
|
/// <param name="workpointCode"></param>
|
|
/// <returns></returns>
|
|
public static DataTable GetLotData(string barCode, string workpointCode, string dsconn)
|
|
{
|
|
string sql = @"select A.TransNO,
|
|
A.TransLine,
|
|
A.LotNO,
|
|
A.MCODE,
|
|
C.INVNAME,
|
|
C.INVSTD,
|
|
C.INVEXPORTIMPORT,
|
|
CONVERT(DECIMAL(18,2),A.LOTQTY) as LOTQTY,
|
|
C.INVUOM,
|
|
A.EATTRIBUTE2,
|
|
D.EATTRIBUTE6,
|
|
ISNULL(A.EATTRIBUTE4,0) AS EATTRIBUTE3
|
|
from ICSITEMLot A
|
|
LEFT JOIN ICSINVENTORY C
|
|
ON C.INVCODE=A.MCODE
|
|
LEFT JOIN ICSINVInfo D
|
|
ON D.INVCODE=A.MCODE
|
|
--WHERE A.LotNO='0000000001100002' AND A.WorkPoint='6000'
|
|
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>
|
|
/// <returns></returns>
|
|
public static DataTable GetLotDataForPO(string barCode, string workpointCode, string dsconn)
|
|
{
|
|
string sql = @"SELECT A.TransNO, A.TransLine, A.LotNO, A.MCODE, C.INVNAME, C.INVSTD, C.INVEXPORTIMPORT, CONVERT(DECIMAL(18,2),A.LOTQTY) AS LOTQTY,
|
|
C.INVUOM, A.EATTRIBUTE2, D.EATTRIBUTE6, ISNULL(A.EATTRIBUTE4, 0) AS EATTRIBUTE3, B.Batch, B.cWhCode FROM ICSITEMLot A
|
|
INNER JOIN ICSPOArrive B ON A.TransNO = B.cCode AND A.TransLine = B.irowno LEFT JOIN ICSINVENTORY C ON C.INVCODE = A.MCODE
|
|
LEFT JOIN ICSINVInfo D ON D.INVCODE = A.MCODE 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 GetLotDataForMO(string barCode, string workpointCode, string dsconn)
|
|
{
|
|
string sql = @"select A.MOCODE
|
|
,A.MOSEQ
|
|
,A.ITEMCODE
|
|
,C.INVNAME
|
|
,C.INVSTD
|
|
,C.INVUOM
|
|
,B.LotQty
|
|
,B.LotNO
|
|
,B.VenderLotNO
|
|
from ICSMO A
|
|
LEFT JOIN ICSITEMLot B
|
|
ON B.TransNO=A.MOCODE AND B.TransLine=A.MOSEQ
|
|
LEFT JOIN ICSINVENTORY C
|
|
ON C.INVCODE=A.ITEMCODE
|
|
WHERE B.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="INVCode"></param>
|
|
/// <param name="workpointCode"></param>
|
|
/// <returns></returns>
|
|
public static DataTable GetLotNumData(string INVCode, string workpointCode, string dsconn)
|
|
{
|
|
string sql = @"select A.TransNO,
|
|
A.TransLine,
|
|
A.LotNO,
|
|
A.MCODE,
|
|
C.INVNAME,
|
|
C.INVSTD,
|
|
A.LOTQTY,
|
|
C.INVUOM
|
|
from ICSWareHouseLotInfo D
|
|
LEFT JOIN ICSITEMLot A
|
|
ON A.LotNO=D.LotNO
|
|
LEFT JOIN ICSPO_PoMain B
|
|
ON B.POCode=A.TransNO AND B.PORow=A.TransLine
|
|
LEFT JOIN ICSINVENTORY C
|
|
ON C.INVCODE=A.MCODE
|
|
WHERE D.INVCode='{0}' AND A.WorkPoint='{1}'";
|
|
sql = string.Format(sql, INVCode, workpointCode);
|
|
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
|
|
return dt;
|
|
}
|
|
/// <summary>
|
|
/// 获取ASN单号信息(半成品入库)
|
|
/// </summary>
|
|
/// <param name="barCode"></param>
|
|
/// <param name="workpointCode"></param>
|
|
/// <param name="dsconn"></param>
|
|
/// <returns></returns>
|
|
public static DataTable GetASNDataForMO(string barCode, string workpointCode, string dsconn)
|
|
{
|
|
string sql = @"select A.MOCODE
|
|
,A.MOSEQ
|
|
,A.ITEMCODE
|
|
,C.INVNAME
|
|
,C.INVSTD
|
|
,A.MOPLANQTY
|
|
,A.MOINPUTQTY
|
|
,C.INVUOM
|
|
,B.LotQty
|
|
,B.LotNO
|
|
from ICSMO A
|
|
LEFT JOIN ICSITEMLot B
|
|
ON B.TransNO=A.MOCODE AND B.TransLine=A.MOSEQ
|
|
LEFT JOIN ICSINVENTORY C
|
|
ON C.INVCODE=A.ITEMCODE
|
|
LEFT JOIN ICSASNDetail E
|
|
ON E.LotNO=B.LotNO
|
|
WHERE E.STNO='{0}' AND A.WorkPoint='{1}'";
|
|
sql = string.Format(sql, barCode, workpointCode);
|
|
DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
|
|
return dt;
|
|
}
|
|
|
|
#region 生成到货单
|
|
|
|
public static string CreateRCV(List<FormICSRSVDataModel.RCVData> rcv, string connection, out string docno, out string createUser, out string createTime)
|
|
{
|
|
SqlConnection conn = new System.Data.SqlClient.SqlConnection(connection);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
//DataContextDataContext data = new DataContextDataContext();
|
|
try
|
|
{
|
|
string rcvNo = "";
|
|
string user = "";
|
|
string time1 = "";
|
|
|
|
foreach (FormICSRSVDataModel.RCVData data in rcv)
|
|
{
|
|
string time = DateTime.Now.ToString("yyyyMMdd");
|
|
string sql = @"select max(ReceiptNO) from ICSINVReceipt where left(ReceiptNO,8)='{0}'";
|
|
sql = string.Format(sql, time);
|
|
DataTable dt = SQlReturnData(sql, cmd);
|
|
if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0][0].ToString()))
|
|
{
|
|
rcvNo = (decimal.Parse(dt.Rows[0][0].ToString()) + 1).ToString();
|
|
}
|
|
else
|
|
{
|
|
rcvNo = time + "001";
|
|
}
|
|
string rcvId = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString();
|
|
|
|
|
|
sql = @"INSERT INTO ICSINVReceipt(ID,ReceiptNO,StorageID,RECSTATUS,VENDORCODE,RECTYPE,MEMO,CreateTIME,CreateUSER,WorkPoint,MUSER,MUSERName,MTIME,EATTRIBUTE1,ISALLINSTORAGE)
|
|
Values(@ID,@ReceiptNO,'','待检','','','',@CreateTIME,@CreateUSER,'0001','',@MUSERName,@MTIME,@ASN,'N')";
|
|
cmd.Parameters.AddWithValue("@ID", rcvId);
|
|
cmd.Parameters.AddWithValue("@ReceiptNO", rcvNo);
|
|
cmd.Parameters.AddWithValue("@CreateTIME", data.createTime);
|
|
cmd.Parameters.AddWithValue("@CreateUSER", data.userName);
|
|
//cmd.Parameters.AddWithValue("@MUSER", rcvNo);
|
|
cmd.Parameters.AddWithValue("@MUSERName", data.userName);
|
|
cmd.Parameters.AddWithValue("@MTIME", DateTime.Now);
|
|
if (data.asnNo != null)
|
|
{
|
|
cmd.Parameters.AddWithValue("@ASN", data.asnNo);
|
|
}
|
|
else
|
|
{
|
|
cmd.Parameters.AddWithValue("@ASN", "");
|
|
}
|
|
cmd.CommandText = sql;
|
|
cmd.ExecuteNonQuery();
|
|
|
|
user = data.userName;
|
|
time1 = data.createTime;
|
|
|
|
int row = 0;
|
|
foreach (FormICSRSVDataModel.RCVDatas datas in data.datas)
|
|
{
|
|
sql = @"select ReceiptNO from dbo.ICSINVReceiptDetail WHERE VenderLotNO='{0}'";
|
|
sql = string.Format(sql, datas.lotNo);
|
|
dt = SQlReturnData(sql, cmd);
|
|
if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0][0].ToString()))
|
|
{
|
|
throw new Exception("条码:" + datas.lotNo + " 已生成到货单!");
|
|
}
|
|
|
|
row++;
|
|
|
|
string checksql = @"select EATTRIBUTE6 from ICSINVInfo
|
|
where INVCODE='{0}'";
|
|
checksql = string.Format(checksql, datas.itemCode);
|
|
DataTable checkdt = SQlReturnData(sql, cmd);
|
|
string rcvsId = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString();
|
|
if (checkdt.Rows.Count == 0)
|
|
{
|
|
sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE)
|
|
Values('{0}','{1}','{2}','{3}','待检','待检','','{4}','{5}','{6}','0001','','{7}','{8}','N','原材料')";
|
|
}
|
|
else
|
|
{
|
|
if (checkdt.Rows[0]["EATTRIBUTE6"].ToString() == "免检")
|
|
{
|
|
sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE)
|
|
Values('{0}','{1}','{2}','{3}','免检','免检','','{4}','{5}','{6}','0001','','{7}','{8}','N','原材料')";
|
|
}
|
|
else
|
|
{
|
|
sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE)
|
|
Values('{0}','{1}','{2}','{3}','待检','待检','','{4}','{5}','{6}','0001','','{7}','{8}','N','原材料')";
|
|
}
|
|
}
|
|
sql = string.Format(sql, rcvsId, rcvId, rcvNo, row, datas.itemCode, datas.qty, datas.lotNo, data.userName, DateTime.Now);
|
|
cmd.CommandText = sql;
|
|
cmd.ExecuteNonQuery();
|
|
|
|
#region 判断是否需要解除箱号关联
|
|
sql = @"select * from ICSPalletLotNO
|
|
where LotNO='{0}'";
|
|
string.Format(sql, datas.lotNo);
|
|
dt = SQlReturnData(sql, cmd);
|
|
if (dt.Rows.Count != 0)
|
|
{
|
|
sql = @"Delete ICSPalletLotNO where LotNO='{0}'";
|
|
string.Format(sql, datas.lotNo);
|
|
cmd.CommandText = sql;
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|
|
sqlTran.Commit();
|
|
docno = rcvNo;
|
|
createUser = user;
|
|
createTime = time1;
|
|
|
|
return "OK";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sqlTran.Rollback();
|
|
docno = "";
|
|
createUser = "";
|
|
createTime = "";
|
|
return ex.Message;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
/// <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;
|
|
}
|
|
|
|
|
|
#region 删除分批获得的跟踪单
|
|
public static void DeleteInfoBySplit(List<string> LotNoList, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
foreach (string LotNo in LotNoList)
|
|
{
|
|
var line = db.ICSLOTSIMULATION2USER.Where(a => a.LOTNO == LotNo && a.CollectStatus == "COLLECT_BEGIN");
|
|
if (line.Count() > 0)
|
|
throw new Exception("跟踪单已有开工记录,不能删除!");
|
|
//跟踪单分批记录
|
|
var LotSplit = db.ICSLotSplitINCollectionLog.SingleOrDefault(a => a.LOTNOSplit == LotNo);
|
|
//分批主跟踪单
|
|
var LotSim = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotSplit.LOTNO);
|
|
//当前分批的跟踪单
|
|
var LotSimFP = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo);
|
|
//当前分批的跟踪单条码
|
|
var ItemLot = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo);
|
|
//派工信息
|
|
var mo2Users = db.ICSMO2User.Where(a => a.LOTNO == LotNo);
|
|
//开工信息
|
|
var lotonwip = db.ICSLOTONWIP.Where(a=>a.LOTNO==LotNo);
|
|
//工序检查
|
|
List<string>id=lotonwip.Select(a=>a.ID).ToList();
|
|
var check = db.ICSLOTONWIPCheck.Where(a => id.Contains(a.ONWIPID));
|
|
//回溯原跟踪单不良数量
|
|
LotSim.NGQTY = LotSim.NGQTY + LotSimFP.LOTQTY;
|
|
ItemLot.LOTQTY = ItemLot.LOTQTY + LotSimFP.LOTQTY;
|
|
db.SubmitChanges();
|
|
db.ICSLOTSIMULATION.DeleteOnSubmit(LotSimFP);
|
|
db.ICSITEMLot.DeleteOnSubmit(ItemLot);
|
|
db.ICSLotSplitINCollectionLog.DeleteOnSubmit(LotSplit);
|
|
db.ICSMO2User.DeleteAllOnSubmit(mo2Users);
|
|
db.ICSLOTONWIP.DeleteAllOnSubmit(lotonwip);
|
|
db.ICSLOTONWIPCheck.DeleteAllOnSubmit(check);
|
|
db.SubmitChanges();
|
|
}
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
public static void DelSplitLotNoList(List<string> list)
|
|
{
|
|
//3.1.-1条码和母条码都要进行判断,如果下一道工序已经开工就不能删除,并提示相应报错信息;
|
|
//3.2.只能删除分批出来的条码,如果选择了原条码点删除,也要提示相应错误;
|
|
//3.3.如果满足以上条件,那么删除后,分批条码数量要回到原条码数量上面;
|
|
//拆批后的条码(mo01-1) 若已经派工,删除该条码时,派工信息也要删除.
|
|
//比如 mo001分批 成mo001-1,然后又分批成mo001-1-1,那么mo001-1不能先删除。除非把mo001-1-1先删除才能删。
|
|
List<FormDelSplitLotModel> List = new List<FormDelSplitLotModel>();
|
|
foreach (string lotno in list)
|
|
{
|
|
//判断是否是母条码
|
|
string sql = "select lotno,lotnosplit,opcode from ICSLotSplitINCollectionLog where lotno='" + lotno + "' OR lotnosplit='" + lotno + "'";
|
|
DataTable table = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
|
|
List<DataRow> row1 = table.AsEnumerable().Where(a => a["lotno"].ToString() == lotno).ToList();//
|
|
List<DataRow> row2 = table.AsEnumerable().Where(a => a["lotnosplit"].ToString() == lotno).ToList();
|
|
string opcode = "";
|
|
string momlotno = "";
|
|
int lotqty = 0;
|
|
//如果没有则代表原始条码
|
|
if (row2.Count <= 0)
|
|
{
|
|
throw new Exception("条码:" + lotno + " 是原始条码无法删除!");
|
|
}
|
|
if (row1.Count > 0)
|
|
{
|
|
throw new Exception("条码:" + lotno + "已分批,请先删除分批后的条码!");
|
|
}
|
|
else
|
|
{
|
|
opcode = row2[0]["opcode"].ToString();
|
|
momlotno = row2[0]["lotno"].ToString();
|
|
|
|
|
|
|
|
sql = @"select * from ICSLOTSIMULATION where lotno='" + lotno + "' and opcode='" + opcode + @"'
|
|
union all
|
|
select * from ICSLOTSIMULATION where lotno='" + momlotno + "' and opcode='" + opcode + @"'
|
|
";
|
|
DataTable table3 = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
|
|
if (table3.Rows.Count != 2)
|
|
{
|
|
throw new Exception("条码:" + lotno + " 或者母条码:" + momlotno + ",下道工序已开工,无法删除");
|
|
}
|
|
|
|
sql = @"select a.lotno,b.OPCODE,b.OPSEQ from icsmo2user a
|
|
inner join ICSITEMROUTE2OPLot b
|
|
on a.LOTNO=b.LotNo and a.OPCODE=b.OPCODE
|
|
where a.lotno='" + lotno + "' and b.opseq>(select opseq from ICSITEMROUTE2OPLot d where d.lotno='" + lotno + "' and d.OPCODE='" + opcode + "')";
|
|
DataTable table1 = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
|
|
if (table1.Rows.Count > 0)
|
|
{
|
|
throw new Exception("条码:" + lotno + "已派工,请先删除派工记录!");
|
|
}
|
|
|
|
//获取分批条码的数量
|
|
sql = @"SELECT LOTQTY FROM ICSITEMLot WHERE LOTNO='" + lotno + "'";
|
|
lotqty = Convert.ToInt32(DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0].Rows[0]["LOTQTY"]);
|
|
}
|
|
FormDelSplitLotModel model = new FormDelSplitLotModel();
|
|
model.FromLotNO = momlotno;
|
|
model.LOTNO = lotno;
|
|
model.LOTQTY = lotqty;
|
|
List.Add(model);
|
|
}
|
|
if (List.Count > 0)
|
|
DelSplitLotNo(List, AppConfig.AppConnectString);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 删除分批获得的跟踪单
|
|
public static void DelSplitLotNo(List<FormDelSplitLotModel> LotNoList, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
|
|
foreach (FormDelSplitLotModel item in LotNoList)
|
|
{
|
|
#region 删除 icsmo2lot
|
|
var LOT = db.ICSITEMLot.Where(a => a.LotNO == item.LOTNO);
|
|
if (LOT != null)
|
|
{
|
|
db.ICSITEMLot.DeleteAllOnSubmit(LOT);
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region 删除 ICSLOTSIMULATION
|
|
var sim = db.ICSLOTSIMULATION.Where(a => a.LOTNO == item.LOTNO);
|
|
if (sim != null)
|
|
{
|
|
db.ICSLOTSIMULATION.DeleteAllOnSubmit(sim);
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region 删除 ICSMO2User
|
|
var user = db.ICSMO2User.Where(a => a.LOTNO == item.LOTNO);
|
|
if (user != null)
|
|
{
|
|
db.ICSMO2User.DeleteAllOnSubmit(user);
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
|
|
#region 删除 ICSLOTONWIP ICSLOTONWIPCheck
|
|
var wip = db.ICSLOTONWIP.Where(a => a.LOTNO == item.LOTNO);
|
|
List<string> onwipid = wip.Select(a => a.ID).ToList();
|
|
if (wip != null)
|
|
{
|
|
db.ICSLOTONWIP.DeleteAllOnSubmit(wip);
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
var check = db.ICSLOTONWIPCheck.Where(a => onwipid.Contains(a.ONWIPID));
|
|
|
|
if (check != null)
|
|
{
|
|
db.ICSLOTONWIPCheck.DeleteAllOnSubmit(check);
|
|
db.SubmitChanges();
|
|
}
|
|
|
|
|
|
#region 删除 ICSLotSplitINCollectionLog
|
|
var log = db.ICSLotSplitINCollectionLog.Where(a => a.LOTNO == item.FromLotNO && a.LOTNOSplit == item.LOTNO);
|
|
if (log != null)
|
|
{
|
|
db.ICSLotSplitINCollectionLog.DeleteAllOnSubmit(log);
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
|
|
#region 删除 ICSQualityCKDATA
|
|
var qualityck = db.ICSQualityCKDATA.Where(a=>a.LOTNO== item.LOTNO);
|
|
if (qualityck != null) {
|
|
db.ICSQualityCKDATA.DeleteAllOnSubmit(qualityck);
|
|
db.SubmitChanges();
|
|
}
|
|
|
|
#region 增加原条码数量
|
|
//涉及表: ICSMO2Lot WM_BarCode ICSLOTSIMULATION ICSLOTSIMULATIONREPORT ICSLOTONWIP ICSWXItemListLotLog ICSWXPOLotNoLog
|
|
|
|
var fromlot = db.ICSITEMLot.FirstOrDefault(a => a.LotNO == item.FromLotNO);
|
|
if (fromlot != null)
|
|
{
|
|
fromlot.LOTQTY = fromlot.LOTQTY + item.LOTQTY;
|
|
db.SubmitChanges();
|
|
}
|
|
var fromsim = db.ICSLOTSIMULATION.FirstOrDefault(a => a.LOTNO == item.FromLotNO);
|
|
if (fromsim != null)
|
|
{
|
|
fromsim.LOTQTY = fromsim.LOTQTY + item.LOTQTY;
|
|
fromsim.GOODQTY = fromsim.GOODQTY + item.LOTQTY;
|
|
db.SubmitChanges();
|
|
}
|
|
|
|
var fromwips = db.ICSLOTONWIP.Where(a => a.LOTNO == item.FromLotNO);
|
|
if (fromwips != null)
|
|
{
|
|
foreach (ICSLOTONWIP fromwip in fromwips)
|
|
{
|
|
fromwip.LOTQTY = fromwip.LOTQTY + item.LOTQTY;
|
|
fromwip.GOODQTY=fromwip.GOODQTY+ item.LOTQTY;
|
|
db.SubmitChanges();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
public static ICSITEMLot GetICSITEMLot(string LotNo, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo);
|
|
return (ICSITEMLot)line;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
public static ICSLOTSIMULATION GetICSLOTSIMULATION(string simID, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var line = db.ICSLOTSIMULATION.SingleOrDefault(a => a.ID == simID);
|
|
return (ICSLOTSIMULATION)line;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
|
|
public static void SplitAdd(string simID, string LotNo, List<ICSITEMLot> itemLotList, List<ICSLOTSIMULATION> simList,
|
|
List<ICSLotSplitINCollectionLog> loginfoList, List<ICSMO2User> mo2UserList, bool isnew, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
#region 扣减原条码ICSLOTSIMULATION数量
|
|
foreach (ICSITEMLot info in itemLotList)
|
|
{
|
|
var line = db.ICSLOTSIMULATION.SingleOrDefault(a => a.ID == simID);
|
|
line.NGQTY = line.NGQTY - info.LOTQTY;
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
|
|
#region 扣减原条码数量
|
|
foreach (ICSITEMLot info in itemLotList)
|
|
{
|
|
var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo);
|
|
line.LOTQTY = line.LOTQTY - info.LOTQTY;
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
|
|
#region ICSITEMLot
|
|
foreach (ICSITEMLot itemLot in itemLotList)
|
|
{
|
|
bool isNew = false;
|
|
var line = db.ICSITEMLot.SingleOrDefault(a => a.ID == itemLot.ID);
|
|
if (line == null)
|
|
{
|
|
isNew = true;
|
|
line = new ICSITEMLot();
|
|
line.ID = itemLot.ID;
|
|
|
|
}
|
|
line.LotNO = itemLot.LotNO;
|
|
line.MCODE = itemLot.MCODE;
|
|
//line.ItemCODE = itemLot.ItemCODE;
|
|
line.TransNO = itemLot.TransNO;
|
|
line.TransLine = itemLot.TransLine;
|
|
line.VENDORITEMCODE = itemLot.VENDORITEMCODE;
|
|
line.VENDORCODE = itemLot.VENDORCODE;
|
|
line.VenderLotNO = itemLot.VenderLotNO;
|
|
line.PRODUCTDATE = itemLot.PRODUCTDATE;
|
|
line.LOTQTY = itemLot.LOTQTY;
|
|
line.ACTIVE = itemLot.ACTIVE;
|
|
line.Exdate = itemLot.Exdate;
|
|
line.WorkPoint = itemLot.WorkPoint;
|
|
line.MUSER = itemLot.MUSER;
|
|
line.MUSERName = itemLot.MUSERName;
|
|
line.MTIME = itemLot.MTIME;
|
|
line.TYPE = itemLot.TYPE;
|
|
line.EATTRIBUTE1 = itemLot.EATTRIBUTE1;
|
|
line.EATTRIBUTE2 = itemLot.EATTRIBUTE2;
|
|
line.EATTRIBUTE3 = itemLot.EATTRIBUTE3;
|
|
line.EATTRIBUTE4 = itemLot.EATTRIBUTE4;
|
|
line.EATTRIBUTE5 = itemLot.EATTRIBUTE5;
|
|
line.PrintTimes = itemLot.PrintTimes;
|
|
if (isNew)
|
|
db.ICSITEMLot.InsertOnSubmit(line);
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
|
|
if (isnew == false)
|
|
{
|
|
#region ICSLOTSIMULATION
|
|
foreach (ICSLOTSIMULATION info in simList)
|
|
{
|
|
var line = new ICSLOTSIMULATION();
|
|
line.ID = info.ID;
|
|
line.LOTNO = info.LOTNO;
|
|
line.SEQ = info.SEQ;
|
|
line.MOCODE = info.MOCODE;
|
|
line.LOTSEQ = info.LOTSEQ;
|
|
line.LOTQTY = info.LOTQTY;
|
|
line.GOODQTY = info.GOODQTY;
|
|
line.NGQTY = info.NGQTY;
|
|
line.LOTStatus = info.LOTStatus;
|
|
line.MODELCODE = info.MODELCODE;
|
|
line.ITEMCODE = info.ITEMCODE;
|
|
line.FROMROUTE = info.FROMROUTE;
|
|
line.FROMOP = info.FROMOP;
|
|
line.ROUTECODE = info.ROUTECODE;
|
|
line.OPCODE = info.OPCODE;
|
|
line.RESCODE = info.RESCODE;
|
|
line.EQPCODE = info.EQPCODE;
|
|
line.CHECKLOTNO = info.CHECKLOTNO;
|
|
line.CARTONCODE = info.CARTONCODE;
|
|
line.PALLETCODE = info.PALLETCODE;
|
|
line.PRODUCTSTATUS = info.PRODUCTSTATUS;
|
|
line.LACTION = info.LACTION;
|
|
line.ACTIONLIST = info.ACTIONLIST;
|
|
line.NGTIMES = info.NGTIMES;
|
|
line.ISCOM = info.ISCOM;
|
|
line.ISHOLD = info.ISHOLD;
|
|
line.SHELFNO = info.SHELFNO;
|
|
line.MOSEQ = info.MOSEQ;
|
|
line.CollectStatus = info.CollectStatus;
|
|
line.BeginTime = info.BeginTime;
|
|
line.EndTime = info.EndTime;
|
|
line.MUSER = info.MUSER;
|
|
line.MUSERName = info.MUSERName;
|
|
line.MTIME = info.MTIME;
|
|
line.WorkPoint = info.WorkPoint;
|
|
db.ICSLOTSIMULATION.InsertOnSubmit(line);
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
#region ICSLotSplitINCollectionLog
|
|
foreach (ICSLotSplitINCollectionLog info in loginfoList)
|
|
{
|
|
var line = new ICSLotSplitINCollectionLog();
|
|
line.ID = info.ID;
|
|
line.LOTNO = info.LOTNO;
|
|
line.LOTNOSplit = info.LOTNOSplit;
|
|
line.OPCode = info.OPCode;
|
|
line.MUSER = info.MUSER;
|
|
line.MUSERNAME = info.MUSERNAME;
|
|
line.MTIME = info.MTIME;
|
|
line.WorkPoint = info.WorkPoint;
|
|
db.ICSLotSplitINCollectionLog.InsertOnSubmit(line);
|
|
db.SubmitChanges();
|
|
}
|
|
#endregion
|
|
|
|
foreach (ICSMO2User user in mo2UserList)
|
|
{
|
|
var line = new ICSMO2User();
|
|
line.ID = user.ID;
|
|
line.MOCODE = user.MOCODE;
|
|
line.MOSEQ = user.MOSEQ;
|
|
line.LOTNO = user.LOTNO;
|
|
line.SEGCODE = user.SEGCODE;
|
|
line.RouteCode = user.RouteCode;
|
|
line.OPCODE = user.OPCODE;
|
|
line.USERCODE = user.USERCODE;
|
|
line.USERName = user.USERName;
|
|
line.EQPCode = user.EQPCode;
|
|
line.EQPName = user.EQPName;
|
|
line.StartPlanDate = user.StartPlanDate;
|
|
line.EndPlanDate = user.EndPlanDate;
|
|
line.MUSER = user.MUSER;
|
|
line.MUSERName = user.MUSERName;
|
|
line.MTIME = user.MTIME;
|
|
line.WorkPoint = user.WorkPoint;
|
|
db.ICSMO2User.InsertOnSubmit(line);
|
|
db.SubmitChanges();
|
|
}
|
|
|
|
db.SubmitChanges();
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw new Exception(ex.Message);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
public static string SpliteLotNo(string LotNo, decimal SplitQty, string SplitReason, string dsconn)
|
|
{
|
|
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
|
|
var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
|
|
if (line != null)
|
|
{
|
|
if (SplitQty < 1)
|
|
{
|
|
throw new Exception("分批数量必须大于0");
|
|
}
|
|
|
|
|
|
if (SplitQty >= line.LOTQTY)
|
|
{
|
|
throw new Exception("分批数量必须小于原批次数量");
|
|
}
|
|
|
|
|
|
//var whlog = db.ICSWareHouseLotInfoLog.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode && a.OperateClass == "1" && a.OperateType == "1");
|
|
|
|
//if (whlog != null)
|
|
//{
|
|
// throw new Exception("产品跟踪单已入库,不能拆批");
|
|
//}
|
|
|
|
var maxline = db.ICSITEMLot.Where(a => a.LotNO.Contains(LotNo) && a.LotNO.Length > LotNo.Length).OrderByDescending(a => a.LotNO).FirstOrDefault(); ;
|
|
string n = "";
|
|
if (maxline == null)
|
|
{
|
|
n = "1";
|
|
}
|
|
else
|
|
{
|
|
n = Convert.ToString(Convert.ToInt32((maxline.LotNO).Substring(maxline.LotNO.Length -2,2))+1);
|
|
}
|
|
n = n.PadLeft(2, '0');
|
|
string newLotSeq = "0";
|
|
string newLotNo = LotNo + n;
|
|
|
|
|
|
//ICSITEMLot 条码
|
|
ICSITEMLot newline = new ICSITEMLot();
|
|
newline = TransExpV2<ICSITEMLot, ICSITEMLot>.Trans(line);
|
|
newline.ID = AppConfig.GetGuid();
|
|
newline.LOTQTY = line.LOTQTY - SplitQty;
|
|
newline.LotNO = newLotNo;
|
|
newline.EATTRIBUTE2 = newLotNo;
|
|
newline.EATTRIBUTE5 = "";
|
|
db.ICSITEMLot.InsertOnSubmit(newline);
|
|
line.LOTQTY = SplitQty;
|
|
if (SplitReason == "返修分批")
|
|
line.EATTRIBUTE5 = "返修中";
|
|
db.SubmitChanges();
|
|
|
|
|
|
|
|
var LOTSIMULATION = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
|
|
if (LOTSIMULATION != null)
|
|
{
|
|
var lastop = db.ICSITEMROUTE2OPLot.Where(a => a.LotNo == LotNo).OrderByDescending(b=>b.OPSEQ).Select(a=>a.OPCODE).FirstOrDefault();
|
|
ICSLOTSIMULATION newLOTSIMULATION = new ICSLOTSIMULATION();
|
|
newLOTSIMULATION = TransExpV2<ICSLOTSIMULATION, ICSLOTSIMULATION>.Trans(LOTSIMULATION);
|
|
newLOTSIMULATION.ID = AppConfig.GetGuid();
|
|
newLOTSIMULATION.LOTSEQ = Convert.ToInt32(newLotSeq);
|
|
newLOTSIMULATION.LOTNO = newLotNo;
|
|
newLOTSIMULATION.LOTQTY = LOTSIMULATION.LOTQTY - SplitQty;
|
|
newLOTSIMULATION.GOODQTY = LOTSIMULATION.GOODQTY;
|
|
newLOTSIMULATION.LOTStatus = "新增";
|
|
newLOTSIMULATION.CollectStatus = "COLLECT_END";
|
|
newLOTSIMULATION.NGQTY=0;
|
|
newLOTSIMULATION.MTIME = DateTime.Now;
|
|
newLOTSIMULATION.FXQTY = 0;
|
|
newLOTSIMULATION.JJSYQTY = 0;
|
|
if(lastop==LOTSIMULATION.OPCODE)
|
|
newLOTSIMULATION.ISCOM = "1";
|
|
else
|
|
newLOTSIMULATION.ISCOM = "0";
|
|
//newLOTSIMULATION.PRODUCTSTATUS = "GOOD";
|
|
//newLOTSIMULATION.LACTION = "GOOD";
|
|
//newLOTSIMULATION.ACTIONLIST = ";GOOD;";
|
|
db.ICSLOTSIMULATION.InsertOnSubmit(newLOTSIMULATION);
|
|
LOTSIMULATION.MTIME = DateTime.Now;
|
|
LOTSIMULATION.LOTQTY = SplitQty;
|
|
if (SplitReason == "不良分批")
|
|
{
|
|
LOTSIMULATION.NGQTY = SplitQty;
|
|
LOTSIMULATION.GOODQTY = 0;
|
|
|
|
}
|
|
else
|
|
{
|
|
LOTSIMULATION.FXQTY = 0;
|
|
LOTSIMULATION.GOODQTY = SplitQty;
|
|
LOTSIMULATION.LOTStatus = "新增";
|
|
}
|
|
|
|
db.SubmitChanges();
|
|
}
|
|
|
|
var ICSOQC = db.ICSOQCCKGROUP2LISTCheckResult.Where(a => a.LotNo == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
if (ICSOQC != null)
|
|
{
|
|
foreach (var lotonwip in ICSOQC)
|
|
{
|
|
ICSOQCCKGROUP2LISTCheckResult newLOTSIMULATION = new ICSOQCCKGROUP2LISTCheckResult();
|
|
newLOTSIMULATION = TransExpV2<ICSOQCCKGROUP2LISTCheckResult, ICSOQCCKGROUP2LISTCheckResult>.Trans(lotonwip);
|
|
newLOTSIMULATION.ID = AppConfig.GetGuid();
|
|
newLOTSIMULATION.LotNo = newLotNo;
|
|
if (newLOTSIMULATION.CCorWGResult == "NG") {
|
|
newLOTSIMULATION.CCorWGResult = "OK";
|
|
}
|
|
|
|
db.ICSOQCCKGROUP2LISTCheckResult.InsertOnSubmit(newLOTSIMULATION);
|
|
|
|
db.SubmitChanges();
|
|
}
|
|
}
|
|
|
|
|
|
var LOTONWIPS = db.ICSLOTONWIP.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode&&a.EATTRIBUTE1==null );
|
|
if (LOTONWIPS != null)
|
|
{
|
|
foreach (var lotonwip in LOTONWIPS)
|
|
{
|
|
string id = AppConfig.GetGuid();
|
|
ICSLOTONWIP newlotonwip = new ICSLOTONWIP();
|
|
newlotonwip = TransExpV2<ICSLOTONWIP, ICSLOTONWIP>.Trans(lotonwip);
|
|
newlotonwip.ID = id;
|
|
newlotonwip.LOTNO = newLotNo;
|
|
newlotonwip.LOTSEQ = Convert.ToInt32(newLotSeq);
|
|
newlotonwip.LOTQTY = lotonwip.LOTQTY - Convert.ToInt32(SplitQty);
|
|
newlotonwip.GOODQTY = lotonwip.GOODQTY;
|
|
newlotonwip.NGQTY = 0;
|
|
newlotonwip.FXQTY = 0;
|
|
//newlotonwip.ACTION = "GOOD";
|
|
//newlotonwip.ACTIONRESULT = "GOOD";
|
|
db.ICSLOTONWIP.InsertOnSubmit(newlotonwip);
|
|
lotonwip.LOTQTY = Convert.ToInt32(SplitQty);
|
|
if (SplitReason == "不良分批")
|
|
{
|
|
lotonwip.NGQTY = Convert.ToInt32(SplitQty);
|
|
lotonwip.GOODQTY = 0;
|
|
|
|
}
|
|
else
|
|
{
|
|
lotonwip.FXQTY = 0;
|
|
lotonwip.GOODQTY = Convert.ToInt32(SplitQty);
|
|
}
|
|
|
|
var check_old = db.ICSLOTONWIPCheck.Where(a => a.ONWIPID == lotonwip.ID).FirstOrDefault();
|
|
|
|
if (check_old != null)
|
|
{
|
|
ICSLOTONWIPCheck check = new ICSLOTONWIPCheck();
|
|
check.ID = AppConfig.GetGuid();
|
|
check.ONWIPID = id;
|
|
check.Result = "合格";
|
|
check.MUSER = AppConfig.UserId;
|
|
check.MUSERName = AppConfig.UserName;
|
|
check.MTIME = DateTime.Now;
|
|
check.WorkPoint = AppConfig.WorkPointCode;
|
|
|
|
db.ICSLOTONWIPCheck.InsertOnSubmit(check);
|
|
db.SubmitChanges();
|
|
}
|
|
}
|
|
}
|
|
|
|
var QualityCKDATAS = db.ICSQualityCKDATA.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
if (QualityCKDATAS != null)
|
|
{
|
|
foreach (var ckdata in QualityCKDATAS)
|
|
{
|
|
ICSQualityCKDATA newckdata = new ICSQualityCKDATA();
|
|
newckdata = TransExpV2<ICSQualityCKDATA, ICSQualityCKDATA>.Trans(ckdata);
|
|
newckdata.ID = AppConfig.GetGuid();
|
|
newckdata.LOTNO = newLotNo;
|
|
newckdata.CKResult = "1";
|
|
db.ICSQualityCKDATA.InsertOnSubmit(newckdata);
|
|
|
|
var QualityCKDetailDATAS = db.ICSQualityCKDATADetail.Where(a => a.DATAID == ckdata.ID && a.WorkPoint == AppConfig.WorkPointCode);
|
|
if (QualityCKDetailDATAS != null)
|
|
{
|
|
foreach (var ckDetaildata in QualityCKDetailDATAS)
|
|
{
|
|
ICSQualityCKDATADetail newckDetaildata = new ICSQualityCKDATADetail();
|
|
newckDetaildata = TransExpV2<ICSQualityCKDATADetail, ICSQualityCKDATADetail>.Trans(ckDetaildata);
|
|
newckDetaildata.ID = AppConfig.GetGuid();
|
|
newckDetaildata.DATAID = newckdata.ID;
|
|
db.ICSQualityCKDATADetail.InsertOnSubmit(newckDetaildata);
|
|
|
|
}
|
|
db.SubmitChanges();
|
|
}
|
|
}
|
|
}
|
|
var mo2user = db.ICSMO2User.Where(a => a.LOTNO == LotNo);
|
|
if (mo2user != null) {
|
|
foreach (ICSMO2User user in mo2user) {
|
|
ICSMO2User newuser = new ICSMO2User();
|
|
newuser = TransExpV2<ICSMO2User, ICSMO2User>.Trans(user);
|
|
newuser.ID = AppConfig.GetGuid();
|
|
newuser.LOTNO = newLotNo;
|
|
|
|
db.ICSMO2User.InsertOnSubmit(newuser);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
db.SubmitChanges();
|
|
|
|
var ROUTE2OPLot = db.ICSITEMROUTE2OPLot.Where(a => a.LotNo == LotNo);
|
|
if (ROUTE2OPLot != null)
|
|
{
|
|
foreach (ICSITEMROUTE2OPLot a in ROUTE2OPLot)
|
|
{
|
|
ICSITEMROUTE2OPLot lot = new ICSITEMROUTE2OPLot();
|
|
lot = TransExpV2<ICSITEMROUTE2OPLot, ICSITEMROUTE2OPLot>.Trans(a);
|
|
lot.ID = AppConfig.GetGuid();
|
|
lot.LotNo = newLotNo;
|
|
db.ICSITEMROUTE2OPLot.InsertOnSubmit(lot);
|
|
|
|
}
|
|
}
|
|
db.SubmitChanges();
|
|
|
|
|
|
ICSLotSplitINCollectionLog splog = new ICSLotSplitINCollectionLog();
|
|
splog.ID = AppConfig.GetGuid();
|
|
splog.LOTNO = LotNo;
|
|
splog.LOTNOSplit = newLotNo;
|
|
if (LOTSIMULATION != null)
|
|
{ splog.OPCode = LOTSIMULATION.OPCODE; }
|
|
else { splog.OPCode = ""; }
|
|
|
|
splog.MUSERNAME = AppConfig.UserName;
|
|
splog.MUSER = AppConfig.UserCode;
|
|
splog.MTIME = DateTime.Now;
|
|
splog.WorkPoint = AppConfig.WorkPointCode;
|
|
splog.EATTRIBUTE2 = SplitReason;
|
|
db.ICSLotSplitINCollectionLog.InsertOnSubmit(splog);
|
|
|
|
db.SubmitChanges();
|
|
db.Transaction.Commit();
|
|
|
|
return newLotNo;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("批次不存在");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw new Exception(ex.Message);
|
|
}
|
|
}
|
|
|
|
public static class TransExpV2<TIn, TOut>
|
|
{
|
|
|
|
private static readonly Func<TIn, TOut> cache = GetFunc();
|
|
private static Func<TIn, TOut> GetFunc()
|
|
{
|
|
ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "p");
|
|
List<MemberBinding> memberBindingList = new List<MemberBinding>();
|
|
|
|
foreach (var item in typeof(TOut).GetProperties())
|
|
{
|
|
if (!item.CanWrite) continue;
|
|
MemberExpression property = Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name));
|
|
MemberBinding memberBinding = Expression.Bind(item, property);
|
|
memberBindingList.Add(memberBinding);
|
|
}
|
|
|
|
MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray());
|
|
Expression<Func<TIn, TOut>> lambda = Expression.Lambda<Func<TIn, TOut>>(memberInitExpression, new ParameterExpression[] { parameterExpression });
|
|
|
|
return lambda.Compile();
|
|
}
|
|
|
|
public static TOut Trans(TIn tIn)
|
|
{
|
|
return cache(tIn);
|
|
}
|
|
|
|
}
|
|
|
|
public static void UpdateLotnoStatus(string lotno,string muser,DateTime date,decimal transqty,string conn) {
|
|
FramDataContext frame = new FramDataContext(conn);
|
|
frame.Connection.Open();
|
|
frame.Transaction = frame.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var lot = frame.ICSITEMLot.SingleOrDefault(a => a.LotNO == lotno);
|
|
|
|
if (lot == null)
|
|
{
|
|
throw new Exception("MES条码" + lotno + "不存在!");
|
|
}
|
|
|
|
var mo = frame.ICSMO.Where(a => a.MOCODE == lot.TransNO && a.MOSEQ == lot.TransLine).FirstOrDefault();
|
|
if(mo==null)
|
|
throw new Exception("获取条码对应工单信息失败!");
|
|
if (!string.IsNullOrEmpty(lot.ISCOM)) {
|
|
throw new Exception("MES条码:" +lotno+",物料:"+mo.ITEMCODE+"已入库完毕!");
|
|
}
|
|
lot.EATTRIBUTE7 =(Convert.ToDecimal(string.IsNullOrEmpty(lot.EATTRIBUTE7) ? "0" : lot.EATTRIBUTE7)+ transqty).ToString();
|
|
if (Convert.ToDecimal(lot.EATTRIBUTE7)> lot.LOTQTY)
|
|
{
|
|
throw new Exception("MES条码:" + lotno + ",物料:" + mo.ITEMCODE + "入库数量不能大于条码数量!");
|
|
}
|
|
else if(Convert.ToDecimal(lot.EATTRIBUTE7)==lot.LOTQTY)
|
|
{
|
|
lot.ISCOM = "1";
|
|
}
|
|
lot.storageMuser = muser;
|
|
lot.StorageDate = date;
|
|
|
|
frame.SubmitChanges();
|
|
|
|
//插入入库记录
|
|
ICSWareHouseLotInfoLog log = new ICSWareHouseLotInfoLog();
|
|
var mes = (from a in frame.ICSMO
|
|
where a.MOCODE == lot.TransNO && a.MOSEQ == lot.TransLine
|
|
select a.ITEMCODE).First();
|
|
|
|
var username = frame.Sys_User.Where(a=>a.UserCode==muser).Select(a=>a.UserName).FirstOrDefault();
|
|
|
|
if (string.IsNullOrEmpty(username))
|
|
throw new Exception("获取人员信息失败");
|
|
|
|
log.ID = AppConfig.GetGuid();
|
|
log.TransNO = lot.TransNO;
|
|
log.TransLine = lot.TransLine;
|
|
log.LotNO = lot.LotNO;
|
|
log.ITEMCODE = mes;
|
|
log.TransQTY = lot.LOTQTY;
|
|
log.TransType = "收";
|
|
log.BusinessCode = "生产入库";
|
|
log.MUSER = muser;
|
|
log.MUSERName = username;
|
|
log.MTIME = date;
|
|
log.WorkPoint = "6000";
|
|
frame.ICSWareHouseLotInfoLog.InsertOnSubmit(log);
|
|
frame.SubmitChanges();
|
|
|
|
ICSWareHouseLotInfo info = frame.ICSWareHouseLotInfo.SingleOrDefault(a=>a.LotNO==lotno);
|
|
if (info == null)
|
|
{
|
|
|
|
info = new ICSWareHouseLotInfo();
|
|
info.LotNO = lotno;
|
|
info.ID = AppConfig.GetGuid();
|
|
info.INVCode = mes;
|
|
info.LotQty = lot.LOTQTY;
|
|
info.ReceiveDate = date;
|
|
info.MUSER = muser;
|
|
info.MUSERName = username;
|
|
info.MTIME = date;
|
|
info.WorkPoint= "6000";
|
|
}
|
|
frame.ICSWareHouseLotInfo.InsertOnSubmit(info);
|
|
frame.SubmitChanges();
|
|
|
|
frame.Transaction.Commit();
|
|
}
|
|
catch (Exception ex) {
|
|
frame.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public static void GetLotnoMes<T>(string lotno,string conn,T t) {
|
|
try {
|
|
string sql = @"select '['+DBIpAddress+']'+'.'+DBName as conn from Sys_DataBase where DBSourceName='ERP'";
|
|
DataTable table = DBHelper.ExecuteDataset(conn,CommandType.Text,sql).Tables[0];
|
|
if (table.Rows.Count <=0) {
|
|
throw new Exception("获取ERP账套信息失败!");
|
|
}
|
|
|
|
//判断当前条码是否已完工
|
|
sql = @"select a.LotNo,a.OPCODE,a.OPSEQ,d.Result from ICSITEMROUTE2OPLot a
|
|
inner join
|
|
(select lotno, max(OPSEQ)opseq from ICSITEMROUTE2OPLot group by LotNo)b
|
|
on a.LotNo = b.LotNo and a.OPSEQ = b.opseq
|
|
inner join ICSLOTONWIP c on c.LOTNO = a.LotNo and c.OPCODE = a.OPCODE
|
|
left join ICSLOTONWIPCheck d on d.ONWIPID = c.ID
|
|
where a.lotno='"+lotno+@"' and d.result='合格'
|
|
";
|
|
|
|
//判断当前条码是否报废
|
|
sql += @"select * from ICSNCROAUPLOAD where lotno='"+lotno+"' and oastatus='报废'";
|
|
DataTable table1 = DBHelper.ExecuteDataset(conn,CommandType.Text,sql).Tables[0];
|
|
DataTable table2 = DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[1];
|
|
if (table1.Rows.Count <=0&& table2.Rows.Count <= 0) {
|
|
throw new Exception("该条码还未完工或者不是报废状态!");
|
|
}
|
|
|
|
String u8conn = table.Rows[0]["conn"].ToString();
|
|
sql = @"select Lotno,LOTQTY,b.MDeptCode,b.ID as MODID,b.ID AS MOID,b.Mocode,b.ITEMCODE,d.INVNAME,d.INVSTD,B.EATTRIBUTE3 AS cDepCode,B.mdeptcode AS cDepName,d.INVUOM,F.DBNAME AS CompanyCode from icsitemlot a
|
|
inner join icsmo b on a.TransNO=b.MOCODE and a.TransLine=b.MOSEQ
|
|
--left join (select MoId,MODID from {0}.dbo.mom_orderdetail)C ON C.MODID=B.ID
|
|
LEFT JOIN ICSINVENTORY D on d.invcode=b.ITEMCODE
|
|
--left join {0}.dbo.Department e on e.cDepName=b.MDeptCode
|
|
left join Sys_DataBase f on f.DBSourceName='ERP'
|
|
where a.lotno='" + lotno+"'";
|
|
table = DBHelper.ExecuteDataset(conn,CommandType.Text,sql).Tables[0];
|
|
sql = String.Format(sql, u8conn);
|
|
if (table.Rows.Count <= 0) {
|
|
throw new Exception("未查询到工单下该条码!");
|
|
}
|
|
//条码是否入库
|
|
sql = @"select * from icsitemlot where lotno='" + lotno + "' and iscom='1'";
|
|
table1= DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0];
|
|
DataRow row = table.Rows[0];
|
|
if (table1.Rows.Count> 0)
|
|
{
|
|
throw new Exception("该条码已入库!");
|
|
}
|
|
|
|
|
|
|
|
Type a = typeof(T);
|
|
FieldInfo[]info = a.GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
|
|
foreach (FieldInfo c in info) {
|
|
foreach (DataColumn column in table.Columns) {
|
|
if (c.Name == "<"+column.ColumnName+">i__Field") {
|
|
c.SetValue(t, row["" + column.ColumnName + ""].ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex) {
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
|
|
public static void GetLotnoMes2(string lotno, string conn, LOTMES t)
|
|
{
|
|
try
|
|
{
|
|
|
|
string sql = @"select '['+DBIpAddress+']'+'.'+DBName as conn from Sys_DataBase where DBSourceName='ERP'";
|
|
DataTable table = DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0];
|
|
|
|
|
|
|
|
sql = @"select A.lotNo,A.lotQty,b.moCode,b.moSeq,b.itemCode,d.INVNAME as invName,d.INVSTD as invStd,e.opCode,F.opDesc from icsitemlot a
|
|
inner join icsmo b on a.TransNO=b.MOCODE and a.TransLine=b.MOSEQ
|
|
LEFT JOIN ICSINVENTORY D on d.invcode=b.ITEMCODE
|
|
LEFT JOIN ICSITEMROUTE2OPLOT e on e.lotno=a.lotno
|
|
LEFT JOIN ICSOP F ON F.OPCODE=E.OPCODE
|
|
where a.lotno='" + lotno + "' order by e.opseq";
|
|
table = DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0];
|
|
if (table.Rows.Count <= 0)
|
|
{
|
|
throw new Exception("未查询到工单下该条码!");
|
|
}
|
|
var info=typeof(LOTMES).GetProperties();
|
|
foreach (DataColumn column in table.Columns) {
|
|
foreach(var pro in info)
|
|
{
|
|
if (pro.Name == column.ColumnName)
|
|
pro.SetValue(t, table.Rows[0][column].ToString(), null);
|
|
}
|
|
}
|
|
t.list1 = new List<OPMES>();
|
|
foreach (DataRow row in table.Rows) {
|
|
OPMES opmes = new OPMES();
|
|
opmes.opCode = row["opCode"].ToString();
|
|
opmes.opDesc= row["opDesc"].ToString();
|
|
|
|
List<Material> materlist=GetOPBOM(lotno, opmes.opCode, conn);
|
|
opmes.list = materlist;
|
|
t.list1.Add(opmes);
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public static void SpliteLotNo(string LotNo, decimal ALLqty, decimal SplitQty,int SplitNum,string dsconn)
|
|
{
|
|
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
|
|
if (SplitQty < 1)
|
|
{
|
|
throw new Exception("分批数量必须大于0");
|
|
}
|
|
|
|
|
|
if (SplitQty * (SplitNum-1)>ALLqty)
|
|
{
|
|
throw new Exception("分批数量必须小于原批次数量");
|
|
}
|
|
|
|
//原条码数量
|
|
decimal oldlotqty = line.LOTQTY;
|
|
|
|
//更改老条码条码数量
|
|
|
|
//decimal oldLOTQTY = line.LOTQTY - SplitQty * SplitNum;
|
|
decimal oldLOTQTY = line.LOTQTY - ALLqty;
|
|
if (oldLOTQTY < 0) {
|
|
oldLOTQTY = 0;
|
|
}
|
|
line.LOTQTY = oldLOTQTY;
|
|
|
|
var oldLOTSIMULATION = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
oldLOTSIMULATION.LOTQTY = Convert.ToInt32(oldLOTQTY);
|
|
oldLOTSIMULATION.GOODQTY = Convert.ToInt32(oldLOTQTY);
|
|
|
|
|
|
var oldLOTONWIPS = db.ICSLOTONWIP.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
foreach (var lotonwip in oldLOTONWIPS)
|
|
{
|
|
lotonwip.LOTQTY = Convert.ToInt32(oldLOTQTY);
|
|
lotonwip.GOODQTY = Convert.ToInt32(oldLOTQTY);
|
|
db.SubmitChanges();
|
|
|
|
}
|
|
db.SubmitChanges();
|
|
|
|
|
|
//插入新条码
|
|
if (line != null)
|
|
{
|
|
for (int i = 0; i < SplitNum; i++)
|
|
{
|
|
if (i == SplitNum - 1) {
|
|
//SplitQty = SplitQty + (oldlotqty - (SplitNum * SplitQty));
|
|
SplitQty = SplitQty + (ALLqty - (SplitNum * SplitQty));
|
|
}
|
|
//var whlog = db.ICSWareHouseLotInfoLog.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode && a.OperateClass == "1" && a.OperateType == "1");
|
|
|
|
//if (whlog != null)
|
|
//{
|
|
// throw new Exception("产品跟踪单已入库,不能拆批");
|
|
//}
|
|
|
|
|
|
var maxline = db.ICSITEMLot.Where(a => a.LotNO.Contains(LotNo) && a.LotNO.Length > LotNo.Length).OrderByDescending(a => a.LotNO).FirstOrDefault(); ;
|
|
string n = "";
|
|
if (maxline == null)
|
|
{
|
|
n = "1";
|
|
}
|
|
else
|
|
{
|
|
n = Convert.ToString(Convert.ToInt32((maxline.LotNO).Substring(maxline.LotNO.Length - 2, 2)) + 1);
|
|
}
|
|
n = n.PadLeft(2, '0');
|
|
string newLotSeq = "0";
|
|
string newLotNo = LotNo + n;
|
|
|
|
//ICSITEMLot 条码
|
|
ICSITEMLot newline = new ICSITEMLot();
|
|
newline = TransExpV2<ICSITEMLot, ICSITEMLot>.Trans(line);
|
|
newline.ID = AppConfig.GetGuid();
|
|
newline.LOTQTY = SplitQty;
|
|
newline.LotNO = newLotNo;
|
|
newline.EATTRIBUTE2 = newLotNo;
|
|
db.ICSITEMLot.InsertOnSubmit(newline);
|
|
db.SubmitChanges();
|
|
|
|
|
|
|
|
var LOTSIMULATION = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
if (LOTSIMULATION != null)
|
|
{
|
|
ICSLOTSIMULATION newLOTSIMULATION = new ICSLOTSIMULATION();
|
|
newLOTSIMULATION = TransExpV2<ICSLOTSIMULATION, ICSLOTSIMULATION>.Trans(LOTSIMULATION);
|
|
newLOTSIMULATION.ID = AppConfig.GetGuid();
|
|
newLOTSIMULATION.LOTNO = newLotNo;
|
|
newLOTSIMULATION.LOTQTY = SplitQty;
|
|
newLOTSIMULATION.GOODQTY = SplitQty;
|
|
newLOTSIMULATION.LOTStatus = "新增";
|
|
newLOTSIMULATION.CollectStatus = "COLLECT_END";
|
|
newLOTSIMULATION.NGQTY = 0;
|
|
newLOTSIMULATION.MTIME = DateTime.Now;
|
|
//newLOTSIMULATION.PRODUCTSTATUS = "GOOD";
|
|
//newLOTSIMULATION.LACTION = "GOOD";
|
|
//newLOTSIMULATION.ACTIONLIST = ";GOOD;";
|
|
db.ICSLOTSIMULATION.InsertOnSubmit(newLOTSIMULATION);
|
|
|
|
db.SubmitChanges();
|
|
}
|
|
|
|
var ICSOQC = db.ICSOQCCKGROUP2LISTCheckResult.Where(a => a.LotNo == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
if (ICSOQC != null)
|
|
{
|
|
foreach (var lotonwip in ICSOQC)
|
|
{
|
|
ICSOQCCKGROUP2LISTCheckResult newLOTSIMULATION = new ICSOQCCKGROUP2LISTCheckResult();
|
|
newLOTSIMULATION = TransExpV2<ICSOQCCKGROUP2LISTCheckResult, ICSOQCCKGROUP2LISTCheckResult>.Trans(lotonwip);
|
|
newLOTSIMULATION.ID = AppConfig.GetGuid();
|
|
newLOTSIMULATION.LotNo = newLotNo;
|
|
db.ICSOQCCKGROUP2LISTCheckResult.InsertOnSubmit(newLOTSIMULATION);
|
|
|
|
db.SubmitChanges();
|
|
}
|
|
}
|
|
|
|
|
|
var LOTONWIPS = db.ICSLOTONWIP.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
if (LOTONWIPS != null)
|
|
{
|
|
foreach (var lotonwip in LOTONWIPS)
|
|
{
|
|
string id = AppConfig.GetGuid();
|
|
ICSLOTONWIP newlotonwip = new ICSLOTONWIP();
|
|
newlotonwip = TransExpV2<ICSLOTONWIP, ICSLOTONWIP>.Trans(lotonwip);
|
|
newlotonwip.ID = id;
|
|
newlotonwip.LOTNO = newLotNo;
|
|
newlotonwip.LOTSEQ = Convert.ToInt32(newLotSeq);
|
|
newlotonwip.LOTQTY = Convert.ToInt32(SplitQty);
|
|
newlotonwip.GOODQTY = Convert.ToInt32(SplitQty);
|
|
//newlotonwip.ACTION = "GOOD";
|
|
//newlotonwip.ACTIONRESULT = "GOOD";
|
|
db.ICSLOTONWIP.InsertOnSubmit(newlotonwip);
|
|
db.SubmitChanges();
|
|
|
|
var check = db.ICSLOTONWIPCheck.SingleOrDefault(a => a.ONWIPID == lotonwip.ID);
|
|
if (check != null)
|
|
{
|
|
ICSLOTONWIPCheck newcheck = new ICSLOTONWIPCheck();
|
|
newcheck = TransExpV2<ICSLOTONWIPCheck, ICSLOTONWIPCheck>.Trans(check);
|
|
newcheck.ID = AppConfig.GetGuid();
|
|
newcheck.ONWIPID = newlotonwip.ID;
|
|
db.ICSLOTONWIPCheck.InsertOnSubmit(newcheck);
|
|
db.SubmitChanges();
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
var QualityCKDATAS = db.ICSQualityCKDATA.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
|
|
if (QualityCKDATAS != null)
|
|
{
|
|
foreach (var ckdata in QualityCKDATAS)
|
|
{
|
|
ICSQualityCKDATA newckdata = new ICSQualityCKDATA();
|
|
newckdata = TransExpV2<ICSQualityCKDATA, ICSQualityCKDATA>.Trans(ckdata);
|
|
newckdata.ID = AppConfig.GetGuid();
|
|
newckdata.LOTNO = newLotNo;
|
|
db.ICSQualityCKDATA.InsertOnSubmit(newckdata);
|
|
|
|
var QualityCKDetailDATAS = db.ICSQualityCKDATADetail.Where(a => a.DATAID == ckdata.ID && a.WorkPoint == AppConfig.WorkPointCode);
|
|
if (QualityCKDetailDATAS != null)
|
|
{
|
|
foreach (var ckDetaildata in QualityCKDetailDATAS)
|
|
{
|
|
ICSQualityCKDATADetail newckDetaildata = new ICSQualityCKDATADetail();
|
|
newckDetaildata = TransExpV2<ICSQualityCKDATADetail, ICSQualityCKDATADetail>.Trans(ckDetaildata);
|
|
newckDetaildata.ID = AppConfig.GetGuid();
|
|
newckDetaildata.DATAID = newckdata.ID;
|
|
db.ICSQualityCKDATADetail.InsertOnSubmit(newckDetaildata);
|
|
|
|
}
|
|
db.SubmitChanges();
|
|
}
|
|
}
|
|
}
|
|
var mo2user = db.ICSMO2User.Where(a => a.LOTNO == LotNo);
|
|
if (mo2user != null)
|
|
{
|
|
foreach (ICSMO2User user in mo2user)
|
|
{
|
|
ICSMO2User newuser = new ICSMO2User();
|
|
newuser = TransExpV2<ICSMO2User, ICSMO2User>.Trans(user);
|
|
newuser.ID = AppConfig.GetGuid();
|
|
newuser.LOTNO = newLotNo;
|
|
|
|
db.ICSMO2User.InsertOnSubmit(newuser);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
db.SubmitChanges();
|
|
|
|
var ROUTE2OPLot = db.ICSITEMROUTE2OPLot.Where(a => a.LotNo == LotNo);
|
|
if (ROUTE2OPLot != null)
|
|
{
|
|
foreach (ICSITEMROUTE2OPLot a in ROUTE2OPLot)
|
|
{
|
|
ICSITEMROUTE2OPLot lot = new ICSITEMROUTE2OPLot();
|
|
lot = TransExpV2<ICSITEMROUTE2OPLot, ICSITEMROUTE2OPLot>.Trans(a);
|
|
lot.ID = AppConfig.GetGuid();
|
|
lot.LotNo = newLotNo;
|
|
db.ICSITEMROUTE2OPLot.InsertOnSubmit(lot);
|
|
|
|
}
|
|
}
|
|
db.SubmitChanges();
|
|
|
|
|
|
ICSLotSplitINCollectionLog splog = new ICSLotSplitINCollectionLog();
|
|
splog.ID = AppConfig.GetGuid();
|
|
splog.LOTNO = LotNo;
|
|
splog.LOTNOSplit = newLotNo;
|
|
if (LOTSIMULATION != null)
|
|
{ splog.OPCode = LOTSIMULATION.OPCODE; }
|
|
else { splog.OPCode = ""; }
|
|
|
|
splog.MUSERNAME = AppConfig.UserName;
|
|
splog.MUSER = AppConfig.UserCode;
|
|
splog.MTIME = DateTime.Now;
|
|
splog.WorkPoint = AppConfig.WorkPointCode;
|
|
db.ICSLotSplitINCollectionLog.InsertOnSubmit(splog);
|
|
|
|
db.SubmitChanges();
|
|
|
|
|
|
|
|
}
|
|
db.Transaction.Commit();
|
|
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("批次不存在");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw new Exception(ex.Message);
|
|
}
|
|
}
|
|
|
|
public static void UpdateOAMes(ICSOAMES mes,string conn)
|
|
{
|
|
FramDataContext frame = new FramDataContext(conn);
|
|
frame.Connection.Open();
|
|
frame.Transaction = frame.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var ncrmes=frame.ICSNCROAUPLOAD.Where(a => a.SecDocNO == mes.NCRCODE).FirstOrDefault();
|
|
if (ncrmes == null)
|
|
throw new Exception("没有获取到ncr单号:"+mes.NCRCODE+"的上传信息!");
|
|
if(!string.IsNullOrEmpty(ncrmes.OAStatus))
|
|
throw new Exception("ncr单号:" + mes.NCRCODE + "已评审,请勿重复操作!");
|
|
|
|
if(Convert.ToDecimal(mes.OKQUANTITY) + Convert.ToDecimal(mes.NGQUANTITY) !=Convert.ToDecimal(ncrmes.Qty))
|
|
throw new Exception("ncr单号:" + mes.NCRCODE + "的合格与不合数与追踪单数量不一致!");
|
|
ncrmes.OKQty = mes.OKQUANTITY;
|
|
ncrmes.NGQty = mes.NGQUANTITY;
|
|
ncrmes.OAStatus = mes.OASTATUS;
|
|
ncrmes.ClosedTime = mes.modify_date;
|
|
|
|
var ncrdoc=frame.ICSNCRDoc.Where(a => a.SecDocNO == mes.NCRCODE).FirstOrDefault();
|
|
if (ncrdoc != null) {
|
|
ncrdoc.NGQty = Convert.ToDecimal(mes.NGQUANTITY);
|
|
ncrdoc.OKQty = Convert.ToDecimal(mes.OKQUANTITY);
|
|
ncrdoc.MTIME = DateTime.Now;
|
|
ncrdoc.SecDocCreateTime = mes.modify_date;
|
|
}
|
|
else
|
|
throw new Exception("获取ncr单据:"+mes.NCRCODE+"信息失败!");
|
|
var lotonwip = frame.ICSLOTSIMULATION.Where(a => a.LOTNO == ncrdoc.SrcDocInfo && a.OPCODE == ncrdoc.OPCode).FirstOrDefault();
|
|
if (lotonwip == null)
|
|
throw new Exception("获取ncr单据:"+mes.NCRCODE+"对应的在制信息失败!");
|
|
lotonwip.GOODQTY = Convert.ToDecimal(mes.OKQUANTITY);
|
|
lotonwip.NGQTY = Convert.ToDecimal(mes.NGQUANTITY);
|
|
|
|
var lot = frame.ICSLOTONWIP.Where(a => a.LOTNO == ncrdoc.SrcDocInfo && a.OPCODE == ncrdoc.OPCode).FirstOrDefault();
|
|
lot.GOODQTY = Convert.ToInt32(mes.OKQUANTITY);
|
|
lot.NGQTY = Convert.ToInt32(mes.NGQUANTITY);
|
|
|
|
frame.SubmitChanges();
|
|
frame.Transaction.Commit();
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
frame.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
|
|
public static List<Material> GetOPBOM(string LotNo, string opcode, string Appconstr)
|
|
{
|
|
List<Material> List = new List<Material>();
|
|
try
|
|
{
|
|
string sql = @"
|
|
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) )
|
|
DROP TABLE #TEMP_MODD
|
|
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) )
|
|
DROP TABLE #TEMP_MONewbom
|
|
|
|
SELECT
|
|
lot.lotqty, mo.itemcode, rr.routecode, mo.workpoint
|
|
INTO #TEMP_MODD
|
|
FROM
|
|
icsitemlot lot
|
|
LEFT JOIN icsmo mo ON mo.mocode= lot.TransNO
|
|
AND mo.moseq= lot.TransLine
|
|
AND mo.workpoint= lot.workpoint
|
|
LEFT JOIN ICSMO2ROUTE rr ON rr.mocode= mo.mocode
|
|
AND rr.moid= mo.id
|
|
AND rr.workpoint= mo.workpoint
|
|
WHERE
|
|
lot.lotno= '" + LotNo + @"'
|
|
|
|
SELECT
|
|
itemcode, SBOMVER, workpoint INTO #TEMP_MONewbom
|
|
FROM
|
|
(
|
|
SELECT
|
|
MM.itemcode ,
|
|
mm.SBOMVER ,
|
|
MM.workpoint,
|
|
row_number ( ) OVER ( partition BY MM.itemcode ORDER BY mm.SBOMVER DESC ) rn
|
|
FROM
|
|
ICSSBOM MM
|
|
WHERE
|
|
EXISTS ( SELECT 1 FROM #TEMP_MODD DD WHERE MM.ITEMCODE= DD.ITEMCODE AND MM.workpoint= dd.workpoint )
|
|
) gg
|
|
WHERE
|
|
rn = 1
|
|
|
|
SELECT
|
|
ll.obitemcode, ll.obitemqty* dd.lotqty obitemqty
|
|
FROM
|
|
ICSOPBOMDETAIL ll
|
|
INNER JOIN #TEMP_MONewbom bb ON bb.itemcode= ll.itemcode
|
|
AND bb.WorkPoint= ll.workpoint and ll.opbomver=bb.SBOMVER
|
|
INNER JOIN #TEMP_MODD dd ON dd.routecode= ll.obcode
|
|
WHERE ll.opcode= '" + opcode + @"'
|
|
|
|
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) )
|
|
DROP TABLE #TEMP_MODD
|
|
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) )
|
|
DROP TABLE #TEMP_MONewbom
|
|
";
|
|
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
Material mm = new Material();
|
|
mm.materialCode = dr["obitemcode"].ToString();
|
|
mm.qty = Convert.ToInt32(Convert.ToDouble(dr["obitemqty"].ToString()));
|
|
List.Add(mm);
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception(ex.Message);
|
|
}
|
|
return List;
|
|
}
|
|
}
|
|
|
|
public class LOTMES
|
|
{
|
|
public string lotNo { get; set; }
|
|
public string lotQty { get; set; }
|
|
public string itemCode { get; set; }
|
|
|
|
public string invName { get; set; }
|
|
public string invStd { get; set; }
|
|
public string moCode { get; set; }
|
|
public string moSeq { get; set; }
|
|
public List<OPMES> list1 { get; set; }
|
|
|
|
|
|
|
|
|
|
}
|
|
public class OPMES
|
|
{
|
|
public string opCode { get; set; }
|
|
public string opDesc { get; set; }
|
|
public List<Material> list { get; set; }
|
|
}
|
|
public class Material
|
|
{
|
|
|
|
public string materialCode { get; set; }
|
|
public int qty { get; set; }
|
|
|
|
}
|
|
}
|