一组无序的标签匹配有序的标签模板

27 篇文章 0 订阅

一组无序的标签匹配有序的标签模板

一组无序的标签匹配有序的标签模板


 public void SaveTempRouteProess()
 {
                   //无序标签组
  List<Model_DOC_MI_PROCESS_SUB> milist = 								routeTemplateBLL.GetMIRouteTemplateList(MIId);
                    //有序模板标签组
                    List<RouteTemplateModelAndDetail> templist = routeTemplateBLL.GetRouteTemplateDetailByID(RouteId);
                
                    foreach (var item in milist)
                    {
                        Model_DOC_MI_PROCESS_SUB model = new Model_DOC_MI_PROCESS_SUB();
                        var frist = list.Find(x => x.PROCESS_SUB_CODE == item.PROCESS_SUB_CODE);
                        //找到工序模板中对应的工序
                        if (frist != null)
                        {

                            //确认模版中的下一道标签在无序中是存在的

                            IterationProcess(milist, list, frist.PROCESS_SUB_CODE, frist.Next_Process_Sub_Code, ref modellist);
                        }
                    }

                    //删除无效的下道标签
                    DelInvalidNextProcess(list, ref modellist);
				//保存匹配后的标签
				 routeTemplateBLL.SaveMIRouteTemplateCode(MIId, modellist);
	 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="milist"></param>
        /// <param name="templist"></param>
        /// <param name="nextprocesscode"></param>
        /// <returns></returns>
        public void IterationProcess(List<Model_DOC_MI_PROCESS_SUB> milist, List<RouteTemplateModelAndDetail> templist, string processcode, string nextprocesscode, ref List<Model_DOC_MI_PROCESS_SUB> mimodellist)
        {

            Model_DOC_MI_PROCESS_SUB mimodel = new Model_DOC_MI_PROCESS_SUB();

            if (nextprocesscode != null)
            {
                #region
                string[] nextcode = nextprocesscode.Split(',');
                ArrayList noExistsMIProcess = new ArrayList();
                if (nextcode.Length > 0)
                {
                    string nextcodes = "";
                    string nextnames = "";

                    ArrayList noExistsMiProcess = new ArrayList();

                    var mipro = milist.Find(x => x.PROCESS_SUB_CODE == processcode);
                    if (mipro != null)//MI如果有再判断下模板中的下一道工序在MI中是否存在
                    {
                        var tempmodel = templist.Find(x => x.PROCESS_SUB_CODE == processcode);
                        for (int i = 0; i < nextcode.Length; i++)
                        {
                            var miprolist = milist.Find(x => x.PROCESS_SUB_CODE == nextcode[i]);
                            if (miprolist != null)//如果MI存在就保存当前工序的下道工序
                            {
                                nextcodes += nextcode[i] + ",";
                                nextnames += miprolist.PROCESS_SUB_NAME + ",";
                            }
                        }
                        nextcodes = nextcodes.TrimEnd(',');

                        nextnames = nextnames.TrimEnd(',');
                        //如果存在就保存当前这工序信息
                        if (!string.IsNullOrEmpty(nextcodes))
                        {
                            mimodel.PROCESS_SUB_NAME = mipro.PROCESS_SUB_NAME;
                            mimodel.PROCESS_SUB_CODE = mipro.PROCESS_SUB_CODE;
                            mimodel.PROCESS_SUB_ID = mipro.PROCESS_SUB_ID;
                            mimodel.NEXT_PROCESS_CODE = nextcodes;
                            mimodel.NEXT_PROCESS = nextnames;
                            mimodel.PRODUCTROUTING_DESC = tempmodel.Template_Name;
                            mimodel.PRODUCTROUTING_ID = tempmodel.Template_No;
                            mimodel.PROCESS_TYPE = tempmodel.PROCESS_TYPE;
                            mimodel.MI_LIST_ID = mipro.MI_LIST_ID;
                            mimodel.MI_PROCESS_SUB_ID = mipro.MI_PROCESS_SUB_ID;
                            mimodellist.Add(mimodel);
                        }
                        else //MI中不存在,模板就继续往下找
                        {
                            for (int i = 0; i < nextcode.Length; i++)
                            {
                                var tempprolist = templist.Find(x => x.PROCESS_SUB_CODE == nextcode[i]);
                                if (tempprolist != null)
                                {
                                    GetNextCodeNameInfo(milist, templist, tempprolist.PROCESS_SUB_CODE, tempprolist.Next_Process_Sub_Code, ref nextcodes, ref nextnames);
                                }

                            }

                            string getminextcode = nextcodes.TrimEnd(',');
                            string getminextname = nextnames.TrimEnd(',');

                            string[] minextcodestr = getminextcode.Split(',');
                            string[] minextnamestr = getminextname.Split(',');
                            ArrayList codelist = new ArrayList();
                            ArrayList namelist = new ArrayList();
                            for (int i = 0; i < minextcodestr.Length; i++)
                            {
                                if (!codelist.Contains(minextcodestr[i]))
                                {
                                    codelist.Add(minextcodestr[i]);
                                }
                            }
                            string codestr = String.Join(",", (string[])codelist.ToArray(typeof(string)));
                            for (int i = 0; i < minextnamestr.Length; i++)
                            {
                                if (!namelist.Contains(minextnamestr[i]))
                                {
                                    namelist.Add(minextnamestr[i]);
                                }
                            }
                            string namestr = String.Join(",", (string[])namelist.ToArray(typeof(string)));

                            mimodel.PROCESS_SUB_NAME = mipro.PROCESS_SUB_NAME;
                            mimodel.PROCESS_SUB_CODE = mipro.PROCESS_SUB_CODE;
                            mimodel.PROCESS_SUB_ID = mipro.PROCESS_SUB_ID;
                            mimodel.NEXT_PROCESS_CODE = codestr;
                            mimodel.NEXT_PROCESS = namestr;
                            mimodel.PRODUCTROUTING_DESC = tempmodel.Template_Name;
                            mimodel.PRODUCTROUTING_ID = tempmodel.Template_No;
                            mimodel.PROCESS_TYPE = tempmodel.PROCESS_TYPE;
                            mimodel.MI_LIST_ID = mipro.MI_LIST_ID;
                            mimodel.MI_PROCESS_SUB_ID = mipro.MI_PROCESS_SUB_ID;
                            mimodellist.Add(mimodel);
                        }
                    }
                }
                #endregion

            }
            else
            {
                var mipro = milist.Find(x => x.PROCESS_SUB_CODE == processcode);
                if (mipro != null)//MI如果有再判断下模板中的下一道工序在MI中是否存在
                {
                    var tempmodel = templist.Find(x => x.PROCESS_SUB_CODE == processcode);
                    mimodel.PROCESS_SUB_CODE = mipro.PROCESS_SUB_CODE;
                    mimodel.NEXT_PROCESS_CODE = tempmodel.Next_Process_Sub_Code;
                    mimodel.NEXT_PROCESS = tempmodel.Next_Process_Sub_Name;
                    mimodel.PRODUCTROUTING_DESC = tempmodel.Template_Name;
                    mimodel.PRODUCTROUTING_ID = tempmodel.Template_No;
                    mimodel.PROCESS_TYPE = tempmodel.PROCESS_TYPE;
                    mimodel.MI_LIST_ID = mipro.MI_LIST_ID;
                    mimodel.MI_PROCESS_SUB_ID = mipro.MI_PROCESS_SUB_ID;
                    mimodellist.Add(mimodel);
                }
            }

        }
        public void GetNextCodeNameInfo(List<Model_DOC_MI_PROCESS_SUB> milist, List<RouteTemplateModelAndDetail> templist, string currentprocesscode, string nextprocesscode, ref string minextprocesscode, ref string minextprocessname)
        {
            if (nextprocesscode != null)
            {
                string[] nextcode = nextprocesscode.Split(',');
                for (int i = 0; i < nextcode.Length; i++)
                {
                    var temppro = templist.Find(x => x.PROCESS_SUB_CODE == nextcode[i]);
                    if (temppro != null)
                    {
                        var minextpro = milist.Find(x => x.PROCESS_SUB_CODE == temppro.PROCESS_SUB_CODE);
                        if (minextpro != null)//MI中存在的话
                        {
                            minextprocesscode += nextcode[i] + ",";
                            minextprocessname += temppro.PROCESS_SUB_NAME + ",";
                        }
                        else
                        {
                            GetNextCodeNameInfo(milist, templist, temppro.PROCESS_SUB_CODE, temppro.Next_Process_Sub_Code, ref minextprocesscode, ref minextprocessname);
                        }

                    }

                }
            }
        }


       /// <summary>
        /// 递归遍历判断,下道工序是否存在相交
        /// </summary>
        /// <param name="milist"></param>
        /// <param name="templist"></param>
        /// <param name="currentprocesscode"></param>
        /// <param name="nextprocesscode"></param>
        /// <param name="noExistsNextProcess"></param>
        /// <param name="isRe"></param>
        /// <param name="reProcess"></param>
        public void GetNextCodeIsRe(List<Model_DOC_MI_PROCESS_SUB> milist, string nextProcesscode, string nextReprocesscode, ref string reProcess)
        {
            if (nextProcesscode != null)
            {
                var nextProCodeArray = nextProcesscode.Split(',');
                foreach (string nextProcess in nextProCodeArray)
                {
                    var temppro = milist.Find(x => x.PROCESS_SUB_CODE == nextProcess);
                    if (temppro != null)
                    {
                        //取父节点对应的下道子节点列表,判断是否相交
                        if (nextReprocesscode == temppro.PROCESS_SUB_CODE)
                        {
                            reProcess += nextReprocesscode + ",";
                        }
                        else
                        {
                            GetNextCodeIsRe(milist, temppro.NEXT_PROCESS_CODE, nextReprocesscode, ref reProcess);
                        }
                    }
                }
            }
        }


        public void DelInvalidNextProcess(List<RouteTemplateModelAndDetail> templist, ref List<Model_DOC_MI_PROCESS_SUB> mimodellist)
        {
            foreach (var miMode in mimodellist)
            {
                //不判断最后一个工序
                if (miMode.NEXT_PROCESS_CODE != null)
                {
                    string currentProcess = miMode.PROCESS_SUB_CODE;


                    string[] miNextProcess = miMode.NEXT_PROCESS_CODE.Split(',');
                    //下一道工序数量大于1时
                    if (miNextProcess.Length > 1)
                    {
                        List<string> nextProcessCode = new List<string>();
                        List<string> nextProcessName = new List<string>();

                        //遍历出所有下道工序
                        for (int index = 0; index < miNextProcess.Length; index++)
                        {
                            //获取下道工序
                            var miChildBean = mimodellist.Find(m => m.PROCESS_SUB_CODE == miNextProcess[index]);

                            if (miChildBean != null)
                            {
                                //下道工序的父节点
                                IEnumerable<Model_DOC_MI_PROCESS_SUB> nextProcessParentList = mimodellist.Where(m => m.NEXT_PROCESS_CODE != null && m.NEXT_PROCESS_CODE.Contains(miNextProcess[index]));
                                //判断下道工序的父节大于1时
                                if (nextProcessParentList.Count() > 1)
                                {

                                    string miNextProcessStr = miNextProcess[index];

                                    //判断该工序和下道工序的连接线在模板工序中是否存在 
                                    var miProcess = templist.Find(m => m.PROCESS_SUB_CODE == currentProcess && m.Next_Process_Sub_Code.Contains(miNextProcessStr));
                                    //如果存在则保存,不存在则递归其他路线,查看是否重复
                                    if (miProcess == null)
                                    {
                                        string reProcess = "";
                                        var miProcessTemp = mimodellist.Find(m => m.PROCESS_SUB_CODE == currentProcess);

                                        //循环比较每一条下道工序是否相交
                                        foreach (string nextProcess in miNextProcess)
                                        {
                                            foreach (string nextTwoProcess in miNextProcess)
                                            {
                                                if (nextProcess != nextTwoProcess)
                                                {
                                                    GetNextCodeIsRe(mimodellist, nextTwoProcess, nextProcess, ref reProcess);
                                                }
                                            }
                                        }



                                        if (reProcess != "")
                                        {
                                            var miProcessList = miProcessTemp.NEXT_PROCESS_CODE.Split(',');
                                            foreach (string miProcessResult in miProcessList)
                                            {
                                                if (!reProcess.Contains(miProcessResult))
                                                {
                                                    if (!nextProcessCode.Contains(miProcessResult))
                                                    {
                                                        nextProcessCode.Add(miProcessResult);
                                                    }
                                                    //nextProcessCode += miProcessResult + ",";
                                                    var moModleNextProcess = templist.Find(m => m.PROCESS_SUB_CODE == miProcessResult);
                                                    if (!nextProcessName.Contains(moModleNextProcess.PROCESS_SUB_NAME))
                                                    {
                                                        nextProcessName.Add(moModleNextProcess.PROCESS_SUB_NAME);
                                                    }
                                                    //nextProcessName += moModleNextProcess.PROCESS_SUB_NAME + ",";
                                                }
                                            }
                                        }
                                    }

                                }
                            }
                        }

                        if (nextProcessCode.Count > 0)
                        {
                            miMode.NEXT_PROCESS_CODE = string.Join(",", nextProcessCode);
                            miMode.NEXT_PROCESS = string.Join(",", nextProcessName);
                            //miMode.NEXT_PROCESS = nextProcessName.TrimEnd(',');
                        }
                    }
                }
            }
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值