Exemplo n.º 1
0
        /// <summary>
        /// 保存,返修批次。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tsbOK_Click(object sender, EventArgs e)
        {
            if (this.gvHoldInfoList.State == GridState.Editing &&
                this.gvHoldInfoList.IsEditorFocused &&
                this.gvHoldInfoList.EditingValueModified)
            {
                this.gvHoldInfoList.SetFocusedRowCellValue(this.gvHoldInfoList.FocusedColumn, this.gvHoldInfoList.EditingValue);
            }
            this.gvHoldInfoList.UpdateCurrentRow();
            //待返工批次信息
            DataTable dtLotInfo = this.gcLotList.DataSource as DataTable;

            if (dtLotInfo == null || dtLotInfo.Rows.Count < 1)
            {
                MessageService.ShowMessage("待返工批次信息列表至少要有一条记录。", "提示");
                return;
            }
            //暂停信息
            DataTable dtHoldInfo = this.gcHoldInfoList.DataSource as DataTable;

            if (dtHoldInfo.Rows.Count < 1)
            {
                MessageService.ShowMessage("暂停信息列表至少要有一条记录。", "提示");
                return;
            }
            string newEnterpriseName = this.beEnterpriseName.Text;
            string newEnterpriseKey  = Convert.ToString(this.beEnterpriseName.Tag);
            string newRouteName      = this.teRouteName.Text;
            string newRouteKey       = Convert.ToString(this.teRouteName.Tag);
            string newStepName       = this.teStepName.Text;
            string newStepKey        = Convert.ToString(this.teStepName.Tag);

            //返工工艺流程必须选择
            if (string.IsNullOrEmpty(newStepKey))
            {
                MessageService.ShowMessage("请选择工艺流程。", "提示");
                this.beEnterpriseName_ButtonClick(this.teStepName, new ButtonPressedEventArgs(new EditorButton()));
                return;
            }
            string remark = this.teRemark.Text.Trim();

            if (string.IsNullOrEmpty(remark))
            {
                MessageService.ShowMessage("备注必须输入。", "提示");
                this.teRemark.Select();
                return;
            }

            StringBuilder afterContent = new StringBuilder();

            afterContent.AppendFormat("工艺流程组:{0};", newEnterpriseName);
            afterContent.AppendFormat("工艺流程:{0};", newRouteName);
            afterContent.AppendFormat("工序:{0};", newStepName);
            //密码和释放密码不一致
            var lnq = from item in dtHoldInfo.AsEnumerable()
                      where Convert.ToString(item[TEMP_HOLD_LIST_RELEASE_PASSWORD]) != Convert.ToString(item[WIP_HOLD_RELEASE_FIELDS.FIELD_HOLD_PASSWORD])
                      select item;

            foreach (var item in lnq)
            {
                MessageService.ShowMessage("释放密码和暂停密码不一致,请确认。", "提示");
                this.gvHoldInfoList.FocusedColumn    = this.gclPassword;
                this.gvHoldInfoList.FocusedRowHandle = dtHoldInfo.Rows.IndexOf(item);
                this.gvHoldInfoList.ShowEditor();
                return;
            }

            string shiftName = this._model.ShiftName;
            string shiftKey  = string.Empty;
            //Shift shiftEntity = new Shift();
            //string shiftKey = shiftEntity.IsShiftValueExists(shiftName);//班次主键。
            ////获取班次主键失败。
            //if (!string.IsNullOrEmpty(shiftEntity.ErrorMsg))
            //{
            //    MessageService.ShowError(shiftEntity.ErrorMsg);
            //    return;
            //}
            ////没有排班。
            //if (string.IsNullOrEmpty(shiftKey))
            //{
            //    MessageService.ShowMessage("请先在系统中进行排班。", "提示");
            //    return;
            //}
            string oprComputer = PropertyService.Get(PROPERTY_FIELDS.COMPUTER_NAME);
            string timezone    = PropertyService.Get(PROPERTY_FIELDS.TIMEZONE);

            DataSet dsParams = new DataSet();
            //存放批次返工信息。
            Hashtable htMaindata = new Hashtable();

            htMaindata.Add(POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY, newEnterpriseKey);
            htMaindata.Add(POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY, newRouteKey);
            htMaindata.Add(POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY, newStepKey);
            DataTable dtMaindata = CommonUtils.ParseToDataTable(htMaindata);

            dtMaindata.TableName = TRANS_TABLES.TABLE_MAIN_DATA;
            //存放待返工的批次的操作数据
            WIP_TRANSACTION_FIELDS transFields = new WIP_TRANSACTION_FIELDS();
            DataTable dtTransaction            = CommonUtils.CreateDataTable(transFields);
            //存在批次返工操作的明细记录。
            WIP_COMMENT_FIELDS commentFileds = new WIP_COMMENT_FIELDS();
            DataTable          dtComment     = CommonUtils.CreateDataTable(commentFileds);

            foreach (DataRow dr in dtLotInfo.Rows)
            {
                string transKey = CommonUtils.GenerateNewKey(0);
                string lotKey   = Convert.ToString(dr[POR_LOT_FIELDS.FIELD_LOT_KEY]);
                //组织待返工的批次的操作数据
                DataRow drTransaction = dtTransaction.NewRow();
                dtTransaction.Rows.Add(drTransaction);
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY]  = transKey;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY]        = lotKey;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY]         = ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_REWORK;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN]      = dr[POR_LOT_FIELDS.FIELD_QUANTITY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT]     = dr[POR_LOT_FIELDS.FIELD_QUANTITY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_KEY]   = dr[POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_NAME]  = dr[POR_ROUTE_ENTERPRISE_VER_FIELDS.FIELD_ENTERPRISE_NAME];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ROUTE_KEY]        = dr[POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ROUTE_NAME]       = dr[POR_ROUTE_ROUTE_VER_FIELDS.FIELD_ROUTE_NAME];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_STEP_KEY]         = dr[POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_STEP_NAME]        = dr[POR_ROUTE_STEP_FIELDS.FIELD_ROUTE_STEP_NAME];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY]   = dr[POR_LOT_FIELDS.FIELD_WORK_ORDER_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_KEY]        = shiftKey;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME]       = shiftName;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG]       = dr[POR_LOT_FIELDS.FIELD_STATE_FLAG];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_REWORK_FLAG]      = dr[POR_LOT_FIELDS.FIELD_IS_REWORKED];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPERATOR]         = this._model.UserName;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPR_COMPUTER]     = oprComputer;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY]         = dr[POR_LOT_FIELDS.FIELD_CUR_PRODUCTION_LINE_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE]         = dr[POR_LOT_FIELDS.FIELD_OPR_LINE];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE_PRE]     = dr[POR_LOT_FIELDS.FIELD_OPR_LINE_PRE];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDC_INS_KEY]      = dr[POR_LOT_FIELDS.FIELD_EDC_INS_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EQUIPMENT_KEY]    = dr[EMS_EQUIPMENTS_FIELDS.FIELD_EQUIPMENT_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT] = remark;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]           = this._model.UserName;
                //用于暂存序列号批次信息最后的编辑时间,以便判断序列号信息是否过期。
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME]         = dr[POR_LOT_FIELDS.FIELD_EDIT_TIME];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY] = timezone;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_TIME_STAMP]        = DBNull.Value;
                //组织新的工艺流程数据
                DataRow drComment = dtComment.NewRow();
                dtComment.Rows.Add(drComment);
                drComment[WIP_COMMENT_FIELDS.FIELDS_TRANSACTION_KEY] = transKey;
                drComment[WIP_COMMENT_FIELDS.FIELDS_EDIT_TIMEZONE]   = timezone;
                drComment[WIP_COMMENT_FIELDS.FIELDS_EDIT_TIME]       = DBNull.Value;
                drComment[WIP_COMMENT_FIELDS.FIELDS_EDITOR]          = this._model.UserName;
                drComment[WIP_COMMENT_FIELDS.FIELDS_ENTERPRISE_KEY]  = newEnterpriseKey;
                drComment[WIP_COMMENT_FIELDS.FIELDS_ROUTE_KEY]       = newRouteKey;
                drComment[WIP_COMMENT_FIELDS.FIELDS_STEP_KEY]        = newStepKey;
                StringBuilder beforeContent = new StringBuilder();
                beforeContent.AppendFormat("工艺流程组:{0};", dr[POR_ROUTE_ENTERPRISE_VER_FIELDS.FIELD_ENTERPRISE_NAME]);
                beforeContent.AppendFormat("工艺流程:{0};", dr[POR_ROUTE_ROUTE_VER_FIELDS.FIELD_ROUTE_NAME]);
                beforeContent.AppendFormat("工序:{0};", dr[POR_ROUTE_STEP_FIELDS.FIELD_ROUTE_STEP_NAME]);
                drComment[WIP_COMMENT_FIELDS.FIELDS_BEFORE_CONTENT] = beforeContent;
                drComment[WIP_COMMENT_FIELDS.FIELDS_AFTER_CONTENT]  = afterContent;
                //组织暂停批次信息。
                lnq = from item in dtHoldInfo.AsEnumerable()
                      where Convert.ToString(item[POR_LOT_FIELDS.FIELD_LOT_KEY]) == lotKey
                      select item;
                foreach (DataRow drHoldInfo in lnq)
                {
                    drHoldInfo[WIP_HOLD_RELEASE_FIELDS.FIELD_RELEASE_TRANSACTION_KEY] = transKey;
                    drHoldInfo[WIP_HOLD_RELEASE_FIELDS.FIELD_RELEASE_DESCRIPTION]     = remark;
                    drHoldInfo[WIP_HOLD_RELEASE_FIELDS.FIELD_RELEASE_OPERATOR]        = this._model.UserName;
                    drHoldInfo[WIP_HOLD_RELEASE_FIELDS.FIELD_RELEASE_TIMEZONE]        = timezone;
                    drHoldInfo[WIP_HOLD_RELEASE_FIELDS.FIELD_EDITOR]        = this._model.UserName;
                    drHoldInfo[WIP_HOLD_RELEASE_FIELDS.FIELD_EDIT_TIMEZONE] = timezone;
                }
            }
            //存放暂停明细。
            DataTable dtHoldParams = dtHoldInfo.Copy();

            dtHoldParams.Columns.Remove(TEMP_HOLD_LIST_RELEASE_PASSWORD);     //移除临时列。
            dtHoldParams.Columns.Remove(POR_LOT_FIELDS.FIELD_LOT_KEY);        //移除批次主键列。
            dtHoldParams.Columns.Remove(POR_LOT_FIELDS.FIELD_LOT_NUMBER);     //移除批次号列。

            dsParams.Tables.Add(dtMaindata);
            dsParams.Tables.Add(dtTransaction);
            dsParams.Tables.Add(dtHoldParams);
            dsParams.Tables.Add(dtComment);
            //执行(返工/返修)批次。
            this._entity.LotRework(dsParams);
            if (!string.IsNullOrEmpty(this._entity.ErrorMsg))
            {
                MessageService.ShowError(this._entity.ErrorMsg);
            }
            else
            {
                this.tsbCancle_Click(sender, e);
            }
            dsParams.Tables.Clear();
            dtTransaction = null;
            dtHoldParams  = null;
            dtComment     = null;
            dsParams      = null;
        }
