/*******************************************************************************
* Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
* 类的信息:
* 1.程序名称:PCModuleLogicDAL.cs
* 2.功能描述:生产配置数据库访问类(插入、修改、删除)
* 编辑履历:
* 作者 日期 版本 修改内容
* 陈冰 2014/09/3 1.00 新建
*******************************************************************************/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Dongke.IBOSS.PRD.Basics.BaseResources;
using Dongke.IBOSS.PRD.Basics.DataAccess;
using Dongke.IBOSS.PRD.Basics.Library;
using Dongke.IBOSS.PRD.Service.DataModels;
using Dongke.IBOSS.PRD.Service.SAPHegiiDataService;
using Dongke.IBOSS.PRD.WCF.DataModels;
using Dongke.IBOSS.PRD.WCF.DataModels.PCModule;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oracle.ManagedDataAccess.Client;
namespace Dongke.IBOSS.PRD.Service.PCModuleLogic
{
///
/// 生产配置数据库访问类(插入、修改、删除)
///
public partial class PCModuleLogicDAL
{
#region 生产线管理
///
/// 保存生产线
///
/// 生产线实体
/// 用户基本信息
///
public static int SaveProductionLine(ProductionLineEntity productionLine, SUserInfo sUserInfo)
{
int returnRows = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
try
{
#region 新建生产线
if (productionLine.ProductionLineID == 0)
{
#region 判断编码是否重复
string sqlText = " SELECT ProductionLineID "
+ " FROM TP_PC_ProductionLine "
+ " WHERE "
+ " AccountID=:accountID "
+ " AND ProductionLineCode=:productionLineCode";
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":productionLineCode",productionLine.ProductionLineCode),
};
string returnCode = oracleTrConn.GetSqlResultToStr(sqlText, paras);
if (!string.IsNullOrEmpty(returnCode))
{
return Constant.RETURN_IS_EXIST;
}
#endregion
#region 查询新ID
sqlText = "SELECT SEQ_PC_PRODUCTIONLINE_ID.nextval FROM dual";
productionLine.ProductionLineID = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText));
#endregion
#region 插入生产线
sqlText = "INSERT INTO TP_PC_ProductionLine (ProductionLineID,"
+ "ProductionLineCode,"
+ "ProductionLineName,"
+ "FlowXML,"
+ "Remarks,"
+ "AccountID,"
+ "CreateUserID,"
+ "UpdateUserID)"
+ " VALUES(:ProductionLineID,"
+ ":productionLineCode,"
+ ":productionLineName,"
+ ":flowXML,"
+ ":remarks,"
+ ":accountID,"
+ ":createUserID,"
+ ":updateUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":ProductionLineID",productionLine.ProductionLineID),
new OracleParameter(":productionLineCode",productionLine.ProductionLineCode),
new OracleParameter(":productionLineName",productionLine.ProductionLineName),
new OracleParameter(":flowXML", System.Text.Encoding.UTF8.GetBytes(productionLine.FlowXML)),
new OracleParameter(":remarks",productionLine.Remarks),
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":createUserID",sUserInfo.UserID),
new OracleParameter(":updateUserID",sUserInfo.UserID),
};
foreach (OracleParameter item in paras)
{
if (item.Value + "" == "")
{
item.Value = System.DBNull.Value;
}
}
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
//#region 查询新ID
//sqlText = "SELECT SEQ_PC_PRODUCTIONLINE_ID.currval FROM dual";
//productionLine.ProductionLineID = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText));
//#endregion
#region 插入工序
foreach (ProcedureEntity procedure in productionLine.ProcedureList)
{
sqlText = "SELECT SEQ_PC_PROCEDURE_PROCEDUREID.Nextval FROM dual";
procedure.ProcedureID = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText));
sqlText = "INSERT INTO TP_PC_Procedure ("
+ "ProcedureID,"
+ "NodeNo,"
+ "ProductionLineID,"
+ "ProcedureCode,"
+ "ProcedureName,"
+ "P_Name,"
+ "ProcedureModel,"
+ "ModelType,"
+ "NodeType,"
+ "MustFlag,"
+ "CollectType,"
+ "PieceType,"
+ "IsSpecialRework,"
+ "IsSemireWork,"
+ "OrganizationID,"
+ "Remarks,"
+ "AccountID,"
+ "CreateUserID,"
+ "UpdateUserID)"
+ " VALUES("
+ ":procedureID,"
+ ":nodeNo,"
+ ":productionLineID,"
+ ":procedureCode,"
+ ":procedureName,"
+ ":pName,"
+ ":procedureModel,"
+ ":ModelType,"
+ ":NodeType,"
+ ":mustFlag,"
+ ":collectType,"
+ ":pieceType,"
+ ":isSpecialRework,"
+ ":IsSemireWork,"
+ ":organizationID,"
+ ":remarks,"
+ ":accountID,"
+ ":createUserID,"
+ ":updateUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureCode",procedure.ProcedureCode),
new OracleParameter(":procedureName",procedure.ProcedureName),
new OracleParameter(":pName",procedure.PName),
new OracleParameter(":procedureModel",procedure.ProcedureModel),
new OracleParameter(":ModelType",procedure.ModelType),
new OracleParameter(":NodeType",procedure.NodeType),
new OracleParameter(":mustFlag",procedure.MustFlag),
new OracleParameter(":collectType",procedure.CollectType),
new OracleParameter(":pieceType",procedure.PieceType),
new OracleParameter(":isSpecialRework",procedure.IsSpecialRework),
new OracleParameter(":IsSemireWork",procedure.IsSemireWork),
new OracleParameter(":organizationID",procedure.OrganizationID),
new OracleParameter(":remarks",procedure.Remarks),
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":createUserID",sUserInfo.UserID),
new OracleParameter(":updateUserID",sUserInfo.UserID),
};
foreach (OracleParameter item in paras)
{
if (item.Value + "" == "")
{
item.Value = System.DBNull.Value;
}
}
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
}
#endregion
#region 编辑生产线
else
{
#region 校验时间戳
// todo
string sql = "SELECT OPTimeStamp FROM TP_PC_ProductionLine"
+ " WHERE ProductionLineID = " + productionLine.ProductionLineID + " and OPTimeStamp = :OPTimeStamp";
OracleParameter[] parmetersSql = new OracleParameter[]
{
new OracleParameter(":OPTimeStamp", OracleDbType.TimeStamp, productionLine.OPTimeStamp, ParameterDirection.Input),
};
DataSet returnDataset = oracleTrConn.GetSqlResultToDs(sql, parmetersSql);
if (returnDataset != null && returnDataset.Tables[0].Rows.Count == 0)
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
return Constant.RETURN_IS_DATACHANGED;
}
#endregion
#region 判断编码是否重复
string sqlText = " SELECT ProductionLineID "
+ " FROM TP_PC_ProductionLine "
+ " WHERE "
+ " AccountID=:accountID "
+ " AND ProductionLineCode=:productionLineCode"
+ " AND ProductionLineID <> :productionLineID";
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":productionLineCode",productionLine.ProductionLineCode),
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
};
string returnCode = oracleTrConn.GetSqlResultToStr(sqlText, paras);
if (!string.IsNullOrEmpty(returnCode))
{
return Constant.RETURN_IS_EXIST;
}
#endregion
#region 编辑生产线
sqlText = "UPDATE TP_PC_ProductionLine SET "
+ "ProductionLineName=:productionLineName,"
+ "FlowXML=:flowXML,"
+ "Remarks=:remarks,"
+ "UpdateTime=sysdate, "
+ "UpdateUserID=:updateUserID "
+ " WHERE ProductionLineID=:productionLineID";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineName",productionLine.ProductionLineName),
new OracleParameter(":flowXML", OracleDbType.Blob,System.Text.Encoding.UTF8.GetBytes(productionLine.FlowXML),ParameterDirection.Input),
new OracleParameter(":remarks",productionLine.Remarks),
new OracleParameter(":updateUserID",OracleDbType.Int32, sUserInfo.UserID,ParameterDirection.Input),
new OracleParameter(":productionLineID", OracleDbType.Int32, productionLine.ProductionLineID,ParameterDirection.Input)
};
//foreach (OracleParameter item in paras)
//{
// if (item.Value + "" == "")
// {
// item.Value = System.DBNull.Value;
// }
//}
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 编辑工序
foreach (ProcedureEntity procedure in productionLine.ProcedureList)
{
if (procedure.EditingAddFlag)
{
#region 编辑时新添加的节点
sqlText = "SELECT SEQ_PC_PROCEDURE_PROCEDUREID.Nextval FROM dual";
procedure.ProcedureID = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText));
sqlText = "INSERT INTO TP_PC_Procedure ("
+ "ProcedureID,"
+ "NodeNo,"
+ "ProductionLineID,"
+ "ProcedureCode,"
+ "ProcedureName,"
+ "P_Name,"
+ "ProcedureModel,"
+ "ModelType,"
+ "NodeType,"
+ "MustFlag,"
+ "CollectType,"
+ "PieceType,"
+ "IsSpecialRework,"
+ "IsSemireWork,"
+ "OrganizationID,"
+ "Remarks,"
+ "AccountID,"
+ "CreateUserID,"
+ "UpdateUserID)"
+ " VALUES("
+ ":procedureID,"
+ ":nodeNo,"
+ ":productionLineID,"
+ ":procedureCode,"
+ ":procedureName,"
+ ":pName,"
+ ":procedureModel,"
+ ":ModelType,"
+ ":NodeType,"
+ ":mustFlag,"
+ ":collectType,"
+ ":pieceType,"
+ ":isSpecialRework,"
+ ":isSemireWork,"
+ ":organizationID,"
+ ":remarks,"
+ ":accountID,"
+ ":createUserID,"
+ ":updateUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureCode",procedure.ProcedureCode),
new OracleParameter(":procedureName",procedure.ProcedureName),
new OracleParameter(":pName",procedure.PName),
new OracleParameter(":procedureModel",procedure.ProcedureModel),
new OracleParameter(":ModelType",procedure.ModelType),
new OracleParameter(":NodeType",procedure.NodeType),
new OracleParameter(":mustFlag",procedure.MustFlag),
new OracleParameter(":collectType",procedure.CollectType),
new OracleParameter(":pieceType",procedure.PieceType),
new OracleParameter(":isSpecialRework",procedure.IsSpecialRework),
new OracleParameter(":isSemireWork",procedure.IsSemireWork),
new OracleParameter(":organizationID",procedure.OrganizationID),
new OracleParameter(":remarks",procedure.Remarks),
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":createUserID",sUserInfo.UserID),
new OracleParameter(":updateUserID",sUserInfo.UserID),
};
#endregion
}
else
{
#region 编辑
sqlText = "UPDATE TP_PC_Procedure SET "
+ " ProcedureName=:procedureName,"
+ " P_Name=:pName,"
+ " ProcedureCode=:ProcedureCode,"
+ " ModelType=:modelType,"
+ " MustFlag=:mustFlag,"
+ " CollectType=:collectType,"
+ " OrganizationID=:organizationID,"
+ " NodeType=:nodeType,"
+ " PieceType=:pieceType,"
+ " IsSpecialRework=:isSpecialRework,"
+ " IsSemireWork=:isSemireWork,"
+ " NodeNo=:nodeNo,"
+ " Remarks=:remarks,"
+ " updateUserID=:updateUserID,"
+ " UpdateTime=sysdate"
+ " WHERE NodeNo=:nodeNo "
+ " AND ProductionLineID=:productionLineID";
paras = new OracleParameter[]
{
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureName",procedure.ProcedureName),
new OracleParameter(":pName",procedure.PName),
new OracleParameter(":ProcedureCode",procedure.ProcedureCode),
new OracleParameter(":modelType",procedure.ModelType),
new OracleParameter(":mustFlag",procedure.MustFlag),
new OracleParameter(":collectType",procedure.CollectType),
new OracleParameter(":organizationID",procedure.OrganizationID),
new OracleParameter(":nodeType",procedure.NodeType),
new OracleParameter(":pieceType",procedure.PieceType),
new OracleParameter(":isSpecialRework",procedure.IsSpecialRework),
new OracleParameter(":isSemireWork",procedure.IsSemireWork),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":remarks",procedure.Remarks),
new OracleParameter(":updateUserID",sUserInfo.UserID),
};
#endregion
}
foreach (OracleParameter item in paras)
{
if (item.Value + "" == "")
{
item.Value = System.DBNull.Value;
}
}
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 先删除生产工序流程明细 然后再插入
sqlText = "DELETE TP_PC_ProcedureFlow WHERE ProductionLineID=:productionLineID";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应产品 然后再插入
sqlText = "DELETE TP_PC_ProcedureGoods WHERE ProductionLineID=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应工号 然后再插入
sqlText = "DELETE TP_PC_ProcedureUser WHERE ProductionLineID=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应缺陷 然后再插入
sqlText = "DELETE TP_PC_ProcedureDefect WHERE ProductionLineID=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除缺陷对应工序工种表 然后再插入
sqlText = "DELETE TP_PC_DefectProcedureJobs WHERE ProductionLineID=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
}
#endregion
#region 插入生产工序属性等信息
foreach (ProcedureEntity procedure in productionLine.ProcedureList)
{
string sqlText;
OracleParameter[] paras;
#region 插入生产工序流程明细
if (procedure.ProcedureFlowDetailList != null)
{
foreach (ProcedureFlowEntity flowDetail in procedure.ProcedureFlowDetailList)
{
ProcedureEntity procedureWhere = productionLine.ProcedureList.Where(p => p.NodeNo == flowDetail.ArriveNodeNo).SingleOrDefault();
// 没有找到对应节点的ID
if (procedureWhere == null)
{
return Constant.INT_IS_ZERO;
}
else
{
flowDetail.ArriveProcedureID = procedureWhere.ProcedureID;
}
sqlText = "INSERT INTO TP_PC_ProcedureFlow ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "FlowFlag,"
+ "ArriveProcedureID,"
+ "ArriveNodeNo"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":flowFlag,"
+ ":arriveProcedureID,"
+ ":arriveNodeNo"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":flowFlag",flowDetail.FlowFlag),
new OracleParameter(":arriveProcedureID",flowDetail.ArriveProcedureID),
new OracleParameter(":arriveNodeNo",flowDetail.ArriveNodeNo),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
}
#endregion
#region 插入生产工序对应产品表
foreach (DataRow row in procedure.ProcedureGoodsTable.Rows)
{
sqlText = "INSERT INTO TP_PC_ProcedureGoods ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "GOODSID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":goodsID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":goodsID",OracleDbType.Int32,row["goodsID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入生产工序对应工号表
foreach (DataRow row in procedure.ProcedureUserTable.Rows)
{
sqlText = "INSERT INTO TP_PC_ProcedureUser ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "UserID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":userID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":userID",OracleDbType.Int32,row["userID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入生产工序对应缺陷表
foreach (DataRow row in procedure.ProcedureDefectTable.Rows)
{
if (row["DefectID"] == DBNull.Value)
{
continue;
}
sqlText = "INSERT INTO TP_PC_ProcedureDefect ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "DefectID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":defectID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":defectID",OracleDbType.Int32,row["DefectID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入缺陷对应工序工种表
foreach (DataRow row in procedure.DefectProcedureJobsTable.Rows)
{
if (row["DefectID"] == DBNull.Value || row["jobsID"] == DBNull.Value)
{
continue;
}
sqlText = "INSERT INTO TP_PC_DefectProcedureJobs ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "DefectID,"
+ "JobsID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":DefectID,"
+ ":jobsID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":DefectID",OracleDbType.Int32,row["DefectID"],ParameterDirection.Input),
new OracleParameter(":jobsID",OracleDbType.Int32,row["jobsID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
}
#endregion
oracleTrConn.Commit();
}
catch (Exception ex)
{
oracleTrConn.Rollback();
throw ex;
}
finally
{
// 释放资源
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Disconnect();
}
}
return returnRows;
}
///
/// 停用生产线
///
/// 生产线ID
/// 用户基本信息
/// int
///
/// 陈冰 2014.09.15 新建
///
public static int StopProductionLine(int lineID, int flag, SUserInfo sUserInfo)
{
int returnRows = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
try
{
// 更新总表
// 更新明细表
if (flag == 0)
{
string sqlText = "UPDATE tp_pc_productionline SET valueflag=0,UpdateUserID=:updateUserID WHERE productionlineid=:productionLineID";
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter(":updateUserID",sUserInfo.UserID),
new OracleParameter(":productionLineID",lineID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
sqlText = "UPDATE TP_PC_Procedure SET valueflagback=valueflag, valueflag=0,UpdateUserID=:updateUserID WHERE productionlineid=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
else
{
string sqlText = "UPDATE tp_pc_productionline SET valueflag=1,UpdateUserID=:updateUserID WHERE productionlineid=:productionLineID";
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter(":updateUserID",sUserInfo.UserID),
new OracleParameter(":productionLineID",lineID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
sqlText = "UPDATE TP_PC_Procedure SET valueflag=valueflagback, UpdateUserID=:updateUserID WHERE productionlineid=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
oracleTrConn.Commit();
}
catch (Exception ex)
{
oracleTrConn.Rollback();
throw ex;
}
finally
{
// 释放资源
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Disconnect();
}
}
return returnRows;
}
#endregion
#region 班次配置
///
/// 保存班次配置信息
///
/// 班次配置实体
/// 班次配置明细table
/// 用户基本信息
/// >0 保存成功 else 失败
///
/// 作者 日期 内容
/// 冯雪 2014-9-24 新建
///
public static int SaveClassesSetting(ClassesSettingEntity setEntity, DataTable dtClassesSetting, SUserInfo sUserInfo)
{
int returnRows = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
try
{
oracleTrConn.Connect();
int classesSettingID = 0;
if (setEntity.ClassesSettingID == 0)
{
// 查询新插入的生产数据ID
string sqlText = "SELECT SEQ_PC_ClassesSetting_ID.NEXTVAL FROM dual";
classesSettingID = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText));
// 插入班次配置表
string sqlString1 = " INSERT INTO TP_PC_ClassesSetting "
+ " (ClassesSettingID,AccountDate,UserID,UserCode, "
+ " Remarks,AccountID,CreateTime,CreateUserID,UpdateUserID) "
+ " VALUES (:ClassesSettingID,:AccountDate,:userID,:userCode, "
+ " :remarks,:accountID,sysdate,:createUserID,:updateUserID)";
OracleParameter[] parmeters1 = new OracleParameter[]
{
new OracleParameter(":ClassesSettingID",OracleDbType.Int32,classesSettingID,ParameterDirection.Input),
new OracleParameter(":accountID",OracleDbType.Int32,sUserInfo.AccountID,ParameterDirection.Input),
new OracleParameter(":userID",OracleDbType.Int32,setEntity.UserID,ParameterDirection.Input),
new OracleParameter(":userCode",OracleDbType.Varchar2,setEntity.UserCode,ParameterDirection.Input),
new OracleParameter(":AccountDate",OracleDbType.Date,setEntity.AccountDate,ParameterDirection.Input),
new OracleParameter(":remarks",OracleDbType.Varchar2,setEntity.Remarks,ParameterDirection.Input),
new OracleParameter(":accountID",OracleDbType.Int32,sUserInfo.AccountID,ParameterDirection.Input),
new OracleParameter(":createUserID",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input),
new OracleParameter(":updateUserID",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input),
};
returnRows = oracleTrConn.ExecuteNonQuery(sqlString1, parmeters1);
}
else
{
classesSettingID = setEntity.ClassesSettingID;
// 删除以前的班次
string sqlDelete = "DELETE FROM TP_PC_ClassesDetail WHERE ClassesSettingID=:ClassesSettingID";
OracleParameter[] parmeters1 = new OracleParameter[]
{
new OracleParameter(":ClassesSettingID",OracleDbType.Int32,classesSettingID,ParameterDirection.Input),
};
returnRows = oracleTrConn.ExecuteNonQuery(sqlDelete, parmeters1);
}
#region 保存班次配置明细信息
foreach (DataRow dataRow in dtClassesSetting.Rows)
{
if (dataRow["UJobsId"].ToString() == "" && dataRow["StaffCode"].ToString() == "")
{
continue;
}
if (dataRow.RowState == DataRowState.Deleted)
{
continue;
}
string sqlInsertString = "INSERT INTO TP_PC_ClassesDetail "
+ " (ClassesSettingID,AccountDate,userid,usercode,ujobsid,staffid,sjobsid,staffstatus,"
+ " remarks,accountid,createtime,createuserid,UpdateUserID,UJobsNum) "
+ "VALUES (:settingID,:AccountDate,:userid,:usercode,:ujobsid,:staffid,:sjobsid,:staffstatus,"
+ " :remarks,:accountid,sysdate,:createuserid,:updateUserID,:uJobsNum)";
int UJobsNum = 1;//默认一个
if (dtClassesSetting.Select("ujobsid=" + dataRow["UJobsId"]).Length > 0)
{
UJobsNum = dtClassesSetting.Select("ujobsid=" + dataRow["UJobsId"]).Length;
}
OracleParameter[] oracleParameter = new OracleParameter[]
{
new OracleParameter(":settingID",OracleDbType.Int32,classesSettingID,ParameterDirection.Input),
new OracleParameter(":userid",OracleDbType.Int32,dataRow["userid"].ToString(),ParameterDirection.Input),
new OracleParameter(":usercode",OracleDbType.Varchar2,dataRow["usercode"].ToString(),ParameterDirection.Input),
new OracleParameter(":ujobsid",OracleDbType.Int32,dataRow["UJobsId"].ToString(),ParameterDirection.Input),
new OracleParameter(":staffid",OracleDbType.Int32,dataRow["staffid"].ToString(),ParameterDirection.Input),
new OracleParameter(":sjobsid",OracleDbType.Int32,dataRow["Jobs"].ToString(),ParameterDirection.Input),
new OracleParameter(":staffstatus",OracleDbType.Int32,dataRow["staffstatus"].ToString(),ParameterDirection.Input),
new OracleParameter(":remarks",OracleDbType.Varchar2,dataRow["remarks"].ToString(),ParameterDirection.Input),
new OracleParameter(":AccountDate",OracleDbType.Date,setEntity.AccountDate,ParameterDirection.Input),
new OracleParameter(":accountid",OracleDbType.Int32,sUserInfo.AccountID,ParameterDirection.Input),
new OracleParameter(":createuserid",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input),
new OracleParameter(":updateUserID",OracleDbType.Int32,sUserInfo.UserID,ParameterDirection.Input),
new OracleParameter(":uJobsNum",OracleDbType.Decimal,UJobsNum,ParameterDirection.Input)
};
returnRows = oracleTrConn.ExecuteNonQuery(sqlInsertString, oracleParameter);
}
#endregion
oracleTrConn.Commit();
oracleTrConn.Disconnect();
return returnRows;
}
catch (Exception ex)
{
oracleTrConn.Rollback();
oracleTrConn.Disconnect();
throw ex;
}
finally
{
// 释放资源
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Disconnect();
}
}
}
#endregion
///
/// 保存生产线 xuwei modify 2019-11-22
///
/// 生产线实体
/// 用户基本信息
///
public static int SaveProductionLine2(ProductionLineEntity productionLine, SUserInfo sUserInfo)
{
int returnRows = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
try
{
#region 验证工序个数
if (DataManager.LicDataSet != null)
{
int licCount = Convert.ToInt32(DataManager.LicDataSet.Tables["Info"].Rows[0]["PFNum"]);
if (licCount > -1)
{
int pNum = Convert.ToInt32(oracleTrConn.GetSqlResultToObj("select count(*) from tp_pc_procedure p where p.valueflag = '1' and p.productionlineid <> " + productionLine.ProductionLineID));
foreach (ProcedureEntity procedure in productionLine.ProcedureList)
{
if(procedure.ProcedureState != 2)
{
pNum++;
}
}
if (pNum > licCount)
{
oracleTrConn.Rollback();
return -10;
}
}
}
#endregion
#region 新建生产线
if (productionLine.ProductionLineID == 0)
{
#region 判断编码是否重复
string sqlText = " SELECT ProductionLineID "
+ " FROM TP_PC_ProductionLine "
+ " WHERE "
+ " AccountID=:accountID "
+ " AND ProductionLineCode=:productionLineCode";
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":productionLineCode",productionLine.ProductionLineCode),
};
string returnCode = oracleTrConn.GetSqlResultToStr(sqlText, paras);
if (!string.IsNullOrEmpty(returnCode))
{
return Constant.RETURN_IS_EXIST;
}
#endregion
#region 查询新ID
sqlText = "SELECT SEQ_PC_PRODUCTIONLINE_ID.nextval FROM dual";
productionLine.ProductionLineID = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText));
#endregion
#region 插入生产线
sqlText = "INSERT INTO TP_PC_ProductionLine (ProductionLineID,"
+ "ProductionLineCode,"
+ "ProductionLineName,"
+ "FlowXML,"
+ "Remarks,"
+ "AccountID,"
+ "CreateUserID,"
+ "UpdateUserID)"
+ " VALUES(:ProductionLineID,"
+ ":productionLineCode,"
+ ":productionLineName,"
+ ":flowXML,"
+ ":remarks,"
+ ":accountID,"
+ ":createUserID,"
+ ":updateUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":ProductionLineID",productionLine.ProductionLineID),
new OracleParameter(":productionLineCode",productionLine.ProductionLineCode),
new OracleParameter(":productionLineName",productionLine.ProductionLineName),
new OracleParameter(":flowXML", System.Text.Encoding.UTF8.GetBytes(productionLine.FlowXML)),
new OracleParameter(":remarks",productionLine.Remarks),
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":createUserID",sUserInfo.UserID),
new OracleParameter(":updateUserID",sUserInfo.UserID),
};
foreach (OracleParameter item in paras)
{
if (item.Value + "" == "")
{
item.Value = System.DBNull.Value;
}
}
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
//#region 查询新ID
//sqlText = "SELECT SEQ_PC_PRODUCTIONLINE_ID.currval FROM dual";
//productionLine.ProductionLineID = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText));
//#endregion
#region 插入工序
foreach (ProcedureEntity procedure in productionLine.ProcedureList)
{
sqlText = "SELECT SEQ_PC_PROCEDURE_PROCEDUREID.Nextval FROM dual";
procedure.ProcedureID = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText));
sqlText = "INSERT INTO TP_PC_Procedure ("
+ "ProcedureID,"
+ "NodeNo,"
+ "ProductionLineID,"
+ "ProcedureCode,"
+ "ProcedureName,"
+ "P_Name,"
+ "ProcedureModel,"
+ "ModelType,"
+ "NodeType,"
+ "MustFlag,"
+ "CollectType,"
+ "PieceType,"
+ "IsSpecialRework,"
+ "IsSemireWork,"
+ "OrganizationID,"
+ "Remarks,"
+ "AccountID,"
+ "CreateUserID,"
+ "UpdateUserID,misspriority,displayno,UNDOFLAG,DeliverType,BarCodePrintCopies,BarCodeFlag)"
+ " VALUES("
+ ":procedureID,"
+ ":nodeNo,"
+ ":productionLineID,"
+ ":procedureCode,"
+ ":procedureName,"
+ ":pName,"
+ ":procedureModel,"
+ ":ModelType,"
+ ":NodeType,"
+ ":mustFlag,"
+ ":collectType,"
+ ":pieceType,"
+ ":isSpecialRework,"
+ ":isSemireWork,"
+ ":organizationID,"
+ ":remarks,"
+ ":accountID,"
+ ":createUserID,"
+ ":updateUserID,:misspriority,:displayno,:UNDOFLAG,:DeliverType,:BarCodePrintCopies,:BarCodeFlag"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureCode",procedure.ProcedureCode),
new OracleParameter(":procedureName",procedure.ProcedureName),
new OracleParameter(":pName",procedure.PName),
new OracleParameter(":procedureModel",procedure.ProcedureModel),
new OracleParameter(":ModelType",procedure.ModelType),
new OracleParameter(":NodeType",procedure.NodeType),
new OracleParameter(":mustFlag",procedure.MustFlag),
new OracleParameter(":collectType",procedure.CollectType),
new OracleParameter(":pieceType",procedure.PieceType),
new OracleParameter(":isSpecialRework",procedure.IsSpecialRework),
new OracleParameter(":isSemireWork",procedure.IsSemireWork),
new OracleParameter(":organizationID",procedure.OrganizationID),
new OracleParameter(":remarks",procedure.Remarks),
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":createUserID",sUserInfo.UserID),
new OracleParameter(":updateUserID",sUserInfo.UserID),
new OracleParameter(":misspriority",procedure.MissPriority),
new OracleParameter(":displayno",procedure.DisplayNo),
new OracleParameter(":UNDOFLAG",procedure.UnDo),
new OracleParameter(":DeliverType",procedure.DeliverType),
new OracleParameter(":BarCodePrintCopies",procedure.BarCodePrintCopies),
new OracleParameter(":BarCodeFlag",procedure.BarCodeFlag),
};
foreach (OracleParameter item in paras)
{
if (item.Value + "" == "")
{
item.Value = System.DBNull.Value;
}
}
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
}
#endregion
#region 编辑生产线
else
{
#region 校验时间戳
// todo
string sql = "SELECT OPTimeStamp FROM TP_PC_ProductionLine"
+ " WHERE ProductionLineID = " + productionLine.ProductionLineID + " and OPTimeStamp = :OPTimeStamp";
OracleParameter[] parmetersSql = new OracleParameter[]
{
new OracleParameter(":OPTimeStamp", OracleDbType.TimeStamp, productionLine.OPTimeStamp, ParameterDirection.Input),
};
DataSet returnDataset = oracleTrConn.GetSqlResultToDs(sql, parmetersSql);
if (returnDataset != null && returnDataset.Tables[0].Rows.Count == 0)
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
return Constant.RETURN_IS_DATACHANGED;
}
#endregion
#region 判断编码是否重复
string sqlText = " SELECT ProductionLineID "
+ " FROM TP_PC_ProductionLine "
+ " WHERE "
+ " AccountID=:accountID "
+ " AND ProductionLineCode=:productionLineCode"
+ " AND ProductionLineID <> :productionLineID";
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":productionLineCode",productionLine.ProductionLineCode),
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
};
string returnCode = oracleTrConn.GetSqlResultToStr(sqlText, paras);
if (!string.IsNullOrEmpty(returnCode))
{
return Constant.RETURN_IS_EXIST;
}
#endregion
#region 编辑生产线
sqlText = "UPDATE TP_PC_ProductionLine SET "
+ "ProductionLineName=:productionLineName,"
+ "FlowXML=:flowXML,"
+ "Remarks=:remarks,"
+ "UpdateTime=sysdate, "
+ "UpdateUserID=:updateUserID "
+ " WHERE ProductionLineID=:productionLineID";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineName",productionLine.ProductionLineName),
new OracleParameter(":flowXML", OracleDbType.Blob,System.Text.Encoding.UTF8.GetBytes(productionLine.FlowXML),ParameterDirection.Input),
new OracleParameter(":remarks",productionLine.Remarks),
new OracleParameter(":updateUserID",OracleDbType.Int32, sUserInfo.UserID,ParameterDirection.Input),
new OracleParameter(":productionLineID", OracleDbType.Int32, productionLine.ProductionLineID,ParameterDirection.Input)
};
//foreach (OracleParameter item in paras)
//{
// if (item.Value + "" == "")
// {
// item.Value = System.DBNull.Value;
// }
//}
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 编辑工序
foreach (ProcedureEntity procedure in productionLine.ProcedureList)
{
//if (procedure.EditingAddFlag)
if (procedure.ProcedureState == 1)
{
#region 编辑时新添加的节点
sqlText = "SELECT SEQ_PC_PROCEDURE_PROCEDUREID.Nextval FROM dual";
procedure.ProcedureID = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText));
sqlText = "INSERT INTO TP_PC_Procedure ("
+ "ProcedureID,"
+ "NodeNo,"
+ "ProductionLineID,"
+ "ProcedureCode,"
+ "ProcedureName,"
+ "P_Name,"
+ "ProcedureModel,"
+ "ModelType,"
+ "NodeType,"
+ "MustFlag,"
+ "CollectType,"
+ "PieceType,"
+ "IsSpecialRework,"
+ "IsSemireWork,"
+ "OrganizationID,"
+ "Remarks,"
+ "AccountID,"
+ "CreateUserID,"
+ "UpdateUserID,misspriority,displayno,UNDOFLAG,DeliverType,BarCodePrintCopies,BarCodeFlag)"
+ " VALUES("
+ ":procedureID,"
+ ":nodeNo,"
+ ":productionLineID,"
+ ":procedureCode,"
+ ":procedureName,"
+ ":pName,"
+ ":procedureModel,"
+ ":ModelType,"
+ ":NodeType,"
+ ":mustFlag,"
+ ":collectType,"
+ ":pieceType,"
+ ":isSpecialRework,"
+ ":isSemireWork,"
+ ":organizationID,"
+ ":remarks,"
+ ":accountID,"
+ ":createUserID,"
+ ":updateUserID,:misspriority,:displayno,:UNDOFLAG,:DeliverType,:BarCodePrintCopies,:BarCodeFlag"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureCode",procedure.ProcedureCode),
new OracleParameter(":procedureName",procedure.ProcedureName),
new OracleParameter(":pName",procedure.PName),
new OracleParameter(":procedureModel",procedure.ProcedureModel),
new OracleParameter(":ModelType",procedure.ModelType),
new OracleParameter(":NodeType",procedure.NodeType),
new OracleParameter(":mustFlag",procedure.MustFlag),
new OracleParameter(":collectType",procedure.CollectType),
new OracleParameter(":pieceType",procedure.PieceType),
new OracleParameter(":isSpecialRework",procedure.IsSpecialRework),
new OracleParameter(":isSemireWork",procedure.IsSemireWork),
new OracleParameter(":organizationID",procedure.OrganizationID),
new OracleParameter(":remarks",procedure.Remarks),
new OracleParameter(":accountID",sUserInfo.AccountID),
new OracleParameter(":createUserID",sUserInfo.UserID),
new OracleParameter(":updateUserID",sUserInfo.UserID),
new OracleParameter(":misspriority",procedure.MissPriority),
new OracleParameter(":displayno",procedure.DisplayNo),
new OracleParameter(":UNDOFLAG",procedure.UnDo),
new OracleParameter(":DeliverType",procedure.DeliverType),
new OracleParameter(":BarCodePrintCopies",procedure.BarCodePrintCopies),
new OracleParameter(":BarCodeFlag",procedure.BarCodeFlag),
};
#endregion
}
else if (procedure.ProcedureState == 2) //后添加的,删除后标用节点
{
#region 编辑
sqlText = "update TP_PC_Procedure set valueflag=0 "
+ " WHERE ProcedureID=:procedureID "
+ " AND ProductionLineID=:productionLineID";
paras = new OracleParameter[]
{
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
};
#endregion
}
else
{
#region 编辑
sqlText = "UPDATE TP_PC_Procedure SET "
+ " ProcedureName=:procedureName,"
+ " P_Name=:pName,"
+ " ProcedureCode=:ProcedureCode,"
+ " ModelType=:modelType,"
+ " MustFlag=:mustFlag,"
+ " CollectType=:collectType,"
+ " OrganizationID=:organizationID,"
+ " NodeType=:nodeType,"
+ " PieceType=:pieceType,"
+ " IsSpecialRework=:isSpecialRework,"
+ " IsSemireWork=:isSemireWork,"
+ " PrintType=:printType," //xuwei add 2019-11-20
+ " IsGlazeChange=:IsGlazeChange," //xuwei add 2020-01-02
+ " NodeNo=:nodeNo,"
+ " Remarks=:remarks,"
+ " updateUserID=:updateUserID,"
+ " UpdateTime=sysdate,"
+ " misspriority=:misspriority,"
+ " displayno=:displayno,"
+ " UNDOFLAG=:UNDOFLAG,"
+ " DeliverType=:DeliverType,"
+ " BarCodePrintCopies=:BarCodePrintCopies,"
+ " BarCodeFlag=:BarCodeFlag"
+ " WHERE NodeNo=:nodeNo "
+ " AND ProductionLineID=:productionLineID";
paras = new OracleParameter[]
{
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureName",procedure.ProcedureName),
new OracleParameter(":pName",procedure.PName),
new OracleParameter(":ProcedureCode",procedure.ProcedureCode),
new OracleParameter(":modelType",procedure.ModelType),
new OracleParameter(":mustFlag",procedure.MustFlag),
new OracleParameter(":collectType",procedure.CollectType),
new OracleParameter(":organizationID",procedure.OrganizationID),
new OracleParameter(":nodeType",procedure.NodeType),
new OracleParameter(":pieceType",procedure.PieceType),
new OracleParameter(":isSpecialRework",procedure.IsSpecialRework),
new OracleParameter(":isSemireWork",procedure.IsSemireWork),
new OracleParameter(":printType",procedure.PrintType),//xuwei add 2019-11-20
new OracleParameter(":IsGlazeChange",procedure.IsGlazeChange),//xuwei add 2020-01-02
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":remarks",procedure.Remarks),
new OracleParameter(":updateUserID",sUserInfo.UserID),
new OracleParameter(":misspriority",procedure.MissPriority),
new OracleParameter(":displayno",procedure.DisplayNo),
new OracleParameter(":UNDOFLAG",procedure.UnDo),
new OracleParameter(":DeliverType",procedure.DeliverType),
new OracleParameter(":BarCodePrintCopies",procedure.BarCodePrintCopies),
new OracleParameter(":BarCodeFlag",procedure.BarCodeFlag),
};
#endregion
}
foreach (OracleParameter item in paras)
{
if (item.Value + "" == "")
{
item.Value = System.DBNull.Value;
}
}
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 先删除生产工序流程明细 然后再插入
sqlText = "DELETE TP_PC_ProcedureFlow WHERE ProductionLineID=:productionLineID";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应产品 然后再插入
sqlText = "DELETE TP_PC_ProcedureGoods WHERE ProductionLineID=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应工号 然后再插入
sqlText = "DELETE TP_PC_ProcedureUser WHERE ProductionLineID=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应缺陷 然后再插入
sqlText = "DELETE TP_PC_ProcedureDefect WHERE ProductionLineID=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除缺陷对应工序工种表 然后再插入
sqlText = "DELETE TP_PC_DefectProcedureJobs WHERE ProductionLineID=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应窑炉 然后再插入
sqlText = "DELETE TP_PC_ProcedureKiln WHERE ProductionLineID=:productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除半检产品等级 然后再插入 xuwei add 2019-12-12
sqlText = "DELETE TP_PC_PROCEDUREGOODSLEVEL WHERE PRODUCTIONLINEID = :productionLineID";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
}
#endregion
#region 插入生产工序属性等信息
foreach (ProcedureEntity procedure in productionLine.ProcedureList)
{
string sqlText;
OracleParameter[] paras;
#region 插入生产工序流程明细
if (procedure.ProcedureFlowDetailList != null)
{
foreach (ProcedureFlowEntity flowDetail in procedure.ProcedureFlowDetailList)
{
ProcedureEntity procedureWhere = productionLine.ProcedureList.Where(p => p.NodeNo == flowDetail.ArriveNodeNo).SingleOrDefault();
// 没有找到对应节点的ID
if (procedureWhere == null)
{
return Constant.INT_IS_ZERO;
}
else
{
flowDetail.ArriveProcedureID = procedureWhere.ProcedureID;
}
sqlText = "INSERT INTO TP_PC_ProcedureFlow ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "FlowFlag,"
+ "ArriveProcedureID,"
+ "ArriveNodeNo"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":flowFlag,"
+ ":arriveProcedureID,"
+ ":arriveNodeNo"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":flowFlag",flowDetail.FlowFlag),
new OracleParameter(":arriveProcedureID",flowDetail.ArriveProcedureID),
new OracleParameter(":arriveNodeNo",flowDetail.ArriveNodeNo),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
}
#endregion
#region 插入生产工序对应产品表
foreach (DataRow row in procedure.ProcedureGoodsTable.Rows)
{
sqlText = "INSERT INTO TP_PC_ProcedureGoods ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "GOODSID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":goodsID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":goodsID",OracleDbType.Int32,row["goodsID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入生产工序对应工号表
foreach (DataRow row in procedure.ProcedureUserTable.Rows)
{
sqlText = "INSERT INTO TP_PC_ProcedureUser ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "UserID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":userID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":userID",OracleDbType.Int32,row["userID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入生产工序对应缺陷表
foreach (DataRow row in procedure.ProcedureDefectTable.Rows)
{
if (row["DefectID"] == DBNull.Value)
{
continue;
}
sqlText = "INSERT INTO TP_PC_ProcedureDefect ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "DefectID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":defectID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":defectID",OracleDbType.Int32,row["DefectID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入缺陷对应工序工种表
foreach (DataRow row in procedure.DefectProcedureJobsTable.Rows)
{
if (row["DefectID"] == DBNull.Value || row["jobsID"] == DBNull.Value)
{
continue;
}
sqlText = "INSERT INTO TP_PC_DefectProcedureJobs ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "DefectID,"
+ "JobsID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":DefectID,"
+ ":jobsID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":DefectID",OracleDbType.Int32,row["DefectID"],ParameterDirection.Input),
new OracleParameter(":jobsID",OracleDbType.Int32,row["jobsID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入生产工序对应窑炉
if (procedure.ProcedureKilnTable != null)
{
foreach (DataRow row in procedure.ProcedureKilnTable.Rows)
{
sqlText = "INSERT INTO tp_pc_procedurekiln ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "KilnID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":kilnID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",productionLine.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":kilnID",OracleDbType.Int32,row["kilnID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
}
#endregion
#region 插入生产工序对应半检产品等级 xuwei add 2019-12-12
if (!string.IsNullOrEmpty(procedure.SemiGoodsLevel))
{
string[] ids = procedure.SemiGoodsLevel.Split(',');
string sqlStr = @"
BEGIN
";
for (int i = 0; i < ids.Length; i++)
{
sqlStr += $@"
INSERT INTO TP_PC_PROCEDUREGOODSLEVEL
( PRODUCTIONLINEID, PROCEDUREID, GOODSLEVELTYPEID)
VALUES
(:PRODUCTIONLINEID, :PROCEDUREID, {ids[i]});
";
}
sqlStr += "END;";
oracleTrConn.ExecuteNonQuery(
sqlStr,
new OracleParameter[]
{
new OracleParameter(":PRODUCTIONLINEID",productionLine.ProductionLineID),
new OracleParameter(":PROCEDUREID",procedure.ProcedureID)
}
);
}
#endregion
}
#endregion
oracleTrConn.Commit();
}
catch (Exception ex)
{
oracleTrConn.Rollback();
throw ex;
}
finally
{
// 释放资源
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Disconnect();
}
}
return returnRows;
}
///
/// 保存工序节点
///
/// 工序实体
/// 用户基本信息
///
public static int SaveProcedureInfo(ProcedureEntity procedure, SUserInfo sUserInfo)
{
int returnRows = 0;
IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
try
{
#region 校验时间戳
// todo
string sql = "SELECT OPTimeStamp FROM TP_PC_Procedure"
+ " WHERE ProcedureID = " + procedure.ProcedureID + " and OPTimeStamp = :OPTimeStamp and productionlineid=:productionlineid and nodeno=:nodeno";
OracleParameter[] parmetersSql = new OracleParameter[]
{
new OracleParameter(":OPTimeStamp", OracleDbType.TimeStamp, procedure.OPTimeStamp, ParameterDirection.Input),
new OracleParameter(":productionlineid", OracleDbType.Int32, procedure.ProductionLineID, ParameterDirection.Input),
new OracleParameter(":nodeno", OracleDbType.Int32, procedure.NodeNo, ParameterDirection.Input),
};
DataSet returnDataset = oracleTrConn.GetSqlResultToDs(sql, parmetersSql);
if (returnDataset != null && returnDataset.Tables[0].Rows.Count == 0)
{
oracleTrConn.Commit();
oracleTrConn.Disconnect();
return Constant.RETURN_IS_DATACHANGED;
}
#endregion
string sqlText = "";
#region 更新工序信息
sqlText = "UPDATE TP_PC_Procedure SET "
+ " ProcedureName=:procedureName,"
+ " P_Name=:PName,"
+ " ProcedureCode=:ProcedureCode,"
+ " CollectType=:collectType,"
+ " OrganizationID=:organizationID,"
+ " NodeType=:nodeType,"
+ " PieceType=:pieceType,"
+ " IsSpecialRework=:isSpecialRework,"
+ " IsSemireWork=:isSemireWork," //xuwei add 2019-10-14
+ " PrintType=:printType," //xuwei add 2019-11-20
+ " IsGlazeChange=:IsGlazeChange," //xuwei add 2019-11-20
+ " NodeNo=:nodeNo,"
+ " Remarks=:remarks,"
+ " updateUserID=:updateUserID,"
+ " UpdateTime=sysdate,"
+ " misspriority=:misspriority,"
+ " displayno=:displayno,"
+ " UNDOFLAG=:UNDOFLAG,"
+ " DeliverType=:DeliverType,"
+ " MustFlag=:mustFlag,"
+ " BarCodePrintCopies=:BarCodePrintCopies,"
+ " FINISHEDCHECKPROCEDUREID=:FINISHEDCHECKPROCEDUREID,"
+ " BarCodeFlag=:BarCodeFlag"
+ " WHERE NodeNo=:nodeNo "
+ " AND ProductionLineID=:productionLineID";
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":productionLineID",procedure.ProductionLineID),
new OracleParameter(":procedureName",procedure.ProcedureName),
new OracleParameter(":PName",procedure.PName),
new OracleParameter(":ProcedureCode",procedure.ProcedureCode),
new OracleParameter(":collectType",procedure.CollectType),
new OracleParameter(":organizationID",procedure.OrganizationID),
new OracleParameter(":nodeType",procedure.NodeType),
new OracleParameter(":pieceType",procedure.PieceType),
new OracleParameter(":isSpecialRework",procedure.IsSpecialRework),
new OracleParameter(":isSemireWork",procedure.IsSemireWork),//xuwei add 2019-10-14
new OracleParameter(":printType",procedure.PrintType),//xuwei add 2019-11-20
new OracleParameter(":IsGlazeChange",procedure.IsGlazeChange),//xuwei add 2020-01-02
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":remarks",procedure.Remarks),
new OracleParameter(":updateUserID",sUserInfo.UserID),
new OracleParameter(":misspriority",procedure.MissPriority),
new OracleParameter(":displayno",procedure.DisplayNo),
new OracleParameter(":UNDOFLAG",procedure.UnDo),
new OracleParameter(":DeliverType",procedure.DeliverType),
new OracleParameter(":mustFlag",procedure.MustFlag),
new OracleParameter(":BarCodePrintCopies",procedure.BarCodePrintCopies),
new OracleParameter(":BarCodeFlag",procedure.BarCodeFlag),
new OracleParameter(":FINISHEDCHECKPROCEDUREID",procedure.FinishedCheckProcedureID),//xiacm add 2022-10-12
};
foreach (OracleParameter item in paras)
{
if (item.Value + "" == "")
{
item.Value = System.DBNull.Value;
}
//成检工序id xiacm 2022-10-12
if (item.ParameterName== ":FINISHEDCHECKPROCEDUREID"&& Convert.ToInt32( item.Value)==-1)
{
item.Value = System.DBNull.Value;
}
}
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",procedure.ProductionLineID),
new OracleParameter(":nodeno",procedure.NodeNo),
new OracleParameter(":procedureid",procedure.ProcedureID),
};
#region 删除对应产品 然后再插入
sqlText = "DELETE TP_PC_ProcedureGoods WHERE ProductionLineID=:productionLineID and NodeNo=:nodeno and ProcedureID=:procedureid";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应工号 然后再插入
sqlText = "DELETE TP_PC_ProcedureUser WHERE ProductionLineID=:productionLineID and NodeNo=:nodeno and ProcedureID=:procedureid";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应缺陷 然后再插入
sqlText = "DELETE TP_PC_ProcedureDefect WHERE ProductionLineID=:productionLineID and NodeNo=:nodeno and ProcedureID=:procedureid";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除缺陷对应工序工种表 然后再插入
sqlText = "DELETE TP_PC_DefectProcedureJobs WHERE ProductionLineID=:productionLineID and NodeNo=:nodeno and ProcedureID=:procedureid";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除对应窑炉 然后再插入
sqlText = "DELETE TP_PC_ProcedureKiln WHERE ProductionLineID=:productionLineID and NodeNo=:nodeno and ProcedureID=:procedureid";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
#endregion
#region 删除半检产品等级 然后再插入 xuwei add 2019-12-12
sqlText = "DELETE TP_PC_PROCEDUREGOODSLEVEL WHERE PRODUCTIONLINEID = :productionLineID and ProcedureID=:procedureid";
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, new OracleParameter[]
{
new OracleParameter(":productionLineID",procedure.ProductionLineID),
new OracleParameter(":procedureid",procedure.ProcedureID),
});
#endregion
#region 插入生产工序对应产品表
foreach (DataRow row in procedure.ProcedureGoodsTable.Rows)
{
sqlText = "INSERT INTO TP_PC_ProcedureGoods ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "GOODSID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":goodsID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",procedure.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":goodsID",OracleDbType.Int32,row["goodsID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入生产工序对应工号表
foreach (DataRow row in procedure.ProcedureUserTable.Rows)
{
sqlText = "INSERT INTO TP_PC_ProcedureUser ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "UserID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":userID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",procedure.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":userID",OracleDbType.Int32,row["userID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入生产工序对应缺陷表
foreach (DataRow row in procedure.ProcedureDefectTable.Rows)
{
if (row["DefectID"] == DBNull.Value)
{
continue;
}
sqlText = "INSERT INTO TP_PC_ProcedureDefect ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "DefectID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":defectID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",procedure.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":defectID",OracleDbType.Int32,row["DefectID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入缺陷对应工序工种表
foreach (DataRow row in procedure.DefectProcedureJobsTable.Rows)
{
if (row["DefectID"] == DBNull.Value || row["jobsID"] == DBNull.Value)
{
continue;
}
sqlText = "INSERT INTO TP_PC_DefectProcedureJobs ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "DefectID,"
+ "JobsID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":DefectID,"
+ ":jobsID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",procedure.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":DefectID",OracleDbType.Int32,row["DefectID"],ParameterDirection.Input),
new OracleParameter(":jobsID",OracleDbType.Int32,row["jobsID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入生产工序对应窑炉
foreach (DataRow row in procedure.ProcedureKilnTable.Rows)
{
sqlText = "INSERT INTO tp_pc_procedurekiln ("
+ "ProductionLineID,"
+ "ProcedureID,"
+ "NodeNo,"
+ "KilnID,"
+ "CreateUserID"
+ ")"
+ " VALUES("
+ ":productionLineID,"
+ ":procedureID,"
+ ":nodeNo,"
+ ":kilnID,"
+ ":createUserID"
+ ")";
paras = new OracleParameter[]
{
new OracleParameter(":productionLineID",procedure.ProductionLineID),
new OracleParameter(":procedureID",procedure.ProcedureID),
new OracleParameter(":nodeNo",procedure.NodeNo),
new OracleParameter(":kilnID",OracleDbType.Int32,row["kilnID"],ParameterDirection.Input),
new OracleParameter(":createUserID",sUserInfo.UserID),
};
returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras);
}
#endregion
#region 插入生产工序对应半检产品等级 xuwei add 2019-12-12
if (!string.IsNullOrEmpty(procedure.SemiGoodsLevel))
{
string[] ids = procedure.SemiGoodsLevel.Split(',');
string sqlStr = @"
BEGIN
";
for (int i = 0; i < ids.Length; i++)
{
sqlStr += $@"
INSERT INTO TP_PC_PROCEDUREGOODSLEVEL
( PRODUCTIONLINEID, PROCEDUREID, GOODSLEVELTYPEID)
VALUES
(:PRODUCTIONLINEID, :PROCEDUREID, {ids[i]});
";
}
sqlStr += "END;";
oracleTrConn.ExecuteNonQuery(
sqlStr,
new OracleParameter[]
{
new OracleParameter(":PRODUCTIONLINEID",procedure.ProductionLineID),
new OracleParameter(":PROCEDUREID",procedure.ProcedureID)
}
);
}
#endregion
oracleTrConn.Commit();
}
catch (Exception ex)
{
oracleTrConn.Rollback();
throw ex;
}
finally
{
// 释放资源
if (oracleTrConn.ConnState == System.Data.ConnectionState.Open)
{
oracleTrConn.Disconnect();
}
}
return returnRows;
}
///
/// 注浆变更
///
/// 登录用户信息
/// 原条码
/// 新条码
/// 备注
/// 操作结果
public static ServiceResultEntity SetFPM2105Data(SUserInfo user, int? groutingLineID, int? groutingDailyID, string groutingDailyDetailIDs, DateTime groutingDate, string groutingUserCode, int? goodsID)
{
IDBTransaction tran = null;
try
{
ServiceResultEntity sre = new ServiceResultEntity();
tran = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
string sql = @"
SELECT T.BARCODE,
T.GOODSID,
T.MATERIALCODE AS OLDMATNR
FROM TP_PM_GROUTINGDAILYDETAIL T
WHERE T.BARCODE IS NOT NULL
AND T.GROUTINGDAILYID = :GROUTINGDAILYID
AND (:GROUTINGDAILYDETAILIDS IS NULL OR :GROUTINGDAILYDETAILIDS = '' OR
INSTR(',' || :GROUTINGDAILYDETAILIDS || ',', ',' || T.GROUTINGDAILYDETAILID || ',') > 0) ";
DataTable dtMatnr = tran.GetSqlResultToDt(sql, new OracleParameter[]
{
new OracleParameter(":GROUTINGDAILYID", OracleDbType.Int32, groutingDailyID, ParameterDirection.Input),
new OracleParameter(":GROUTINGDAILYDETAILIDS", OracleDbType.Varchar2,groutingDailyDetailIDs, ParameterDirection.Input)
});
#region 先查询sap数据
string barcode = "";
DataSet sapDataSet = new DataSet();
if (dtMatnr.Rows.Count > 0)
{
for (int i = 0; i < dtMatnr.Rows.Count; i++)
{
if (dtMatnr.Rows[i]["GOODSID"].ToString() != goodsID.ToString())
{
if (i == 0)
{
barcode = dtMatnr.Rows[i]["BARCODE"].ToString();
}
else
{
barcode = barcode + "," + dtMatnr.Rows[i]["BARCODE"].ToString();
}
}
}
//查询变更的型号信息
OracleParameter[] paras1 = new OracleParameter[]
{
new OracleParameter("IN_BARCODE", OracleDbType.Varchar2, barcode, ParameterDirection.Input),
new OracleParameter("IN_GOODSID", OracleDbType.Int32, goodsID, ParameterDirection.Input),
new OracleParameter("IN_LOGOID", OracleDbType.Int32, 0, ParameterDirection.Input),
new OracleParameter("OUT_RESULT", OracleDbType.RefCursor, null, ParameterDirection.Output),
};
sapDataSet = tran.ExecStoredProcedure("PRO_SAP_HEGII_WORKDATA_BG_BIANGENG", paras1);
}
#endregion
OracleParameter[] paras = new OracleParameter[]
{
new OracleParameter("in_AccountID", OracleDbType.Int32, user.AccountID, ParameterDirection.Input),
new OracleParameter("in_UserID", OracleDbType.Int32, user.UserID, ParameterDirection.Input),
new OracleParameter("in_GroutingLineID", OracleDbType.Int32, groutingLineID, ParameterDirection.Input),
new OracleParameter("in_GroutingDailyID", OracleDbType.Int32, groutingDailyID, ParameterDirection.Input),
new OracleParameter("in_GroutingDailyDetailIDs", OracleDbType.Varchar2,groutingDailyDetailIDs, ParameterDirection.Input),
new OracleParameter("in_GroutingDate", OracleDbType.Date, groutingDate, ParameterDirection.Input),
new OracleParameter("in_GroutingUserCode", OracleDbType.Varchar2, groutingUserCode, ParameterDirection.Input),
new OracleParameter("in_GoodsID", OracleDbType.Int32, goodsID, ParameterDirection.Input),
new OracleParameter("out_Result", OracleDbType.Varchar2, 100, null, ParameterDirection.Output),
new OracleParameter("out_Message", OracleDbType.Varchar2, 100, null, ParameterDirection.Output),
};
DataSet ds = tran.ExecStoredProcedure("PRO_PM_ReplacedGroutingInfo", paras);
string out_Result = paras[8].Value.ToString();
if (out_Result != "0")
{
sre.Status = Constant.ServiceResultStatus.Other;
switch (out_Result)
{
case "1.0":
sre.OtherStatus = 1;
sre.Message = "当前用户没有此成型线的操作权限";
break;
case "1.1":
sre.OtherStatus = 2;
sre.Message = "此注浆日报中的条码已交坯不能修改成型工号。";
break;
case "1.2":
sre.OtherStatus = 3;
sre.Message = "工号[" + groutingUserCode + "]不存在或不是生产工号";
break;
case "1.3":
sre.OtherStatus = 7;
sre.Message = "工号[" + groutingUserCode + "]在" + groutingDate.Date + "没有班次配置。";
break;
case "2.1":
sre.OtherStatus = 4;
sre.Message = "此产品不存在。";
break;
default:
break;
}
}
//变更型号成功后 SAP报工数据同步,一正一负
if (out_Result == "0")
{
if (dtMatnr.Rows.Count > 0)
{
#region sap报工
if (sapDataSet != null && sapDataSet.Tables.Count > 0 && sapDataSet.Tables[0].Rows.Count > 0)
{
DataTable sapresultTable = sapDataSet.Tables[0];
//记录所有logid,先设置状态为Q,加完明细改为F
List logids = new List();
DataTable dTable = new DataTable();
//获取总单datacode
DataView dv = new DataView(sapresultTable);
dTable = dv.ToTable(true, "DATACODE");
for (int j = 0; j < dTable.Rows.Count; j++)
{
//sap日志总单(不同节点)
string sqlText = "SELECT SEQ_TSAP_DATALOG_BG.nextval FROM dual";
//判断有几个节点 20,30,40,50
#region 20节点
if (dTable.Rows[j]["DATACODE"].ToString() == "20")
{
int logid = int.Parse(tran.GetSqlResultToStr(sqlText));
//记录logid
logids.Add(logid);
#region log总单
sqlText = "INSERT INTO TSAP_HEGII_DATALOG_BG\n" +
" (LOGID,\n" +
" LOGTYPE,\n" +
" BEGINTIME,\n" +
" YYYYMMDD,\n" +
" WORKCODE,\n" +
" DATACODE,\n" +
" DATASTUTS,\n" +
" DATAMSG,\n" +
" DATALOGID,\n" +
" EXECUTEDATEBEGIN,\n" +
" EXECUTEDATEEND,\n" +
" REMARKS,\n" +
" SAPGUID)\n" +
" VALUES\n" +
" (:LOGID,\n" +
" '4',\n" +
" SYSDATE,\n" +
" TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" +
" '5000',\n" +
" '20',\n" +
" 'Q',\n" +
" '',\n" +
" :LOGID,\n" +
" SYSDATE,\n" +
" SYSDATE,\n" +
" :REMARKS,\n" +
" SYS_GUID())";
paras = new OracleParameter[]
{
new OracleParameter(":LOGID",logid),
new OracleParameter(":REMARKS","注浆变更:新产品ID:"+goodsID),
};
int returnRows = tran.ExecuteNonQuery(sqlText, paras);
#endregion
#region 明细
DataTable table20 = sapresultTable.Copy();
DataRow[] drRow20 = table20.Select("DATACODE = 20");
foreach (DataRow row in drRow20)
{
sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" +
" (YYYYMMDD,\n" +
" WORKCODE,\n" +
" DATACODE,\n" +
" GOODSCODE,\n" +
" SAPCODE,\n" +
" USERCODE,\n" +
" OUTPUTNUM,\n" +
" SCRAPNUM,\n" +
" CLEANUPNUM,\n" +
" REPAIRNUM,\n" +
" WORKSHOP,\n" +
" LOGID,\n" +
" TESTMOULDFLAG,\n" +
" ZSCS,\n" +
" CHARG)\n" +
" VALUES\n" +
" (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" +
" '5000',\n" +
" '20',\n" +
" :GOODSCODE,\n" +
" :SAPCODE,\n" +
" :USERCODE,\n" +
" :OUTPUTNUM,\n" +
" :SCRAPNUM,\n" +
" :CLEANUPNUM,\n" +
" :REPAIRNUM,\n" +
" :WORKSHOP,\n" +
" :LOGID,\n" +
" :TESTMOULDFLAG,\n" +
" :ZSCS,\n" +
" :CHARG)";
paras = new OracleParameter[]
{
new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()),
new OracleParameter(":SAPCODE",row["SAPCODE"].ToString()),
new OracleParameter(":USERCODE",row["USERCODE"].ToString()),
new OracleParameter(":OUTPUTNUM",row["OUTPUTNUM"].ToString()),
new OracleParameter(":SCRAPNUM",row["SCRAPNUM"].ToString()),
new OracleParameter(":CLEANUPNUM",row["CLEANUPNUM"].ToString()),
new OracleParameter(":REPAIRNUM",row["REPAIRNUM"].ToString()),
new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()),
new OracleParameter(":LOGID",logid),
new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()),
new OracleParameter(":ZSCS",row["ZSCS"].ToString()),
new OracleParameter(":CHARG",row["CHARG"].ToString()),
};
returnRows += tran.ExecuteNonQuery(sqlText, paras);
}
#endregion
}
#endregion
#region 30节点
else if (dTable.Rows[j]["DATACODE"].ToString() == "30")
{
int logid = int.Parse(tran.GetSqlResultToStr(sqlText));
//记录logid
logids.Add(logid);
sqlText = "INSERT INTO TSAP_HEGII_DATALOG_BG\n" +
" (LOGID,\n" +
" LOGTYPE,\n" +
" BEGINTIME,\n" +
" YYYYMMDD,\n" +
" WORKCODE,\n" +
" DATACODE,\n" +
" DATASTUTS,\n" +
" DATAMSG,\n" +
" DATALOGID,\n" +
" EXECUTEDATEBEGIN,\n" +
" EXECUTEDATEEND,\n" +
" REMARKS,\n" +
" SAPGUID)\n" +
" VALUES\n" +
" (:LOGID,\n" +
" '4',\n" +
" SYSDATE,\n" +
" TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" +
" 5000,\n" +
" :DATACODE,\n" +
" 'Q',\n" +
" '',\n" +
" :LOGID,\n" +
" SYSDATE,\n" +
" SYSDATE,\n" +
" :REMARKS,\n" +
" SYS_GUID())";
paras = new OracleParameter[]
{
new OracleParameter(":LOGID",logid),
new OracleParameter(":DATACODE","30"),
new OracleParameter(":REMARKS","注浆变更:新产品ID:"+goodsID),
};
int returnRows = tran.ExecuteNonQuery(sqlText, paras);
#region 明细
DataTable table30 = sapresultTable.Copy();
DataRow[] drRow30 = table30.Select("DATACODE = 30");
foreach (DataRow row in drRow30)
{
sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" +
" (YYYYMMDD,\n" +
" WORKCODE,\n" +
" DATACODE,\n" +
" GOODSCODE,\n" +
" SAPCODE,\n" +
" USERCODE,\n" +
" OUTPUTNUM,\n" +
" SCRAPNUM,\n" +
" CLEANUPNUM,\n" +
" REPAIRNUM,\n" +
" WORKSHOP,\n" +
" LOGID,\n" +
" TESTMOULDFLAG,\n" +
" ZSCS,\n" +
" CHARG)\n" +
" VALUES\n" +
" (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" +
" '5000',\n" +
" '30',\n" +
" :GOODSCODE,\n" +
" :SAPCODE,\n" +
" :USERCODE,\n" +
" :OUTPUTNUM,\n" +
" :SCRAPNUM,\n" +
" :CLEANUPNUM,\n" +
" :REPAIRNUM,\n" +
" :WORKSHOP,\n" +
" :LOGID,\n" +
" :TESTMOULDFLAG,\n" +
" :ZSCS,\n" +
" :CHARG)";
paras = new OracleParameter[]
{
new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()),
new OracleParameter(":SAPCODE",row["SAPCODE"].ToString()),
new OracleParameter(":USERCODE",row["USERCODE"].ToString()),
new OracleParameter(":OUTPUTNUM",row["OUTPUTNUM"].ToString()),
new OracleParameter(":SCRAPNUM",row["SCRAPNUM"].ToString()),
new OracleParameter(":CLEANUPNUM",row["CLEANUPNUM"].ToString()),
new OracleParameter(":REPAIRNUM",row["REPAIRNUM"].ToString()),
new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()),
new OracleParameter(":LOGID",logid),
new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()),
new OracleParameter(":ZSCS",row["ZSCS"].ToString()),
new OracleParameter(":CHARG",row["CHARG"].ToString()),
};
returnRows += tran.ExecuteNonQuery(sqlText, paras);
}
#endregion
}
#endregion
#region 40节点
else if (dTable.Rows[j]["DATACODE"].ToString() == "40")
{
int logid = int.Parse(tran.GetSqlResultToStr(sqlText));
//记录logid
logids.Add(logid);
sqlText = "INSERT INTO TSAP_HEGII_DATALOG_BG\n" +
" (LOGID,\n" +
" LOGTYPE,\n" +
" BEGINTIME,\n" +
" YYYYMMDD,\n" +
" WORKCODE,\n" +
" DATACODE,\n" +
" DATASTUTS,\n" +
" DATAMSG,\n" +
" DATALOGID,\n" +
" EXECUTEDATEBEGIN,\n" +
" EXECUTEDATEEND,\n" +
" REMARKS,\n" +
" SAPGUID)\n" +
" VALUES\n" +
" (:LOGID,\n" +
" '4',\n" +
" SYSDATE,\n" +
" TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" +
" 5000,\n" +
" :DATACODE,\n" +
" 'Q',\n" +
" '',\n" +
" :LOGID,\n" +
" SYSDATE,\n" +
" SYSDATE,\n" +
" :REMARKS,\n" +
" SYS_GUID())";
paras = new OracleParameter[]
{
new OracleParameter(":LOGID",logid),
new OracleParameter(":DATACODE","40"),
new OracleParameter(":REMARKS","注浆变更:新产品ID:"+goodsID),
};
int returnRows = tran.ExecuteNonQuery(sqlText, paras);
#region 明细
DataTable table40 = sapresultTable.Copy();
DataRow[] drRow40 = table40.Select("DATACODE = 40");
foreach (DataRow row in drRow40)
{
sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" +
" (YYYYMMDD,\n" +
" WORKCODE,\n" +
" DATACODE,\n" +
" GOODSCODE,\n" +
" SAPCODE,\n" +
" USERCODE,\n" +
" OUTPUTNUM,\n" +
" SCRAPNUM,\n" +
" CLEANUPNUM,\n" +
" REPAIRNUM,\n" +
" WORKSHOP,\n" +
" LOGID,\n" +
" TESTMOULDFLAG,\n" +
" ZSCS,\n" +
" CHARG)\n" +
" VALUES\n" +
" (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" +
" '5000',\n" +
" '40',\n" +
" :GOODSCODE,\n" +
" :SAPCODE,\n" +
" :USERCODE,\n" +
" :OUTPUTNUM,\n" +
" :SCRAPNUM,\n" +
" :CLEANUPNUM,\n" +
" :REPAIRNUM,\n" +
" :WORKSHOP,\n" +
" :LOGID,\n" +
" :TESTMOULDFLAG,\n" +
" :ZSCS,\n" +
" :CHARG)";
paras = new OracleParameter[]
{
new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()),
new OracleParameter(":SAPCODE",row["SAPCODE"].ToString()),
new OracleParameter(":USERCODE",row["USERCODE"].ToString()),
new OracleParameter(":OUTPUTNUM",row["OUTPUTNUM"].ToString()),
new OracleParameter(":SCRAPNUM",row["SCRAPNUM"].ToString()),
new OracleParameter(":CLEANUPNUM",row["CLEANUPNUM"].ToString()),
new OracleParameter(":REPAIRNUM",row["REPAIRNUM"].ToString()),
new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()),
new OracleParameter(":LOGID",logid),
new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()),
new OracleParameter(":ZSCS",row["ZSCS"].ToString()),
new OracleParameter(":CHARG",row["CHARG"].ToString()),
};
returnRows += tran.ExecuteNonQuery(sqlText, paras);
}
#endregion
}
#endregion
#region 50节点
else if (dTable.Rows[j]["DATACODE"].ToString() == "50")
{
int logid = int.Parse(tran.GetSqlResultToStr(sqlText));
//记录logid
logids.Add(logid);
sqlText = "INSERT INTO TSAP_HEGII_DATALOG_BG\n" +
" (LOGID,\n" +
" LOGTYPE,\n" +
" BEGINTIME,\n" +
" YYYYMMDD,\n" +
" WORKCODE,\n" +
" DATACODE,\n" +
" DATASTUTS,\n" +
" DATAMSG,\n" +
" DATALOGID,\n" +
" EXECUTEDATEBEGIN,\n" +
" EXECUTEDATEEND,\n" +
" REMARKS,\n" +
" SAPGUID)\n" +
" VALUES\n" +
" (:LOGID,\n" +
" '4',\n" +
" SYSDATE,\n" +
" TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" +
" 5000,\n" +
" :DATACODE,\n" +
" 'Q',\n" +
" '',\n" +
" :LOGID,\n" +
" SYSDATE,\n" +
" SYSDATE,\n" +
" :REMARKS,\n" +
" SYS_GUID())";
paras = new OracleParameter[]
{
new OracleParameter(":LOGID",logid),
new OracleParameter(":DATACODE","50"),
new OracleParameter(":REMARKS","注浆变更:新产品ID:"+goodsID),
};
int returnRows = tran.ExecuteNonQuery(sqlText, paras);
#region 明细
DataTable table50 = sapresultTable.Copy();
DataRow[] drRow50 = table50.Select("DATACODE = 50");
foreach (DataRow row in drRow50)
{
sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" +
" (YYYYMMDD,\n" +
" WORKCODE,\n" +
" DATACODE,\n" +
" GOODSCODE,\n" +
" SAPCODE,\n" +
" USERCODE,\n" +
" OUTPUTNUM,\n" +
" SCRAPNUM,\n" +
" CLEANUPNUM,\n" +
" REPAIRNUM,\n" +
" WORKSHOP,\n" +
" LOGID,\n" +
" TESTMOULDFLAG,\n" +
" ZSCS,\n" +
" CHARG)\n" +
" VALUES\n" +
" (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" +
" '5000',\n" +
" '50',\n" +
" :GOODSCODE,\n" +
" :SAPCODE,\n" +
" :USERCODE,\n" +
" :OUTPUTNUM,\n" +
" :SCRAPNUM,\n" +
" :CLEANUPNUM,\n" +
" :REPAIRNUM,\n" +
" :WORKSHOP,\n" +
" :LOGID,\n" +
" :TESTMOULDFLAG,\n" +
" :ZSCS,\n" +
" :CHARG)";
paras = new OracleParameter[]
{
new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()),
new OracleParameter(":SAPCODE",row["SAPCODE"].ToString()),
new OracleParameter(":USERCODE",row["USERCODE"].ToString()),
new OracleParameter(":OUTPUTNUM",row["OUTPUTNUM"].ToString()),
new OracleParameter(":SCRAPNUM",row["SCRAPNUM"].ToString()),
new OracleParameter(":CLEANUPNUM",row["CLEANUPNUM"].ToString()),
new OracleParameter(":REPAIRNUM",row["REPAIRNUM"].ToString()),
new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()),
new OracleParameter(":LOGID",logid),
new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()),
new OracleParameter(":ZSCS",row["ZSCS"].ToString()),
new OracleParameter(":CHARG",row["CHARG"].ToString()),
};
returnRows += tran.ExecuteNonQuery(sqlText, paras);
}
#endregion
}
#endregion
}
#region 更新总单状态为F
string ids = string.Join(",", logids);
if (!string.IsNullOrWhiteSpace(ids))
{
sql = "update TSAP_HEGII_DATALOG_BG set DATASTUTS='F' where DATASTUTS = 'Q' AND LOGID IN (" + ids + ") ";
tran.ExecuteNonQuery(sql);
}
#endregion
}
#endregion
}
}
if (dtMatnr.Rows.Count > 0)
{
foreach (DataRow row in dtMatnr.Rows)
{
// 切换物料,切换已装组件
string returnMessage = string.Empty;
int returnRows = SetMatnrIdnrk(tran, row["OLDMATNR"] + "", row["BARCODE"] + "", user, out returnMessage);
if (returnRows < 0)
{
sre.Status = Constant.ServiceResultStatus.Other;
sre.OtherStatus = returnRows;
sre.Message = returnMessage;
return sre;
}
}
}
tran.Commit();
return sre;
}
catch (Exception ex)
{
if (tran != null &&
tran.ConnState == ConnectionState.Open)
{
tran.Rollback();
}
throw ex;
}
finally
{
if (tran != null &&
tran.ConnState == ConnectionState.Open)
{
tran.Disconnect();
}
}
}
///
/// 注浆变更
///
/// 登录用户信息
/// 原条码
/// 新条码
/// 备注
/// 操作结果
public static ServiceResultEntity SetFPM2105CancelBarCodeData(SUserInfo user, string BarCodes)
{
IDBTransaction tran = null;
try
{
ServiceResultEntity sre = new ServiceResultEntity();
tran = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
string[] subBarCode = BarCodes.Split(',');
string sql = "";
string returnValue = "";
bool isError = false;
for (int i = 0; i < subBarCode.Length; i++)
{
if (subBarCode[i] != "")
{
//sql = "select DELIVERFLAG from TP_PM_GroutingDailyDetail where barcode='" + subBarCode[i] + "'";
sql = "select BEGINNINGFLAG from TP_PM_GroutingDailyDetail where barcode='" + subBarCode[i] + "'";
returnValue = tran.GetSqlResultToStr(sql);
if (returnValue == "1")
{
sre.Status = Constant.ServiceResultStatus.Other;
//sre.Message = "条码[" + subBarCode[i] + "]已经交坯,不能取消绑定";
sre.Message = "条码[" + subBarCode[i] + "]已经在产,不能取消绑定";
isError = true;
break;
}
sql = "update TP_PM_GroutingDailyDetail set barcode='' where barcode='" + subBarCode[i] + "'";
tran.ExecuteNonQuery(sql);
sql = "delete from TP_PM_UsedBarCode where barcode='" + subBarCode[i] + "'";
//sql = "update TP_PM_UsedBarCode set barcode='" + subBarCode[i] + "@" + user.UserCode + "@"
// + DateTime.Now.ToString("yyyyMMddHHmmss") + "' where barcode='" + subBarCode[i] + "'";
tran.ExecuteNonQuery(sql);
}
}
if (isError) //有错误
{
tran.Rollback();
}
else
{
tran.Commit();
}
return sre;
}
catch (Exception ex)
{
if (tran != null &&
tran.ConnState == ConnectionState.Open)
{
tran.Rollback();
}
throw ex;
}
finally
{
if (tran != null &&
tran.ConnState == ConnectionState.Open)
{
tran.Disconnect();
}
}
}
///
/// 设置物料编码组件
///
///
private static int SetMatnrIdnrk(IDBTransaction oracleTrConn, string oldMatnr, string barcode, SUserInfo sUserInfo, out string message)
{
int returnRows = 0;
message = "";
try
{
string sql = "";
sql = @"
SELECT GDD.MATERIALCODE AS MATNR,
DECODE(GDD.TESTMOULDFLAG, 0, 'C', 1, 'Y', '-') AS ZSCMS,
CASE
WHEN (INSTR(GDD.GROUTINGLINECODE, 'A') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1)
AND INSTR(GT.GOODSTYPECODE, '001002') = 1 THEN
1
WHEN (INSTR(GDD.GROUTINGLINECODE, 'B') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1)
AND INSTR(GT.GOODSTYPECODE, '001001') = 1 THEN
2
WHEN INSTR(GDD.GROUTINGLINECODE, 'C') = 1 THEN
3
ELSE
9
END AS WORKSHOP
FROM TP_PM_GROUTINGDAILYDETAIL GDD
INNER JOIN TP_MST_GOODS G
ON G.GOODSID = GDD.GOODSID
INNER JOIN TP_MST_GOODSTYPE GT
ON GT.GOODSTYPEID = G.GOODSTYPEID
WHERE GDD.BARCODE = :BARCODE ";
DataTable dtMatnr = oracleTrConn.GetSqlResultToDt(sql, new OracleParameter[]
{
new OracleParameter(":barcode", OracleDbType.Varchar2, barcode, ParameterDirection.Input)
});
// 如果物料编码不一致
if (!oldMatnr.Equals(dtMatnr.Rows[0]["MATNR"]))
{
sql = @"
SELECT IDNRK,
MEINS,
MENGE,
IDNRKNAME,
IDNRKONLYCODE,
CHARG,
LGORT
FROM TP_PM_BARCODEIDNRKREL
WHERE VALUEFLAG = '1'
AND BARCODE = :BARCODE ";
DataTable dtIdnrks = oracleTrConn.GetSqlResultToDt(sql, new OracleParameter[]
{
new OracleParameter(":BARCODE", OracleDbType.Varchar2, barcode, ParameterDirection.Input)
});
// 如果装了配件了
if (dtIdnrks.Rows.Count > 0)
{
//string datuv = System.DateTime.Now.Date.ToString("yyyyMMdd");
//Hashtable pars = new Hashtable();
//pars.Add("MATNR", dtMatnr.Rows[0]["MATNR"]); // 物料
//pars.Add("WERKS", "5000"); // 工厂
//pars.Add("ZSCS", "T"); // 生产工艺
//pars.Add("ZSCCJ", dtMatnr.Rows[0]["WORKSHOP"]); // 生产车间
//pars.Add("ZSCMS", dtMatnr.Rows[0]["ZSCMS"]); // 生产模式
//pars.Add("ZJDNU", "60"); // 节点
//pars.Add("DATUV", datuv); // 查询日期
//pars.Add("EMENG", 1); // 需求数量
//Hashtable item = new Hashtable();
//item.Add("item", pars);
//Hashtable body = new Hashtable();
//body.Add("T_INPUT", item);
//string postString = JsonConvert.SerializeObject(body);
//INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII);
//string url039 = ini.ReadIniData("SAP_NEW_INFO", "Url039");
////string url039 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM039";
//string result = string.Empty;
//try
//{
// result = SAPDataLogic.PostData(url039, postString, "POST");
//}
//catch (Exception ex)
//{
// message = "获取SAP库存接口异常:\n" + ex.Message;
// return -4;
//}
//JObject returnObj = JsonConvert.DeserializeObject(result);
//JObject output = returnObj["T_OUTPUT"] as JObject;
//JArray array = output["item"] as JArray;
//DataTable dtIdnrk = Utility.ConvertToDataTable(array);
//if ("E".Equals(dtIdnrk.Rows[0]["ZTYPE"] + ""))
//{
// message = "获取SAP库存失败";
// return -5;
//}
DataTable dtIdnrk = oracleTrConn.GetSqlResultToDt(@"
SELECT P.MATNR,
PD.IDNRK,
PD.NAME AS MAKTX,
PD.MENGE,
PD.MEINS
FROM TP_MST_PACKINGBOM P
INNER JOIN TP_MST_PACKINGBOMDETAIL PD
ON PD.PACKINGBOMID = P.PACKINGBOMID
WHERE INSTR(PD.NAME, '半成品') = 0
AND P.MATNR = :MATNR ",
new OracleParameter[] { new OracleParameter("MATNR", dtMatnr.Rows[0]["MATNR"]) }
);
// 获取已走过的装配工序
string procedureidlist = oracleTrConn.GetSqlResultToStr(@"
SELECT LISTAGG(PROCEDUREID, ',') WITHIN GROUP(ORDER BY PROCEDUREID) AS PROCEDUREIDLIST
FROM TP_PM_PRODUCTIONDATA
WHERE VALUEFLAG = '1'
AND MODELTYPE = '-5'
AND BARCODE = :BARCODE ",
new OracleParameter[] { new OracleParameter("BARCODE", barcode) }
);
procedureidlist = "," + procedureidlist + ",";
// 过滤当前工序需要的组件
DataTable dtIdnrkType = oracleTrConn.GetSqlResultToDt(@"
SELECT IDNRKTYPE,SCANFLAG
FROM TP_PC_PROCEDUREIDNRKTYPE
WHERE INSTR(:PROCEDUREIDLIST , ',' || PROCEDUREID || ',') > 0",
new OracleParameter[] { new OracleParameter("PROCEDUREIDLIST", procedureidlist) }
);
dtIdnrk.DefaultView.RowFilter = "MAKTX NOT LIKE '%半成品%'";
dtIdnrk = dtIdnrk.DefaultView.ToTable();
// 过滤当前工序需要的组件
//DataTable dtIdnrkType = oracleTrConn.GetSqlResultToDt(@"
//SELECT IDNRKTYPE
// FROM TP_PC_PROCEDUREIDNRKTYPE
// WHERE INSTR(:PROCEDUREIDLIST , ',' || PROCEDUREID || ',') > 0",
// new OracleParameter[] { new OracleParameter("PROCEDUREIDLIST", procedureidlist) }
//);
//dtIdnrk.DefaultView.RowFilter = "MAKTX NOT LIKE '%半成品%'";
//dtIdnrk = dtIdnrk.DefaultView.ToTable();
// 如果包含其它,就不判断了
if (dtIdnrkType.Select("IDNRKTYPE = '其它'").Length == 0)
{
string fifter = "";
foreach (DataRow row in dtIdnrkType.Rows)
{
fifter += " MAKTX LIKE '%" + row["IDNRKTYPE"] + "%' OR";
}
// 如果没有条件,也不判断了
if (fifter.Length > 0)
{
fifter = fifter.Substring(0, fifter.Length - 2);
dtIdnrk.DefaultView.RowFilter = fifter;
dtIdnrk = dtIdnrk.DefaultView.ToTable();
}
}
// 过滤掉已安装的组件
object idnrklist = oracleTrConn.GetSqlResultToStr(@"
SELECT LISTAGG(IDNRK, ''',''') WITHIN GROUP(ORDER BY IDNRK) AS IDNRKLIST
FROM TP_PM_BARCODEIDNRKREL
WHERE VALUEFLAG = '1'
AND BARCODE = :BARCODE ",
new OracleParameter[] { new OracleParameter("BARCODE", barcode) }
);
// 可以保留的组件
DataTable dtCanSaveIdnrk = dtIdnrk.Copy();
dtCanSaveIdnrk.DefaultView.RowFilter = "IDNRK IN ('" + idnrklist + "')";
dtCanSaveIdnrk = dtCanSaveIdnrk.DefaultView.ToTable();
if (idnrklist != null)
{
dtIdnrk.DefaultView.RowFilter = "IDNRK NOT IN ('" + idnrklist + "')";
dtIdnrk = dtIdnrk.DefaultView.ToTable();
}
if (dtIdnrk.Rows.Count == 0)
{
}
// 加上需要的列
dtIdnrk.Columns.Add("LGORT", typeof(string));
dtIdnrk.Columns.Add("CHARG", typeof(string));
dtIdnrk.Columns.Add("IDNRKONLYCODE", typeof(string));
//// 提取包材物料编码
//List matnrs = new List();
//foreach (DataRow row in dtIdnrk.Rows)
//{
// if (!matnrs.Contains(row["IDNRK"] + ""))
// {
// matnrs.Add(row["IDNRK"] + "");
// }
//}
//string ZMSG = string.Empty;
//// 查线边仓库存
//DataTable dtSapInventory = SapApi.ZMM_WMS016("5000", matnrs, "", out ZMSG);
//dtSapInventory.DefaultView.RowFilter = "LGORT IN('2420','2430','2440','2450','2460','2470','2480','2490')";
//dtSapInventory = dtSapInventory.DefaultView.ToTable();
//DataRow[] rows = null;
//if (dtSapInventory != null && dtSapInventory.Rows.Count > 0)
//{
// // 改名
// dtSapInventory.Columns["MATNR"].ColumnName = "IDNRK";
// // 判断是否缺库存
// List notEnoughIdnrks = new List();
// foreach (string idnrk in matnrs)
// {
// rows = dtSapInventory.Select("IDNRK = '" + idnrk + "'"); ;
// if (rows.Length == 0)
// {
// notEnoughIdnrks.Add(idnrk);
// }
// }
// if (notEnoughIdnrks.Count > 0)
// {
// message = "以下组件在SAP系统中库存不足:\n" + string.Join(",", notEnoughIdnrks.ToArray());
// return -6;
// }
// // 库存数量要改为数字类型
// dtSapInventory.Columns.Add("BALANCE", typeof(decimal));
// decimal balance = 0;
// foreach (DataRow row in dtSapInventory.Rows)
// {
// decimal.TryParse(row["KYKC"] + "", out balance);
// row["BALANCE"] = balance;
// }
//}
//else
//{
// message = "以下组件在SAP系统中库存不足:\n" + string.Join(",", matnrs.ToArray());
// return -6;
//}
//dtSapInventory.DefaultView.RowFilter = "BALANCE <> 0";
//dtSapInventory = dtSapInventory.DefaultView.ToTable();
//dtSapInventory.DefaultView.Sort = "LGORT, CHARG";
//dtSapInventory = dtSapInventory.DefaultView.ToTable();
//DateTime now = DateTime.Now;
//foreach (DataRow row in dtIdnrk.Rows)
//{
// rows = dtSapInventory.Select("IDNRK = '" + row["IDNRK"] + "' AND BALANCE >= " + row["MENGE"]);
// if (rows.Length > 0)
// {
// row["LGORT"] = rows[0]["LGORT"];
// row["CHARG"] = rows[0]["CHARG"];
// row["IDNRKONLYCODE"] = "";
// }
// else
// {
// message = row["IDNRK"] + ":库存不足";
// return -6;
// }
//}
dtIdnrk.TableName = "Idnrk";
dtCanSaveIdnrk.TableName = "CanSaveIdnrk";
string canSaveIdnrks = ",";
if (dtCanSaveIdnrk != null && dtCanSaveIdnrk.Rows.Count > 0)
{
foreach (DataRow row in dtCanSaveIdnrk.Rows)
{
canSaveIdnrks += row["IDNRK"] + ",";
}
}
string delSql = @"
DELETE FROM TP_PM_BARCODEIDNRKREL
WHERE BARCODE = :BARCODE
AND INSTR(:CANSAVEIDNRKS, ','|| IDNRK ||',') = 0 ";
returnRows += oracleTrConn.ExecuteNonQuery(delSql, new OracleParameter[]
{
new OracleParameter(":BARCODE", barcode),
new OracleParameter(":CANSAVEIDNRKS", canSaveIdnrks)
});
if (dtIdnrk != null && dtIdnrk.Rows.Count > 0)
{
string barcodeidnrkrel = @"
INSERT INTO TP_PM_BARCODEIDNRKREL
(PROCEDUREID,
BARCODE,
MATNR,
IDNRK,
MEINS,
MENGE,
IDNRKNAME,
IDNRKONLYCODE,
CHARG,
LGORT,
ACCOUNTID,
CREATEUSERID,
UPDATEUSERID)
VALUES
(:PROCEDUREID,
:BARCODE,
:MATNR,
:IDNRK,
:MEINS,
:MENGE,
:IDNRKNAME,
:IDNRKONLYCODE,
:CHARG,
:LGORT,
:ACCOUNTID,
:USERID,
:USERID) ";
foreach (DataRow row in dtIdnrk.Rows)
{
returnRows += oracleTrConn.ExecuteNonQuery(barcodeidnrkrel,
new OracleParameter[]
{
new OracleParameter(":PROCEDUREID", -1),
new OracleParameter(":BARCODE", barcode),
new OracleParameter(":MATNR", row["MATNR"]),
new OracleParameter(":IDNRK", row["IDNRK"]),
new OracleParameter(":MEINS", row["MEINS"]),
new OracleParameter(":MENGE", Convert.ToDecimal( row["MENGE"])),
new OracleParameter(":IDNRKNAME", row["MAKTX"]),
new OracleParameter(":IDNRKONLYCODE", row["IDNRKONLYCODE"]),
new OracleParameter(":CHARG", row["CHARG"]),
new OracleParameter(":LGORT", row["LGORT"]),
new OracleParameter(":ACCOUNTID", sUserInfo.AccountID),
new OracleParameter(":USERID", sUserInfo.UserID)
});
}
}
}
}
}
catch (Exception ex)
{
message = "接口异常:\n" + ex.Message;
return -4;
}
return returnRows;
}
}
}