Ejemplo n.º 1
0
        //private Action<int, int, string, string, int, string> _showInfo;  //显示界面信息,提高效率

        private void RefreshDict()
        {
            while (!CBaseData.AppClosing)
            {
                if (!bRefreshDict)
                {
                    Thread.Sleep(200);
                    continue;
                }

                Dispatcher.BeginInvoke((Action)(delegate()
                {
                    MesJobOrder mesJobOrder = gridorder.SelectedItem as MesJobOrder;
                    if (mesJobOrder == null)
                    {
                        gridItem.ItemsSource = null;
                        return;
                    }

                    var process = ws.UseService(s =>
                                                s.GetMesProcessCtrols($"JOB_ORDER_PKNO = '{mesJobOrder.PKNO}' "))
                                  .OrderBy(c => c.PROCESS_INDEX).ThenBy(c => c.CREATION_DATE).ToList();

                    gridItem.ItemsSource = process;
                }));

                Thread.Sleep(2000);
            }
        }
Ejemplo n.º 2
0
        //重做当前
        private void bReWork_click(object sender, RoutedEventArgs e)
        {
            MesJobOrder mesJobOrder = gridorder.GetFocusedRow() as MesJobOrder;

            if (mesJobOrder == null)
            {
                return;
            }

            if (WPFMessageBox.ShowConfirm("确定要重做当前工序吗?", "重做工序") != WPFMessageBoxResult.OK)
            {
                return;
            }

            MesProcessCtrol processCtrol =
                ws.UseService(s =>
                              s.GetMesProcessCtrols($"JOB_ORDER_PKNO = '{mesJobOrder.PKNO}' AND PROCESS_STATE < 10 "))
                .OrderBy(c => c.PROCESS_INDEX).FirstOrDefault();      //正在执行的

            if (processCtrol == null)
            {
                return;
            }

            processCtrol.PROCESS_STATE = 1;    //重新执行
            ws.UseService(s => s.UpdateMesProcessCtrol(processCtrol));

            gridItem.ItemsSource = ws.UseService(s =>
                                                 s.GetMesProcessCtrols($"JOB_ORDER_PKNO = '{mesJobOrder.PKNO}' "))
                                   .OrderBy(c => c.PROCESS_INDEX).ThenBy(c => c.CREATION_DATE).ToList();
        }