Exemplo n.º 2
0
        /// <summary>
        /// 保存,调整批次。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tsbOK_Click(object sender, EventArgs e)
        {
            DataTable dtLotInfo = this.gcList.DataSource as DataTable;

            if (dtLotInfo.Rows.Count < 1)
            {
                MessageService.ShowMessage("待调整批次信息列表至少要有一条记录。", "提示");
                return;
            }
            string newLotNumber      = this.teLotNumber.Text.Trim().ToUpper();
            string newProId          = Convert.ToString(this.lueProId.EditValue);
            string newCreateType     = Convert.ToString(this.lueCreateType.EditValue);
            string newLotType        = Convert.ToString(this.lueLotType.EditValue);
            string newPriority       = Convert.ToString(this.luePriority.EditValue);
            string newEfficiency     = Convert.ToString(this.lueEfficiency.EditValue);
            string newSiLot          = this.teSILot.Text.Trim();
            string newEnterpriseName = this.beEnterpriseName.Text;
            string newEnterpriseKey  = Convert.ToString(this.beEnterpriseName.Tag);
            string newRouteName      = this.teRouteName.Text;
            string newRouteKey       = Convert.ToString(this.teRouteName.Tag);
            string newStepName       = this.teStepName.Text;
            string newStepKey        = Convert.ToString(this.teStepName.Tag);
            string remark            = this.teRemark.Text;

            //必须要输入一个调整项目。
            if (string.IsNullOrEmpty(newLotNumber) &&
                string.IsNullOrEmpty(newProId) &&
                string.IsNullOrEmpty(newCreateType) &&
                string.IsNullOrEmpty(newLotType) &&
                string.IsNullOrEmpty(newPriority) &&
                string.IsNullOrEmpty(newEfficiency) &&
                string.IsNullOrEmpty(newSiLot) &&
                string.IsNullOrEmpty(newStepKey))
            {
                MessageService.ShowMessage("必须要输入一个调整项目。", "提示");
                return;
            }
            //如果批次号不为空,则判断批次号是否存在。
            if (!string.IsNullOrEmpty(newLotNumber))
            {
                LotQueryEntity queryEntity = new LotQueryEntity();
                DataSet        dsReturn    = queryEntity.GetLotInfo(newLotNumber);
                if (!string.IsNullOrEmpty(queryEntity.ErrorMsg))
                {
                    MessageService.ShowError(queryEntity.ErrorMsg);
                    dsReturn = null;
                    return;
                }
                if (dsReturn.Tables[0].Rows.Count > 0)
                {
                    MessageService.ShowMessage(string.Format("【{0}】在数据库中已存在,请确认。", newLotNumber));
                    dsReturn = null;
                    return;
                }
            }
            string shiftName = this._model.ShiftName;
            string shiftKey  = string.Empty;
            //Shift shiftEntity = new Shift();
            //string shiftKey = shiftEntity.IsShiftValueExists(shiftName);//班次主键。
            ////获取班次主键失败。
            //if (!string.IsNullOrEmpty(shiftEntity.ErrorMsg))
            //{
            //    MessageService.ShowError(shiftEntity.ErrorMsg);
            //    return;
            //}
            ////没有排班。
            //if (string.IsNullOrEmpty(shiftKey))
            //{
            //    MessageService.ShowMessage("请先在系统中进行排班。", "提示");
            //    return;
            //}
            string oprComputer = PropertyService.Get(PROPERTY_FIELDS.COMPUTER_NAME);
            string timezone    = PropertyService.Get(PROPERTY_FIELDS.TIMEZONE);

            DataSet dsParams = new DataSet();
            //存放新批次信息。
            Hashtable htMaindata = new Hashtable();
            //存放待调整的批次的操作数据
            WIP_TRANSACTION_FIELDS transFields = new WIP_TRANSACTION_FIELDS();
            DataTable dtTransaction            = CommonUtils.CreateDataTable(transFields);
            //存放调整操作的明细记录。
            WIP_COMMENT_FIELDS commentFileds = new WIP_COMMENT_FIELDS();
            DataTable          dtComment     = CommonUtils.CreateDataTable(commentFileds);
            StringBuilder      afterContent  = new StringBuilder();

            foreach (DataRow dr in dtLotInfo.Rows)
            {
                //组织待调整的批次的操作数据
                DataRow drTransaction = dtTransaction.NewRow();
                dtTransaction.Rows.Add(drTransaction);
                string transKey = CommonUtils.GenerateNewKey(0);
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY]  = transKey;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY]        = dr[POR_LOT_FIELDS.FIELD_LOT_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY]         = ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_ADJUST;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN]      = dr[POR_LOT_FIELDS.FIELD_QUANTITY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT]     = dr[POR_LOT_FIELDS.FIELD_QUANTITY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_KEY]   = dr[POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_NAME]  = dr[POR_ROUTE_ENTERPRISE_VER_FIELDS.FIELD_ENTERPRISE_NAME];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ROUTE_KEY]        = dr[POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ROUTE_NAME]       = dr[POR_ROUTE_ROUTE_VER_FIELDS.FIELD_ROUTE_NAME];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_STEP_KEY]         = dr[POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_STEP_NAME]        = dr[POR_ROUTE_STEP_FIELDS.FIELD_ROUTE_STEP_NAME];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY]   = dr[POR_LOT_FIELDS.FIELD_WORK_ORDER_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_KEY]        = shiftKey;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME]       = shiftName;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG]       = dr[POR_LOT_FIELDS.FIELD_STATE_FLAG];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_REWORK_FLAG]      = dr[POR_LOT_FIELDS.FIELD_IS_REWORKED];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPERATOR]         = this._model.UserName;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPR_COMPUTER]     = oprComputer;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY]         = dr[POR_LOT_FIELDS.FIELD_CUR_PRODUCTION_LINE_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE]         = dr[POR_LOT_FIELDS.FIELD_OPR_LINE];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE_PRE]     = dr[POR_LOT_FIELDS.FIELD_OPR_LINE_PRE];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDC_INS_KEY]      = dr[POR_LOT_FIELDS.FIELD_EDC_INS_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EQUIPMENT_KEY]    = dr[EMS_EQUIPMENTS_FIELDS.FIELD_EQUIPMENT_KEY];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT] = remark;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]           = this._model.UserName;
                //用于暂存序列号批次信息最后的编辑时间,以便判断序列号信息是否过期。
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME]         = dr[POR_LOT_FIELDS.FIELD_EDIT_TIME];
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY] = timezone;
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_TIME_STAMP]        = DBNull.Value;
                //组织待调整的批次的明细操作数据
                DataRow drComment = dtComment.NewRow();
                dtComment.Rows.Add(drComment);
                drComment[WIP_COMMENT_FIELDS.FIELDS_TRANSACTION_KEY] = transKey;
                drComment[WIP_COMMENT_FIELDS.FIELDS_ENTERPRISE_KEY]  = dr[POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY];
                drComment[WIP_COMMENT_FIELDS.FIELDS_ROUTE_KEY]       = dr[POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY];
                drComment[WIP_COMMENT_FIELDS.FIELDS_STEP_KEY]        = dr[POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY];
                drComment[WIP_COMMENT_FIELDS.FIELDS_EDIT_TIMEZONE]   = timezone;
                drComment[WIP_COMMENT_FIELDS.FIELDS_EDIT_TIME]       = DBNull.Value;
                drComment[WIP_COMMENT_FIELDS.FIELDS_EDITOR]          = this._model.UserName;
                StringBuilder beforeContent = new StringBuilder();
                //新批次号不为空。
                if (!string.IsNullOrEmpty(newLotNumber))
                {
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_LOT_NUMBER))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_LOT_NUMBER, newLotNumber);
                        afterContent.AppendFormat("批次号:{0};", newLotNumber);
                    }
                    beforeContent.AppendFormat("批次号:{0};", dr[POR_LOT_FIELDS.FIELD_LOT_NUMBER]);
                }
                //新产品ID号不为空
                if (!string.IsNullOrEmpty(newProId))
                {
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_PRO_ID))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_PRO_ID, newProId);
                        afterContent.AppendFormat("产品ID号:{0};", newProId);
                    }
                    beforeContent.AppendFormat("产品ID号:{0};", dr[POR_LOT_FIELDS.FIELD_PRO_ID]);
                }
                //新的创建类别。
                if (!string.IsNullOrEmpty(newCreateType))
                {
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_CREATE_TYPE))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_CREATE_TYPE, newCreateType);
                        afterContent.AppendFormat("创建类别:{0};", newCreateType);
                    }
                    beforeContent.AppendFormat("创建类别:{0};", dr[POR_LOT_FIELDS.FIELD_CREATE_TYPE]);
                }
                //新的批次类别。
                if (!string.IsNullOrEmpty(newLotType))
                {
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_LOT_TYPE))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_LOT_TYPE, newLotType);
                        afterContent.AppendFormat("批次类别:{0};", newLotType);
                    }
                    beforeContent.AppendFormat("批次类别:{0};", dr[POR_LOT_FIELDS.FIELD_LOT_TYPE]);
                }
                //新的优先级。
                if (!string.IsNullOrEmpty(newPriority))
                {
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_PRIORITY))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_PRIORITY, newPriority);
                        afterContent.AppendFormat("优先级:{0};", newPriority);
                    }
                    beforeContent.AppendFormat("优先级:{0};", dr[POR_LOT_FIELDS.FIELD_PRIORITY]);
                }
                //新的转换效率。
                if (!string.IsNullOrEmpty(newEfficiency))
                {
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_EFFICIENCY))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_EFFICIENCY, newEfficiency);
                        afterContent.AppendFormat("转换效率:{0};", newEfficiency);
                    }
                    beforeContent.AppendFormat("转换效率:{0};", dr[POR_LOT_FIELDS.FIELD_EFFICIENCY]);
                }
                //新的硅片供应商。
                if (!string.IsNullOrEmpty(newSiLot))
                {
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_SI_LOT))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_SI_LOT, newSiLot);
                        afterContent.AppendFormat("硅片供应商:{0};", newSiLot);
                    }
                    beforeContent.AppendFormat("硅片供应商:{0};", dr[POR_LOT_FIELDS.FIELD_SI_LOT]);
                }
                //新的工步主键。
                if (!string.IsNullOrEmpty(newStepKey))
                {
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY, newEnterpriseKey);
                        afterContent.AppendFormat("工艺流程组:{0};", newEnterpriseName);
                    }
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY, newRouteKey);
                        afterContent.AppendFormat("工艺流程:{0};", newRouteName);
                    }
                    if (!htMaindata.ContainsKey(POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY))
                    {
                        htMaindata.Add(POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY, newStepKey);
                        afterContent.AppendFormat("工序:{0};", newStepName);
                    }
                    drComment[WIP_COMMENT_FIELDS.FIELDS_ENTERPRISE_KEY] = newEnterpriseKey;
                    drComment[WIP_COMMENT_FIELDS.FIELDS_ROUTE_KEY]      = newRouteKey;
                    drComment[WIP_COMMENT_FIELDS.FIELDS_STEP_KEY]       = newStepKey;
                    beforeContent.AppendFormat("工艺流程组:{0};", dr[POR_ROUTE_ENTERPRISE_VER_FIELDS.FIELD_ENTERPRISE_NAME]);
                    beforeContent.AppendFormat("工艺流程:{0};", dr[POR_ROUTE_ROUTE_VER_FIELDS.FIELD_ROUTE_NAME]);
                    beforeContent.AppendFormat("工序:{0};", dr[POR_ROUTE_STEP_FIELDS.FIELD_ROUTE_STEP_NAME]);
                }
                drComment[WIP_COMMENT_FIELDS.FIELDS_BEFORE_CONTENT] = beforeContent;
                drComment[WIP_COMMENT_FIELDS.FIELDS_AFTER_CONTENT]  = afterContent;
            }
            DataTable dtMaindata = CommonUtils.ParseToDataTable(htMaindata);

            dtMaindata.TableName = TRANS_TABLES.TABLE_MAIN_DATA;
            dsParams.Tables.Add(dtMaindata);
            dsParams.Tables.Add(dtTransaction);
            dsParams.Tables.Add(dtComment);
            //执行调整批次。
            this._entity.LotAdjust(dsParams);
            if (!string.IsNullOrEmpty(this._entity.ErrorMsg))
            {
                MessageService.ShowError(this._entity.ErrorMsg);
            }
            else
            {
                //this.tsbCancle_Click(sender, e);
                MessageService.ShowMessage("保存成功");
                WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.CloseWindow(false);
                //重新打开批次创建视图。
                LotOperationViewContent view = new LotOperationViewContent(this._model.OperationType);
                WorkbenchSingleton.Workbench.ShowView(view);
            }
            dsParams.Tables.Clear();
            dtTransaction = null;
            dtComment     = null;
            dsParams      = null;
        }
