Exemplo n.º 1
0
        /// <summary>
        /// 执行合并批次的操作。
        /// </summary>
        /// <param name="db">数据库对象。</param>
        /// <param name="dbtran">数据库操作事务。</param>
        /// <param name="dsParams">包含合并数据的数据集。</param>
        private void  MergeLot(Database db, DbTransaction dbtran, DataSet dsParams)
        {
            string  sql      = string.Empty;
            DataSet dsReturn = new DataSet();
            DataSet ds;
            string  strParentLotKey = "";
            string  strParentLotNumber = "";
            string  strParentTransKey = "";
            string  strParentStepKey = "";
            string  strParentRouteKey = "";
            string  strParentEnterpriseKey = "";
            string  strParentQTY = "";
            string  strTotalQTY = "";
            string  strComment = "";
            string  strEditor = "", strEditTimeZone = "", strEditTime = "";
            string  strLineKey = "", strShiftName = "", strWorkOrderKey = "", strStateFlag = "";
            string  oprLine = "";

            if (dsParams.Tables.Count > 0)
            {
                //获取输入参数。
                DataTable dtParams = dsParams.Tables[TRANS_TABLES.TABLE_MAIN_DATA];
                Hashtable htParams = SolarViewer.Hemera.Share.Common.CommonUtils.ConvertToHashtable(dtParams);
                strParentLotKey    = htParams[POR_LOT_FIELDS.FIELD_LOT_KEY].ToString();
                strParentLotNumber = htParams[POR_LOT_FIELDS.FIELD_LOT_NUMBER].ToString();
                strTotalQTY        = htParams[POR_LOT_FIELDS.FIELD_QUANTITY].ToString();
                strComment         = htParams[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT].ToString();
                strEditor          = htParams[WIP_TRANSACTION_FIELDS.FIELD_EDITOR].ToString();
                strEditTimeZone    = htParams[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY].ToString();
                strEditTime        = UtilHelper.GetSysdate(db).ToString("yyyy-MM-dd HH:mm:ss");
                string shiftKey         = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_KEY]);
                string operComputerName = Convert.ToString(htParams[WIP_TRANSACTION_FIELDS.FIELD_OPR_COMPUTER]);
                if (htParams.ContainsKey(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME))
                {
                    strShiftName = htParams[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME].ToString();
                }
                else
                {
                    strShiftName = UtilHelper.GetShiftValue(db, strEditTime);
                }
                if (string.IsNullOrEmpty(shiftKey))
                {
                    shiftKey = UtilHelper.GetShiftKey(db, strEditTime);
                }
                //获取合并到批次的详细信息。
                ds = LotManagement.GetLotDetailsEx(db, dbtran, strParentLotKey);
                strParentStepKey       = ds.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY].ToString();
                strParentRouteKey      = ds.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY].ToString();
                strParentEnterpriseKey = ds.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY].ToString();
                strParentQTY           = ds.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_QUANTITY].ToString();
                strLineKey             = ds.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_CUR_PRODUCTION_LINE_KEY].ToString();
                oprLine         = ds.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_OPR_LINE].ToString();
                strWorkOrderKey = ds.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_WORK_ORDER_KEY].ToString();
                strStateFlag    = ds.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_STATE_FLAG].ToString();
                string reworkFlag = Convert.ToString(ds.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_IS_REWORKED]);
                //更新合并到批次的数据
                sql = string.Format(@"UPDATE POR_LOT 
                                    SET QUANTITY={0},EDITOR='{1}',EDIT_TIME=GETDATE(),EDIT_TIMEZONE='{2}' 
                                    WHERE LOT_KEY='{3}'",
                                    strTotalQTY.PreventSQLInjection(),
                                    strEditor.PreventSQLInjection(),
                                    strEditTimeZone.PreventSQLInjection(),
                                    strParentLotKey.PreventSQLInjection());
                db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                //记录合批操作。
                WIP_TRANSACTION_FIELDS wipFields = new WIP_TRANSACTION_FIELDS();
                Hashtable parenttransactionTable = new Hashtable();
                DataTable parenttransaction      = new DataTable();
                strParentTransKey = UtilHelper.GenerateNewKey(0);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY, strParentTransKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_TYPE, "0");
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY, strParentLotKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN, strParentQTY);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT, strTotalQTY);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY, ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_MERGE);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT, strComment);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDITOR, strEditor);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY, strEditTimeZone);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME, strEditTime);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY, strWorkOrderKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STEP_KEY, strParentStepKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ROUTE_KEY, strParentRouteKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_KEY, strParentEnterpriseKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG, strStateFlag);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE, oprLine);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_REWORK_FLAG, reworkFlag);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_OPERATOR, strEditor);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY, strLineKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME, strShiftName);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_KEY, shiftKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_OPR_COMPUTER, operComputerName);
                sql = DatabaseTable.BuildInsertSqlStatement(wipFields, parenttransactionTable, null);
                db.ExecuteNonQuery(dbtran, CommandType.Text, sql);

                string strChildLotKey    = "";
                string strChildLotNumber = "";
                string strChildQty       = "";

                if (dsParams.Tables.Contains(BASE_PARAMETER_FIELDS.DATABASE_TABLE_NAME))
                {
                    DataTable dtBaseParameters = dsParams.Tables[BASE_PARAMETER_FIELDS.DATABASE_TABLE_NAME];
                    //循环被合并的批次。
                    for (int i = 0; i < dtBaseParameters.Rows.Count; i++)
                    {
                        strChildLotKey    = dtBaseParameters.Rows[i]["LOT_KEY"].ToString();
                        strChildLotNumber = dtBaseParameters.Rows[i]["LOT_NUMBER"].ToString();
                        strChildQty       = dtBaseParameters.Rows[i]["QUANTITY"].ToString();
                        //更新被合并批次的数据
                        sql = string.Format(@"UPDATE POR_LOT
                                            SET QUANTITY='0',DELETED_TERM_FLAG='1',EDITOR='{0}',EDIT_TIME=GETDATE(),EDIT_TIMEZONE='{1}' 
                                            WHERE LOT_KEY='{2}'",
                                            strEditor.PreventSQLInjection(),
                                            strEditTimeZone.PreventSQLInjection(),
                                            strChildLotKey.PreventSQLInjection());
                        db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                        //插入被合并批次的交易记录
                        Hashtable childtransactionTable = new Hashtable();
                        DataTable childtransaction      = new DataTable();
                        string    strChildTransKey      = UtilHelper.GenerateNewKey(0);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY, strChildTransKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_TYPE, "0");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY, strChildLotKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN, strChildQty);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT, "0");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY, ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_MERGED);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT, "");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDITOR, strEditor);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY, strEditTimeZone);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME, strEditTime);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY, strWorkOrderKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_KEY, strParentEnterpriseKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ROUTE_KEY, strParentRouteKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STEP_KEY, strParentStepKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG, strStateFlag);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE, oprLine);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_REWORK_FLAG, reworkFlag);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_OPERATOR, strEditor);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY, strLineKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME, strShiftName);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_KEY, shiftKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_OPR_COMPUTER, operComputerName);
                        sql = DatabaseTable.BuildInsertSqlStatement(wipFields, childtransactionTable, null);
                        db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                        //插入WIP_MERGE表
                        Hashtable        MergeHashTable = new Hashtable();
                        WIP_MERGE_FIELDS wipMerge       = new WIP_MERGE_FIELDS();
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_TRANSACTION_KEY, strParentTransKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_CHILD_LOT_KEY, strChildLotKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_MAIN_LOT_KEY, strParentLotKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_MERGE_QUANTITY, strChildQty);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_STEP_KEY, strParentStepKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_ROUTE_KEY, strParentRouteKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_ENTERPRISE_KEY, strParentEnterpriseKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_EDITOR, strEditor);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_EDIT_TIME, strEditTime);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_EDIT_TIMEZONE, strEditTimeZone);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_CHILD_TRANSACTION_KEY, strChildTransKey);
                        sql = DatabaseTable.BuildInsertSqlStatement(wipMerge, MergeHashTable, null);
                        db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 将线边仓中的批次进行合并。
        /// </summary>
        /// <param name="db">数据库对象。</param>
        /// <param name="dbtran">数据库操作事务对象。</param>
        /// <param name="dsParams">
        /// 包含合批数据的数据集对象.
        /// (1)数据集对象中包含一个名称为<see cref="BASE_PARAMETER_FIELDS.DATABASE_TABLE_NAME"/>的数据表对象。
        /// 数据表中存放待合并的批次返工或退库数据。
        /// (2) 数据集对象中包含一个名称为<see cref="TRANS_TABLES.TABLE_MAIN_DATA"/>的数据表对象。
        /// 数据表中必须包含两个列"name"和"value"。列name存放哈希表的键名,列value存放哈希表键对应的键值。
        /// 键名:
        /// 合并到批次的返工或退库记录的主键<see cref="WST_STORE_MAT_FIELDS.FIELD_ROW_KEY"/>,
        /// 合并到批次的批次号<see cref="POR_LOT_FIELDS.FIELD_LOT_NUMBER"/>,
        /// 合并后批次的数量<see cref="POR_LOT_FIELDS.FIELD_QUANTITY"/>,
        /// 编辑人<see cref="WIP_TRANSACTION_FIELDS.FIELD_EDITOR"/>,
        /// 编辑时区<see cref="WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY"/>,
        /// 编辑时间<see cref="WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME"/>,
        /// 批次主键<see cref="POR_LOT_FIELDS.FIELD_LOT_KEY"/>。
        /// </param>
        private void MergeLotInStore(Database db, DbTransaction dbtran, DataSet dsParams)
        {
            String  sql      = string.Empty;
            DataSet dsReturn = new DataSet();
            DataSet ds;
            string  strParentRowKey        = "";
            string  strParentLotNumber     = "";
            string  strParentTransKey      = "";
            string  strParentStepKey       = "";
            string  strParentRouteKey      = "";
            string  strParentEnterpriseKey = "";
            string  strParentQTY           = "";
            string  strTotalQTY            = "";
            string  strSumQTY = "";
            string  strComment = "";
            string  strEditor = "", strEditTimeZone = "", strEditTime = "";
            string  strLineKey = "", strShiftName = "", strWorkOrderKey = "", strStateFlag = "";

            if (dsParams.Tables.Count > 0)//数据集中包含数据表。
            {
                DataTable dataTable = dsParams.Tables[TRANS_TABLES.TABLE_MAIN_DATA];
                Hashtable hashData  = SolarViewer.Hemera.Share.Common.CommonUtils.ConvertToHashtable(dataTable);
                strParentRowKey    = hashData[WST_STORE_MAT_FIELDS.FIELD_ROW_KEY].ToString();
                strParentLotNumber = hashData["LOT_NUMBER"].ToString();
                strSumQTY          = hashData[POR_LOT_FIELDS.FIELD_QUANTITY].ToString();
                //strComment = hashData[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT].ToString();
                strEditor       = hashData[WIP_TRANSACTION_FIELDS.FIELD_EDITOR].ToString();
                strEditTimeZone = hashData[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY].ToString();
                strEditTime     = UtilHelper.GetSysdate(db).ToString("yyyy-MM-dd HH:mm:ss");
                // Get Lot Details
                ds = StoreEngine.GetStoreLotDetailsInfor(db, strParentRowKey);
                strParentStepKey       = ds.Tables[WST_STORE_MAT_FIELDS.DATABASE_TABLE_NAME].Rows[0][WST_STORE_MAT_FIELDS.FIELD_STEP_KEY].ToString();
                strParentRouteKey      = ds.Tables[WST_STORE_MAT_FIELDS.DATABASE_TABLE_NAME].Rows[0][WST_STORE_MAT_FIELDS.FIELD_ROUTE_KEY].ToString();
                strParentEnterpriseKey = ds.Tables[WST_STORE_MAT_FIELDS.DATABASE_TABLE_NAME].Rows[0][WST_STORE_MAT_FIELDS.FIELD_ENTERPRISE_KEY].ToString();
                strParentQTY           = ds.Tables[WST_STORE_MAT_FIELDS.DATABASE_TABLE_NAME].Rows[0][WST_STORE_MAT_FIELDS.FIELD_ITEM_QTY].ToString();

                strLineKey      = ds.Tables[WST_STORE_MAT_FIELDS.DATABASE_TABLE_NAME].Rows[0][WST_STORE_MAT_FIELDS.FIELD_LINE_KEY].ToString();
                strShiftName    = UtilHelper.GetShiftKey(db, strEditTime);
                strWorkOrderKey = ds.Tables[WST_STORE_MAT_FIELDS.DATABASE_TABLE_NAME].Rows[0][POR_LOT_FIELDS.FIELD_WORK_ORDER_KEY].ToString();

                //更新WST_STORE_MAT记录
                sql = string.Format(@"UPDATE WST_STORE_MAT 
                                    SET ITEM_QTY= '{0}', EDIT_TIME=GETDATE() 
                                    WHERE ROW_KEY='{1}'",
                                    strSumQTY.PreventSQLInjection(),
                                    strParentRowKey.PreventSQLInjection());
                db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                strTotalQTY = (Convert.ToInt32(strParentQTY) + Convert.ToInt32(strSumQTY)).ToString();

                WIP_TRANSACTION_FIELDS wipFields = new WIP_TRANSACTION_FIELDS();

                #region 合并批次操作记录
                Hashtable parenttransactionTable = new Hashtable();
                DataTable parenttransaction      = new DataTable();
                strParentTransKey = UtilHelper.GenerateNewKey(0);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY, strParentTransKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_TYPE, "0");
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY, hashData[POR_LOT_FIELDS.FIELD_LOT_KEY].ToString());
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_CHILD_LOT_KEY, strParentRowKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN, strParentQTY);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT, strTotalQTY);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY, ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_STOREMERGE);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT, strComment);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDITOR, strEditor);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY, strEditTimeZone);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME, strEditTime);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY, strLineKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME, strShiftName);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY, strWorkOrderKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STEP_KEY, strParentStepKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ROUTE_KEY, strParentRouteKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_KEY, strParentEnterpriseKey);
                parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG, strStateFlag);
                //向WIP_TRANSACTION插入合并到批次的操作记录
                sql = DatabaseTable.BuildInsertSqlStatement(wipFields, parenttransactionTable, null);
                db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                #endregion

                #region 生成子批次
                string strChildRowKey    = "";
                string strChildLotNumber = "";
                string strChildQty       = "";

                if (dsParams.Tables.Contains(BASE_PARAMETER_FIELDS.DATABASE_TABLE_NAME))
                {
                    DataTable parameterdatatable = dsParams.Tables[BASE_PARAMETER_FIELDS.DATABASE_TABLE_NAME];
                    for (int i = 0; i < parameterdatatable.Rows.Count; i++)
                    {
                        //更新WST_STORE_MAT数据
                        strChildRowKey    = parameterdatatable.Rows[i][WST_STORE_MAT_FIELDS.FIELD_ROW_KEY].ToString();
                        strChildLotNumber = parameterdatatable.Rows[i]["LOT_NUMBER"].ToString();
                        strChildQty       = parameterdatatable.Rows[i][WST_STORE_MAT_FIELDS.FIELD_ITEM_QTY].ToString();

                        sql = @"UPDATE WST_STORE_MAT 
                                SET ITEM_QTY='0',OBJECT_STATUS='3', EDIT_TIME=GETDATE() 
                                WHERE ROW_KEY='" + strChildRowKey.PreventSQLInjection() + "'";
                        db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                        //向WIP_TRANSACTION插入被合并批次的操作记录
                        Hashtable childtransactionTable = new Hashtable();
                        DataTable childtransaction      = new DataTable();
                        //sql = "";
                        string strChildTransKey = UtilHelper.GenerateNewKey(0);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY, strChildTransKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_TYPE, "0");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY, parameterdatatable.Rows[i][POR_LOT_FIELDS.FIELD_LOT_KEY].ToString());
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_CHILD_LOT_KEY, strChildRowKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN, strChildQty);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT, "0");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY, ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_STORE_MERGED);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT, "");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDITOR, strEditor);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY, strEditTimeZone);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME, strEditTime);

                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY, strLineKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME, strShiftName);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY, strWorkOrderKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_KEY, strParentEnterpriseKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ROUTE_KEY, strParentRouteKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STEP_KEY, strParentStepKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG, strStateFlag);
                        sql = DatabaseTable.BuildInsertSqlStatement(wipFields, childtransactionTable, null);
                        db.ExecuteNonQuery(dbtran, CommandType.Text, sql);

                        //向WIP_MERGE插入合并批次记录
                        Hashtable        MergeHashTable = new Hashtable();
                        WIP_MERGE_FIELDS wipMerge       = new WIP_MERGE_FIELDS();

                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_TRANSACTION_KEY, strParentTransKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_CHILD_LOT_KEY, strChildRowKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_MAIN_LOT_KEY, strParentRowKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_MERGE_QUANTITY, strChildQty);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_STEP_KEY, strParentStepKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_ROUTE_KEY, strParentRouteKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_ENTERPRISE_KEY, strParentEnterpriseKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_EDITOR, strEditor);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_EDIT_TIME, strEditTime);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_EDIT_TIMEZONE, strEditTimeZone);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_CHILD_TRANSACTION_KEY, strChildTransKey);
                        sql = DatabaseTable.BuildInsertSqlStatement(wipMerge, MergeHashTable, null);
                        db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                    }
                }
                #endregion
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 自动合批操作。
        /// </summary>
        /// <param name="db">数据库对象。</param>
        /// <param name="dbtran">数据操作的事务对象。</param>
        /// <param name="lotKeyFrom">需要合批的批次主键。</param>
        /// <param name="workOrderKeyFrom">工单主键。</param>
        /// <param name="stepKeyFrom">工步主键</param>
        /// <param name="lineKeyFrom">线别主键</param>
        /// <param name="quantityFrom">数量</param>
        /// <param name="maxBoxQuantity">最大箱数量</param>
        /// <param name="stateFlag">批次状态标记</param>
        /// <param name="editor">编辑人</param>
        /// <param name="isRework">是否重工</param>
        /// <param name="oprLine">操作线别</param>
        /// <param name="shiftName">操作班别</param>
        public static void AutoMerge(Database db,
                                     DbTransaction dbtran,
                                     string lotKeyFrom,
                                     string workOrderKeyFrom,
                                     string stepKeyFrom,
                                     string lineKeyFrom,
                                     string quantityFrom,
                                     int maxBoxQuantity,
                                     int stateFlag,
                                     string editor,
                                     bool isRework,
                                     string oprLine,
                                     string shiftName)
        {
            string  lotKey = "", quantity = "", enterpriseKey = "", routeKey = "", stepKey = "";
            int     totalQuantity = 0;
            int     mergedQuantity = 0;
            int     leftQuantity = 0;
            string  sql = "", strParentTransKey = "";
            DataSet dsMergeLot = new DataSet();

            //获取批次主键不等于指定批次,但工单为指定工单,工步为指定工步,线别为指定线别,状态为指定状态的批次信息。
            sql = string.Format(@"SELECT A.LOT_KEY,A.QUANTITY,A.ROUTE_ENTERPRISE_VER_KEY,A.CUR_ROUTE_VER_KEY,A.CUR_STEP_VER_KEY
                                FROM POR_LOT A
                                LEFT  JOIN FMM_PRODUCTION_LINE B ON A.LINE_NAME=B.LINE_NAME
                                WHERE A.LOT_KEY !='{0}' 
                                AND A.WORK_ORDER_KEY='{1}'
                                AND A.CUR_STEP_VER_KEY='{2}'
                                AND B.PRODUCTION_LINE_KEY='{3}' 
                                AND A.STATUS = 1 AND A.QUANTITY != 0 
                                AND A.DELETED_TERM_FLAG = 0 
                                AND A.HOLD_FLAG=0 
                                AND A.STATE_FLAG={4}",
                                lotKeyFrom.PreventSQLInjection(),
                                workOrderKeyFrom.PreventSQLInjection(),
                                stepKeyFrom.PreventSQLInjection(),
                                lineKeyFrom.PreventSQLInjection(), stateFlag);
            //如果指定了最大箱数量,则查询条件增加数量小于最大箱数量。
            if (maxBoxQuantity != -1)
            {
                sql = sql + " AND A.QUANTITY<" + maxBoxQuantity + "";
            }
            //如果是重工,则查询条件增加重工>0
            if (isRework)
            {
                sql = sql + " AND A.REWORK_FLAG > 0";
            }
            dsMergeLot = db.ExecuteDataSet(CommandType.Text, sql);

            //查询得到的数据集中的数据表个数>0。
            if (dsMergeLot.Tables.Count > 0)
            {
                //可以合并的批次的记录大于0。
                if (dsMergeLot.Tables[0].Rows.Count > 0)
                {
                    lotKey        = dsMergeLot.Tables[0].Rows[0][POR_LOT_FIELDS.FIELD_LOT_KEY].ToString();                      //批次主键
                    quantity      = dsMergeLot.Tables[0].Rows[0][POR_LOT_FIELDS.FIELD_QUANTITY].ToString();                     //数量
                    enterpriseKey = dsMergeLot.Tables[0].Rows[0][POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY].ToString();     //流程组主键
                    routeKey      = dsMergeLot.Tables[0].Rows[0][POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY].ToString();            //流程主键
                    stepKey       = dsMergeLot.Tables[0].Rows[0][POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY].ToString();             //工步主键
                    string time = UtilHelper.GetSysdate(db).ToString("yyyy-MM-dd HH:mm:ss");                                    //当前时间
                    //合并的批次数量>0 并且 被合并的批次数量>0
                    if (quantity.Length > 0 && quantityFrom.Length > 0)
                    {
                        totalQuantity = Convert.ToInt32(quantity) + Convert.ToInt32(quantityFrom);
                        #region 更新合批批次的数量
                        //如果最大箱数量不等于 -1 并且总数量>最大箱数量。
                        if (maxBoxQuantity != -1 & totalQuantity > maxBoxQuantity)
                        {
                            #region 更新合并到的批次数量为最大箱数量。
                            sql = @"UPDATE POR_LOT SET QUANTITY=" + maxBoxQuantity + "," +
                                  "EDITOR='" + editor.PreventSQLInjection() + "'," +
                                  "EDIT_TIME=GETDATE() " +
                                  "WHERE LOT_KEY='" + lotKey.PreventSQLInjection() + "'";
                            db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                            #endregion

                            #region 更新被合并的批次数量为剩余数量。
                            leftQuantity   = totalQuantity - maxBoxQuantity;
                            mergedQuantity = Convert.ToInt32(quantityFrom) - leftQuantity;
                            sql            = @"UPDATE POR_LOT SET QUANTITY=" + leftQuantity + "," +
                                             "EDITOR='" + editor.PreventSQLInjection() + "'," +
                                             "EDIT_TIME=GETDATE() " +
                                             "WHERE LOT_KEY='" + lotKeyFrom.PreventSQLInjection() + "'";
                            db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                            #endregion
                        }
                        else
                        {
                            #region 更新合并到的批次数量为总数量。
                            sql = @"UPDATE POR_LOT SET QUANTITY=" + totalQuantity + "," +
                                  "EDITOR='" + editor.PreventSQLInjection() + "'," +
                                  "EDIT_TIME=GETDATE()" +
                                  "WHERE LOT_KEY='" + lotKey.PreventSQLInjection() + "'";
                            db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                            #endregion

                            #region 更新被合并的批次数量为0。删除标记为1。
                            mergedQuantity = Convert.ToInt32(quantityFrom);
                            sql            = @"UPDATE POR_LOT SET QUANTITY='0',DELETED_TERM_FLAG='1',
                                    EDITOR='" + editor.PreventSQLInjection() + "'," +
                                             "EDIT_TIME=GETDATE() " +
                                             "WHERE LOT_KEY='" + lotKeyFrom.PreventSQLInjection() + "'";
                            db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                            #endregion
                        }
                        #endregion

                        #region 插入一笔【合并到批次】的操作记录。
                        WIP_TRANSACTION_FIELDS wipFields = new WIP_TRANSACTION_FIELDS();
                        Hashtable parenttransactionTable = new Hashtable();
                        DataTable parenttransaction      = new DataTable();
                        strParentTransKey = UtilHelper.GenerateNewKey(0);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY, strParentTransKey);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_TYPE, "0");
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY, lotKey);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN, quantity);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT, totalQuantity);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY, ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_MERGE);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT, "");
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDITOR, "");
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY, "CN-ZH");
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME, time);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY, lineKeyFrom);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY, workOrderKeyFrom);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG, stateFlag.ToString());
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME, shiftName);
                        parenttransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE, oprLine);
                        sql = DatabaseTable.BuildInsertSqlStatement(wipFields, parenttransactionTable, null);
                        db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                        #endregion

                        #region 插入一笔【被合并批次】的操作记录。
                        Hashtable childtransactionTable = new Hashtable();
                        DataTable childtransaction      = new DataTable();
                        string    strChildTransKey      = UtilHelper.GenerateNewKey(0);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY, strChildTransKey);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_TYPE, "0");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY, lotKeyFrom);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN, mergedQuantity.ToString());
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT, leftQuantity.ToString());
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY, ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_MERGED);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT, "");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDITOR, "");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY, "CN-ZH");
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME, time);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY, lineKeyFrom);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY, workOrderKeyFrom);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG, stateFlag.ToString());
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME, shiftName);
                        childtransactionTable.Add(WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE, oprLine);
                        sql = DatabaseTable.BuildInsertSqlStatement(wipFields, childtransactionTable, null);
                        db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                        #endregion

                        #region 插入一笔批次合批的操作记录。
                        Hashtable        MergeHashTable = new Hashtable();
                        WIP_MERGE_FIELDS wipMerge       = new WIP_MERGE_FIELDS();

                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_TRANSACTION_KEY, strParentTransKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_CHILD_LOT_KEY, lotKeyFrom);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_MAIN_LOT_KEY, lotKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_MERGE_QUANTITY, mergedQuantity.ToString());
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_STEP_KEY, stepKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_ROUTE_KEY, routeKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_ENTERPRISE_KEY, enterpriseKey);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_EDITOR, "");
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_EDIT_TIME, time);
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_EDIT_TIMEZONE, "CN-ZH");
                        MergeHashTable.Add(WIP_MERGE_FIELDS.FIELD_CHILD_TRANSACTION_KEY, strChildTransKey);

                        sql = DatabaseTable.BuildInsertSqlStatement(wipMerge, MergeHashTable, null);
                        db.ExecuteNonQuery(dbtran, CommandType.Text, sql);
                        #endregion
                    }
                }
            }
        }