/// <summary> /// 批次暂停操作。 /// </summary> /// <remarks> /// 操作名称:<see cref="ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_HOLD"/>。 /// </remarks> /// <param name="dsParams">包含批次暂停信息的数据集对象。</param> /// <param name="dbTran">数据库操作事务对象。</param> public void LotHold(DbTransaction dbTran, DataSet dsParams) { //参数数据。 if (dsParams == null || !dsParams.Tables.Contains(WIP_TRANSACTION_FIELDS.DATABASE_TABLE_NAME) || !dsParams.Tables.Contains(WIP_HOLD_RELEASE_FIELDS.DATABASE_TABLE_NAME) || dsParams.Tables[WIP_TRANSACTION_FIELDS.DATABASE_TABLE_NAME].Rows.Count == 0 || //暂停批次操作记录不能为空记录。 dsParams.Tables[WIP_HOLD_RELEASE_FIELDS.DATABASE_TABLE_NAME].Rows.Count != 1 //暂停原因只能有一条记录 ) { throw new Exception("传入参数不正确,请检查。"); } IDbConnection dbConn = dbTran.Connection; IDbCommand dbCmd = dbConn.CreateCommand(); dbCmd.Transaction = dbTran; dbCmd.CommandType = CommandType.Text; DataTable dtTransaction = dsParams.Tables[WIP_TRANSACTION_FIELDS.DATABASE_TABLE_NAME]; //存放操作数据 DataTable dtHold = dsParams.Tables[WIP_HOLD_RELEASE_FIELDS.DATABASE_TABLE_NAME]; //存放批次暂停原因明细数据 //插入操作记录 foreach (DataRow drTransaction in dtTransaction.Rows) { string lotKey = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY]); //批次主键 string activity = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY]); string editor = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]); //编辑人 string timeZone = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]); //编辑时区 //操作动作必须是 HOLD if (activity != ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_HOLD) { throw new Exception("传入参数的操作动作不正确,请检查。"); } string transKey = UtilHelper.GenerateNewKey(0); AddWIPLot(dbTran, transKey, lotKey); //向WIP_TRANSACTION表插入批次调整的操作记录。 WIP_TRANSACTION_FIELDS wipFields = new WIP_TRANSACTION_FIELDS(); drTransaction[WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY] = transKey; drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME] = DBNull.Value; string sql = DatabaseTable.BuildInsertSqlStatement(wipFields, drTransaction, null); dbCmd.CommandText = sql; dbCmd.ExecuteNonQuery(); //向WIP_HOLD_RELEASE表插入批次暂停的明细记录。 WIP_HOLD_RELEASE_FIELDS holdFields = new WIP_HOLD_RELEASE_FIELDS(); dtHold.Rows[0][WIP_HOLD_RELEASE_FIELDS.FIELD_TRANSACTION_KEY] = transKey; sql = DatabaseTable.BuildInsertSqlStatement(holdFields, dtHold.Rows[0], null); dbCmd.CommandText = sql; dbCmd.ExecuteNonQuery(); //更新批次数据 StringBuilder sbUpdateSql = new StringBuilder(); sbUpdateSql.AppendFormat(@"UPDATE POR_LOT SET HOLD_FLAG=1,EDITOR='{1}',EDIT_TIME=GETDATE(),EDIT_TIMEZONE='{2}' WHERE LOT_KEY='{0}'", lotKey.PreventSQLInjection(), editor.PreventSQLInjection(), timeZone.PreventSQLInjection()); db.ExecuteNonQuery(dbTran, CommandType.Text, sbUpdateSql.ToString()); } }
/// <summary> /// 初始化暂停原因列表。 /// </summary> private void BindHoldInfo() { WIP_HOLD_RELEASE_FIELDS holdFields = new WIP_HOLD_RELEASE_FIELDS(); DataTable dtList = CommonUtils.CreateDataTable(holdFields); dtList.Columns.Add(TMP_HOLD_INFO_CONFIRM_HOLD_PASSWORD); this.gcHoldInfoList.MainView = this.gvHoldInfoList; this.gcHoldInfoList.DataSource = dtList; }
/// <summary> /// 暂停生产批次。 /// </summary> /// <param name="db">数据库对象。</param> /// <param name="dbtran">数据库事务对象。</param> /// <param name="dsParams">包含暂停生产批次数据的数据集。</param> private static void HoldLot(Database db, DbTransaction dbtran, DataSet dsParams) { if (!dsParams.Tables.Contains(TRANS_TABLES.TABLE_MAIN_DATA)) { return; } DataTable dtParams = dsParams.Tables[TRANS_TABLES.TABLE_MAIN_DATA]; Hashtable htParams = CommonUtils.ConvertToHashtable(dtParams); string lotKey = Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_LOT_KEY]); string transactionKey = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY]); string reasonCode = Convert.ToString(htParams[WIP_HOLD_RELEASE_FIELDS.FIELD_REASON_CODE_KEY]); string reasonCodeName = Convert.ToString(htParams[WIP_HOLD_RELEASE_FIELDS.FIELD_REASON_CODE_NAME]); string comment = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT]); string shiftName = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME]); string shiftKey = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_KEY]); string oprComputer = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_OPR_COMPUTER]); string opUser = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_OPERATOR]); string editor = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]); string editTimeZone = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY]); DataSet dsLot = GetLotsInfo(db, dbtran, lotKey); if (null != dsLot && dsLot.Tables.Count > 0 && dsLot.Tables[0].Rows.Count > 0) { DataRow drLot = dsLot.Tables[0].Rows[0]; //组织暂停操作数据。 WIP_TRANSACTION_FIELDS transFileds = new WIP_TRANSACTION_FIELDS(); DataTable dtHoldTransaction = CommonUtils.CreateDataTable(transFileds); DataRow drHoldTransaction = dtHoldTransaction.NewRow(); dtHoldTransaction.Rows.Add(drHoldTransaction); drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY] = ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_HOLD; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT] = "检验数据超出控制线。"; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDC_INS_KEY] = drLot[POR_LOT_FIELDS.FIELD_EDC_INS_KEY]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME] = DBNull.Value; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY] = editTimeZone; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR] = editor; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_KEY] = drLot[POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_NAME] = drLot[POR_ROUTE_ENTERPRISE_VER_FIELDS.FIELD_ENTERPRISE_NAME]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_EQUIPMENT_KEY] = drLot[EMS_EQUIPMENTS_FIELDS.FIELD_EQUIPMENT_KEY]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_ROUTE_KEY] = drLot[POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_ROUTE_NAME] = drLot[POR_ROUTE_ROUTE_VER_FIELDS.FIELD_ROUTE_NAME]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_STEP_KEY] = drLot[POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_STEP_NAME] = drLot[POR_ROUTE_STEP_FIELDS.FIELD_ROUTE_STEP_NAME]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY] = drLot[POR_LOT_FIELDS.FIELD_CUR_PRODUCTION_LINE_KEY]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPERATOR] = "system"; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPR_COMPUTER] = oprComputer; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE] = drLot[POR_LOT_FIELDS.FIELD_LINE_NAME]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE_PRE] = drLot[POR_LOT_FIELDS.FIELD_OPR_LINE_PRE]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY] = lotKey; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_PIECE_TYPE] = 0; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN] = drLot[POR_LOT_FIELDS.FIELD_QUANTITY]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT] = drLot[POR_LOT_FIELDS.FIELD_QUANTITY]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_REWORK_FLAG] = drLot[POR_LOT_FIELDS.FIELD_IS_REWORKED]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_KEY] = shiftKey; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME] = shiftName; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG] = drLot[POR_LOT_FIELDS.FIELD_STATE_FLAG]; drHoldTransaction[WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY] = drLot[POR_LOT_FIELDS.FIELD_WORK_ORDER_KEY]; //组织暂停数据 //检查生产批次对应的工步是否设置了预设暂停批次的自定义属性。 string sql = string.Format(@"SELECT A.ATTRIBUTE_VALUE FROM POR_ROUTE_STEP_ATTR A,POR_LOT B WHERE A.ROUTE_STEP_KEY =B.CUR_STEP_VER_KEY AND B.LOT_KEY='{0}' AND A.ATTRIBUTE_NAME='{1}'", lotKey.PreventSQLInjection(), ROUTE_STEP_ATTRIBUTE.HoldPassword); string holdPassword = Convert.ToString(db.ExecuteScalar(dbtran, CommandType.Text, sql)); WIP_HOLD_RELEASE_FIELDS holdFields = new WIP_HOLD_RELEASE_FIELDS(); DataTable dtHold = CommonUtils.CreateDataTable(holdFields); DataRow drHold = dtHold.NewRow(); dtHold.Rows.Add(drHold); drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_EDIT_TIME] = DBNull.Value; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_EDIT_TIMEZONE] = editTimeZone; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_EDITOR] = "system"; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_HOLD_DESCRIPTION] = comment; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_HOLD_OPERATOR] = "system"; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_HOLD_PASSWORD] = holdPassword; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_HOLD_TIME] = DBNull.Value; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_HOLD_TIMEZONE] = editTimeZone; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_REASON_CODE_CATEGORY_KEY] = string.Empty; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_REASON_CODE_CATEGORY_NAME] = string.Empty; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_REASON_CODE_KEY] = string.Empty; drHold[WIP_HOLD_RELEASE_FIELDS.FIELD_REASON_CODE_NAME] = string.Empty; //组织暂停参数。 DataSet dsHoldParams = new DataSet(); dsHoldParams.Tables.Add(dtHoldTransaction); dsHoldParams.Tables.Add(dtHold); //执行批次暂停。 RemotingServer.ServerObjFactory.Get <ILotOperationEngine>().LotHold(dbtran, dsHoldParams); } }