Exemplo n.º 3
0
        /// <summary>
        /// 批次调整操作。
        /// </summary>
        /// <remarks>
        /// 操作名称:<see cref="ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_ADJUST"/>。
        /// </remarks>
        /// <param name="dsParams">包含批次调整信息的数据集对象。</param>
        /// <returns>包含结果数据的数据集对象。</returns>
        public DataSet LotAdjust(DataSet dsParams)
        {
            DataSet       dsReturn = new DataSet();
            DbConnection  dbConn   = null;
            DbTransaction dbTran   = null;

            try
            {
                dbConn = db.CreateConnection();
                dbConn.Open();
                dbTran = dbConn.BeginTransaction();
                //参数数据。
                if (dsParams == null ||
                    !dsParams.Tables.Contains(TRANS_TABLES.TABLE_MAIN_DATA) ||
                    !dsParams.Tables.Contains(WIP_TRANSACTION_FIELDS.DATABASE_TABLE_NAME) ||
                    !dsParams.Tables.Contains(WIP_COMMENT_FIELDS.DATABASE_TABLE_NAME))              //存放操作数据
                {
                    dbTran.Rollback();
                    ReturnMessageUtils.AddServerReturnMessage(dsReturn, "传入参数不正确,请检查。");
                    return(dsReturn);
                }
                DataTable dtParams      = dsParams.Tables[TRANS_TABLES.TABLE_MAIN_DATA];               //存放修改后批次数据
                DataTable dtTransaction = dsParams.Tables[WIP_TRANSACTION_FIELDS.DATABASE_TABLE_NAME]; //存放操作数据
                DataTable dtComment     = dsParams.Tables[WIP_COMMENT_FIELDS.DATABASE_TABLE_NAME];     //存放批次调整明细数据
                Hashtable htParams      = CommonUtils.ConvertToHashtable(dtParams);
                //检查是否存在重复的批次主键。
                var lnq = from item in dtTransaction.AsEnumerable()
                          group item by item[WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY] into g
                          where g.Count() > 1
                          select g.Count();

                if (lnq.Count() > 0)
                {
                    dbTran.Rollback();
                    ReturnMessageUtils.AddServerReturnMessage(dsReturn, "存在重复记录,请检查。");
                    return(dsReturn);
                }
                //检查记录是否过期。防止重复修改。
                foreach (DataRow drTransaction in dtTransaction.Rows)
                {
                    string opEditTime = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME]);   //操作前批次编辑时间
                    string lotKey     = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY]);   //批次主键
                    string editor     = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]);      //编辑人
                    string timeZone   = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]);      //编辑时区
                    //检查记录是否过期。防止重复修改。
                    KeyValuePair <string, string>         kvp           = new KeyValuePair <string, string>(POR_LOT_FIELDS.FIELD_LOT_KEY, lotKey);
                    List <KeyValuePair <string, string> > listCondition = new List <KeyValuePair <string, string> >();
                    listCondition.Add(kvp);
                    //如果记录过期,当前编辑时间<数据库中的记录编辑时间。结束方法执行。
                    if (UtilHelper.CheckRecordExpired(db, POR_LOT_FIELDS.DATABASE_TABLE_NAME, listCondition, opEditTime))
                    {
                        dbTran.Rollback();
                        ReturnMessageUtils.AddServerReturnMessage(dsReturn, "信息已过期,请关闭该界面后重试。");
                        return(dsReturn);
                    }
                }
                //插入操作记录
                foreach (DataRow drTransaction in dtTransaction.Rows)
                {
                    if (Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY]) != ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_ADJUST)
                    {
                        throw new Exception("传入操作动作名称不正确,请检查。");
                    }
                    string transactionKey = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY]);
                    string lotKey         = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY]); //批次主键
                    string editor         = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]);    //编辑人
                    string timeZone       = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]);    //编辑时区
                    AddWIPLot(dbTran, transactionKey, lotKey);
                    //向WIP_TRANSACTION表插入批次调整的操作记录。
                    WIP_TRANSACTION_FIELDS wipFields = new WIP_TRANSACTION_FIELDS();
                    drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME] = DBNull.Value;
                    string sql = DatabaseTable.BuildInsertSqlStatement(wipFields, drTransaction, null);
                    db.ExecuteNonQuery(dbTran, CommandType.Text, sql);
                    //更新批次信息。
                    StringBuilder sbUpdateSql = new StringBuilder();
                    sbUpdateSql.AppendFormat("UPDATE POR_LOT SET EDITOR='{0}',EDIT_TIME=GETDATE(),EDIT_TIMEZONE='{1}'",
                                             editor.PreventSQLInjection(),
                                             timeZone.PreventSQLInjection());
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_LOT_NUMBER))
                    {
                        sbUpdateSql.AppendFormat(",LOT_NUMBER='{0}'",
                                                 Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_LOT_NUMBER]).PreventSQLInjection());
                    }
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_PRO_ID))
                    {
                        sbUpdateSql.AppendFormat(",PRO_ID='{0}'",
                                                 Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_PRO_ID]).PreventSQLInjection());
                    }
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_CREATE_TYPE))
                    {
                        sbUpdateSql.AppendFormat(",CREATE_TYPE='{0}'",
                                                 Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_CREATE_TYPE]).PreventSQLInjection());
                    }
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_LOT_TYPE))
                    {
                        sbUpdateSql.AppendFormat(",LOT_TYPE='{0}'",
                                                 Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_LOT_TYPE]).PreventSQLInjection());
                    }
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_PRIORITY))
                    {
                        sbUpdateSql.AppendFormat(",PRIORITY='{0}'",
                                                 Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_PRIORITY]).PreventSQLInjection());
                    }
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_EFFICIENCY))
                    {
                        sbUpdateSql.AppendFormat(",EFFICIENCY='{0}'",
                                                 Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_EFFICIENCY]).PreventSQLInjection());
                    }
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_SI_LOT))
                    {
                        sbUpdateSql.AppendFormat(",SI_LOT='{0}'",
                                                 Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_SI_LOT]).PreventSQLInjection());
                    }
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY))
                    {
                        sbUpdateSql.AppendFormat(",ROUTE_ENTERPRISE_VER_KEY='{0}'",
                                                 Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY]).PreventSQLInjection());
                    }
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY))
                    {
                        sbUpdateSql.AppendFormat(",CUR_ROUTE_VER_KEY='{0}'",
                                                 Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY]).PreventSQLInjection());
                    }
                    if (htParams.ContainsKey(POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY))
                    {
                        string stepKey = Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY]);
                        sbUpdateSql.AppendFormat(",CUR_STEP_VER_KEY='{0}',STATE_FLAG='{1}',START_WAIT_TIME=GETDATE()",
                                                 stepKey.PreventSQLInjection(), 0); //更新批次状态为等待进站。
                        //更新设备数据,以完成设备出站,切换设备状态。
                        sql = string.Format(@"SELECT B.EQUIPMENT_KEY,A.EQUIPMENT_NAME,A.EQUIPMENT_STATE_KEY
                                                    FROM EMS_EQUIPMENTS A,EMS_LOT_EQUIPMENT B
                                                    WHERE A.EQUIPMENT_KEY = B.EQUIPMENT_KEY 
                                                    AND B.STEP_KEY = '{0}' AND B.LOT_KEY='{1}' 
                                                    AND B.END_TIMESTAMP IS NULL",
                                            stepKey.PreventSQLInjection(),
                                            lotKey.PreventSQLInjection());
                        DataSet dsResult = db.ExecuteDataSet(CommandType.Text, sql);
                        if (dsResult != null && dsResult.Tables.Count > 0 && dsResult.Tables[0].Rows.Count > 0)
                        {
                            string equipmentKey = Convert.ToString(dsResult.Tables[0].Rows[0]["EQUIPMENT_KEY"]);
                            WipManagement.TrackOutForEquipment(db, dbTran, lotKey, stepKey, equipmentKey, editor);
                        }
                    }
                    sbUpdateSql.AppendFormat(" WHERE LOT_KEY='{0}'", lotKey.PreventSQLInjection());
                    db.ExecuteNonQuery(dbTran, CommandType.Text, sbUpdateSql.ToString());
                }
                //插入批次调整明细记录
                foreach (DataRow drComment in dtComment.Rows)
                {
                    //向WIP_COMMENT表插入批次调整的操作记录。
                    WIP_COMMENT_FIELDS commentFields = new WIP_COMMENT_FIELDS();
                    string             sql           = DatabaseTable.BuildInsertSqlStatement(commentFields, drComment, null);
                    db.ExecuteNonQuery(dbTran, CommandType.Text, sql);
                }
                dbTran.Commit();
                ReturnMessageUtils.AddServerReturnMessage(dsReturn, string.Empty);
            }
            catch (Exception ex)
            {
                ReturnMessageUtils.AddServerReturnMessage(dsReturn, ex.Message);
                LogService.LogError("LotAdjust Error: " + ex.Message);
                dbTran.Rollback();
            }
            finally
            {
                dbConn.Close();
            }
            return(dsReturn);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 返工/返修批次。
        /// </summary>
        /// <param name="dsParams">包含批次返工/返修信息的数据集对象。</param>
        /// <param name="dbTran">数据库操作事务对象。</param>
        private void LotRework(DataSet dsParams, DbTransaction dbTran)
        {
            //参数数据。
            if (dsParams == null ||
                !dsParams.Tables.Contains(WIP_TRANSACTION_FIELDS.DATABASE_TABLE_NAME) ||
                !dsParams.Tables.Contains(WIP_COMMENT_FIELDS.DATABASE_TABLE_NAME) ||
                dsParams.Tables[WIP_TRANSACTION_FIELDS.DATABASE_TABLE_NAME].Rows.Count == 0 ||          //返工批次操作记录不能为空记录。
                dsParams.Tables[WIP_COMMENT_FIELDS.DATABASE_TABLE_NAME].Rows.Count == 0)                //返工信息不能为空
            {
                throw new Exception("传入参数不正确,请检查。");
            }

            DataTable dtTransaction       = dsParams.Tables[WIP_TRANSACTION_FIELDS.DATABASE_TABLE_NAME]; //存放操作数据
            DataTable dtComment           = dsParams.Tables[WIP_COMMENT_FIELDS.DATABASE_TABLE_NAME];     //存放返工信息明细数据
            DataTable dtParams            = dsParams.Tables[TRANS_TABLES.TABLE_MAIN_DATA];
            Hashtable htParams            = CommonUtils.ConvertToHashtable(dtParams);
            string    reworkEnterpriseKey = Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY]);
            string    reworkRouteKey      = Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY]);
            string    reworkStepKey       = Convert.ToString(htParams[POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY]);
            DataTable dtHold = null;

            if (dsParams.Tables.Contains(WIP_HOLD_RELEASE_FIELDS.DATABASE_TABLE_NAME) &&
                dsParams.Tables[WIP_HOLD_RELEASE_FIELDS.DATABASE_TABLE_NAME].Rows.Count > 0)
            {
                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 editor   = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]);        //编辑人
                string timeZone = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDITOR]);        //编辑时区
                string stepKey  = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_STEP_KEY]);      //当前工步主键
                if (Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY]) != ACTIVITY_FIELD_VALUES.FIELD_ACTIVITY_REWORK)
                {
                    throw new Exception("传入的操作名称不正确,请检查。");
                }
                string transactionKey = Convert.ToString(drTransaction[WIP_TRANSACTION_FIELDS.FIELD_TRANSACTION_KEY]);
                AddWIPLot(dbTran, transactionKey, lotKey);
                //向WIP_TRANSACTION表插入批次调整的操作记录。
                WIP_TRANSACTION_FIELDS wipFields = new WIP_TRANSACTION_FIELDS();
                drTransaction[WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME] = DBNull.Value;
                string sql = DatabaseTable.BuildInsertSqlStatement(wipFields, drTransaction, null);
                db.ExecuteNonQuery(dbTran, CommandType.Text, sql);

                //更新批次数据
                StringBuilder sbUpdateSql = new StringBuilder();
                sbUpdateSql.AppendFormat(@"UPDATE POR_LOT 
                                        SET STATE_FLAG=0,START_WAIT_TIME=GETDATE(),REWORK_FLAG=REWORK_FLAG+1,
                                        ROUTE_ENTERPRISE_VER_KEY='{0}',CUR_ROUTE_VER_KEY='{1}',CUR_STEP_VER_KEY='{2}',
                                        EDITOR='{3}',EDIT_TIME=GETDATE(),EDIT_TIMEZONE='{4}'",
                                         reworkEnterpriseKey.PreventSQLInjection(),
                                         reworkRouteKey.PreventSQLInjection(),
                                         reworkStepKey.PreventSQLInjection(),
                                         editor.PreventSQLInjection(),
                                         timeZone.PreventSQLInjection());
                //如果当前有HOLD批次,则释放批次。
                if (dtHold != null)
                {
                    sbUpdateSql.Append(",HOLD_FLAG=0");
                }
                sbUpdateSql.AppendFormat(" WHERE LOT_KEY='{0}'", lotKey.PreventSQLInjection());
                db.ExecuteNonQuery(dbTran, CommandType.Text, sbUpdateSql.ToString());

                //更新设备数据,以完成设备出站,切换设备状态。
                sql = string.Format(@"SELECT B.EQUIPMENT_KEY,A.EQUIPMENT_NAME,A.EQUIPMENT_STATE_KEY
                                    FROM EMS_EQUIPMENTS A,EMS_LOT_EQUIPMENT B
                                    WHERE A.EQUIPMENT_KEY = B.EQUIPMENT_KEY 
                                    AND B.STEP_KEY = '{0}' AND B.LOT_KEY='{1}' 
                                    AND B.END_TIMESTAMP IS NULL",
                                    stepKey.PreventSQLInjection(),
                                    lotKey.PreventSQLInjection());
                DataSet dsResult = db.ExecuteDataSet(CommandType.Text, sql);
                if (dsResult != null && dsResult.Tables.Count > 0 && dsResult.Tables[0].Rows.Count > 0)
                {
                    string equipmentKey = Convert.ToString(dsResult.Tables[0].Rows[0]["EQUIPMENT_KEY"]);
                    WipManagement.TrackOutForEquipment(db, dbTran, lotKey, stepKey, equipmentKey, editor);
                }
            }
            //插入批次返工明细记录
            foreach (DataRow drComment in dtComment.Rows)
            {
                //向WIP_COMMENT表插入批次调整的操作记录。
                WIP_COMMENT_FIELDS commentFields = new WIP_COMMENT_FIELDS();
                string             sql           = DatabaseTable.BuildInsertSqlStatement(commentFields, drComment, null);
                db.ExecuteNonQuery(dbTran, CommandType.Text, sql);
            }
        }