yl
2022-10-25 dd651f9ce0156fc7db869da04e0c2004a1811c52
VueWebApi/Tools/ImportExcelData.cs
@@ -381,7 +381,7 @@
            else if (excelTable[0].Columns[0].ColumnName != "序号")
            {
                code = "300";
                Message = "用户班组模板:表头信息不符合规范,第1列应为{序号}";
                Message = "仓库清单模板:表头信息不符合规范,第1列应为{序号}";
                return Message;
            }
            else if (excelTable[0].Columns[1].ColumnName != "仓库编号(唯一)")
@@ -1646,87 +1646,97 @@
            if (excelTable.Count != 2)
            {
                code = "300";
                Message = "模板不符合规范,缺失的Sheet";
                Message = "导入模板不符合规范,请检查Sheet数";
            }
            else if (excelTable[0].Columns.Count != 6)
            {
                code = "300";
                Message = "模板不符合规范,请检查列名字段数";
                Message = "物料清单模板(母件信息)不符合规范,请检查列名字段数";
            }
            else if (excelTable[1].Columns.Count != 8)
            else if (excelTable[1].Columns.Count != 9)
            {
                code = "300";
                Message = "模板不符合规范,请检查列名字段数";
                Message = "物料清单模板(子件信息)不符合规范,请检查列名字段数";
            }
            else if (excelTable[0].Columns[0].ColumnName != "序号")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(母件):表头信息不符合规范,第1列应为{序号}";
            }
            else if (excelTable[0].Columns[1].ColumnName != "母件编码")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(母件):表头信息不符合规范,第2列应为{母件编码}";
            }
            else if (excelTable[0].Columns[2].ColumnName != "母件名称")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(母件):表头信息不符合规范,第3列应为{母件名称}";
            }
            else if (excelTable[0].Columns[3].ColumnName != "基础数量")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(母件):表头信息不符合规范,第4列应为{基础数量}";
            }
            else if (excelTable[0].Columns[4].ColumnName != "启用状态")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(母件):表头信息不符合规范,第5列应为{启用状态}";
            }
            else if (excelTable[0].Columns[5].ColumnName != "版本号")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(母件):表头信息不符合规范,第6列应为{版本号}";
            }
            else if (excelTable[1].Columns[0].ColumnName != "序号")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(子件):表头信息不符合规范,第1列应为{序号}";
            }
            else if (excelTable[1].Columns[1].ColumnName != "主表序列号")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(子件):表头信息不符合规范,第2列应为{主表序列号}";
            }
            else if (excelTable[1].Columns[2].ColumnName != "子件编码")
            else if (excelTable[1].Columns[2].ColumnName != "子件顺序号")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(子件):表头信息不符合规范,第3列应为{子件顺序号}";
            }
            else if (excelTable[1].Columns[3].ColumnName != "子件名称")
            else if (excelTable[1].Columns[3].ColumnName != "子件编码")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(子件):表头信息不符合规范,第4列应为{子件编码}";
            }
            else if (excelTable[1].Columns[4].ColumnName != "发料仓库")
            else if (excelTable[1].Columns[4].ColumnName != "子件名称")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(子件):表头信息不符合规范,第5列应为{子件名称}";
            }
            else if (excelTable[1].Columns[5].ColumnName != "基本用量")
            else if (excelTable[1].Columns[5].ColumnName != "发料仓库")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(子件):表头信息不符合规范,第6列应为{发料仓库}";
            }
            else if (excelTable[1].Columns[6].ColumnName != "损耗率(%)")
            else if (excelTable[1].Columns[6].ColumnName != "基本用量")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(子件):表头信息不符合规范,第7列应为{基本用量}";
            }
            else if (excelTable[1].Columns[7].ColumnName != "属性")
            else if (excelTable[1].Columns[7].ColumnName != "损耗率(%)")
            {
                code = "300";
                Message = "模板不符合规范,请检查列名";
                Message = "物料清单模板(子件):表头信息不符合规范,第8列应为{损耗率(%)}";
            }
            else if (excelTable[1].Columns[8].ColumnName != "实际用量")
            {
                code = "300";
                Message = "物料清单模板(子件):表头信息不符合规范,第9列应为{实际用量}";
            }
            else if (excelTable[1].Columns[9].ColumnName != "属性")
            {
                code = "300";
                Message = "物料清单模板(子件):表头信息不符合规范,第10列应为{属性}";
            }
            else
            {
@@ -2596,9 +2606,87 @@
            StuCode = "";
            count = 0;
            string sql = "";
            var dynamicParams = new DynamicParameters();
            DataTable dt;
            List<ExcelErro> list = new List<ExcelErro>();
            List<DataTable> excelTable = new List<DataTable>();
            list = ImportExcel.ExcelToTableListErro(FileCode);    //验证Excel数据必填字段是否为空、唯一字段是否重复
            excelTable = ImportExcel.ExcelToTableList(FileCode);  //获取Excel数据
            //Excel查询母件+版本号是否重复
            DataTable distinct = excelTable[0].DefaultView.ToTable(true, "母件编码, 版本号");
            if (distinct.Rows.Count != excelTable[0].Rows.Count)
            {
                ExcelErro erro = new ExcelErro();
                erro.RoeNumber = "/";
                erro.ErrorField = "{版本号}";
                erro.ErrorCont = "Bom母件表:{母件编码}对应的{版本号}有重复";
                list.Add(erro);
            }
            //判断子表外键不存在于主表主键中的数据
            var dt3 = from r in excelTable[1].AsEnumerable()
                      where !(
                          from rr in excelTable[0].AsEnumerable()
                          select rr.Field<string>("序号")
                      ).Contains(r.Field<string>("主表序列号"))
                      select r;
            List<DataRow> listRow = dt3.ToList();
            if (listRow.Count > 0)
            {
                ExcelErro erro = new ExcelErro();
                erro.RoeNumber = "/";
                erro.ErrorField = "{主表序列号}";
                erro.ErrorCont = "子件信息:{主表序列号}字段中有值在母件信息:{序号}中不存在";
                list.Add(erro);
            }
            //数据库查询母件+版本号是否存在
            for (int j = 0; j < excelTable[0].Rows.Count; j++)
            {
                if (excelTable[0].Rows[j][1].ToString().Trim() != null && excelTable[0].Rows[j][1].ToString().Trim() != "")
                {
                    sql = @"select *  from TBom_Main where materiel_code=@code and version=@version";
                    dynamicParams.Add("@code", excelTable[0].Rows[j][1].ToString().Trim());
                    dynamicParams.Add("@version", excelTable[0].Rows[j][5].ToString().Trim());
                    dt = DapperHelper.selectdata(sql, dynamicParams);
                    if (dt.Rows.Count > 0)
                    {
                        ExcelErro erro = new ExcelErro();
                        erro.RoeNumber = "/";
                        erro.ErrorField = "{母件编码}";
                        erro.ErrorCont = "Bom母件表:{母件编码}字段" + excelTable[0].Rows[j][1].ToString().Trim() + "对应的版本号:"+ excelTable[0].Rows[j][5].ToString() + "已存在";
                        list.Add(erro);
                    }
                    //查询母件信息对应的子件信息
                    DataTable ds = excelTable[1].AsEnumerable().Where<DataRow>(C => C["主表序列号"].ToString() == excelTable[0].Rows[j][0].ToString().Trim()).CopyToDataTable();
                    for (int i = 0; i < ds.Rows.Count; i++)
                    {
                        if (excelTable[0].Rows[j][1].ToString().Trim() == ds.Rows[i]["子件编码"].ToString().Trim())
                        {
                            ExcelErro erro = new ExcelErro();
                            erro.RoeNumber = "/";
                            erro.ErrorField = "{子件编码}";
                            erro.ErrorCont = "子件信息:{子件编码}字段" + ds.Rows[i]["子件编码"].ToString().Trim() + "与对应的{母件编码}字段重复";
                            list.Add(erro);
                        }
                    }
                }
            }
            if (list.Count > 0)
            {
                int index = 0;
                foreach (ExcelErro item in list)
                {
                    index++;
                    item.Seq = index.ToString();
                }
                StuCode = "301";
                message = "数据验证失败";
            }
            else
            {
                StuCode = "200";
                message = "数据验证成功";
                count = excelTable[0].Rows.Count + excelTable[1].Rows.Count;
            }
            return list;
        }
        #endregion