Ejemplo n.º 3
0
        private void cmbTask_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            cmbProduct.SelectedIndex = -1;
            cmbProcess.SelectedIndex = -1;
            cmbDevice.SelectedIndex  = -1;

            cmbProduct.ItemsSource = null;
            cmbProcess.ItemsSource = null;
            cmbDevice.ItemsSource  = null;

            //选择生产线 => 获取产品
            MesJobOrder jobOrder = cmbTask.SelectedItem as MesJobOrder;

            if (jobOrder == null)
            {
                return;
            }

            cmbProduct.ItemsSource = wsRSM.UseService(s => s.GetRsItemMasters($"USE_FLAG = 1 AND PKNO = '{jobOrder.ITEM_PKNO}'"));

            if (cmbProduct.Items.Count > 0)
            {
                cmbProduct.SelectedIndex = 0;                             //选择第一个
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// 根据关键字段的值获取记录
 /// </summary>
 /// <param name="Id">关键字段的值</param>
 /// <returns>符合查询条件的记录</returns>
 public MesJobOrder GetMesJobOrderById(string Id)
 {
     using (IMesJobOrderBLL MesJobOrderBLL = BLLContainer.Resolve <IMesJobOrderBLL>())
     {
         MesJobOrder model = MesJobOrderBLL.GetFirstOrDefault(Id);
         return(model);
     }
 }
Ejemplo n.º 5
0
        private void Button33_Click(object sender, RoutedEventArgs e)
        {
            WcfClient <IPLMService> ws = new WcfClient <IPLMService>();
            List <MesJobOrder>      productProcesses = ws.UseService(s =>
                                                                     s.GetMesJobOrders("")); //正在执行的产品信息
            MesJobOrder productProcess = productProcesses.FirstOrDefault();                  //产品生产情况;

            productProcess.PKNO = "";
        }
Ejemplo n.º 6
0
        //完成当前
        private void bFinishThis_click(object sender, RoutedEventArgs e)
        {
            MesJobOrder mesJobOrder = gridorder.GetFocusedRow() as MesJobOrder;

            if (mesJobOrder == null)
            {
                return;
            }

            if (WPFMessageBox.ShowConfirm("确定要完成当前工序吗?", "完成当前工序") != WPFMessageBoxResult.OK)
            {
                return;
            }

            List <MesProcessCtrol> processCtrols = ws.UseService(s => s.GetMesProcessCtrols($"PROCESS_STATE < 10 "))
                                                   .OrderBy(c => c.PROCESS_INDEX).ThenBy(c => c.CREATION_DATE).ToList(); //执行的动作

            MesProcessCtrol processCtrol = processCtrols.FirstOrDefault(c => c.JOB_ORDER_PKNO == mesJobOrder.PKNO);

            if (processCtrol == null)
            {
                return;
            }

            var result = DeviceProcessControl.FinishCurBusiness(processCtrol);

            if (result != "OK")
            {
                WPFMessageBox.ShowError("当前工序的业务层完成错误,请核实。\r\n错误为:" + result, "完成当前工序");
                return;
            }
            processCtrol.PROCESS_STATE = 10;    //执行完成
            ws.UseService(s => s.UpdateMesProcessCtrol(processCtrol));


            if (processCtrol == processCtrols.LastOrDefault())
            {
                mesJobOrder.PROCESS_INFO    = "手动完成当前过程"; //生产执行信息
                mesJobOrder.ACT_FINISH_TIME = DateTime.Now;
                mesJobOrder.RUN_STATE       = 101;        //手动完成
                mesJobOrder.ONCE_QTY        = 1;          //默认订单为1
                mesJobOrder.COMPLETE_QTY    = 1;
            }
            else
            {
                mesJobOrder.PROCESS_INFO = "手动完成当前订单";  //生产执行信息
            }

            ws.UseService(s => s.UpdateMesJobOrder(mesJobOrder));

            gridItem.ItemsSource = ws.UseService(s =>
                                                 s.GetMesProcessCtrols($"JOB_ORDER_PKNO = '{mesJobOrder.PKNO}' "))
                                   .OrderBy(c => c.PROCESS_INDEX).ThenBy(c => c.CREATION_DATE).ToList();
        }
Ejemplo n.º 7
0
 /// <summary>
 /// 修改
 /// </summary>
 /// <param name="mMesJobOrder">模型</param>
 /// <returns>是否成功</returns>
 public bool UpdateMesJobOrder(MesJobOrder mMesJobOrder)
 {
     if (mMesJobOrder == null)
     {
         return(false);
     }
     using (IMesJobOrderBLL MesJobOrderBLL = BLLContainer.Resolve <IMesJobOrderBLL>())
     {
         return(MesJobOrderBLL.Update(mMesJobOrder));
     }
 }
Ejemplo n.º 8
0
 public JobTaskProxy(MesJobOrder _mesJobOrder, JobTaskModel _jobTaskModel, List <FmsActionControl> _actionControls)
 {
     mesJobOrder    = _mesJobOrder;
     jobTaskMode    = _jobTaskModel;
     actionControls = _actionControls;
     jobFunc.Add(Init);
     jobFunc.Add(InitData);
     jobFunc.Add(CheckState);
     jobFunc.Add(ProductProgress);
     jobFunc.Add(StartCurrentProgerss);
     jobFunc.Add(FinishProgress);
 }
Ejemplo n.º 9
0
 /// <summary>
 /// 按照关键字段删除
 /// </summary>
 /// <param name="Id">关键字段</param>
 /// <returns>是否成功</returns>
 public bool DelMesJobOrder(string Id)
 {
     using (IMesJobOrderBLL MesJobOrderBLL = BLLContainer.Resolve <IMesJobOrderBLL>())
     {
         try
         {
             MesJobOrder item = MesJobOrderBLL.GetFirstOrDefault(Id);
             return(MesJobOrderBLL.Delete(item));
         }
         catch { return(false); }
     }
 }
Ejemplo n.º 10
0
        private void cmbProduct_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //选择产品 => 获取工艺路线

            if (cmbProduct.SelectedValue == null)
            {
                return;
            }

            string itemPKNO = cmbProduct.SelectedValue.ToString(); //产品

            if (string.IsNullOrEmpty(itemPKNO))
            {
                return;
            }

            PmTaskLine taskLine = cmbTask.SelectedItem as PmTaskLine;

            if (taskLine == null)
            {
                return;
            }

            cmbRoutingMain.ItemsSource =
                wsRSM.UseService(s => s.GetRsRoutingItems($"USE_FLAG = 1 AND ITEM_PKNO = '{itemPKNO}'"))
                .Join(wsRSM.UseService(s => s.GetRsRoutingHeads("USE_FLAG = 1")), c => c.ROUTING_PKNO,
                      d => d.PKNO, (c, d) => new { d.PKNO, d.ROUTING_NAME });

            //需增加状态表,已经完成准备的工序不再显示
            if (cmbRoutingMain.Items.Count > 0)
            {
                cmbRoutingMain.SelectedIndex = 0;                                 //选择第一个
            }
            MesJobOrder jobOrder =
                wsPLM.UseService(s =>
                                 s.GetMesJobOrders(
                                     $"LINE_TASK_PKNO = '{taskLine.PKNO}' AND USE_FLAG = 1 AND LINE_PKNO = '{CBaseData.CurLinePKNO}'"))
                .OrderByDescending(c => c.BATCH_NO)     //按照批次排序
                .FirstOrDefault();

            int batchIndex = 1;

            if (jobOrder != null)
            {
                int.TryParse(jobOrder.BATCH_NO, out batchIndex);
                batchIndex++;
            }

            lbBatchIndex.Content = batchIndex.ToString(); //批次
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 形成过程控制信息
        /// </summary>
        /// <param name="jobOrder">订单</param>
        /// <param name="formulaDetail">配方明细</param>
        /// <param name="paramValues">参数</param>
        /// <returns></returns>
        private MesProcessCtrol BuildNewProcess(MesJobOrder jobOrder,
                                                FmsActionFormulaDetail formulaDetail, Dictionary <string, string> paramValues)
        {
            return(new MesProcessCtrol()
            {
                #region 标准信息

                PKNO = CBaseData.NewGuid(),
                COMPANY_CODE = CBaseData.BelongCompPKNO,
                ITEM_PKNO = jobOrder?.ITEM_PKNO,   //成品PKNO TODO:暂无
                JOB_ORDER_PKNO = jobOrder?.PKNO,
                JOB_ORDER = jobOrder?.JOB_ORDER_NO,
                SUB_JOB_ORDER_NO = "",
                ROUTING_DETAIL_PKNO = "",  //

                #endregion

                PROCESS_CTROL_NAME = formulaDetail.FORMULA_DETAIL_NAME,                                                            //名称
                PROCESS_DEVICE_PKNO = ProcessParamReplace.Replace(formulaDetail.PROCESS_DEVICE_PKNO, paramValues),                 //生产设备
                PROCESS_PROGRAM_NO = ProcessParamReplace.Replace(formulaDetail.PROCESS_PROGRAM_NO, paramValues),                   //加工程序号
                PROCESS_PROGRAM_CONTENT = formulaDetail.PROCESS_PROGRAM_CONTENT,                                                   //加工程序内容
                PROCESS_INDEX = formulaDetail.PROCESS_INDEX,                                                                       //工序顺序

                BEGIN_ITEM_PKNO = ProcessParamReplace.Replace(formulaDetail.BEGIN_ITEM_PKNO, paramValues),                         //生产前项目PKNO
                FINISH_ITEM_PKNO = ProcessParamReplace.Replace(formulaDetail.FINISH_ITEM_PKNO, paramValues),                       //生产后项目PKNO
                BEGIN_POSITION = ProcessParamReplace.Replace(formulaDetail.BEGIN_POSITION, paramValues),                           //生产前位置
                FINISH_POSITION = ProcessParamReplace.Replace(formulaDetail.FINISH_POSITION, paramValues),                         //生产后位置

                PALLET_NO = formulaDetail.PALLET_NO,                                                                               //托盘号
                PROCESS_ACTION_TYPE = formulaDetail.PROCESS_ACTION_TYPE,                                                           //工序动作类型
                PROCESS_ACTION_PKNO = formulaDetail.PROCESS_ACTION_PKNO,                                                           //工序动作控制PKNO

                PROCESS_ACTION_PARAM1_VALUE = ProcessParamReplace.Replace(formulaDetail.PROCESS_ACTION_PARAM1_VALUE, paramValues), //工序动作参数1
                PROCESS_ACTION_PARAM2_VALUE = ProcessParamReplace.Replace(formulaDetail.PROCESS_ACTION_PARAM2_VALUE, paramValues), //工序动作参数2

                CUR_PRODUCT_CODE_PKNO = "",                                                                                        //当前生产加工的产品编码PKNO
                PROCESS_QTY = 1,                                                                                                   //加工数量(上线数量)
                COMPLETE_QTY = 0,                                                                                                  //完成数量
                QUALIFIED_QTY = 0,                                                                                                 //合格数量
                PROCESS_STATE = 1,                                                                                                 //准备完成

                CREATION_DATE = DateTime.Now,                                                                                      //创建日期
                CREATED_BY = CBaseData.LoginNO,                                                                                    //创建人
                LAST_UPDATE_DATE = DateTime.Now,                                                                                   //最后修改日期
                USE_FLAG = formulaDetail.USE_FLAG,                                                                                 //启用标识
                REMARK = "",                                                                                                       //备注
            });
        }
Ejemplo n.º 12
0
        private void Gridorder_SelectedItemChanged(object sender, DevExpress.Xpf.Grid.SelectedItemChangedEventArgs e)
        {
            MesJobOrder mesJobOrder = gridorder.SelectedItem as MesJobOrder;

            if (mesJobOrder == null)
            {
                gridItem.ItemsSource = null;
                return;
            }

            var process = ws.UseService(s =>
                                        s.GetMesProcessCtrols($"JOB_ORDER_PKNO = '{mesJobOrder.PKNO}' "))
                          .OrderBy(c => c.PROCESS_INDEX).ThenBy(c => c.CREATION_DATE).ToList();

            gridItem.ItemsSource = process;
        }
Ejemplo n.º 13
0
 /// <summary>
 /// 按照关键字段删除
 /// </summary>
 /// <param name="Ids">关键字段数组</param>
 /// <returns>是否成功</returns>
 public bool DelMesJobOrders(string[] Ids)
 {
     using (IMesJobOrderBLL MesJobOrderBLL = BLLContainer.Resolve <IMesJobOrderBLL>())
     {
         try
         {
             List <MesJobOrder> entitys = new List <MesJobOrder>();
             foreach (string id in Ids)
             {
                 MesJobOrder item = MesJobOrderBLL.GetFirstOrDefault(id);
                 entitys.Add(item);
             }
             return(MesJobOrderBLL.Delete(entitys));
         }
         catch { return(false); }
     }
 }
Ejemplo n.º 14
0
        //取消订单: 订单标记取消,标记process结束。
        private void BtnCancle_click(object sender, RoutedEventArgs e)
        {
            MesJobOrder mesJobOrder = gridorder.GetFocusedRow() as MesJobOrder;

            if (mesJobOrder == null)
            {
                return;
            }

            if (WPFMessageBox.ShowConfirm("确定要取消该订单吗?", "取消订单") != WPFMessageBoxResult.OK)
            {
                return;
            }

            Cursor = Cursors.Wait;

            mesJobOrder.ACT_FINISH_TIME = DateTime.Now;
            mesJobOrder.RUN_STATE       = 102; //手动取消
            ////mesJobOrder.ONCE_QTY = 1;//默认订单为1
            ////mesJobOrder.COMPLETE_QTY = 1;
            ws.UseService(s => s.UpdateMesJobOrder(mesJobOrder));

            Thread.Sleep(500);

            List <MesProcessCtrol> mesProcessCtrols =
                ws.UseService(s => s.GetMesProcessCtrols("JOB_ORDER_PKNO = " + mesJobOrder.PKNO + ""));

            if (mesProcessCtrols.Count < 0)
            {
                Cursor = Cursors.Arrow;
                return;
            }
            foreach (var processCtrol in mesProcessCtrols)
            {
                processCtrol.PROCESS_STATE = 20;//不执行
                ws.UseService(s => s.UpdateMesProcessCtrol(processCtrol));
            }

            GetPage();

            Cursor = Cursors.Arrow;
        }
Ejemplo n.º 15
0
        private void cmbProcess_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //选择工序 => 获取设备
            cmbDevice.SelectedIndex = -1;
            cmbDevice.ItemsSource   = null;

            if (cmbProcess.SelectedValue == null)
            {
                return;
            }
            if (cmbProduct.SelectedValue == null)
            {
                return;
            }
            MesJobOrder jobOrder = cmbTask.SelectedItem as MesJobOrder;

            if (jobOrder == null)
            {
                return;
            }

            string          processPKNO  = cmbProcess.SelectedValue.ToString();
            MesProcessCtrol processCtrol = wsPLM
                                           .UseService(s =>
                                                       s.GetMesProcessCtrols(
                                                           $"USE_FLAG = 1 AND JOB_ORDER_PKNO = '{jobOrder.PKNO}' AND ROUTING_DETAIL_PKNO = '{processPKNO}'"))
                                           .OrderBy(c => c.PROCESS_INDEX).FirstOrDefault();

            if (processCtrol == null)
            {
                return;
            }

            cmbDevice.ItemsSource =
                wsEAM.UseService(s => s.GetAmAssetMasterNs($"USE_FLAG = 1 AND ASSET_CODE = '{processCtrol.PROCESS_DEVICE_PKNO}'"));

            if (cmbDevice.Items.Count > 0)
            {
                cmbDevice.SelectedIndex = 0;                            //选择第一个
            }
            GetPage();
        }
