华恒Mes鼎捷代码
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

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; }
}
}