/// <summary>
        /// 导出天花DXF图纸和Cutlist
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void btnExportDxf_Click(object sender, EventArgs e)
        {
            if (subAssyExecList.Count == 0)
            {
                return;
            }
            btnExportDxf.Enabled = false;
            //计算时间
            DateTime startTime = DateTime.Now;

            tspbStatus.Value   = 0;
            tspbStatus.Step    = 1;
            tspbStatus.Maximum = subAssyExecList.Count;
            //创建下料图文件夹,默认再D盘MyProjects目录下(先判断文件夹是否存在)
            string dxfPath = @"D:\MyProjects\" + cobODPNo.Text + @"\DXF-CUTLIST";

            if (!Directory.Exists(dxfPath))
            {
                Directory.CreateDirectory(dxfPath);
            }
            //以异步的方式开启SolidWorks程序并导图
            try
            {
                tsslStatus.Text = "正在打开(/连接)SolidWorks程序...";
                swApp           = await SolidWorksSingleton.GetApplicationAsync();

                //遍历execList,创建项目模型存放地址,判断模型类型,查询参数,执行SolidWorks
                foreach (var item in subAssyExecList)
                {
                    tsslStatus.Text = "子装配体(" + item.SubAssyName + ")正在导图...";
                    //以异步的方式执行,让窗口可操作并且进度条更新
                    await exportCeilingDxfAsync(item, dxfPath, Program.ObjCurrentUser.UserId);

                    tspbStatus.Value += 1;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                swApp.CommandInProgress = false;//及时关闭外部命令调用,否则影响SolidWorks的使用
            }
            TimeSpan timeSpan = DateTime.Now - startTime;

            tsslStatus.Text  = "导出DXF图完成,总共耗时:" + timeSpan.TotalSeconds + "秒";
            tspbStatus.Value = subAssyExecList.Count;
            //btnSubAll_Click(null, null);//清除执行数据
            foreach (var item in subAssyExecList)
            {
                subAssyWaitingList.Add(item);
            }
            subAssyExecList.Clear();
            btnExportDxf.Enabled = true;
        }
        /// <summary>
        /// 执行SolidWorks作图程序
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void btnExec_Click(object sender, EventArgs e)
        {
            if (execList.Count == 0)
            {
                return;
            }
            btnExec.Enabled = false;
            //计算时间
            DateTime startTime = DateTime.Now;

            tspbStatus.Value   = 0;
            tspbStatus.Step    = 1;
            tspbStatus.Maximum = execList.Count;
            //创建项目文件夹,默认再D盘MyProjects目录下(先判断文件夹是否存在)
            string projectPath = @"D:\MyProjects\" + cobODPNo.Text;

            if (!Directory.Exists(projectPath))
            {
                Directory.CreateDirectory(projectPath);
            }
            //以异步的方式开启SolidWorks程序并自动作图
            try
            {
                tsslStatus.Text = "正在打开(/连接)SolidWorks程序...";
                swApp           = await SolidWorksSingleton.GetApplicationAsync();

                //遍历execList,创建项目模型存放地址,判断模型类型,查询参数,执行SolidWorks
                foreach (var item in execList)
                {
                    tsslStatus.Text = item.Item + "(" + item.Module + ")正在作图...";
                    //6.根据工厂提供的选择,执行具体的接口实现方式
                    //以异步的方式执行,让窗口可操作并且进度条更新
                    await AutoDrawingAsync(item, projectPath);

                    tspbStatus.Value += 1;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                swApp.CommandInProgress = false;//及时关闭外部命令调用,否则影响SolidWorks的使用
            }

            TimeSpan timeSpan = DateTime.Now - startTime;

            tsslStatus.Text  = "作图完成,总共耗时:" + timeSpan.TotalSeconds + "秒";
            tspbStatus.Value = execList.Count;
            btnSubAll_Click(null, null);//清除执行数据
            btnExec.Enabled = true;
        }
        /// <summary>
        /// 导出天花烟罩发货清单按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void btnCeilingPackingList_Click(object sender, EventArgs e)
        {
            //计算时间
            DateTime startTime = DateTime.Now;

            tspbStatus.Value              = 0;
            tspbStatus.Step               = 1;
            tspbStatus.Maximum            = 2;
            btnCeilingPackingList.Enabled = false;
            List <CeilingAccessory> ceilingAccessoriesList = null;
            List <CeilingAccessory> ceilingPackingList     = null;

            if (dgvCeilingPackingList.RowCount > 0)
            {
                DialogResult result = MessageBox.Show("发货清单有内容,标准配件将不会重复添加,如果需要添加标准件请手动添加或者删除本数据后再生成发货清单,继续请按YES,不生成发货清单请按NO?", "生成发货清单询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.No)
                {
                    btnCeilingPackingList.Enabled = true;
                    return;
                }
            }
            else
            {
                //【1】查询项目的所有配件部分
                if (txtTypeName.Text == "日本项目")
                {
                    ceilingAccessoriesList = objCeilingAccessoryService.GetCeilingAccessoriesForJapan();
                }
                else
                {
                    ceilingAccessoriesList = objCeilingAccessoryService.GetCeilingAccessoriesForNotJapan();
                }
                foreach (var item in ceilingAccessoriesList)
                {
                    item.ProjectId = objProject.ProjectId;
                    item.UserId    = Program.ObjCurrentUser.UserId;
                    item.Location  = objDrawingPlanService.GetDrawingPlanByProjectId(objProject.ProjectId.ToString())[0].Item;
                }
                //将查询到的标准配件统一提交到SQL服务器
                objCeilingAccessoryService.ImportCeilingPackingListByTran(ceilingAccessoriesList);
            }
            tspbStatus.Value = 1;
            //【2】打开装配体,获得所有零件名,查询配件和数量导入SQL
            //预先将装配体的关键字写入到零件中
            //以异步的方式开启SolidWorks程序并导图
            try
            {
                tsslStatus.Text = "正在打开(/连接)SolidWorks程序...";
                swApp           = await SolidWorksSingleton.GetApplicationAsync();

                //执行SolidWorks,打开总装并执行导出发货清单程序

                tsslStatus.Text = "正在导出发货清单...";
                //以异步的方式执行,让窗口可操作并且进度条更新
                await exportCeilingPackingListAsync(txtMainAssyPath.Text, objProject);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                swApp.CommandInProgress = false;//及时关闭外部命令调用,否则影响SolidWorks的使用
            }
            //更新发货清单显示
            dgvCeilingPackingList.DataSource = objCeilingAccessoryService.GetCeilingPackingListByProjectId(objProject.ProjectId.ToString());
            //MessageBox.Show("发货清单导出成功!", "提示信息");
            TimeSpan timeSpan = DateTime.Now - startTime;

            tsslStatus.Text  = "导出发货清单完成,总共耗时:" + timeSpan.TotalSeconds + "秒";
            tspbStatus.Value = 2;
            btnCeilingPackingList.Enabled = true;
        }