Beispiel #1
0
        /// <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());
            }
        }
Beispiel #2
0
        /// <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;
        }
Beispiel #3
0
        /// <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);
            }
        }