Пример #1
0
        public async Task <ApiData> ImportMaterials(IFormFile file)
        {
            string[] arr = new[] { ".xlsx", ".xls" };
            if (arr.Contains(Path.GetExtension(file.FileName)?.ToLower()) == false)
            {
                throw new InvalidOperationException("无效的文件扩展名。");
            }


            string filename = await WriteFileAsync(file);

            DataTable dt = ExcelUtil.ReadDataSet(filename).Tables[0];

            int imported = 0;
            int covered  = 0;
            int empty    = 0;

            foreach (DataRow row in dt.Rows)
            {
                string?mcode = Convert.ToString(row["编码"]);
                if (string.IsNullOrWhiteSpace(mcode))
                {
                    // 忽略空行
                    empty++;
                    continue;
                }
                Material material = await _session.Query <Material>().Where(x => x.MaterialCode == mcode).SingleOrDefaultAsync();

                if (material != null)
                {
                    covered++;
                    _logger.Warning("将覆盖已存在的物料 {material}", material.MaterialCode);
                }
                else
                {
                    material = _materialFactory.CreateMaterial();
                    material.MaterialCode = Convert.ToString(row["编码"]);
                }

                material.Description     = Convert.ToString(row["描述"]);
                material.BatchEnabled    = Convert.ToBoolean(row["批次管理"]);
                material.StandingTime    = 24;
                material.ValidDays       = Convert.ToInt32(row["有效天数"]);
                material.MaterialType    = Convert.ToString(row["物料类型"]);
                material.Uom             = Convert.ToString(row["计量单位"])?.ToUpper();
                material.DefaultQuantity = Convert.ToDecimal(row["每托数量"]);
                material.Specification   = Convert.ToString(row["规格型号"]);
                string pinyin = GetPinyin(material.Description);
                if (pinyin.Length > 20)
                {
                    pinyin = pinyin.Substring(0, 20);
                }
                material.MnemonicCode = pinyin;

                await _session.SaveOrUpdateAsync(material);

                _logger.Information("已导入物料 {material}", material.MaterialCode);
                imported++;
            }

            _ = await _opHelper.SaveOpAsync($"导入 {imported},覆盖 {covered}");

            return(this.Success($"导入 {imported},覆盖 {covered}"));