Excel数据导出导入 V3


导出

导出后台business层代码:

C# 全选
/// <summary>
/// 导出
/// </summary>
/// <returns></returns>
public async Task<(string fielName, byte[] bytes)> ExportMaterialCodeMapping(ExportMaterialCodeMappingReq input, CancellationToken token)
{
	IQueryable<ExportMaterialCodeMappingData>? q_mappingData;

	if (input.BusinessPartnerRole == JOCAPI.Models.Enums.BusinessPartnerRoleCategory.Customer)
	{
		q_mappingData = from a in _businessContext.Query<data_material_custom_mapping>().Where(w => w.customer_code == input.BusinessPartnerCode)
						join b in _businessContext.Query<data_material>() on a.material_id equals b.row_id
						select new ExportMaterialCodeMappingData()
						{
							MaterialCode = b.material_code,
							MaterialName = b.material_name,
							MappingCode = a.customer_material_code ?? "",
							MappingName = a.customer_material_name ?? ""
						};
	}
	else if (input.BusinessPartnerRole == JOCAPI.Models.Enums.BusinessPartnerRoleCategory.Supplier)
	{
		q_mappingData = from a in _businessContext.Query<data_material_supplier_mapping>().Where(w => w.supplier_code == input.BusinessPartnerCode)
						join b in _businessContext.Query<data_material>() on a.material_id equals b.row_id
						select new ExportMaterialCodeMappingData()
						{
							MaterialCode = b.material_code,
							MaterialName = b.material_name,
							MappingCode = a.supplier_material_code ?? "",
							MappingName = a.supplier_material_name ?? ""
						};
	}
	else
	{
		throw new RequestErrorException("无法识别业务合作伙伴角色:" + input.BusinessPartnerRole);
	}


	var mappings = new List<(string propertyName, string caption)>()
	{
		(nameof(ExportMaterialCodeMappingData.MaterialCode ),"团餐易物料代码"),
		(nameof(ExportMaterialCodeMappingData.MaterialName ),"团餐易物料名称"),
		(nameof(ExportMaterialCodeMappingData.MappingCode ),"合作伙伴物料代码"),
		(nameof(ExportMaterialCodeMappingData.MappingName ),"合作伙伴物料名称")
	};
	var data = await q_mappingData.ToListAsync(token);
	var bytes = NOPIHelper.saveExcel(data, mappings, true, NOPIHelper.WorkbookType.xlsx);
	string fielName = $"合作伙伴物料映射-{input.BusinessPartnerCode}-{input.BusinessPartnerRole}.xlsx";
	return (fielName, bytes);
}

控制器 Controller代码:

C# 全选
/// <summary>
/// 导出合作伙伴物料编码对照表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> ExportMaterialCodeMapping(ExportMaterialCodeMappingReq input)
{
	var (fileName, bytes) = await _business.ExportMaterialCodeMapping(input, HttpContext.RequestAborted);

	MemoryStream ms = new MemoryStream(bytes);
	ms.Position = 0;

	// 添加命名空间:Microsoft.AspNetCore.Http
	Response.Headers.Append("Access-Control-Expose-Headers", "Content-Disposition");

	// 返回中文文件名,需要使用Uri.EscapeDataString 编码一下,要不然文件名中中文部分会异常
	return File(ms, "application/octet-stream", Uri.EscapeDataString(fileName));
}

 

导入:

业务Buinses层代码:

