Example #1
0
        /// <summary>
        /// 导入店铺
        /// </summary>
        /// <param name="request"></param>
        /// <param name="files"></param>
        /// <param name="merchantId"></param>
        /// <returns></returns>
        public async Task <ResultBase> ImportWaybills(HttpFileCollectionBase files, int manager)
        {
            if (files == null || files.Count == 0)
            {
                return(ResultBase <UploadExcelCheckResultModel> .Fail("请上传文件"));
            }

            var file = files[0];

            if (file.ContentLength == 0)
            {
                return(ResultBase <UploadExcelCheckResultModel> .Fail("文件内容为空"));
            }

            string fileName = file.FileName;//取得文件名字
            var    fileExt  = fileName.Substring(fileName.LastIndexOf('.') + 1);

            string[] msExcelFiles = { "xlsx", "xls" };
            if (!msExcelFiles.Any(m => m == fileExt))
            {
                return(ResultBase <UploadExcelCheckResultModel> .Fail("只支持EXCEL文件"));
            }

            var filePath     = $"/Upload/Waybill/";
            var saveFilePath = HttpContext.Current.Server.MapPath($"~{filePath}");

            if (!Directory.Exists(saveFilePath))
            {
                Directory.CreateDirectory(saveFilePath);
            }

            string path = saveFilePath + file.FileName;//获取存储的目标地址

            file.SaveAs(path);

            try
            {
                //读取excel
                var data = ExcelHelper.ReadExcelNoIndex <WaybillExportModel>(path, "Sheet1");

                if (data == null || data.Count == 0)
                {
                    return(ResultBase.Fail("没有有效数据"));
                }
                else if (data.Count > 60000)
                {
                    return(ResultBase.Fail("excel表格行数过大,请分批导入"));
                }

                mLogHelper.Info($"开始执行导入快递单号,总量:{data.Count}");

                //检查数据
                var index = 1;
                foreach (var item in data)
                {
                    index++;
                    if (string.IsNullOrEmpty(item.ShopName))
                    {
                        return(ResultBase.Fail($"第{index}行,运单号{item.Code}, 店铺名为空"));
                    }
                    //查找店铺
                    var shop = await shopsManager.FindByName(item.ShopName);

                    if (shop == null)
                    {
                        return(ResultBase.Fail($"第{index}行,运单号{item.Code}, 店铺{item.ShopName}不存在,请先添加店铺"));
                    }
                    else if (shop.SalemanId == 0)
                    {
                        return(ResultBase.Fail($"第{index}行,运单号{item.Code},店铺{item.ShopName}业务员数据错误"));
                    }
                }

                var successedCount = 0;
                var exitsCount     = 0;

                //插入数据
                List <int> taskIds = new List <int>();
                foreach (var item in data)
                {
                    //查找店铺
                    var shop = await shopsManager.FindByName(item.ShopName);

                    //相同运单号跳过
                    var waybill = await waybillManager.FindByCode(item.Code);

                    if (waybill != null && !string.IsNullOrEmpty(waybill.Code))
                    {
                        exitsCount++;
                        continue;
                    }

                    WaybillEntity waybillEntity = new WaybillEntity()
                    {
                        Code      = item.Code,
                        ShopId    = shop.Id,
                        SalemanId = shop.SalemanId,
                        Time      = item.Time,
                        Province  = item.Province,
                        City      = item.City,
                        Weight    = item.Weight,
                        CreatedAt = DateTime.Now,
                        CreatedBy = manager,
                    };
                    await waybillManager.InsertAsync(waybillEntity);

                    successedCount++;
                }


                mLogHelper.Info($"导入执行完毕");
                return(ResultBase.Sucess($"总数居:{data.Count},成功执行:{successedCount},存在相同运单数:{exitsCount}"));
            }
            catch (Exception ex)
            {
                if (ex.Message.IndexOf("for key 'uk_waybillinfo_Code'") > -1)
                {
                    return(ResultBase.Fail($"存在相同运单号,{ex.Message}"));
                }
                else
                {
                    return(ResultBase.Fail(ex.Message));
                }
            }
        }