Ejemplo n.º 16
0
        private void GetPage()
        {
            gridChangeTools.ItemsSource = null;

            MesJobOrder jobOrder = cmbTask.SelectedItem as MesJobOrder;

            if (jobOrder == null)
            {
                return;
            }

            string itemPKNO = cmbProduct.SelectedValue.ToString();

            if (string.IsNullOrEmpty(itemPKNO))
            {
                return;                                 //产品
            }
            string          processPKNO   = cmbProcess.SelectedValue.ToString();
            RsRoutingDetail routingDetail = wsRSM.UseService(s => s.GetRsRoutingDetailById(processPKNO));

            if (routingDetail == null)
            {
                return;
            }

            AmAssetMasterN wcDevice = cmbDevice.SelectedItem as AmAssetMasterN;

            if (wcDevice == null)
            {
                return;
            }

            #region 换刀清单

            gridChangeTools.ItemsSource =
                wsTMS.UseService(s => s.GetTmsDeviceToolsPoss($"USE_FLAG = 1 AND DEVICE_PKNO = '{wcDevice.PKNO}'"))
                .OrderBy(c => c.TOOLS_POS_NO)
                .ToList();
            #endregion
        }
Ejemplo n.º 17
0
        private void bSave_Click(object sender, RoutedEventArgs e)
        {
            int m_qty    = 0;
            int orderQty = wsPLM.UseService(s =>
                                            s.GetMesJobOrderCount(
                                                $"CREATION_DATE > '{DateTime.Today.ToString("yyyy-MM-dd")}' AND LINE_PKNO = '{CBaseData.CurLinePKNO}'"));

            if (orderQty == 0)
            {
                orderQty = 1;
            }
            if (qty.Text != null && int.TryParse(qty.Text, out m_qty) && m_qty != 0)
            {
                MesJobOrder jobOrder = new MesJobOrder()
                {
                    PKNO                = Guid.NewGuid().ToString("N"),
                    COMPANY_CODE        = "",
                    LINE_PKNO           = "", //产线信息
                    LINE_TASK_PKNO      = "",
                    ITEM_PKNO           = mRoutingItem.ITEM_PKNO,
                    JOB_ORDER_NO        = DateTime.Now.ToString("yyMMdd") + orderQty.ToString("0000"),
                    BATCH_NO            = "",
                    ROUTING_DETAIL_PKNO = mRoutingItem.ROUTING_PKNO,//该字段为routing_head_PKNO
                    TASK_QTY            = m_qty,
                    COMPLETE_QTY        = 0,
                    ONLINE_QTY          = 0,
                    ONCE_QTY            = 0,
                    RUN_STATE           = 1, //准备完成
                    CREATION_DATE       = DateTime.Now,
                    CREATED_BY          = CBaseData.LoginName,
                    LAST_UPDATE_DATE    = DateTime.Now, //最后修改日期
                    USE_FLAG            = 1,
                    REMARK              = "",
                };
            }
            else
            {
                MessageBox.Show("请核实订单数量和产品信息");
            }
        }
Ejemplo n.º 18
0
        private void cmbProduct_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //选择产品 => 获取工艺路线
            cmbProcess.SelectedIndex = -1;
            cmbDevice.SelectedIndex  = -1;
            cmbProcess.ItemsSource   = null;
            cmbDevice.ItemsSource    = null;


            if (cmbProduct.SelectedValue == null)
            {
                return;
            }
            MesJobOrder jobOrder = cmbTask.SelectedItem as MesJobOrder;

            if (jobOrder == null)
            {
                return;
            }
            string itemPKNO = cmbProduct.SelectedValue.ToString();

            if (string.IsNullOrEmpty(itemPKNO))
            {
                return;
            }

            cmbProcess.ItemsSource =
                wsPLM.UseService(s => s.GetMesProcessCtrols($"USE_FLAG = 1 AND JOB_ORDER_PKNO = '{jobOrder.PKNO}' AND ITEM_PKNO = '{itemPKNO}' "))
                .OrderBy(c => c.PROCESS_INDEX)
                .Join(wsRSM.UseService(s => s.GetRsRoutingDetails("USE_FLAG = 1")).OrderBy(c => c.OP_INDEX), c => c.ROUTING_DETAIL_PKNO,
                      d => d.PKNO,
                      (c, d) => new { d.PKNO, d.ROUTING_PKNO, OP_INFO = d.OP_NO + " " + d.OP_NAME });

            //需增加状态表,已经完成准备的工序不再显示
            if (cmbProcess.Items.Count > 0)
            {
                cmbProcess.SelectedIndex = 0;                             //选择第一个
            }
        }