C# 全选
/// <summary>
/// 业务合作伙伴物料映射导入
/// </summary>
/// <param name="data"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[Transactional<JOCBusinessContext>] // 使用事务
public async Task<List<ImportRes>> Import(ImportMaterialCodeMappingReq input, CancellationToken cancellationToken)
{
 List<ImportRes> result = input.MaterialCodeMappingData.Select(s => new ImportRes()
 {
	 Id = s.Id,
	 LstErrMessage = new List<string>()
 }).ToList();

 var q_tempData = await _tempDataBusiness.Value.AddTempData(input.MaterialCodeMappingData.Select(s => s.MaterialCode).ToList(), cancellationToken);
 var q_data = from a in _businessContext.Query<data_material>()
			  join b in q_tempData on a.material_code equals b.data_value
			  select new
			  {
				  a.material_code,
				  material_id = a.row_id
			  };

 var dataMaterial = await q_data.ToListAsync(cancellationToken);

 // 物料不存在

 var errMaterialData = input.MaterialCodeMappingData.Where(w => dataMaterial.Any(x => x.material_code == w.MaterialCode) == false).Select(s => s.Id).ToList();
 if (errMaterialData.Count > 0)
 {
	 result.Where(w => errMaterialData.Contains(w.Id)).ForEach(item => item.LstErrMessage.Add("物料编码错误"));
 }

 try
 {
	 var dictMaterial = q_data.ToListAsync(cancellationToken);

	 if (input.BusinessPartnerRole == JOCAPI.Models.Enums.BusinessPartnerRoleCategory.Customer)
	 {
		 if (input.IsClear)
			 await _businessContext.Query<data_material_custom_mapping>().Where(w => w.customer_code == input.BusinessPartnerCode).BatchDeleteAsync(cancellationToken);

		 var newData = (from a in input.MaterialCodeMappingData
						join b in dataMaterial on a.MaterialCode equals b.material_code
						select new data_material_custom_mapping()
						{
							row_id = IDHelper.GetID(),
							material_id = b.material_id,
							material_code = b.material_code,
							customer_code = input.BusinessPartnerCode,
							customer_material_code = a.MappingCode,
							customer_material_name = a.MappingName
						}).ToList();
		 if (newData.Count > 0)
		 {
			 newData.InitCommonCreate(_operator, true);
			 await _businessContext.BulkInsertAsync(newData, cancellationToken: cancellationToken);
		 }
	 }
	 else if (input.BusinessPartnerRole == JOCAPI.Models.Enums.BusinessPartnerRoleCategory.Supplier)
	 {
		 if (input.IsClear)
			 await _businessContext.Query<data_material_supplier_mapping>().Where(w => w.supplier_code == input.BusinessPartnerCode).BatchDeleteAsync(cancellationToken);

		 var newData = (from a in input.MaterialCodeMappingData
						join b in dataMaterial on a.MaterialCode equals b.material_code
						select new data_material_supplier_mapping()
						{
							row_id = IDHelper.GetID(),
							material_id = b.material_id,
							material_code = b.material_code,
							supplier_code = input.BusinessPartnerCode,
							supplier_material_code = a.MappingCode,
							supplier_material_name = a.MappingName
						}).ToList();
		 if (newData.Count > 0)
		 {
			 newData.InitCommonCreate(_operator, true);
			 await _businessContext.BulkInsertAsync(newData, cancellationToken: cancellationToken);
		 }
	 }
	 else
	 {
		 throw new RequestErrorException("无法识别业务合作伙伴角色:" + input.BusinessPartnerRole);
	 }
 }
 catch
 {
	 throw;
 }
 finally
 {
	 await q_tempData.BatchDeleteAsync(cancellationToken);
	 return result;
 }
}

控制器层Controller代码

C# 全选
/// <summary>
/// 导入合作伙伴物料编码对照表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<ImportRes>> ImportMaterialCodeMappingAsync(ImportMaterialCodeMappingReq input)
{
	return await _business.ImportMaterialCodeMappingAsync(input, HttpContext.RequestAborted);
}

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
评论列表

发表评论

评论内容
昵称:
关联文章

Excel数据导出导入 V3
非常规Excel模板导入导出
Excel文件数据导入导出功能实现
Excel导入导出下拉选项实现
C# NPOI导出excel绑定列的下拉数据
微信支付:API v3 Postman脚本使用指南
微信支付: API V3支付回调签名验证
纸壳CMS v3.5升级.Net 6免费下载
在 Vue 3 中,嵌套数据源且需要过滤内部数据
深入理解 Vue 3 中的 ::v-deep:让 Scoped 样式无处不达
vue3 ts setup 封装element-plus el-dialog,并使用v-model
权限指令v-permission
VUE3版本 页面切换后数据丢失问题
vue3+ts 组件导出类型
Excel自定义格式千分符
excel2007直接打开文件空白,需要菜单打开
NPOI生成Excel文件时设置一整列为文本类型
vue3+vist 打包空白
EF EntityFramework.MappingAPI批量导入 模型属性顺序和数据库表不一致时导入错位
微信支付:API v3 Postman脚本使用指南