Пример #1
0
        /// <summary>
        /// 生成材料规格
        /// </summary>
        /// <param name="partNumber">品号</param>
        /// <returns></returns>
        public string GenerateMaterialSpec(string partNumber)
        {
            MaterialSpecItemEntity entity = new MaterialSpecItemEntity();

            #region 筛选出对应MaterialSpec.xml的配置公式
            Dictionary <string, List <MaterialSpecItemEntity> > dicTask = new Dictionary <string, List <MaterialSpecItemEntity> >();
            XDocument xdc = XDocument.Load(@"./Xml/MaterialSpec.xml");

            //匹配前3码
            var partNumberStarts = from item in xdc.Descendants("partNumberStart")
                                   where Regex.Match(partNumber, item.Attribute("value").Value).Success
                                   select item;
            XElement partNumberStart = partNumberStarts.FirstOrDefault();
            if (partNumberStart == null)
            {
                errorHandler(2, partNumber + "没有找到对应的材料规格生成规则");
                return(string.Empty);
            }

            //匹配品号是否满足
            var partNumberXml = from item in partNumberStart.Descendants("partNumber")
                                where Regex.Match(partNumber, item.Attribute("value").Value).Success
                                select item;
            if (partNumberXml == null)
            {
                errorHandler(2, partNumber + "没有找到对应的材料规格生成规则");
                return(string.Empty);
            }

            //匹配对应的Item公式
            var node = from item in partNumberXml.Descendants("Item")
                       select item;
            if (node == null)
            {
                errorHandler(2, partNumber + "没有找到对应的材料规格生成规则");
                return(string.Empty);
            }

            foreach (XElement item in node.ToList())
            {
                entity.PartNumber  = partNumber;
                entity.ErrorNumber = Convert.ToInt32(GetNoteAttributeValues(item, "ErrorNumber"));
                entity.ErrorValue  = GetNoteAttributeValues(item, "ErrorValue");
                entity.BaseValue   = GetNoteAttributeValues(item, "BaseValue");
                entity.LowValue    = GetNoteAttributeValues(item, "LowValue");
                entity.MaxValue    = GetNoteAttributeValues(item, "MaxValue");
                entity.Unit        = GetNoteAttributeValues(item, "Unit");
                break;
            }
            #endregion

            #region 根据公式,得到材料规格
            return(GenerateMaterialSpecByEntity(entity));

            #endregion
        }
Пример #2
0
        /// <summary>
        /// 根据实体类,算出对应的材料规格
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public string GenerateMaterialSpecByEntity(MaterialSpecItemEntity entity)
        {
            string partNumber       = entity.PartNumber;                               //品号
            string singleNumberText = partNumber.Substring(entity.ErrorNumber - 1, 1); //截取的字符值
            string unit             = string.Empty;                                    //单位

            string[] strErrValue = entity.ErrorValue.Split(',');
            Dictionary <string, string> dicErrValue = new Dictionary <string, string>();

            foreach (string s in strErrValue)
            {
                string[] strTemp = s.Trim().Split('=');
                if (strTemp.Length != 2)
                {
                    continue;
                }
                if (!dicErrValue.ContainsKey(strTemp[0]))
                {
                    dicErrValue.Add(strTemp[0], strTemp[1]);
                }
            }
            if (!dicErrValue.ContainsKey(singleNumberText))
            {
                return("");
            }

            string errorValue = dicErrValue[singleNumberText];//误差值

            //品号的替换对应Dictionary(如:A->1;B->a......)
            Dictionary <string, string> dicFormalReplace = GetFormalDictionary(partNumber);
            //计算基值
            string baseValue = ComputeValueByFormula(dicFormalReplace, entity.BaseValue);

            //为了计算负值和正值,要将误差值和基值放到替换Dictionary里面
            dicFormalReplace.Add("P", errorValue);
            dicFormalReplace.Add("Q", baseValue);

            //负值
            string lowValue = ComputeValueByFormula(dicFormalReplace, entity.LowValue);
            //正值
            string maxValue = ComputeValueByFormula(dicFormalReplace, entity.MaxValue);

            //单位
            string[] unitStr = entity.Unit.Split(',');

            /*长度处理(以正值的长度为准,
             * (1),0~3位,不用除1000(默认单位OHM);
             * (2),4~6,除以1次1000(K OHM);
             * (3),7以上,除以2次1000(M OHM))*/
            if (Convert.ToDouble(maxValue) >= Math.Pow(10, 3) && Convert.ToDouble(maxValue) < Math.Pow(10, 7))
            {
                lowValue = (Convert.ToDouble(lowValue) / Math.Pow(10, 3)).ToString("0.##");
                maxValue = (Convert.ToDouble(maxValue) / Math.Pow(10, 3)).ToString("0.##");
                unit     = unitStr.Length >= 3 ? unitStr[1] : unitStr[0];
            }
            else if (Convert.ToDouble(maxValue) >= Math.Pow(10, 7))
            {
                lowValue = (Convert.ToDouble(lowValue) / Math.Pow(10, 6)).ToString("0.##");
                maxValue = (Convert.ToDouble(maxValue) / Math.Pow(10, 6)).ToString("0.##");
                unit     = unitStr.Length >= 3 ? unitStr[2] : unitStr[0];
            }
            else
            {
                lowValue = Convert.ToDouble(lowValue).ToString("0.##");
                maxValue = Convert.ToDouble(maxValue).ToString("0.##");
                unit     = unitStr[0];
            }

            return(lowValue + "~" + maxValue + unit);
        }