Ejemplo n.º 19
0
        private void BtnAutoChange_Click(object sender, RoutedEventArgs e)
        {
            TmsToolsMaster         mToolsMaster       = GridControlInvTool.SelectedItem as TmsToolsMaster;
            TmsDeviceToolsPos      mTmsDeviceToolsPos = GridControlDeviceTool.SelectedItem as TmsDeviceToolsPos;
            MesJobOrder            jobOrder           = null;
            WmsInventory           inv           = null;
            List <MesProcessCtrol> processCtrols = new List <MesProcessCtrol>();

            #region 形成工单

            jobOrder = new MesJobOrder()
            {
                PKNO                = CBaseData.NewGuid(),
                COMPANY_CODE        = CBaseData.BelongCompPKNO,
                LINE_PKNO           = CBaseData.CurLinePKNO,
                LINE_TASK_PKNO      = "", //产线任务PKNO
                ITEM_PKNO           = "", // TODO:暂无
                JOB_ORDER_NO        = TableNOHelper.GetNewNO("MES_JOB_ORDER.JOB_ORDER_NO", "J"),
                BATCH_NO            = "",
                ROUTING_DETAIL_PKNO = "",
                JOB_ORDER_TYPE      = 2, //工单类型 1:原料入库;2:加工;3:成品出库;4:转换
                TASK_QTY            = 1,
                COMPLETE_QTY        = 0,
                ONLINE_QTY          = 0,
                ONCE_QTY            = 0,
                RUN_STATE           = 10, //直接生产
                CREATION_DATE       = DateTime.Now,
                CREATED_BY          = CBaseData.LoginNO,
                LAST_UPDATE_DATE    = DateTime.Now, //最后修改日期
                USE_FLAG            = 1,
                REMARK              = "",
            };

            #endregion

            #region 增加参数

            Dictionary <string, string> ParamValues = new Dictionary <string, string>();

            #endregion

            string sFormulaCode = "换刀";

            List <FmsActionFormulaDetail> formulaDetails = wsFms.UseService(s =>
                                                                            s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                                           .OrderBy(c => c.PROCESS_INDEX)
                                                           .ToList();

            foreach (var detail in formulaDetails)  //配方
            {
                MesProcessCtrol process = new MesProcessCtrol()
                {
                    #region 标准信息

                    PKNO                = CBaseData.NewGuid(),
                    COMPANY_CODE        = CBaseData.BelongCompPKNO,
                    ITEM_PKNO           = "", //成品PKNO TODO:暂无
                    JOB_ORDER_PKNO      = jobOrder.PKNO,
                    JOB_ORDER           = jobOrder.JOB_ORDER_NO,
                    SUB_JOB_ORDER_NO    = "",
                    ROUTING_DETAIL_PKNO = "",  //

                    #endregion

                    PROCESS_CTROL_NAME      = detail.FORMULA_DETAIL_NAME,                                   //名称
                    PROCESS_DEVICE_PKNO     = Replace(detail.PROCESS_DEVICE_PKNO, ParamValues),             //生产设备
                    PROCESS_PROGRAM_NO      = Replace(detail.PROCESS_PROGRAM_NO, ParamValues),              //加工程序号
                    PROCESS_PROGRAM_CONTENT = detail.PROCESS_PROGRAM_CONTENT,                               //加工程序内容
                    PROCESS_INDEX           = detail.PROCESS_INDEX,                                         //工序顺序
                    BEGIN_ITEM_PKNO         = Replace(detail.BEGIN_ITEM_PKNO, ParamValues),                 //生产前项目PKNO
                    FINISH_ITEM_PKNO        = Replace(detail.FINISH_ITEM_PKNO, ParamValues),                //生产后项目PKNO
                    BEGIN_POSITION          = Replace(detail.BEGIN_POSITION, ParamValues),                  //生产前位置
                    FINISH_POSITION         = Replace(detail.FINISH_POSITION, ParamValues),                 //生产后位置
                    PALLET_NO           = detail.PALLET_NO,                                                 //托盘号
                    PROCESS_ACTION_TYPE = detail.PROCESS_ACTION_TYPE,                                       //工序动作类型
                    PROCESS_ACTION_PKNO = detail.PROCESS_ACTION_PKNO,                                       //工序动作控制PKNO

                    PROCESS_ACTION_PARAM1_VALUE = Replace(detail.PROCESS_ACTION_PARAM1_VALUE, ParamValues), //工序动作参数1
                    PROCESS_ACTION_PARAM2_VALUE = Replace(detail.PROCESS_ACTION_PARAM2_VALUE, ParamValues), //工序动作参数2

                    CUR_PRODUCT_CODE_PKNO = "",                                                             //当前生产加工的产品编码PKNO
                    PROCESS_QTY           = 1,                                                              //加工数量(上线数量)
                    COMPLETE_QTY          = 0,                                                              //完成数量
                    QUALIFIED_QTY         = 0,                                                              //合格数量
                    PROCESS_STATE         = 1,                                                              //准备完成

                    CREATION_DATE    = DateTime.Now,                                                        //创建日期
                    CREATED_BY       = CBaseData.LoginNO,                                                   //创建人
                    LAST_UPDATE_DATE = DateTime.Now,                                                        //最后修改日期
                    USE_FLAG         = detail.USE_FLAG,                                                     //启用标识
                    REMARK           = "",                                                                  //备注
                };

                processCtrols.Add(process);
            }

            Cursor = Cursors.Wait;

            wsPLM.UseService(s => s.AddMesJobOrder(jobOrder));

            foreach (MesProcessCtrol processCtrol in processCtrols)
            {
                wsPLM.UseService(s => s.AddMesProcessCtrol(processCtrol));
            }

            Cursor = Cursors.Arrow;

            MessageBox.Show("换刀下单成功.");
            GridControlInvTool.ItemsSource = ws.UseService(s => s.GetTmsToolsMasters("USE_FLAG > 0")).OrderBy(n => n.CREATION_DATE).ToList();;
        }
Ejemplo n.º 20
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();
            //准备完成
            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

            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,
                LAST_UPDATE_DATE    = DateTime.Now, //最后修改日期
                USE_FLAG            = 1,
                REMARK              = "",
            };

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

            int iProcessIndex = 0;

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

                //if (string.IsNullOrEmpty(item.PROCESS_ACTION_PKNO))
                //{
                //    MessageBox.Show($"工序【{item.OP_NAME}】指令动作不能为空,请选择指令动作!",
                //        "完成生产准备", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                //    return;
                //}


                MesProcessCtrol mesProcess = new MesProcessCtrol();
                mesProcess.PKNO             = Guid.NewGuid().ToString("N");
                mesProcess.COMPANY_CODE     = "";
                mesProcess.ITEM_PKNO        = jobOrder.ITEM_PKNO;
                mesProcess.JOB_ORDER_PKNO   = jobOrder.PKNO;
                mesProcess.SUB_JOB_ORDER_NO = jobOrder.JOB_ORDER_NO + "-" + iProcessIndex;

                mesProcess.ROUTING_DETAIL_PKNO = item.PKNO;   //工序PKNO
                mesProcess.PROCESS_DEVICE_PKNO = item.WC_ABV; //设备信息
                mesProcess.PROCESS_INDEX       = iProcessIndex;

                mesProcess.PROCESS_ACTION_TYPE         = item.PROCESS_ACTION_TYPE;
                mesProcess.PROCESS_ACTION_PKNO         = item.PROCESS_ACTION_PKNO;
                mesProcess.PROCESS_ACTION_PARAM1_VALUE = item.PROCESS_ACTION_PARAM1_VALUE;   //控制参数1
                mesProcess.PROCESS_ACTION_PARAM2_VALUE = item.PROCESS_ACTION_PARAM2_VALUE;   //控制参数2

                mesProcess.PROCESS_QTY   = 0;
                mesProcess.COMPLETE_QTY  = 0;
                mesProcess.QUALIFIED_QTY = 0;
                mesProcess.PROCESS_STATE = 1;  //准备完成

                mesProcess.CREATED_BY       = CBaseData.LoginName;
                mesProcess.CREATION_DATE    = DateTime.Now;
                mesProcess.LAST_UPDATE_DATE = DateTime.Now;  //最后修改日期
                mesProcess.USE_FLAG         = 1;

                iProcessIndex++;
                newMesProcessCtrols.Add(mesProcess);
            }

            wsPLM.UseService(s => s.AddMesJobOrder(jobOrder));  //添加工单
            foreach (MesProcessCtrol mesProcessCtrol in newMesProcessCtrols)
            {
                wsPLM.UseService(s => s.AddMesProcessCtrol(mesProcessCtrol));  //添加具体工序
            }

            #endregion

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

            tbLiftQty.Text              = "";
            cmbTask.SelectedIndex       = -1;
            gridProcessInfo.ItemsSource = null;
            tbTaskQty.Text              = "";
            lbBatchIndex.Content        = "";
            if (System.Windows.Forms.MessageBox.Show($"确定生成质检计划吗?",
                                                     @"生成质检信息",
                                                     MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                QmsCheckParam qmsCheckParam = wsQMS.UseService(s =>
                                                               s.GetQmsCheckParams(" USE_FLAG = 1 AND ITEM_PKNO = " + taskLine.ITEM_PKNO + "")).FirstOrDefault();
                if (qmsCheckParam == null)
                {
                    return;
                }

                List <QmsRoutingCheck> qmsRoutingChecks = wsQMS.UseService(s =>
                                                                           s.GetQmsRoutingChecks(" USE_FLAG = 1 AND CHECK_PARAM_PKNO = " + qmsCheckParam.PKNO + ""));
                if (qmsRoutingChecks.Count <= 0)
                {
                    return;
                }
                foreach (var itemRoutingCheck in qmsRoutingChecks)
                {
                    //创建质检主表内容
                    if (itemRoutingCheck.CHK_MODE == "首检" || itemRoutingCheck.CHK_MODE == "尾检")//首尾检
                    {
                        QmsCheckMaster qmsCheckMaster = new QmsCheckMaster();
                        qmsCheckMaster.PKNO = Guid.NewGuid().ToString("N");
                        if (itemRoutingCheck.CHK_MODE == "首检")
                        {
                            qmsCheckMaster.CHECK_NO = "ZJ" + jobOrder.JOB_ORDER_NO + (1 * 1000).ToString("0000");
                        }
                        else
                        {
                            qmsCheckMaster.CHECK_NO = "ZJ" + jobOrder.JOB_ORDER_NO + (2 * 1000).ToString("0000");
                        }

                        qmsCheckMaster.CHECK_PARAM_PKNO   = itemRoutingCheck.CHECK_PARAM_PKNO;
                        qmsCheckMaster.ROUTING_CHECK_PKNO = itemRoutingCheck.PKNO;
                        qmsCheckMaster.CREATION_DATE      = DateTime.Now;
                        qmsCheckMaster.LAST_UPDATE_DATE   = DateTime.Now; //最后修改日期
                        qmsCheckMaster.USE_FLAG           = 1;
                        qmsCheckMaster.CHECK_STATUS       = "1";
                        qmsCheckMaster.TASKLINE_PKNO      = jobOrder.JOB_ORDER_NO;//以工单编号应用为关联
                        qmsCheckMaster.PROCESS_PKNO       = itemRoutingCheck.PROCESS_PKNO;
                        qmsCheckMaster.CHK_MODE           = itemRoutingCheck.CHK_MODE;
                        wsQMS.UseService(s => s.AddQmsCheckMaster(qmsCheckMaster));
                    }
                    else
                    {
                        //todo:未判断首尾检对批次检测影响
                        if (itemRoutingCheck.CHK_FREQ_VALUE == String.Empty)
                        {
                            return;
                        }
                        int count = int.Parse(jobOrder.TASK_QTY.ToString()) / int.Parse(itemRoutingCheck.CHK_FREQ_VALUE);
                        for (int i = 1; i <= count; i++)
                        {
                            QmsCheckMaster qmsCheckMaster = new QmsCheckMaster();
                            qmsCheckMaster.PKNO               = Guid.NewGuid().ToString("N");
                            qmsCheckMaster.CHECK_PARAM_PKNO   = itemRoutingCheck.CHECK_PARAM_PKNO;
                            qmsCheckMaster.ROUTING_CHECK_PKNO = itemRoutingCheck.PKNO;
                            qmsCheckMaster.CHECK_NO           = "ZJ" + jobOrder.JOB_ORDER_NO + ((3 * 1000) + i).ToString("0000"); //3为批次检测,抽检需要另外规则定制生成
                            qmsCheckMaster.CREATION_DATE      = DateTime.Now;
                            qmsCheckMaster.LAST_UPDATE_DATE   = DateTime.Now;                                                     //最后修改日期
                            qmsCheckMaster.USE_FLAG           = 1;
                            qmsCheckMaster.CHECK_STATUS       = "1";
                            qmsCheckMaster.TASKLINE_PKNO      = jobOrder.JOB_ORDER_NO;//以工单编号应用为关联
                            qmsCheckMaster.PROCESS_PKNO       = itemRoutingCheck.PROCESS_PKNO;
                            qmsCheckMaster.CHK_MODE           = itemRoutingCheck.CHK_MODE;
                            wsQMS.UseService(s => s.AddQmsCheckMaster(qmsCheckMaster));
                        }
                    }
                }
            }
            GetPage();
        }
