Пример #1
0
        private void BtnAdd_Click(object sender, RoutedEventArgs e)
        {
            //新增
            #region

            //TODO: 校验,空的类绑定到界面的DataContent

            FmsActionControl actionControl = new FmsActionControl
            {
                PKNO       = "",
                ASSET_CODE = "",
                START_CONDITION_TAG_PKNO  = "",
                START_CONDITION_VALUE     = "",
                EXECUTE_TAG_PKNO          = "",
                EXECUTE_WRITE_VALUE       = "",
                EXECUTE_PARAM1_TAG_PKNO   = "",
                EXECUTE_PARAM2_TAG_PKNO   = "",
                FINISH_CONDITION_TAG_PKNO = "",
                FINISH_CONDITION_VALUE    = "",
            };

            gbItem.DataContext = actionControl;

            #endregion

            dictBasic.Header   = $"{HeaderName}  【新增】";
            gbItem.IsCollapsed = false;
            gbItem.Visibility  = Visibility.Visible;
        }
Пример #2
0
 public FmsActionControl GetFmsActionControlById(string Id)
 {
     using (IFmsActionControlBLL FmsActionControlBLL = BLLContainer.Resolve <IFmsActionControlBLL>())
     {
         FmsActionControl model = FmsActionControlBLL.GetFirstOrDefault(Id);
         return(model);
     }
 }
Пример #3
0
 public bool AddFmsActionControl(FmsActionControl mFmsActionControl)
 {
     if (mFmsActionControl == null)
     {
         return(false);
     }
     using (IFmsActionControlBLL FmsActionControlBLL = BLLContainer.Resolve <IFmsActionControlBLL>())
     {
         return(FmsActionControlBLL.Add(mFmsActionControl));
     }
 }
Пример #4
0
 public bool DelFmsActionControl(string Id)
 {
     using (IFmsActionControlBLL FmsActionControlBLL = BLLContainer.Resolve <IFmsActionControlBLL>())
     {
         try
         {
             FmsActionControl item = FmsActionControlBLL.GetFirstOrDefault(Id);
             return(FmsActionControlBLL.Delete(item));
         }
         catch { return(false); }
     }
 }
Пример #5
0
        private void BtnItemCopy_Click(object sender, RoutedEventArgs e)
        {
            FmsActionFormulaMain m_MainInfo = tvMain.SelectedItem as FmsActionFormulaMain;

            if ((m_MainInfo == null) || (string.IsNullOrEmpty(m_MainInfo.PKNO)))
            {
                return;
            }
            List <FmsActionFormulaDetail> details = ws.UseService(s => s.GetFmsActionFormulaDetails("FORMULA_CODE = " + m_MainInfo.FORMULA_CODE + ""));

            List <FmsActionFormulaDetail> newFormulaDetails    = new List <FmsActionFormulaDetail>();
            List <FmsActionControl>       newFmsActionControls = new List <FmsActionControl>();
            FmsActionFormulaMain          newFormulaMain       = m_MainInfo;

            newFormulaMain.PKNO         = Guid.NewGuid().ToString("N");
            newFormulaMain.FORMULA_NAME = "轮毂生产5(只下料,中间件检测)";
            newFormulaMain.FORMULA_CODE = "轮毂生产5 new";

            foreach (FmsActionFormulaDetail item in details)
            {
                FmsActionControl action = ws.UseService(s => s.GetFmsActionControlById(item.PROCESS_ACTION_PKNO));
                FmsActionControl newActionControlaction = action;
                #region 处理actionControl
                newActionControlaction.PKNO = Guid.NewGuid().ToString("N");
                newActionControlaction.START_CONDITION_TAG_PKNO  = GetTagPkno(newActionControlaction.START_CONDITION_TAG_PKNO);
                newActionControlaction.EXECUTE_PARAM1_TAG_PKNO   = GetTagPkno(newActionControlaction.EXECUTE_PARAM1_TAG_PKNO);
                newActionControlaction.EXECUTE_PARAM2_TAG_PKNO   = GetTagPkno(newActionControlaction.EXECUTE_PARAM2_TAG_PKNO);
                newActionControlaction.EXECUTE_TAG_PKNO          = GetTagPkno(newActionControlaction.EXECUTE_TAG_PKNO);
                newActionControlaction.FINISH_CONDITION_TAG_PKNO = GetTagPkno(newActionControlaction.FINISH_CONDITION_TAG_PKNO);
                #endregion

                FmsActionFormulaDetail newActionFormulaDetail = item;
                newActionFormulaDetail.PKNO                = Guid.NewGuid().ToString("N");
                newActionFormulaDetail.FORMULA_CODE        = newFormulaMain.FORMULA_CODE;
                newActionFormulaDetail.PROCESS_ACTION_PKNO = newActionControlaction.PKNO;
                newFormulaDetails.Add(newActionFormulaDetail);
                newFmsActionControls.Add(newActionControlaction);
            }
            foreach (var variable2 in newFormulaDetails)
            {
                ws.UseService(s => s.AddFmsActionFormulaDetail(variable2));
            }
            ws.UseService(s => s.AddFmsActionFormulaMain(newFormulaMain));
            foreach (var variable1 in newFmsActionControls)
            {
                ws.UseService(s => s.AddFmsActionControl(variable1));
            }
        }
