FrmBomUpload.cs 14.8 KB
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using TSA_V.Common;
using TSA_V.LoadCSVLibrary;

namespace TSA_V.frmBoard
{
    public partial class FrmBomUpload : FrmBase
    {
        public List<ComponetInfo> componetInfos = new List<ComponetInfo>();
        public FrmBomUpload()
        {
            InitializeComponent();
        }


        private void LoadCmbItems(ComboBox box, List<string> cmbItems)
        {
            box.Items.Clear();
            foreach (string item in cmbItems)
            {
                box.Items.Add(item);
            }

        }
        private void linkSelBom_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            //openFileDialog1.DefaultExt = "xlsx|xls|csv";
            //openFileDialog1.Filter = "xlsx|*.xlsx|xls|*.xls|csv|*.csv";
            openFileDialog1.Filter = "Excel File|*.xlsx;*.xls;*.csv";
            string directory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);//桌面路径
            //openFileDialog1.InitialDirectory = directory;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                openFileDialog1.Tag = true;
                if (ReadBomFile(openFileDialog1.FileName))
                {
                    txtBomFile.Text = openFileDialog1.FileName;
                    LoadCmbItems(cmbBomTagNumber, BomTitleList);
                    LoadCmbItems(cmbPn, BomTitleList);
                }
            }
            else
            {
                openFileDialog1.FileName = "";
            }
        }
        private void linkSelXy_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            //openFileDialog1.DefaultExt = "xlsx|xls|csv";
            //openFileDialog1.Filter = "xlsx|*.xlsx|xls|*.xls|csv|*.csv";
            openFileDialog1.Filter = "Excel File|*.xlsx;*.xls;*.csv";
            string directory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);//桌面路径
            //openFileDialog1.InitialDirectory = directory;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                openFileDialog1.Tag = true;
                if (ReadXyFile(openFileDialog1.FileName))
                { 
                    txtXyFile.Text = openFileDialog1.FileName;
                    if(BomTitleList.Count > 0)
                    { 
                        LoadCmbItems(cmbBomTagNumber, BomTitleList);
                        LoadCmbItems(cmbPn, BomTitleList );
                    }
                    else
                    { 
                        LoadCmbItems(cmbPn, XyFileTitleList);
                    } 
                    LoadCmbItems(cmbX, XyFileTitleList);
                    LoadCmbItems(cmbY, XyFileTitleList);
                    LoadCmbItems(cmbTagNumber, XyFileTitleList);
                    List<string> desList = new List<string>();
                    desList.Add("");
                    desList.AddRange(XyFileTitleList);
                    LoadCmbItems(cmbDes, desList);
                }
            }
            else
            {
                openFileDialog1.FileName = "";
            }
        }

        private List<string> BomTitleList = new List<string>();
        private List<List<string>> BomDataList = new List<List<string>>();
        private List<string> XyFileTitleList = new List<string>();
        private List<List<string>> XyFileDataList = new List<List<string>>();
        private bool ReadBomFile(string fileName)
        {
            try
            { 
                string fileE = Path.GetExtension(fileName);
                if (fileE.ToLower().EndsWith("csv"))
                { 
                    BomDataList = CSVBomManager.ReadFile(fileName, out BomTitleList);
                    if (BomTitleList.Count > 0 && BomDataList.Count > 0)
                    {
                        return true;
                    }
                }
                else
                { 
                    BomDataList = ExcelReadManager.ReadFile(fileName, out BomTitleList);
                    if (BomTitleList.Count > 0 && BomDataList.Count > 0)
                    {
                        return true;
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return false;
        }
        private bool ReadXyFile(string fileName)
        {
            try
            {
                string fileE = Path.GetExtension(fileName);
                if (fileE.ToLower().EndsWith("csv"))
                { 
                    XyFileDataList = CSVBomManager.ReadFile(fileName, out XyFileTitleList);
                    if (XyFileTitleList.Count > 0 && XyFileDataList.Count > 0)
                    {
                        return true;
                    }
                }
                else
                {
                    XyFileDataList = ExcelReadManager.ReadFile(fileName, out XyFileTitleList);
                    if (XyFileTitleList.Count > 0 && XyFileDataList.Count > 0)
                    {
                        return true;
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return false; 
        }

        private void btnUpload_Click(object sender, EventArgs e)
        {
            string bomTagNumber = cmbBomTagNumber.Text;
            string pnTitle = cmbPn.Text;
            string xyTagNumber = cmbTagNumber.Text;
            string xTitle = cmbX.Text;
            string yTitle = cmbY.Text;
            string desTitle = cmbDes.Text;
            string spiltStr = txtSpilt.Text.Trim();
            char[] spiltChar = new char[] { ',' };
            if (spiltStr == "")
            {
            }
            else
            {
                spiltChar = spiltStr.ToCharArray();
            }

            if (pnTitle == "")
            {
                MessageBox.Show(ResourceCulture.GetString("BOM_SelPnTitle", "请选择物料编码对应表头!"));
                cmbBomTagNumber.Focus();
                return;
            }
            if (bomTagNumber == "" && BomTitleList.Count > 0)
            {
                MessageBox.Show(ResourceCulture.GetString("BOM_SelBomTagNumberTitle", "请选择BOM表位号对应表头!"));
                cmbBomTagNumber.Focus();
                return;
            }
            if (xyTagNumber == "")
            {
                MessageBox.Show(ResourceCulture.GetString("BOM_SelXYTagNumberTitle", "请选择XY表位号对应表头!"));
                cmbBomTagNumber.Focus();
                return;
            }
            if (xTitle == "")
            {
                MessageBox.Show(ResourceCulture.GetString("BOM_SelXTitle", "请选择X坐标对应表头!"));
                cmbX.Focus();
                return;
            }
            if (yTitle == "")
            {
                MessageBox.Show(ResourceCulture.GetString("BOM_SelYTitle", "请选择Y坐标对应表头!"));
                cmbY.Focus();
                return;
            }
            //if (desTitle == "")
            //{
            //    MessageBox.Show(ResourceCulture.GetString("BOM_SelDesTitle", "请选择描述对应表头!"));
            //    cmbDes.Focus();
            //    return;
            //}

            //生成数据
            LogUtil.info($"Bom文件{txtBomFile.Text},位置文件{txtXyFile.Text},表头{pnTitle},{bomTagNumber},{xyTagNumber},{xTitle},{yTitle},{desTitle} 开始生成元器件数据 ");
            componetInfos = new List<ComponetInfo>();

            Dictionary<string, List<string>> pnTagNumMap = new Dictionary<string, List<string>>();
            Dictionary<string, string> ComPosMap = new Dictionary<string, string>();
            List<TSAVPosition> positions = CSVPositionReader<TSAVPosition>.getPositionList();

            try
            {

                if (BomTitleList.Count > 0 && BomTitleList.Contains(pnTitle) && BomTitleList.Contains(bomTagNumber))
                {
                    int pnIndex = BomTitleList.IndexOf(pnTitle);
                    int bomTagIndex = BomTitleList.IndexOf(bomTagNumber);

                    foreach (List<string> rowData in BomDataList)
                    {
                        if (rowData.Count > pnIndex && rowData.Count > bomTagIndex)
                        {

                            string pnStr = rowData[pnIndex].Trim();
                            if (pnStr.Trim() == "")
                            {
                                continue;
                            }
                            string tagNStr = rowData[bomTagIndex];
                            List<string> tagList = new List<string>();
                            if (pnTagNumMap.ContainsKey(pnStr))
                            {
                                tagList = pnTagNumMap[pnStr];
                            }
                            string[] tagNArray = tagNStr.Split(spiltChar);
                            foreach (string obj in tagNArray)
                            {
                                if (obj.Trim() == "")
                                {
                                    continue;
                                }
                                if (tagList.Contains(obj.Trim()))
                                {
                                    continue;
                                }
                                tagList.Add(obj.Trim());
                            }
                            if (pnTagNumMap.ContainsKey(pnStr))
                            {
                                pnTagNumMap[pnStr] = tagList;
                            }
                            else
                            {
                                pnTagNumMap.Add(pnStr, tagList);
                            }
                        }
                    }
                }

                int defNum = (int)numCount.Value;
                int tagIndex = XyFileTitleList.IndexOf(xyTagNumber);
                int xIndex = XyFileTitleList.IndexOf(xTitle);
                int yIndex = XyFileTitleList.IndexOf(yTitle);
                int desIndex = -1;
                if (desTitle != "")
                {
                    desIndex = XyFileTitleList.IndexOf(desTitle);
                } 
                foreach (List<string> xyData in XyFileDataList)
                {
                    try
                    {
                        ComponetInfo obj = new ComponetInfo();
                        obj.TagNo = xyData[tagIndex].Trim();
                        obj.PositionX = ToDouble(xyData[xIndex].Trim());
                        obj.PositionY = ToDouble(xyData[yIndex].Trim());
                        if(desIndex != -1)
                        { 
                            obj.ComponentDes = xyData[desIndex].Trim();
                        }
                        else
                        { 
                            obj.ComponentDes ="";
                        } 
                        obj.PN = "";
                        if (pnTagNumMap.Count >= 0)
                        {
                            foreach (string pnKey in pnTagNumMap.Keys)
                            {
                                if (pnTagNumMap[pnKey].Contains(obj.TagNo))
                                {
                                    obj.PN = pnKey;
                                    break;
                                }
                            }
                        }
                        else if (XyFileTitleList.Contains(pnTitle))
                        {
                            int pnIndex = XyFileTitleList.IndexOf(pnTitle);
                            obj.PN = xyData[pnIndex].Trim();
                        }
                        //默认数量
                        obj.ComCount = defNum.ToString();
                        string posKey = obj.PN + "_" + obj.TagNo;
                        if (chbAutoPos.Checked)
                        {
                            posKey = obj.PN;

                        }
                        if (ComPosMap.ContainsKey(posKey))
                        {
                            obj.PositionNum = ComPosMap[posKey];
                        }
                        else
                        {
                            int posIndex = 1;
                            if (ComPosMap.Count == 0)
                            {
                                posIndex = 0;
                            }
                            else if (ComPosMap.Count > 0)
                            {
                                posIndex = ComPosMap.Count % positions.Count;
                            }
                            else if (positions.Count > ComPosMap.Count - 1)
                            {
                                posIndex = ComPosMap.Count - 1;
                            }
                            string posNum = positions[posIndex].PositionNum;
                            ComPosMap.Add(posKey, posNum);
                            obj.PositionNum = posNum;
                        }
                        obj.Id = componetInfos.Count + 1;
                        LogUtil.info($"增加数据: {obj.toStr()}");
                        componetInfos.Add(obj);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                        LogUtil.error("出错:" + ex.ToString());
                    }
                } 
                FrmBomViewer frmViewer = new FrmBomViewer(componetInfos);
                DialogResult sureresult = frmViewer.ShowDialog();
                if (sureresult.Equals(DialogResult.Cancel))
                {
                    return;
                }
                else
                {
                    this.componetInfos =CSVBomManager.CreateCompone( frmViewer.dataList);
                    this.DialogResult = DialogResult.OK;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                LogUtil.error("出错:" + ex.ToString());
            }
        }

        private double ToDouble(string v)
        {
            if (v.EndsWith("mm"))
            {
                v = v.Substring(0,v.Length - 2);
            }

            try
            {
                return Convert.ToDouble(v);
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void FrmBomUpload_Load(object sender, EventArgs e)
        {

        }
    }
}