Ejemplo n.º 21
0
        private void BtnPrint_Click(object sender, RoutedEventArgs e)
        {
            //工单打印
            MesJobOrder mesJobOrder = gridItem.SelectedItem as MesJobOrder;

            if (mesJobOrder == null)
            {
                return;
            }
            List <MesJobOrder> mesJobOrders = new List <MesJobOrder>();

            mesJobOrders.Add(mesJobOrder);
            List <RsItemMaster> items = wsRsm.UseService(s => s.GetRsItemMasters("USE_FLAG = 1")); //ITem

            List <RsRoutingItem> routingItem = wsRsm.UseService(s => s.GetRsRoutingItems(""));

            List <RsRoutingHead> routings = wsRsm.UseService(s => s.GetRsRoutingHeads("USE_FLAG = 1"));

            List <SysAttachInfo> attachs = wsSdm.UseService(s => s.GetSysAttachInfos($"BELONGFUNCTION = '工艺管理' AND ISTATE = 1"));

            List <PmTaskLine> taskLines = ws.UseService(s => s.GetPmTaskLines("USE_FLAG = 1"));

            var OrderInfo = from c in mesJobOrders
                            join d in items on c.ITEM_PKNO equals d.PKNO
                            join j in taskLines on c.LINE_TASK_PKNO equals j.PKNO
                            join f in routingItem on d.PKNO equals f.ITEM_PKNO
                            join g in routings on f.ROUTING_PKNO equals g.PKNO
                            join h in attachs on g.PKNO equals h.FUNCTIONPKNO into temp
                            from attach in temp.DefaultIfEmpty()
                            select new
            {
                JobOrderNO     = c.JOB_ORDER_NO, //工单编号
                RoutingPic     = attach?.ATTACHINFO,
                TaskNO         = j.TASK_NO,      //任务号
                MaterialModel  = "",             //材料牌号
                MaterialSize   = "",             //下料尺寸
                PartsName      = d.ITEM_NAME,    //
                PartsDrawingNO = d.DRAWING_NO,   //
                //PartsImportant = d.KEY_PART_NORM, //
                //PartsWeight = d.THEORETICAL_WEIGHT, //
                Remark = c.REMARK,     //
            };


            JobOrder report = new JobOrder()
            {
                DataSource = OrderInfo
            };

            DevReportHelper.BindLabel(report, OrderInfo, "cellOrderNO", "JobOrderNO");
            DevReportHelper.BindBarCode(report, OrderInfo, "barCodeInfo", "JobOrderNO");
            DevReportHelper.BindPicture(report, OrderInfo, "picRouting", "RoutingPic");
            DevReportHelper.BindLabel(report, OrderInfo, "cellTaskNO", "TaskNO");
            DevReportHelper.BindLabel(report, OrderInfo, "cellMaterialModel", "MaterialModel");
            DevReportHelper.BindLabel(report, OrderInfo, "cellMaterialSize", "MaterialSize");
            DevReportHelper.BindLabel(report, OrderInfo, "cellPartsName", "PartsName");
            DevReportHelper.BindLabel(report, OrderInfo, "cellPartsDrawingNO", "PartsDrawingNO");
            DevReportHelper.BindLabel(report, OrderInfo, "cellPartsImportant", "PartsImportant");
            DevReportHelper.BindLabel(report, OrderInfo, "cellPartsWeight", "PartsWeight");
            DevReportHelper.BindLabel(report, OrderInfo, "cellRemark", "Remark");

            DevReportHelper.PrintPreview(null, report);
        }