Пример #6
0
        /// <summary>
        /// 检验当前工序状态
        /// </summary>
        /// <returns></returns>
        public bool CheckState()
        {
            firstProcess = theJobProcessCtrols.OrderBy(c => c.PROCESS_INDEX).ThenBy(c => c.CREATION_DATE).FirstOrDefault(c => c.USE_FLAG == 1);      //第一道工序可用工序
            curProcess   = usefulProcessCtrols.OrderBy(c => c.PROCESS_INDEX).ThenBy(c => c.CREATION_DATE).FirstOrDefault(c => c.PROCESS_STATE >= 0); //当前执行的工序

            if (curProcess == null)
            {
                string sErrorInfo = $"没有可用的未执行工序控制信息";
                if (mesJobOrder.PROCESS_INFO != sErrorInfo)
                {
                    mesJobOrder.PROCESS_INFO = sErrorInfo; //生产执行信息
                    PServiceEvent?.Invoke(d => d.UpdateMesJobOrder(mesJobOrder));
                }
                return(false);
            }

            if (curProcess.PROCESS_STATE == 0)
            {
                string sErrorInfo = $"当前工序尚未准备好,请准备好该工序.";
                if (mesJobOrder.PROCESS_INFO != sErrorInfo)
                {
                    mesJobOrder.PROCESS_INFO = sErrorInfo; //生产执行信息
                    PServiceEvent?.Invoke(d => d.UpdateMesJobOrder(mesJobOrder));
                }
                return(false);
            }

            bFirstProcess = (curProcess.PROCESS_INDEX == firstProcess.PROCESS_INDEX);                        //是否为第一道工序
            bLastProcess  = (curProcess.PROCESS_INDEX == usefulProcessCtrols.LastOrDefault().PROCESS_INDEX); //是否为最后一个工序


            ctrolName = curProcess.PROCESS_CTROL_NAME ?? curProcess.PROCESS_INDEX.ToString();         //过程控制名称

            curAction = actionControls.FirstOrDefault(c => c.PKNO == curProcess.PROCESS_ACTION_PKNO); //当前动作
            if (curAction == null)                                                                    //空动作的工序,手动完成
            {
                string sErrorInfo = $"当前生产过程[{ctrolName}]没有动作控制指令,须手动完成.";
                if (mesJobOrder.PROCESS_INFO != sErrorInfo)
                {
                    mesJobOrder.PROCESS_INFO = sErrorInfo; //生产执行信息
                    PServiceEvent?.Invoke(d => d.UpdateMesJobOrder(mesJobOrder));
                }

                Console.WriteLine(sErrorInfo);
                return(false);
            }
            return(true);
        }
Пример #7
0
 public bool DelFmsActionControls(string[] Ids)
 {
     using (IFmsActionControlBLL FmsActionControlBLL = BLLContainer.Resolve <IFmsActionControlBLL>())
     {
         try
         {
             List <FmsActionControl> entitys = new List <FmsActionControl>();
             foreach (string id in Ids)
             {
                 FmsActionControl item = FmsActionControlBLL.GetFirstOrDefault(id);
                 entitys.Add(item);
             }
             return(FmsActionControlBLL.Delete(entitys));
         }
         catch { return(false); }
     }
 }
