Exemplo n.º 1
0
        /// <summary>
        /// 初始化转返工单数据。
        /// </summary>
        private void InitExchangeData()
        {
            string roomName = this.lueFactoryRoom.Text;
            string roomKey  = Convert.ToString(this.lueFactoryRoom.EditValue);

            //必须选择车间。
            if (string.IsNullOrEmpty(roomKey))
            {
                MessageService.ShowMessage(StringParser.Parse("${res:FanHai.Hemera.Addins.WIP.LotExchgWoMultiForm.Msg001}"), MESSAGEBOX_CAPTION);//请选择工厂车间
                //MessageService.ShowMessage(string.Format("请选择工厂车间。", "提示"));
                lueFactoryRoom.Select();
                return;
            }

            string orderKey   = Convert.ToString(this.teNewWorkorderNo.Tag);
            string orderNo    = Convert.ToString(this.teNewWorkorderNo.Text);
            string partNumber = Convert.ToString(this.lueNewPartNumber.EditValue);
            string proId      = this.teNewProductId.Text;

            if (string.IsNullOrEmpty(orderKey))
            {
                MessageService.ShowMessage(StringParser.Parse("${res:FanHai.Hemera.Addins.WIP.WarehouseCtrl.Msg001}"), MESSAGEBOX_CAPTION);//请输入工单号!
                //MessageService.ShowMessage(string.Format("请输入工单号。"),"提示");
                this.teNewWorkorderNo.Select();
                this.teNewWorkorderNo.SelectAll();
                return;
            }

            if (string.IsNullOrEmpty(partNumber))
            {
                MessageService.ShowMessage(StringParser.Parse("${res:FanHai.Hemera.Addins.WIP.LotExchgWoMultiForm.Msg002}"), MESSAGEBOX_CAPTION);//请选择产品
                //MessageService.ShowMessage(string.Format("请选择产品。"), "提示");
                this.lueNewPartNumber.Select();
                return;
            }

            string val = this.txtPalletNo.Text.Trim();

            //托盘号或批次号为空,直接返回。
            if (string.IsNullOrEmpty(val))
            {
                return;
            }
            DataSet dsReturn     = null;
            string  exchangeName = null;

            //按批次转返工
            if (this.chkIsPallet.Checked == true)
            {
                //转工单操作,判断组件所在当前工序是否允许转工单。
                if (this._flag == ExchangeWoFlag.Exchange)
                {
                    bool isAllowExchangeWO = true;
                    //获取批次对应的工步属性信息
                    dsReturn = this._lotEntity.GetLotRouteAttrData(val);
                    //判断获取的工步属性信息是否存在,若不存在默认为允许转工单
                    if (dsReturn.Tables.Contains("LOT_ROUTE_ATTR") &&
                        dsReturn.Tables["LOT_ROUTE_ATTR"].Rows.Count > 0)
                    {
                        DataRow[] drRouteAttr = dsReturn.Tables["LOT_ROUTE_ATTR"]
                                                .Select(string.Format(" ATTRIBUTE_NAME = '{0}'", "IsAllowExchangeWO"));

                        //判断是否有设置IsAllowExchangeWO属性
                        if (drRouteAttr.Length > 0)
                        {
                            string attrVal = Convert.ToString(drRouteAttr[0]["ATTRIBUTE_VALUE"]);
                            if (!bool.TryParse(attrVal, out isAllowExchangeWO))
                            {
                                isAllowExchangeWO = true;
                            }
                        }
                    }
                    //若设置为true允许进行转工单,反之弹窗提示并返回
                    if (isAllowExchangeWO == false)
                    {
                        MessageService.ShowMessage(string.Format("组件【{0}】当前所在工序不允许转工单!", val), "提示");
                        return;
                    }
                }
                dsReturn     = this._lotEntity.GetExchangeData(string.Empty, val);
                exchangeName = "批次号";
            }
            //按托转返工
            else
            {
                dsReturn     = this._lotEntity.GetExchangeData(val, string.Empty);
                exchangeName = "托号";
            }
            if (!string.IsNullOrEmpty(this._lotEntity.ErrorMsg))
            {
                MessageService.ShowError(this._lotEntity.ErrorMsg);
                return;
            }
            //查询转返工数据出错
            if (dsReturn == null ||
                dsReturn.Tables.Contains(POR_LOT_FIELDS.DATABASE_TABLE_NAME) == false)
            {
                MessageService.ShowError(string.Format("查询{0}数据出错,请重试", this._flagName));
                return;
            }
            DataTable dtTempExchangeData = dsReturn.Tables[POR_LOT_FIELDS.DATABASE_TABLE_NAME];

            if (dtTempExchangeData.Rows.Count <= 0)
            {//不存在数据,给出对应提示。
                MessageService.ShowError(string.Format("{1}【{0}】不存在,请确认!", val, exchangeName));
                return;
            }
            DataRow drTempExchangeData = dtTempExchangeData.Rows[0];
            int     stateFalg          = Convert.ToInt32(drTempExchangeData[POR_LOT_FIELDS.FIELD_STATE_FLAG]);
            string  lotOrderNo         = Convert.ToString(drTempExchangeData[POR_LOT_FIELDS.FIELD_WORK_ORDER_NO]);
            string  palletNo           = Convert.ToString(drTempExchangeData[POR_LOT_FIELDS.FIELD_PALLET_NO]);

            //基础数据配置是否比较工单类型。
            string[]  columns                = new string[] { "IsCompareWorkOrderType" };
            string    category               = BASEDATA_CATEGORY_NAME.ExchangeWoConfig;
            DataTable dtExchangeWoConfig     = BaseData.Get(columns, category);
            bool      isCompareWorkorderType = true;

            if (dtExchangeWoConfig != null && dtExchangeWoConfig.Rows.Count > 0)
            {
                string compareWorkOrderType = Convert.ToString(dtExchangeWoConfig.Rows[0]["IsCompareWorkOrderType"]);
                if (!string.IsNullOrEmpty(compareWorkOrderType))
                {
                    isCompareWorkorderType = Convert.ToBoolean(compareWorkOrderType);
                }
            }
            //转工单:工单类型条件判断
            if (isCompareWorkorderType)
            {
                Hashtable hsOrderType = new Hashtable();
                hsOrderType.Add(POR_WORK_ORDER_FIELDS.FIELD_ORDER_NUMBER, orderNo);
                hsOrderType.Add(POR_WORK_ORDER_FIELDS.FIELD_ORDER_NUMBER + "2", lotOrderNo);
                ExchangeWoEntity exchangewoEntity = new ExchangeWoEntity();
                string           msg = exchangewoEntity.CompareWorkOrderType(hsOrderType);
                if (!string.IsNullOrEmpty(msg))
                {
                    MessageService.ShowError(msg);
                    teNewWorkorderNo.SelectAll();
                    teNewWorkorderNo.Select();
                    return;
                }
            }
            //未包装数据不能返工单。
            if (this._flag == ExchangeWoFlag.Repair && string.IsNullOrEmpty(palletNo))
            {
                MessageService.ShowError(string.Format("{1}【{0}】未包装,不符合{2}作业要求。", val, exchangeName, this._flagName));
                txtPalletNo.SelectAll();
                txtPalletNo.Select();
                return;
            }
            //未入库数据不能返工单。
            else if (this._flag == ExchangeWoFlag.Repair && !string.IsNullOrEmpty(palletNo) && stateFalg <= 10)
            {
                MessageService.ShowError(string.Format("{1}【{0}】未入库,不符合{2}作业要求。", val, exchangeName, this._flagName));
                txtPalletNo.SelectAll();
                txtPalletNo.Select();
                return;
            }
            //已包装数据不能转工单。
            else if (this._flag == ExchangeWoFlag.Exchange && !string.IsNullOrEmpty(palletNo))
            {
                MessageService.ShowError(string.Format("{1}【{0}】已包装,不符合{2}作业要求。", val, exchangeName, this._flagName));
                txtPalletNo.SelectAll();
                txtPalletNo.Select();
                return;
            }//已入库数据不能转工单。
            else if (this._flag == ExchangeWoFlag.Exchange && stateFalg >= 10)
            {
                MessageService.ShowError(string.Format("{1}【{0}】已入库,不符合{2}作业要求。", val, exchangeName, this._flagName));
                txtPalletNo.SelectAll();
                txtPalletNo.Select();
                return;
            }

            //增加新列,用于设置新产品数据。
            if (!dtTempExchangeData.Columns.Contains("NEW_PRO_ID"))
            {
                dtTempExchangeData.Columns.Add("NEW_PRO_ID");
            }
            if (!dtTempExchangeData.Columns.Contains("NEW_PART_NUMBER"))
            {
                dtTempExchangeData.Columns.Add("NEW_PART_NUMBER");
            }
            if (!dtTempExchangeData.Columns.Contains("NEW_WORK_ORDER_NO"))
            {
                dtTempExchangeData.Columns.Add("NEW_WORK_ORDER_NO");
            }
            if (!dtTempExchangeData.Columns.Contains("NEW_WORK_ORDER_KEY"))
            {
                dtTempExchangeData.Columns.Add("NEW_WORK_ORDER_KEY");
            }
            foreach (DataRow drExchangeDataDetail in dtTempExchangeData.Rows)
            {
                //设置明细数据的新工单、产品
                drExchangeDataDetail["NEW_WORK_ORDER_KEY"] = orderKey;
                drExchangeDataDetail["NEW_WORK_ORDER_NO"]  = orderNo;
                drExchangeDataDetail["NEW_PART_NUMBER"]    = partNumber;
                drExchangeDataDetail["NEW_PRO_ID"]         = proId;

                drExchangeDataDetail[POR_LOT_FIELDS.FIELD_FACTORYROOM_KEY]  = roomKey;
                drExchangeDataDetail[POR_LOT_FIELDS.FIELD_FACTORYROOM_NAME] = roomName;
            }
            if (!CheckExchangeData(dtTempExchangeData))
            {
                return;
            }
            dtTempExchangeData.PrimaryKey = new DataColumn[] { dtTempExchangeData.Columns[POR_LOT_FIELDS.FIELD_LOT_KEY] };
            if (dtExchangeData == null)
            {
                dtExchangeData               = dtTempExchangeData.Clone();
                this.gcExchangeWo.MainView   = gvExchangeWo;
                this.gcExchangeWo.DataSource = dtExchangeData;
            }

            dtExchangeData.Merge(dtTempExchangeData, true);
            this.gvExchangeWo.BestFitColumns();

            this.txtPalletNo.Select();
            this.txtPalletNo.SelectAll();
        }