@@ -3560,11 +3648,72 @@
        #region【Excel数据上传,物料清单】
        public static string TwentyOneSubmit(string FileCode, string User, out string StuCode)
        {
            string message = "";
            StuCode = "";
            string message = ""; StuCode = "";
            string sql = "";
            int BomID = 0;  //最大id
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            try
            {
                list.Clear();
                List<DataTable> excelTable = new List<DataTable>();
                excelTable = ImportExcel.ExcelToTableList(FileCode);
                //获取主表当前最大ID
                BomID = DapperHelper.insertReturnId("TBom_Main");
                //导入Bom主表
                for (int k = 0; k < excelTable[0].Rows.Count; k++)
                {
                    BomID = BomID + 1;
                    sql = @"insert into TBom_Main(materiel_code,quantity,status,version,lm_user,lm_date)
                            values(@materiel_code,@quantity,@status,@version,@lm_user,@lm_date)";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            materiel_code = excelTable[0].Rows[k][1].ToString().Trim(),
                            quantity = excelTable[0].Rows[k][3].ToString().Trim(),
                            status = excelTable[0].Rows[k][4].ToString().Trim(),
                            version = excelTable[0].Rows[k][5].ToString().Trim(),
                            CreateDate = DateTime.Now.ToString(),
                            Operator = User
                        }
                    });
                    //查询母件信息对应的子件信息
                    DataTable ds = excelTable[1].AsEnumerable().Where(item => item["主表序列号"].ToString().Equals(excelTable[0].Rows[k][0].ToString())).CopyToDataTable();
                    //导入Bom子表
                    for (int i = 0; i < ds.Rows.Count; i++)
                    {
                        sql = @"insert into TBom_Deta(m_id,seq,smateriel_code,base_quantity,loss_quantity,total_quantity,pn_type)
                            values(@m_id,@seq,@smateriel_code,@base_quantity,@loss_quantity,@total_quantity,@pn_type)";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                m_id = BomID,
                                seq = ds.Rows[i][2].ToString().Trim(),
                                smateriel_code = ds.Rows[i][3].ToString().Trim(),
                                base_quantity = ds.Rows[i][6].ToString().Trim(),
                                loss_quantity = ds.Rows[i][7].ToString().Trim(),
                                total_quantity = ds.Rows[i][8].ToString().Trim(),
                                pn_type = ds.Rows[i][9].ToString().Trim()
                            }
                        });
                    }
                }
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
                {
                    StuCode = "200";
                    message = "导入成功!";
                }
                else
                {
                    StuCode = "300";
                    message = "导入失败!";
                }
            }
            catch (Exception e)
            {