Пример #8
0
        private void CmbActionControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (gbItem.Visibility != Visibility.Visible)
            {
                return;
            }
            FmsActionFormulaDetail detail = gbItem.DataContext as FmsActionFormulaDetail;

            if ((detail == null) || (!string.IsNullOrEmpty(detail.PROCESS_DEVICE_PKNO)))
            {
                return;
            }

            FmsActionControl action = cmbActionControl.SelectedItem as FmsActionControl;

            detail.PROCESS_DEVICE_PKNO = action?.ASSET_CODE;
        }
Пример #9
0
        private void BtnSave_Click(object sender, RoutedEventArgs e)
        {
            //保存
            AmAssetMasterN   asset         = cmbAssetInfo.SelectedItem as AmAssetMasterN;
            FmsActionControl actionControl = gbItem.DataContext as FmsActionControl;

            if (actionControl == null)
            {
                return;
            }

            #region

            //TODO: 校验;保存
            if (asset == null)
            {
                WPFMessageBox.ShowError("请选择设备!", "保存");
                return;
            }
            if (string.IsNullOrEmpty(actionControl.ACTION_NAME))
            {
                WPFMessageBox.ShowError("请输入指令动作名称!", "保存");
                return;
            }

            if (actionControl.PKNO == "")
            {
                actionControl.PKNO = CBaseData.NewGuid();
                _fmsClient.UseService(s => s.AddFmsActionControl(actionControl));
            }
            else
            {
                _fmsClient.UseService(s => s.UpdateFmsActionControl(actionControl));
            }
            WPFMessageBox.ShowTips("指令动作配置信息已保存。", "保存");

            #endregion

            GetPage();  //重新刷新数据,根据需求是否进行刷新数据

            //保存成功
            gbItem.IsCollapsed = true;
            gbItem.Visibility  = Visibility.Collapsed;
            BindHelper.SetDictDataBindingGridItem(gbItem, gridItem);
        }
Пример #10
0
        private void GridItem_SelectionChanged(object sender, GridSelectionChangedEventArgs e)
        {
            FmsActionFormulaMain main = tvMain.SelectedItem as FmsActionFormulaMain;

            if ((main == null) || (string.IsNullOrEmpty(main.PKNO)))
            {
                return;
            }

            FmsActionFormulaDetail detail = gridItem.SelectedItem as FmsActionFormulaDetail;

            if (detail == null)
            {
                return;
            }

            BtnItemUse.Content = (detail.USE_FLAG == 1) ? "禁用" : "启用";

            FmsActionControl action = ws.UseService(s => s.GetFmsActionControlById(detail.PROCESS_ACTION_PKNO));

            if (action == null)
            {
                cmbCondition.SelectedValue = null;
                tbConditionValue.Text      = "";
                cmbExecute.SelectedValue   = null;
                tbExecuteValue.Text        = "";
                cmbParam1.SelectedValue    = null;
                cmbParam2.SelectedValue    = null;
                cmbFinish.SelectedValue    = null;
                tbFinishValue.Text         = "";
            }
            else
            {
                cmbCondition.SelectedValue = action.START_CONDITION_TAG_PKNO;
                tbConditionValue.Text      = action.START_CONDITION_VALUE;
                cmbExecute.SelectedValue   = action.EXECUTE_TAG_PKNO;
                tbExecuteValue.Text        = action.EXECUTE_WRITE_VALUE;
                cmbParam1.SelectedValue    = action.EXECUTE_PARAM1_TAG_PKNO;
                cmbParam2.SelectedValue    = action.EXECUTE_PARAM2_TAG_PKNO;
                cmbFinish.SelectedValue    = action.FINISH_CONDITION_TAG_PKNO;
                tbFinishValue.Text         = action.FINISH_CONDITION_VALUE;
            }
        }
Пример #11
0
        private void BtnDel_Click(object sender, RoutedEventArgs e)
        {
            //删除
            FmsActionControl actionControl = gridItem.SelectedItem as FmsActionControl;

            if (actionControl == null)
            {
                return;
            }

            if (
                WPFMessageBox.ShowConfirm($"确定要删除 指令动作【{actionControl.ACTION_NAME}】的配置信息吗?", "删除") != WPFMessageBoxResult.OK)
            {
                return;
            }
            _fmsClient.UseService(s => s.DelFmsActionControl(actionControl.PKNO));

            WPFMessageBox.ShowTips("指令动作配置已删除!", "删除提示");

            GetPage();  //重新刷新数据,根据需求是否进行刷新数据
        }