Ejemplo n.º 22
0
        private void Btn_Start2Click(object sender, RoutedEventArgs e)
        {
            WcfClient <IPLMService> ws2     = new WcfClient <IPLMService>();
            string             LineCode     = CBaseData.CurLinePKNO;//加工单元
            List <MesJobOrder> mesJobOrders =
                ws2.UseService(s =>
                               s.GetMesJobOrders(
                                   $"USE_FLAG = 1 AND RUN_STATE < 100 AND LINE_PKNO = '{LineCode}'"))
                .OrderBy(c => c.CREATION_DATE).ToList();

            if (mesJobOrders.Count > 20)
            {
                WaitLoading.SetDefault(this);
                WPFMessageBox.ShowError("当前订单过多,请等待加工完成", "加工工单");
                return;
            }

            if (WPFMessageBox.ShowConfirm("确定下达加工工单么吗?\r\n" +
                                          "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n",
                                          "加工工单") != WPFMessageBoxResult.OK)
            {
                return;
            }

            //后台执行添加
            new Thread(delegate()
            {
                WaitLoading.SetWait(this);
                Thread.Sleep(1000);

                DateTime jobOrderTime = DateTime.Now.AddSeconds(-10);
                int iJobOrderIndex    = 0;

                List <MesJobOrder> jobOrders             = new List <MesJobOrder>();       //所有订单
                List <MesProcessCtrol> processCtrols     = new List <MesProcessCtrol>();   //控制流程
                List <WmsAllocationInfo> allocationInfos = new List <WmsAllocationInfo>(); //需要修改的货位

                Dictionary <string, string> ParamValues = new Dictionary <string, string>();
                MesJobOrder job     = null;
                string sFormulaCode = "";
                List <FmsActionFormulaDetail> formulaDetails;
                List <RsItemMaster> items = wsRsm.UseService(s => s.GetRsItemMasters("USE_FLAG = 1"));

                RsItemMaster gyroscope = items.FirstOrDefault(c => c.ITEM_NAME == "指尖陀螺"); //产品信息


                #region 2.车床上料



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                                                         //ParamValues.Add("{加工数量}", this.txt_Qty2.Text);

                #endregion

                sFormulaCode = "车床上料";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion

                #region 3.加工中心上料



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                                                         //ParamValues.Add("{加工数量}", this.txt_Qty2.Text);

                #endregion

                sFormulaCode = "加工中心上料";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion

                #region 4.1.AGV充电



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                                                         //ParamValues.Add("{加工数量}", this.txt_Qty2.Text);

                #endregion

                sFormulaCode = "AGV充电";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion

                #region 4.2 加工中心先下料再上料



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                                                         //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备

                #endregion

                sFormulaCode = "加工中心先下料再上料";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion

                #region 4.3.AGV充电



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备

                #endregion

                sFormulaCode = "AGV充电";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion

                #region 4.4 加工中心先下料再上料



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备

                #endregion

                sFormulaCode = "加工中心先下料再上料";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion


                #region 4.3.AGV充电



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备

                #endregion

                sFormulaCode = "AGV充电";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion

                #region 4.4 加工中心先下料再上料



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备

                #endregion

                sFormulaCode = "加工中心先下料再上料";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion

                #region 4.3.AGV充电



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备

                #endregion

                sFormulaCode = "AGV充电";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion

                #region 5.加工中心下料



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                                                         //ParamValues.Add("{加工数量}", this.txt_Qty2.Text);

                #endregion

                sFormulaCode = "加工中心下料";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion

                #region 6.车床下料



                job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单--
                jobOrders.Add(job);

                #region --设定参数--

                ParamValues.Clear();
                ParamValues.Add("{图片名称}", LaserPicName); //定制图片
                                                         //ParamValues.Add("{加工数量}", this.txt_Qty2.Text);

                #endregion

                sFormulaCode = "车床下料";

                #region 形成过程控制

                formulaDetails = wsFms.UseService(s =>
                                                  s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                 .OrderBy(c => c.PROCESS_INDEX)
                                 .ToList();

                foreach (var detail in formulaDetails) //配方
                {
                    MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues);

                    processCtrols.Add(process);
                }

                #endregion

                #endregion



                DeviceProcessControl.PauseByLine(CBaseData.CurLinePKNO); //暂停,防止任务直接执行

                #region 保存数据

                foreach (var allocationInfo in allocationInfos)
                {
                    ws.UseService(s => s.UpdateWmsAllocationInfo(allocationInfo));
                    Thread.Sleep(100);
                }

                foreach (var ctrol in processCtrols)
                {
                    wsPlm.UseService(s => s.AddMesProcessCtrol(ctrol));
                    Thread.Sleep(100);
                }

                foreach (var jobOrder in jobOrders) //订单
                {
                    wsPlm.UseService(s => s.AddMesJobOrder(jobOrder));
                    Thread.Sleep(100);
                }

                #endregion

                DeviceProcessControl.RunByLine(CBaseData.CurLinePKNO); //启动动作流程

                WaitLoading.SetDefault(this);

                WPFMessageBox.ShowInfo("FCS订单已下达", "指尖陀螺加工");
            }).Start();
        }
Ejemplo n.º 23
0
        //完成
        private void bFinishPrepare_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            MesJobOrder jobOrder = cmbTask.SelectedItem as MesJobOrder;

            if (jobOrder == null)
            {
                return;
            }
            string itemPKNO = cmbProduct.SelectedValue.ToString();

            if (string.IsNullOrEmpty(itemPKNO))
            {
                return;
            }

            #region 检验是否排刀

            List <MesProcessCtrol> processCtrols = wsPLM.UseService(s =>
                                                                    s.GetMesProcessCtrols(
                                                                        $"USE_FLAG = 1 AND JOB_ORDER_PKNO = '{jobOrder.PKNO}' AND ITEM_PKNO = '{itemPKNO}' "));

            foreach (MesProcessCtrol processCtrol in processCtrols)
            {
                string detailPKNO = processCtrol.ROUTING_DETAIL_PKNO;

                RsRoutingDetail detail = wsRSM.UseService(s => s.GetRsRoutingDetailById(detailPKNO));

                List <RsRoutingTools> requestTools =
                    wsRSM.UseService(
                        s => s.GetRsRoutingToolss($"USE_FLAG = 1 AND ROUTING_DETAIL_PKNO = '{detail.PKNO}'"));

                AmAssetMasterN device = wsEAM.UseService(s =>
                                                         s.GetAmAssetMasterNs($"USE_FLAG = 1 AND ASSET_CODE = '{processCtrol.PROCESS_DEVICE_PKNO}'"))
                                        .FirstOrDefault();
                if (device == null)
                {
                    continue;
                }
                List <TmsDeviceToolsPos> deviceTools =
                    wsTMS.UseService(
                        s =>
                        s.GetTmsDeviceToolsPoss(
                            $"USE_FLAG = 1 AND DEVICE_PKNO = '{device.PKNO}' AND TOOLS_STATE <> 0 AND TOOLS_STATE <> 3"));
                List <TmsToolsMaster> toolsMasters = wsTMS.UseService(s => s.GetTmsToolsMasters("USE_FLAG = 1"));

                var allToolsTypes = from c in deviceTools
                                    join d in toolsMasters on((c.TOOLS_STATE == 10 || c.TOOLS_STATE == 2)
                                                              ?c.NEW_TOOLS_PKNO
                                                              : c.TOOLS_PKNO) equals d.PKNO
                                    select new { d.TOOLS_TYPE_PKNO }; //选择所有在库或已排入的刀

                var check = from c in requestTools
                            join d in allToolsTypes on c.TOOLS_TYPE_PKNO equals d.TOOLS_TYPE_PKNO into temp
                            from tt in temp.DefaultIfEmpty()
                            where (tt == null)
                            select c;

                if (check.Any())
                {
                    MessageBox.Show($"工序[{detail.OP_NAME}]还有没有排产的刀具,不能完成。", "完成生产准备", MessageBoxButtons.OK,
                                    MessageBoxIcon.Warning);
                    return;
                }
            }

            #endregion

            jobOrder.RUN_STATE = 2; //完成刀具准备

            jobOrder.UPDATED_BY       = CBaseData.LoginName;
            jobOrder.UPDATED_INTROD  += DateTime.Now + "完成排刀. ";
            jobOrder.LAST_UPDATE_DATE = DateTime.Now;

            wsPLM.UseService(s => s.UpdateMesJobOrder(jobOrder));

            cmbTask.SelectedIndex = -1;
            cmbTask.ItemsSource   = null;
            cmbTask.ItemsSource   =
                wsPLM.UseService(s => s.GetMesJobOrders($"USE_FLAG = 1 AND RUN_STATE = 1 AND LINE_PKNO = '{CBaseData.CurLinePKNO}'")) //生产准备完成 尚未执行的任务
                .OrderBy(c => c.CREATION_DATE)
                .ToList();                                                                                                            //工单

            GetPage();                                                                                                                //刷新数据
        }
