/// <summary> /// 执行命令。 /// </summary> public override void Run() { //遍历工作台中已经打开的视图对象。 foreach (IViewContent viewContent in WorkbenchSingleton.Workbench.ViewContentCollection) { //如果已打开视图,则选中该视图显示,返回以结束该方法的运行。 LotOperationViewContent openView = viewContent as LotOperationViewContent; if (openView != null && openView.OperationType == LotOperationType.CellScrap) { openView.WorkbenchWindow.SelectWindow(); return; } } LotOperationDetailModel model = new LotOperationDetailModel(); model.OperationType = LotOperationType.CellScrap; //显示电池片操作明细界面。 WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.CloseWindow(false); //创建新的视图并显示 LotOperationDetailViewContent view = new LotOperationDetailViewContent(model); WorkbenchSingleton.Workbench.ShowView(view); ////创建新的视图对象,并显示该视图界面。 //LotOperationViewContent view = new LotOperationViewContent(LotOperationType.CellScrap); //WorkbenchSingleton.Workbench.ShowView(view); }
/// <summary> /// 关闭按钮事件。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsbCancle_Click(object sender, EventArgs e) { //WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.CloseWindow(false); ////遍历工作台中已经打开的视图对象。 //foreach (IViewContent viewContent in WorkbenchSingleton.Workbench.ViewContentCollection) //{ // //如果已打开创建批次的视图,则选中该视图显示,返回以结束该方法的运行。 // if (viewContent is LotOperation && viewContent.TitleName==this.lblMenu.Name) // { // viewContent.WorkbenchWindow.SelectWindow(); // return; // } //} ////重新打开批次创建视图。 //LotOperationViewContent view = new LotOperationViewContent(this._model.OperationType); //WorkbenchSingleton.Workbench.ShowView(view); //遍历工作台中已经打开的视图对象。 foreach (IViewContent viewContent in WorkbenchSingleton.Workbench.ViewContentCollection) { //如果已打开视图,则选中该视图显示,返回以结束该方法的运行。 LotOperationViewContent openView = viewContent as LotOperationViewContent; if (openView != null && openView.OperationType == LotOperationType.Rework) { openView.WorkbenchWindow.SelectWindow(); return; } } LotOperationDetailModel model = new LotOperationDetailModel(); if (_model.OperationType == LotOperationType.Rework) { model.OperationType = LotOperationType.Rework; } else { if (_model.OperationType == LotOperationType.BatchRework) { model.OperationType = LotOperationType.BatchRework; } } //显示电池片操作明细界面。 WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.CloseWindow(false); //创建新的视图并显示 LotOperationDetailViewContent view = new LotOperationDetailViewContent(model); WorkbenchSingleton.Workbench.ShowView(view); }
/// <summary> /// 执行命令。 /// </summary> public override void Run() { //遍历工作台中已经打开的视图对象。 foreach (IViewContent viewContent in WorkbenchSingleton.Workbench.ViewContentCollection) { //如果已打开视图,则选中该视图显示,返回以结束该方法的运行。 LotOperationViewContent openView = viewContent as LotOperationViewContent; if (openView != null && openView.OperationType == LotOperationType.Split) { openView.WorkbenchWindow.SelectWindow(); return; } } //创建新的视图对象,并显示该视图界面。 LotOperationViewContent view = new LotOperationViewContent(LotOperationType.Split); WorkbenchSingleton.Workbench.ShowView(view); }
/// <summary> /// 确认按钮事件方法。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsbOK_Click(object sender, EventArgs e) { if (this.gvList.State == GridState.Editing && this.gvList.IsEditorFocused && this.gvList.EditingValueModified) { this.gvList.SetFocusedRowCellValue(this.gvList.FocusedColumn, this.gvList.EditingValue); } this.gvList.UpdateCurrentRow(); //退料原因信息。 DataTable dtList = this.gcList.DataSource as DataTable; if (dtList == null || dtList.Rows.Count < 1) { MessageService.ShowMessage("退料原因列表中至少必须有一条记录。", "提示"); return; } //退料工序必须全部输入 List <DataRow> lst = (from item in dtList.AsEnumerable() where string.IsNullOrEmpty(Convert.ToString(item[WIP_RETURN_MAT_FIELDS.FIELD_STEP_KEY])) select item).ToList <DataRow>(); //如果不是组件补片批次且没有输入退料工序,则给出提示。 if (lst.Count() > 0 && this._lotType != "L") { MessageService.ShowMessage("非组件补片批次,退料原因列表中的【退料工序】必须输入。", "提示"); this.gvList.FocusedColumn = this.gclStep; this.gvList.FocusedRowHandle = dtList.Rows.IndexOf(lst[0]); this.gvList.ShowEditor(); return; } //退料原因必须全部输入 lst = (from item in dtList.AsEnumerable() where string.IsNullOrEmpty(Convert.ToString(item[WIP_RETURN_MAT_FIELDS.FIELD_REASON_CODE_KEY])) select item).ToList <DataRow>(); if (lst.Count() > 0) { MessageService.ShowMessage("退料原因列表中的【原因名称】必须输入。", "提示"); this.gvList.FocusedColumn = this.gclReasonCode; this.gvList.FocusedRowHandle = dtList.Rows.IndexOf(lst[0]); this.gvList.ShowEditor(); return; } //退料原因中的数量必须输入值且大于0 lst = (from item in dtList.AsEnumerable() where string.IsNullOrEmpty(Convert.ToString(item[WIP_RETURN_MAT_FIELDS.FIELD_RETURN_QUANTITY]).Trim()) || Convert.ToInt32(item[WIP_RETURN_MAT_FIELDS.FIELD_RETURN_QUANTITY]) <= 0 select item).ToList <DataRow>(); if (lst.Count() > 0) { MessageService.ShowMessage("数量必须输入且大于0。", "提示"); this.gvList.FocusedColumn = this.gclQty; this.gvList.FocusedRowHandle = dtList.Rows.IndexOf(lst[0]); this.gvList.ShowEditor(); return; } //获取当前操作的批次信息 if (_dsLotInfo == null) { LotQueryEntity queryEntity = new LotQueryEntity(); _dsLotInfo = queryEntity.GetLotInfo(this._model.LotNumber); if (!string.IsNullOrEmpty(queryEntity.ErrorMsg)) { MessageService.ShowError(queryEntity.ErrorMsg); _dsLotInfo = null; return; } } if (_dsLotInfo.Tables[0].Rows.Count < 1) { MessageService.ShowMessage(string.Format("获取【{0}】信息失败,请重试。", this._model.LotNumber), "提示"); _dsLotInfo = null; return; } DataRow drLotInfo = _dsLotInfo.Tables[0].Rows[0]; string lotKey = Convert.ToString(drLotInfo[POR_LOT_FIELDS.FIELD_LOT_KEY]); double qty = Convert.ToDouble(this.teQty.Text); //退料数量总和不能超过当前电池片数量 double returnQty = dtList.AsEnumerable().Sum(dr => dr[WIP_RETURN_MAT_FIELDS.FIELD_RETURN_QUANTITY] == DBNull.Value ? 0: Convert.ToDouble(dr[WIP_RETURN_MAT_FIELDS.FIELD_RETURN_QUANTITY])); double leftQty = qty - returnQty; if (leftQty < 0) { MessageService.ShowMessage("电池片退料数量不能超过当前电池片数量。", "提示"); return; } string lineKey = Convert.ToString(drLotInfo[POR_LOT_FIELDS.FIELD_CUR_PRODUCTION_LINE_KEY]); string lineName = Convert.ToString(drLotInfo[POR_LOT_FIELDS.FIELD_LINE_NAME]); string workOrderKey = Convert.ToString(drLotInfo[POR_LOT_FIELDS.FIELD_WORK_ORDER_KEY]); string enterpriseKey = Convert.ToString(drLotInfo[POR_LOT_FIELDS.FIELD_ROUTE_ENTERPRISE_VER_KEY]); string enterpriseName = this.teEnterpriseName.Text; string routeKey = Convert.ToString(drLotInfo[POR_LOT_FIELDS.FIELD_CUR_ROUTE_VER_KEY]); string routeName = this.teRouteName.Text; string stepKey = Convert.ToString(drLotInfo[POR_LOT_FIELDS.FIELD_CUR_STEP_VER_KEY]); int stateFlag = Convert.ToInt32(drLotInfo[POR_LOT_FIELDS.FIELD_STATE_FLAG]); int reworkFlag = Convert.ToInt32(drLotInfo[POR_LOT_FIELDS.FIELD_IS_REWORKED]); string equipmentKey = Convert.ToString(drLotInfo[EMS_EQUIPMENTS_FIELDS.FIELD_EQUIPMENT_KEY]); string edcInsKey = Convert.ToString(drLotInfo[POR_LOT_FIELDS.FIELD_EDC_INS_KEY]); string stepName = this.teStepName.Text; string remark = this.teRemark.Text; 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 htTransaction = new Hashtable(); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_PIECE_KEY, lotKey); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY, this._activity); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_IN, qty); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_QUANTITY_OUT, leftQty); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_KEY, enterpriseKey); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_ENTERPRISE_NAME, enterpriseName); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_ROUTE_KEY, routeKey); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_ROUTE_NAME, routeName); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_STEP_KEY, stepKey); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_STEP_NAME, stepName); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_WORK_ORDER_KEY, workOrderKey); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_KEY, shiftKey); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_SHIFT_NAME, shiftName); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_STATE_FLAG, stateFlag); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_REWORK_FLAG, reworkFlag); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_OPERATOR, this._model.UserName); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_OPR_COMPUTER, oprComputer); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_LINE_KEY, lineKey); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE, lineName); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_OPR_LINE_PRE, lineName); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_EDC_INS_KEY, edcInsKey); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_EQUIPMENT_KEY, equipmentKey); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_ACTIVITY_COMMENT, remark); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_EDITOR, this._model.UserName); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIME, null); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_EDIT_TIMEZONE_KEY, timezone); htTransaction.Add(WIP_TRANSACTION_FIELDS.FIELD_TIME_STAMP, null); DataTable dtTransaction = CommonUtils.ParseToDataTable(htTransaction); dtTransaction.TableName = WIP_TRANSACTION_FIELDS.DATABASE_TABLE_NAME; dsParams.Tables.Add(dtTransaction); //组织退料原因数据 DataTable dtReturn = dtList.Copy(); dtReturn.TableName = WIP_RETURN_MAT_FIELDS.DATABASE_TABLE_NAME; foreach (DataRow dr in dtReturn.Rows) { dr[WIP_RETURN_MAT_FIELDS.FIELD_EDITOR] = this._model.UserName; dr[WIP_RETURN_MAT_FIELDS.FIELD_EDIT_TIME] = DBNull.Value; dr[WIP_RETURN_MAT_FIELDS.FIELD_EDIT_TIMEZONE] = timezone; } dsParams.Tables.Add(dtReturn); //组织其他附加参数数据 Hashtable htMaindata = new Hashtable(); htMaindata.Add(COMMON_FIELDS.FIELD_COMMON_EDIT_TIME, this._model.LotEditTime); DataTable dtParams = CommonUtils.ParseToDataTable(htMaindata); dtParams.TableName = TRANS_TABLES.TABLE_PARAM; dsParams.Tables.Add(dtParams); //执行退料。 this._entity.LotReturnMaterial(dsParams); if (!string.IsNullOrEmpty(this._entity.ErrorMsg)) { MessageService.ShowError(this._entity.ErrorMsg); } else { //this.tsbClose_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; dtReturn = null; dtParams = null; dsParams = null; }
/// <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; }
/// <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.Rows.Count < 1) { MessageService.ShowMessage("待暂停批次信息列表至少要有一条记录。", "提示"); return; } DataTable dtHoldInfo = this.gcHoldInfoList.DataSource as DataTable; if (dtHoldInfo.Rows.Count < 1) { MessageService.ShowMessage("暂停信息列表至少要有一条记录。", "提示"); return; } string remark = this.teRemark.Text.Trim(); if (string.IsNullOrEmpty(remark)) { MessageService.ShowMessage("备注必须输入。", "提示"); this.teRemark.Select(); return; } //暂停组代码必须输入 var lnq = from item in dtHoldInfo.AsEnumerable() where string.IsNullOrEmpty(Convert.ToString(item[WIP_HOLD_RELEASE_FIELDS.FIELD_REASON_CODE_CATEGORY_KEY])) select item; foreach (var item in lnq) { MessageService.ShowMessage("暂停组代码必须输入。", "提示"); this.gvHoldInfoList.FocusedColumn = this.gclReasonCodeGroup; this.gvHoldInfoList.FocusedRowHandle = dtHoldInfo.Rows.IndexOf(item); this.gvHoldInfoList.ShowEditor(); return; } //暂停名称必须输入 lnq = from item in dtHoldInfo.AsEnumerable() where string.IsNullOrEmpty(Convert.ToString(item[WIP_HOLD_RELEASE_FIELDS.FIELD_REASON_CODE_KEY])) select item; foreach (var item in lnq) { MessageService.ShowMessage("暂停名称必须输入。", "提示"); this.gvHoldInfoList.FocusedColumn = this.gclReasonCode; this.gvHoldInfoList.FocusedRowHandle = dtHoldInfo.Rows.IndexOf(item); this.gvHoldInfoList.ShowEditor(); return; } //密码和确认密码不匹配。 lnq = from item in dtHoldInfo.AsEnumerable() where Convert.ToString(item[WIP_HOLD_RELEASE_FIELDS.FIELD_HOLD_PASSWORD]) != Convert.ToString(item[TMP_HOLD_INFO_CONFIRM_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; //string shiftKey = shiftEntity.IsShiftValueExists(shiftName);//班次主键。 //Shift shiftEntity = new Shift(); ////获取班次主键失败。 //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(); //存放待暂停的批次的操作数据 WIP_TRANSACTION_FIELDS transFields = new WIP_TRANSACTION_FIELDS(); DataTable dtTransaction = CommonUtils.CreateDataTable(transFields); 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_HOLD; 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; } //存放暂停操作的明细记录。 DataTable dtHoldParams = dtHoldInfo.Copy(); dtHoldParams.Columns.Remove(TMP_HOLD_INFO_CONFIRM_HOLD_PASSWORD); //移除临时列。 foreach (DataRow dr in dtHoldParams.Rows) { dr[WIP_HOLD_RELEASE_FIELDS.FIELD_HOLD_OPERATOR] = this._model.UserName; dr[WIP_HOLD_RELEASE_FIELDS.FIELD_HOLD_TIMEZONE] = timezone; dr[WIP_HOLD_RELEASE_FIELDS.FIELD_EDITOR] = this._model.UserName; dr[WIP_HOLD_RELEASE_FIELDS.FIELD_EDIT_TIMEZONE] = timezone; } dsParams.Tables.Add(dtTransaction); dsParams.Tables.Add(dtHoldParams); //执行暂停批次。 this._entity.LotHold(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; dtHoldParams = null; dsParams = null; }