Пример #12
0
        private void bSave_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            if (cmbRoutingMain.SelectedValue == null)
            {
                return;
            }

            #region 创建生产过程

            //生产线数据
            PmTaskLine taskLine = cmbTask.SelectedItem as PmTaskLine;
            //产品数据
            string       itemPKNO = cmbProduct.SelectedValue.ToString();
            RsItemMaster product  = wsRSM.UseService(s => s.GetRsItemMasterById(itemPKNO));
            if (product == null)
            {
                MessageBox.Show("产品信息不存在,请核实.", "完成生产准备", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            //准备完成
            List <MesProcessCtrol> processCtrols    = new List <MesProcessCtrol>();
            List <RsRoutingDetail> rsRoutingDetails = gridProcessInfo.ItemsSource as List <RsRoutingDetail>;

            //已创建加工数量
            int     qty         = CheckPlanQTY(taskLine.TASK_NO);
            decimal preparedQty = 0;
            decimal.TryParse(tbTaskQty.Text.ToString(), out preparedQty);
            if (preparedQty <= 0)
            {
                MessageBox.Show("请输入正确的任务数量.", "完成生产准备", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            #region 判断加工数量

            if (tbTaskQty.Text.ToString() == "")
            {
                MessageBox.Show($"请输入数量", "未输入数量", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (int.Parse(tbTaskQty.Text.ToString()) + qty > taskLine.TASK_QTY)
            {
                MessageBox.Show($"输入数量超出订单加工数量", "数量超限", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            #endregion

            AmAssetMasterN mainDevice = cmbAssetInfo.SelectedItem as AmAssetMasterN;

            if (mainDevice == null)
            {
                MessageBox.Show("请选择主控PLC", "完成生产准备", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            #region 创建工单表

            MesJobOrder jobOrder = new MesJobOrder()
            {
                PKNO                = Guid.NewGuid().ToString("N"),
                COMPANY_CODE        = "",
                LINE_PKNO           = taskLine.LINE_PKNO, //产线信息
                LINE_TASK_PKNO      = taskLine.PKNO,
                ITEM_PKNO           = itemPKNO,
                JOB_ORDER_NO        = taskLine.TASK_NO + lbBatchIndex.Content.ToString(),
                BATCH_NO            = lbBatchIndex.Content.ToString(),
                ROUTING_DETAIL_PKNO = cmbRoutingMain.SelectedValue.ToString(),
                TASK_QTY            = preparedQty,
                COMPLETE_QTY        = 0,
                ONLINE_QTY          = 0,
                ONCE_QTY            = 0,
                RUN_STATE           = 1, //准备完成
                CREATION_DATE       = DateTime.Now,
                CREATED_BY          = CBaseData.LoginName,
                USE_FLAG            = 1,
                REMARK              = "",
            };

            #endregion

            List <MesProcessCtrol> newMesProcessCtrols = new List <MesProcessCtrol>();

            int iProcessIndex = 0;

            string DeviceInfos = "";
            string Programs    = "";

            #region 获取加工设备、程序号

            foreach (RsRoutingDetail item in rsRoutingDetails)
            {
                if (string.IsNullOrEmpty(item.WC_ABV))
                {
                    MessageBox.Show($"工序【{item.OP_NAME}】加工设备不能为空,请选择加工设备!",
                                    "完成生产准备", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                AmAssetMasterN device = wsEAM.UseService(s => s.GetAmAssetMasterNById(item.WC_ABV));
                if (device == null)
                {
                    MessageBox.Show($"工序【{item.OP_NAME}】加工设备,请选择加工设备!",
                                    "完成生产准备", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                DeviceInfos += device.ASSET_LABEL;  //设备
                Programs    += item.NC_PRO_NAME;    //程序号
            }

            #endregion

            wsPLM.UseService(s => s.AddMesJobOrder(jobOrder));  //添加工单

            #region 添加加工工序,共5步

            FmsActionControl ctrl1 =
                wsFMS.UseService(s => s.GetFmsActionControls($"ASSET_CODE = '{mainDevice.ASSET_CODE}' AND ACTION_NAME = '发送产品信息'"))
                .FirstOrDefault();      //
            FmsActionControl ctrl2 =
                wsFMS.UseService(s => s.GetFmsActionControls($"ASSET_CODE = '{mainDevice.ASSET_CODE}' AND ACTION_NAME = '发送数量'"))
                .FirstOrDefault();      //
            FmsActionControl ctrl3 =
                wsFMS.UseService(s => s.GetFmsActionControls($"ASSET_CODE = '{mainDevice.ASSET_CODE}' AND ACTION_NAME = '发送设备及程序号'"))
                .FirstOrDefault();      //
            FmsActionControl ctrl4 =
                wsFMS.UseService(s => s.GetFmsActionControls($"ASSET_CODE = '{mainDevice.ASSET_CODE}' AND ACTION_NAME = '订单确认'"))
                .FirstOrDefault();      //
            FmsActionControl ctrl5 =
                wsFMS.UseService(s => s.GetFmsActionControls($"ASSET_CODE = '{mainDevice.ASSET_CODE}' AND ACTION_NAME = '订单完成'"))
                .FirstOrDefault();      //

            #region 1.第一步发送产品信息

            MesProcessCtrol step1 = new MesProcessCtrol()
            {
                PKNO                        = CBaseData.NewGuid(),
                COMPANY_CODE                = "",
                JOB_ORDER_PKNO              = jobOrder.PKNO,
                JOB_ORDER                   = cmbTask.Text + lbBatchIndex.Content, //工单编号
                ITEM_PKNO                   = jobOrder.ITEM_PKNO,                  //产品PKNO
                SUB_JOB_ORDER_NO            = "",
                ROUTING_DETAIL_PKNO         = "",                                  //工序编号(工艺路线明细)为空,不按照工艺进行控制
                PROCESS_DEVICE_PKNO         = mainDevice.PKNO,                     //加工设备为 主控PLC
                PROCESS_INDEX               = 0,
                PROCESS_ACTION_TYPE         = 0,
                PROCESS_ACTION_PKNO         = (ctrl1 == null) ? "" : ctrl1.PKNO,
                PROCESS_ACTION_PARAM1_VALUE = product.ITEM_ABV, //产品简称
                PROCESS_ACTION_PARAM2_VALUE = "",
                CUR_PRODUCT_CODE_PKNO       = "",
                PROCESS_QTY                 = preparedQty,
                COMPLETE_QTY                = 0,
                QUALIFIED_QTY               = 0,
                PROCESS_STATE               = 1,
                CREATION_DATE               = DateTime.Now,
                CREATED_BY                  = CBaseData.LoginName,
                USE_FLAG                    = 1,
                REMARK                      = "系统自动形成",
            };

            #endregion end 1

            #region 2.第二步发送数量

            MesProcessCtrol step2 = new MesProcessCtrol()
            {
                PKNO                        = CBaseData.NewGuid(),
                COMPANY_CODE                = "",
                JOB_ORDER_PKNO              = jobOrder.PKNO,
                JOB_ORDER                   = cmbTask.Text + lbBatchIndex.Content, //工单编号
                ITEM_PKNO                   = jobOrder.ITEM_PKNO,                  //产品PKNO
                SUB_JOB_ORDER_NO            = "",
                ROUTING_DETAIL_PKNO         = "",                                  //工序编号(工艺路线明细)为空,不按照工艺进行控制
                PROCESS_DEVICE_PKNO         = mainDevice.PKNO,                     //加工设备为 主控PLC
                PROCESS_INDEX               = 1,
                PROCESS_ACTION_TYPE         = 0,
                PROCESS_ACTION_PKNO         = (ctrl2 == null) ? "" : ctrl2.PKNO,
                PROCESS_ACTION_PARAM1_VALUE = preparedQty.ToString(), //数量
                PROCESS_ACTION_PARAM2_VALUE = "",
                CUR_PRODUCT_CODE_PKNO       = "",
                PROCESS_QTY                 = preparedQty,
                COMPLETE_QTY                = 0,
                QUALIFIED_QTY               = 0,
                PROCESS_STATE               = 1,
                CREATION_DATE               = DateTime.Now,
                CREATED_BY                  = CBaseData.LoginName,
                USE_FLAG                    = 1,
                REMARK                      = "系统自动形成",
            };

            #endregion end 2

            #region 3.第三步发送设备及程序号

            MesProcessCtrol step3 = new MesProcessCtrol()
            {
                PKNO                        = CBaseData.NewGuid(),
                COMPANY_CODE                = "",
                JOB_ORDER_PKNO              = jobOrder.PKNO,
                JOB_ORDER                   = cmbTask.Text + lbBatchIndex.Content, //工单编号
                ITEM_PKNO                   = jobOrder.ITEM_PKNO,                  //产品PKNO
                SUB_JOB_ORDER_NO            = "",
                ROUTING_DETAIL_PKNO         = "",                                  //工序编号(工艺路线明细)为空,不按照工艺进行控制
                PROCESS_DEVICE_PKNO         = mainDevice.PKNO,                     //加工设备为 主控PLC
                PROCESS_INDEX               = 2,
                PROCESS_ACTION_TYPE         = 0,
                PROCESS_ACTION_PKNO         = (ctrl3 == null) ? "" : ctrl3.PKNO,
                PROCESS_ACTION_PARAM1_VALUE = DeviceInfos, //设备ID
                PROCESS_ACTION_PARAM2_VALUE = Programs,    //程序号
                CUR_PRODUCT_CODE_PKNO       = "",
                PROCESS_QTY                 = preparedQty,
                COMPLETE_QTY                = 0,
                QUALIFIED_QTY               = 0,
                PROCESS_STATE               = 1,
                CREATION_DATE               = DateTime.Now,
                CREATED_BY                  = CBaseData.LoginName,
                USE_FLAG                    = 1,
                REMARK                      = "系统自动形成",
            };

            #endregion end 3

            #region 4.第四步发送订单确认

            MesProcessCtrol step4 = new MesProcessCtrol()
            {
                PKNO                        = CBaseData.NewGuid(),
                COMPANY_CODE                = "",
                JOB_ORDER_PKNO              = jobOrder.PKNO,
                JOB_ORDER                   = cmbTask.Text + lbBatchIndex.Content, //工单编号
                ITEM_PKNO                   = jobOrder.ITEM_PKNO,                  //产品PKNO
                SUB_JOB_ORDER_NO            = "",
                ROUTING_DETAIL_PKNO         = "",                                  //工序编号(工艺路线明细)为空,不按照工艺进行控制
                PROCESS_DEVICE_PKNO         = mainDevice.PKNO,                     //加工设备为 主控PLC
                PROCESS_INDEX               = 3,
                PROCESS_ACTION_TYPE         = 0,
                PROCESS_ACTION_PKNO         = (ctrl4 == null) ? "" : ctrl4.PKNO,
                PROCESS_ACTION_PARAM1_VALUE = cmbTask.Text + lbBatchIndex.Content, //订单ID
                PROCESS_ACTION_PARAM2_VALUE = "",                                  //
                CUR_PRODUCT_CODE_PKNO       = "",
                PROCESS_QTY                 = preparedQty,
                COMPLETE_QTY                = 0,
                QUALIFIED_QTY               = 0,
                PROCESS_STATE               = 1,
                CREATION_DATE               = DateTime.Now,
                CREATED_BY                  = CBaseData.LoginName,
                USE_FLAG                    = 1,
                REMARK                      = "系统自动形成",
            };

            #endregion end 4

            #region 5.第五步订单完成

            MesProcessCtrol step5 = new MesProcessCtrol()
            {
                PKNO                        = CBaseData.NewGuid(),
                COMPANY_CODE                = "",
                JOB_ORDER_PKNO              = jobOrder.PKNO,
                JOB_ORDER                   = cmbTask.Text + lbBatchIndex.Content, //工单编号
                ITEM_PKNO                   = jobOrder.ITEM_PKNO,                  //产品PKNO
                SUB_JOB_ORDER_NO            = "",
                ROUTING_DETAIL_PKNO         = "",                                  //工序编号(工艺路线明细)为空,不按照工艺进行控制
                PROCESS_DEVICE_PKNO         = mainDevice.PKNO,                     //加工设备为 主控PLC
                PROCESS_INDEX               = 4,
                PROCESS_ACTION_TYPE         = 0,
                PROCESS_ACTION_PKNO         = (ctrl5 == null) ? "" : ctrl5.PKNO,
                PROCESS_ACTION_PARAM1_VALUE = "", //
                PROCESS_ACTION_PARAM2_VALUE = "", //
                CUR_PRODUCT_CODE_PKNO       = "",
                PROCESS_QTY                 = preparedQty,
                COMPLETE_QTY                = 0,
                QUALIFIED_QTY               = 0,
                PROCESS_STATE               = 1,
                CREATION_DATE               = DateTime.Now,
                CREATED_BY                  = CBaseData.LoginName,
                USE_FLAG                    = 1,
                REMARK                      = "系统自动形成",
            };

            #endregion end 5

            wsPLM.UseService(s => s.AddMesProcessCtrol(step1));
            wsPLM.UseService(s => s.AddMesProcessCtrol(step2));
            wsPLM.UseService(s => s.AddMesProcessCtrol(step3));
            wsPLM.UseService(s => s.AddMesProcessCtrol(step4));
            wsPLM.UseService(s => s.AddMesProcessCtrol(step5));

            #endregion

            #endregion

            //修改产线任务的完成数量
            taskLine.PREPARED_QTY += preparedQty;
            if (taskLine.RUN_STATE == 0)
            {
                taskLine.RUN_STATE = 1;
            }
            wsPLM.UseService(s => s.UpdatePmTaskLine(taskLine));

            cmbTask.ItemsSource =
                wsPLM.UseService(s => s.GetPmTaskLines("USE_FLAG = 1 AND RUN_STATE < 10 ")) //未完成的
                .Where(c => c.TASK_QTY > c.PREPARED_QTY)
                .OrderBy(c => c.CREATION_DATE)
                .ToList();     //生产线任务

            cmbTask.SelectedIndex       = -1;
            gridProcessInfo.ItemsSource = null;
        }
Пример #13
0
        private void BtnItemSave_Click(object sender, RoutedEventArgs e)
        {
            FmsActionFormulaMain main = tvMain.SelectedItem as FmsActionFormulaMain;

            if ((main == null) || (string.IsNullOrEmpty(main.PKNO)))
            {
                return;
            }
            FmsActionFormulaDetail detail = gbItem.DataContext as FmsActionFormulaDetail;

            if (detail == null)
            {
                return;
            }

            #region  校验

            if (string.IsNullOrEmpty(detail.FORMULA_CODE))
            {
                WPFMessageBox.ShowWarring("请选择配方主信息。", "保存");
                return;
            }

            if (string.IsNullOrEmpty(detail.FORMULA_DETAIL_NAME))
            {
                WPFMessageBox.ShowWarring("请输入配方明细名称。", "保存");
                return;
            }

            #endregion

            if (string.IsNullOrEmpty(detail.PKNO)) //新增
            {
                detail.PKNO = CBaseData.NewGuid();

                FmsActionControl action = new FmsActionControl()
                {
                    PKNO        = CBaseData.NewGuid(),
                    ACTION_NAME = detail.FORMULA_DETAIL_NAME,
                    ACTION_TYPE = detail.PROCESS_ACTION_TYPE.ToString(),
                    START_CONDITION_TAG_PKNO  = string.IsNullOrEmpty(cmbCondition.Text)? "": cmbCondition.SelectedValue.ToString(),
                    START_CONDITION_VALUE     = tbConditionValue.Text,
                    EXECUTE_TAG_PKNO          = string.IsNullOrEmpty(cmbExecute.Text) ? "" : cmbExecute.SelectedValue.ToString(),
                    EXECUTE_WRITE_VALUE       = tbExecuteValue.Text,
                    EXECUTE_PARAM1_TAG_PKNO   = string.IsNullOrEmpty(cmbParam1.Text) ? "" : cmbParam1.SelectedValue.ToString(),
                    EXECUTE_PARAM2_TAG_PKNO   = string.IsNullOrEmpty(cmbParam2.Text) ? "" : cmbParam2.SelectedValue.ToString(),
                    FINISH_CONDITION_TAG_PKNO = string.IsNullOrEmpty(cmbFinish.Text) ? "" : cmbFinish.SelectedValue.ToString(),
                    FINISH_CONDITION_VALUE    = tbFinishValue.Text,
                };

                detail.PROCESS_ACTION_PKNO = action.PKNO;

                ws.UseService(s => s.AddFmsActionControl(action));

                ws.UseService(s => s.AddFmsActionFormulaDetail(detail));

                //重新刷新数据
                List <FmsActionFormulaDetail> details =
                    ws.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = {main.FORMULA_CODE} AND USE_FLAG >= 0"))
                    .OrderBy(c => c.PROCESS_INDEX)
                    .ToList();
                gridItem.ItemsSource = details;
            }
            else  //修改
            {
                FmsActionControl action = ws.UseService(s => s.GetFmsActionControlById(detail.PROCESS_ACTION_PKNO));
                if (action == null)
                {
                    action = new FmsActionControl()
                    {
                        PKNO        = CBaseData.NewGuid(),
                        ACTION_NAME = detail.FORMULA_DETAIL_NAME,
                        ACTION_TYPE = detail.PROCESS_ACTION_TYPE.ToString(),
                        START_CONDITION_TAG_PKNO  = string.IsNullOrEmpty(cmbCondition.Text) ? "" : cmbCondition.SelectedValue.ToString(),
                        START_CONDITION_VALUE     = tbConditionValue.Text,
                        EXECUTE_TAG_PKNO          = string.IsNullOrEmpty(cmbExecute.Text) ? "" : cmbExecute.SelectedValue.ToString(),
                        EXECUTE_WRITE_VALUE       = tbExecuteValue.Text,
                        EXECUTE_PARAM1_TAG_PKNO   = string.IsNullOrEmpty(cmbParam1.Text) ? "" : cmbParam1.SelectedValue.ToString(),
                        EXECUTE_PARAM2_TAG_PKNO   = string.IsNullOrEmpty(cmbParam2.Text) ? "" : cmbParam2.SelectedValue.ToString(),
                        FINISH_CONDITION_TAG_PKNO = string.IsNullOrEmpty(cmbFinish.Text) ? "" : cmbFinish.SelectedValue.ToString(),
                        FINISH_CONDITION_VALUE    = tbFinishValue.Text,
                    };

                    detail.PROCESS_ACTION_PKNO = action.PKNO;

                    ws.UseService(s => s.AddFmsActionControl(action));
                }
                else //修改控制
                {
                    action.ACTION_NAME = detail.FORMULA_DETAIL_NAME;
                    action.ACTION_TYPE = detail.PROCESS_ACTION_TYPE.ToString();
                    action.START_CONDITION_TAG_PKNO = string.IsNullOrEmpty(cmbCondition.Text)
                        ? ""
                        : cmbCondition.SelectedValue.ToString();
                    action.START_CONDITION_VALUE = tbConditionValue.Text;
                    action.EXECUTE_TAG_PKNO      =
                        string.IsNullOrEmpty(cmbExecute.Text) ? "" : cmbExecute.SelectedValue.ToString();
                    action.EXECUTE_WRITE_VALUE     = tbExecuteValue.Text;
                    action.EXECUTE_PARAM1_TAG_PKNO =
                        string.IsNullOrEmpty(cmbParam1.Text) ? "" : cmbParam1.SelectedValue.ToString();
                    action.EXECUTE_PARAM2_TAG_PKNO =
                        string.IsNullOrEmpty(cmbParam2.Text) ? "" : cmbParam2.SelectedValue.ToString();
                    action.FINISH_CONDITION_TAG_PKNO =
                        string.IsNullOrEmpty(cmbFinish.Text) ? "" : cmbFinish.SelectedValue.ToString();
                    action.FINISH_CONDITION_VALUE = tbFinishValue.Text;

                    ws.UseService(s => s.UpdateFmsActionControl(action));
                }

                ws.UseService(s => s.UpdateFmsActionFormulaDetail(detail));
            }

            //保存成功
            gbItem.IsCollapsed = true;
            gbItem.Visibility  = Visibility.Collapsed;
            BindHelper.SetDictDataBindingGridItem(gbItem, gridItem);
        }