Ejemplo n.º 24
0
        /// <summary>
        /// 读取设备线程
        /// </summary>
        private void TheadCheckData()
        {
            while (!CBaseData.AppClosing)
            {
                Thread.Sleep(200); //暂停
                try
                {
                    for (int i = 1; i <= 5; i++)
                    {
                        string basicAddress     = "[fuzhou]MES.JG.SB_" + i.ToString(); //基本地址
                        string qingqiuAddress   = ".Qing_qiu";                         //请求
                        string gongyiIDAddress  = ".Gongyi_ID";                        //工艺ID
                        string chanpinIDAddress = ".chanpin_ID";                       //产品ID
                        string querenAddress    = ".que_ren";                          //确认地址
                        querenAddress.Substring(0, 1);
                        FmsAssetTagSetting tag_qingqiu =
                            DeviceMonitor.GetTagSettings($"TAG_ADDRESS = '{basicAddress}{qingqiuAddress}'")
                            .FirstOrDefault();

                        if ((tag_qingqiu == null) || (tag_qingqiu.CUR_VALUE != "1"))
                        {
                            continue;
                        }

                        #region 触发请求

                        FmsAssetTagSetting tag_gongyi =
                            DeviceMonitor.GetTagSettings($"TAG_ADDRESS = '{basicAddress}{gongyiIDAddress}'")
                            .FirstOrDefault();     //工艺ID
                        if (tag_gongyi == null)
                        {
                            continue;
                        }

                        FmsAssetTagSetting tag_chanpin =
                            DeviceMonitor.GetTagSettings($"TAG_ADDRESS = '{basicAddress}{chanpinIDAddress}'")
                            .FirstOrDefault();     //产品ID
                        if (tag_chanpin == null)
                        {
                            continue;
                        }

                        FmsAssetTagSetting tag_queren =
                            DeviceMonitor.GetTagSettings($"TAG_ADDRESS = '{basicAddress}{querenAddress}'")
                            .FirstOrDefault();     //确认
                        if (tag_queren == null)
                        {
                            continue;
                        }

                        EmCheckResult checkResult = EmCheckResult.NoCheck; //无校验

                        #region 1.校验程序号

                        AmAssetMasterN checkDevice =
                            wsEAM.UseService(s => s.GetAmAssetMasterNs($"USE_FLAG = 1 AND ASSET_TYPE = '机床' AND ASSET_LABEL = '{i.ToString()}'"))
                            .FirstOrDefault();

                        if (checkDevice == null)
                        {
                            Console.WriteLine("...error:没有相应的机床设备.");
                            continue;
                        }

                        FmsAssetTagSetting tag_focas =
                            DeviceMonitor.GetTagSettings(
                                $"ASSET_CODE = '{checkDevice.ASSET_CODE}' AND TAG_ADDRESS = '程序号'")
                            .FirstOrDefault();     //获取程序号

                        if ((tag_focas != null) &&
                            (tag_focas.CUR_VALUE == tag_gongyi.CUR_VALUE)) //程序号相同
                        {
                            checkResult = EmCheckResult.Success;
                        }
                        else
                        {
                            checkResult = EmCheckResult.ProgramError;
                        }

                        #endregion

                        #region 2.校验产品

                        MesJobOrder curJob =
                            wsPlm.UseService(s => s.GetMesJobOrders($"RUN_STATE = 3 AND LINE_PKNO = '{CBaseData.CurLinePKNO}'")).FirstOrDefault(); //开工确认完成的

                        if (curJob != null)
                        {
                            RsItemMaster itemMaster =
                                wsRSM.UseService(s => s.GetRsItemMasterById(curJob.ITEM_PKNO));

                            if ((itemMaster != null) && (itemMaster.ITEM_ABV == tag_chanpin.CUR_VALUE))
                            {
                                if (checkResult == EmCheckResult.Success)  //程序校验成功
                                {
                                    checkResult = EmCheckResult.Success;
                                }
                            }
                            else
                            {
                                checkResult = EmCheckResult.ProductError;
                            }
                        }
                        else
                        {
                            checkResult = EmCheckResult.ProductError;
                        }

                        #endregion

                        #region 向PLC反馈

                        FmsAssetCommParam deviceComm =
                            ws.UseService(
                                s => s.GetFmsAssetCommParams(
                                    $"ASSET_CODE = '{tag_qingqiu.ASSET_CODE}' AND USE_FLAG = 1")).FirstOrDefault();  //反馈设备

                        string        error = "";
                        OperateResult ret   = DeviceHelper.WriteDataByAddress(deviceComm.ASSET_CODE,
                                                                              deviceComm.INTERFACE_TYPE, deviceComm.COMM_ADDRESS,
                                                                              tag_queren.PKNO, tag_queren.TAG_ADDRESS,
                                                                              ((int)checkResult).ToString()); //反馈

                        #endregion

                        if (!ret.IsSuccess)
                        {
                            Console.WriteLine("...error:向设备" + tag_queren.ASSET_CODE + "反馈确认结果失败。");
                        }

                        #endregion
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("...error:生产过程校验错误,错误为:" + ex.Message);
                }
            }
        }
Ejemplo n.º 25
0
        private void BtnAutoChange_Click(object sender, RoutedEventArgs e)
        {
            TmsToolsMaster    mToolsMasterUp     = GridControlInvTool.SelectedItem as TmsToolsMaster;       //库存
            TmsDeviceToolsPos mTmsDeviceToolsPos = GridControlDeviceTool.SelectedItem as TmsDeviceToolsPos; //机床刀位信息

            if (mToolsMasterUp == null)
            {
                return;
            }

            if (mTmsDeviceToolsPos == null)
            {
                return;
            }

            AmAssetMasterN asset = ComAsset.SelectedItem as AmAssetMasterN;

            if (asset == null)
            {
                WPFMessageBox.ShowError("请选择机床信息!", "自动换刀管理");
                return;
            }

            TmsToolsMaster mToolsMasterDown =
                ws.UseService(s => s.GetTmsToolsMasterById(mTmsDeviceToolsPos.TOOLS_PKNO));

            if (mToolsMasterDown == null)
            {
                WPFMessageBox.ShowError("选中的需要换下的机床刀具信息不存在,请核实!", "自动换刀管理");
                return;
            }

            MesJobOrder            jobOrder      = null;
            WmsInventory           inv           = null;
            List <MesProcessCtrol> processCtrols = new List <MesProcessCtrol>();

            #region 形成工单

            jobOrder = new MesJobOrder()
            {
                PKNO                = CBaseData.NewGuid(),
                COMPANY_CODE        = CBaseData.BelongCompPKNO,
                LINE_PKNO           = CBaseData.CurLinePKNO,
                LINE_TASK_PKNO      = "", //产线任务PKNO
                ITEM_PKNO           = "", // TODO:暂无
                JOB_ORDER_NO        = TableNOHelper.GetNewNO("MES_JOB_ORDER.JOB_ORDER_NO", "J"),
                BATCH_NO            = "自动换刀",
                ROUTING_DETAIL_PKNO = "",
                JOB_ORDER_TYPE      = 2, //工单类型 1:原料入库;2:加工;3:成品出库;4:转换
                TASK_QTY            = 1,
                COMPLETE_QTY        = 0,
                ONLINE_QTY          = 0,
                ONCE_QTY            = 0,
                RUN_STATE           = 10, //直接生产
                CREATION_DATE       = DateTime.Now,
                CREATED_BY          = CBaseData.LoginNO,
                LAST_UPDATE_DATE    = DateTime.Now, //最后修改日期
                USE_FLAG            = 1,
                REMARK              = "",
            };

            #endregion

            #region 增加参数

            Dictionary <string, string> ParamValues = new Dictionary <string, string>();

            ParamValues.Add("{机床刀号}", mTmsDeviceToolsPos.TOOLS_POS_NO);                                       //机床刀号
            ParamValues.Add("{卸下刀具编号}", mToolsMasterDown.TOOLS_CODE.PadRight(25));                            //卸下刀具编号
            ParamValues.Add("{装上刀具编号}", mToolsMasterUp.TOOLS_CODE.PadRight(25));                              //装上刀具编号
            ParamValues.Add("{装上刀具PKNO}", mToolsMasterUp.PKNO);                                               //装上刀具PKNO
            ParamValues.Add("{卸下刀具PKNO}", mToolsMasterDown.PKNO);                                             //卸下刀具PKNO
            ParamValues.Add("{长度形状补偿}", SafeConverter.SafeToStr(mToolsMasterUp.COMPENSATION_SHAPE_LENGTH));   //长度形状补偿 - 装上
            ParamValues.Add("{半径形状补偿}", SafeConverter.SafeToStr(mToolsMasterUp.COMPENSATION_SHAPE_DIAMETER)); //半径形状补偿 - 装上

            ParamValues.Add("{卸下刀位PKNO}", mTmsDeviceToolsPos.PKNO);                                           //卸下刀位PKNO
            ParamValues.Add("{装上刀位PKNO}", mTmsDeviceToolsPos.PKNO);                                           //装上刀位PKNO

            ParamValues.Add("{装刀机床PKNO}", asset?.PKNO);                                                       //装刀机床PKNO

            #endregion

            string sFormulaCode = "换刀-" + asset.ASSET_CODE;

            List <FmsActionFormulaDetail> formulaDetails = wsFms.UseService(s =>
                                                                            s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1"))
                                                           .OrderBy(c => c.PROCESS_INDEX)
                                                           .ToList();

            foreach (var detail in formulaDetails)  //配方
            {
                MesProcessCtrol process = new MesProcessCtrol()
                {
                    #region 标准信息

                    PKNO                = CBaseData.NewGuid(),
                    COMPANY_CODE        = CBaseData.BelongCompPKNO,
                    ITEM_PKNO           = "", //成品PKNO TODO:暂无
                    JOB_ORDER_PKNO      = jobOrder.PKNO,
                    JOB_ORDER           = jobOrder.JOB_ORDER_NO,
                    SUB_JOB_ORDER_NO    = "",
                    ROUTING_DETAIL_PKNO = "",  //

                    #endregion

                    PROCESS_CTROL_NAME      = detail.FORMULA_DETAIL_NAME,                                                       //名称
                    PROCESS_DEVICE_PKNO     = ProcessParamReplace.Replace(detail.PROCESS_DEVICE_PKNO, ParamValues),             //生产设备
                    PROCESS_PROGRAM_NO      = ProcessParamReplace.Replace(detail.PROCESS_PROGRAM_NO, ParamValues),              //加工程序号
                    PROCESS_PROGRAM_CONTENT = detail.PROCESS_PROGRAM_CONTENT,                                                   //加工程序内容
                    PROCESS_INDEX           = detail.PROCESS_INDEX,                                                             //工序顺序

                    BEGIN_ITEM_PKNO  = ProcessParamReplace.Replace(detail.BEGIN_ITEM_PKNO, ParamValues),                        //生产前项目PKNO
                    FINISH_ITEM_PKNO = ProcessParamReplace.Replace(detail.FINISH_ITEM_PKNO, ParamValues),                       //生产后项目PKNO
                    BEGIN_POSITION   = ProcessParamReplace.Replace(detail.BEGIN_POSITION, ParamValues),                         //生产前位置
                    FINISH_POSITION  = ProcessParamReplace.Replace(detail.FINISH_POSITION, ParamValues),                        //生产后位置

                    PALLET_NO           = detail.PALLET_NO,                                                                     //托盘号
                    PROCESS_ACTION_TYPE = detail.PROCESS_ACTION_TYPE,                                                           //工序动作类型
                    PROCESS_ACTION_PKNO = detail.PROCESS_ACTION_PKNO,                                                           //工序动作控制PKNO

                    PROCESS_ACTION_PARAM1_VALUE = ProcessParamReplace.Replace(detail.PROCESS_ACTION_PARAM1_VALUE, ParamValues), //工序动作参数1
                    PROCESS_ACTION_PARAM2_VALUE = ProcessParamReplace.Replace(detail.PROCESS_ACTION_PARAM2_VALUE, ParamValues), //工序动作参数2

                    CUR_PRODUCT_CODE_PKNO = "",                                                                                 //当前生产加工的产品编码PKNO
                    PROCESS_QTY           = 1,                                                                                  //加工数量(上线数量)
                    COMPLETE_QTY          = 0,                                                                                  //完成数量
                    QUALIFIED_QTY         = 0,                                                                                  //合格数量
                    PROCESS_STATE         = 1,                                                                                  //准备完成

                    CREATION_DATE    = DateTime.Now,                                                                            //创建日期
                    CREATED_BY       = CBaseData.LoginNO,                                                                       //创建人
                    LAST_UPDATE_DATE = DateTime.Now,                                                                            //最后修改日期
                    USE_FLAG         = detail.USE_FLAG,                                                                         //启用标识
                    REMARK           = "",                                                                                      //备注
                };

                processCtrols.Add(process);
            }

            Cursor = Cursors.Wait;

            wsPLM.UseService(s => s.AddMesJobOrder(jobOrder));

            foreach (MesProcessCtrol processCtrol in processCtrols)
            {
                wsPLM.UseService(s => s.AddMesProcessCtrol(processCtrol));
            }

            Cursor = Cursors.Arrow;

            MessageBox.Show("换刀下单成功.");
            GridControlInvTool.ItemsSource = ws.UseService(s => s.GetTmsToolsMasters("USE_FLAG > 0 AND TOOLS_POSITION = 1")).OrderBy(n => n.CREATION_DATE).ToList();;
        }
Ejemplo n.º 26
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;
        }
Ejemplo n.º 27
0
        private void GetPage()
        {
            gridToolsRequst.ItemsSource = null;
            gridToolsInv.ItemsSource    = null;
            gridToolsFinal.ItemsSource  = null;

            MesJobOrder jobOrder = cmbTask.SelectedItem as MesJobOrder;

            if (jobOrder == null)
            {
                return;
            }

            string itemPKNO = cmbProduct.SelectedValue.ToString();

            if (string.IsNullOrEmpty(itemPKNO))
            {
                return;                                 //产品
            }
            string          processPKNO   = cmbProcess.SelectedValue.ToString();
            RsRoutingDetail routingDetail = wsRSM.UseService(s => s.GetRsRoutingDetailById(processPKNO));

            if (routingDetail == null)
            {
                return;
            }

            List <RsRoutingTools> requsts = wsRSM.UseService(
                s => s.GetRsRoutingToolss($"USE_FLAG = 1 AND ROUTING_DETAIL_PKNO = '{routingDetail.PKNO}'"));

            gridToolsRequst.ItemsSource = requsts;

            AmAssetMasterN wcDevice = cmbDevice.SelectedItem as AmAssetMasterN;

            if (wcDevice == null)
            {
                return;
            }

            #region 机床刀具清单

            var devcieTools =
                wsTMS.UseService(s => s.GetTmsDeviceToolsPoss($"USE_FLAG = 1 AND DEVICE_PKNO = '{wcDevice.PKNO}'"))
                .OrderBy(c => c.TOOLS_POS_NO)
                .Select(c => new
            {
                c.PKNO,
                c.DEVICE_PKNO,
                c.TOOLS_POS_NO,
                c.POS_INTROD,
                c.TOOLS_STATE,
                TOOLS_PKNO = (c.TOOLS_STATE == 10 || c.TOOLS_STATE == 2) ? c.NEW_TOOLS_PKNO : c.TOOLS_PKNO,
                c.REMARK,
            })
                .ToList();
            gridToolsFinal.ItemsSource = devcieTools;

            #endregion

            #region 刀具需求

            List <TmsToolsMaster> toolsMasters = wsTMS.UseService(s => s.GetTmsToolsMasters("USE_FLAG = 1"));
            var allToolTypes = (from c in devcieTools
                                join d in toolsMasters on c.TOOLS_PKNO equals d.PKNO
                                select new { d.TOOLS_TYPE_PKNO, c.TOOLS_STATE })
                               .GroupBy(c => c.TOOLS_TYPE_PKNO)
                               .Select(a => new { TOOLS_TYPE_PKNO = a.Key, TOOLS_STATE = a.Min(c => c.TOOLS_STATE) }); //选择所有在库或已排入的刀

            var newRequest = from c in requsts
                             join d in allToolTypes on c.TOOLS_TYPE_PKNO equals d.TOOLS_TYPE_PKNO into temp
                             from tt in temp.DefaultIfEmpty()
                             select new
            {
                c.TOOLS_TYPE_PKNO,
                c.TOOLS_NC_CODE,
                REQUEST = (tt == null) ? "未排刀" : (tt.TOOLS_STATE == 1 ? "在刀位" : "已排入"),
                c.INTROD,
            };

            gridToolsRequst.ItemsSource = newRequest;

            #region  钮可用性



            #endregion

            #endregion
        }