diff --git a/DOAN.Admin.WebApi/Controllers/MES/Order/OrderPurchaseController.cs b/DOAN.Admin.WebApi/Controllers/MES/Order/OrderPurchaseController.cs index caa7221..17f664f 100644 --- a/DOAN.Admin.WebApi/Controllers/MES/Order/OrderPurchaseController.cs +++ b/DOAN.Admin.WebApi/Controllers/MES/Order/OrderPurchaseController.cs @@ -5,6 +5,10 @@ using DOAN.Service.MES.order.IService; using DOAN.Admin.WebApi.Filters; using DOAN.Model.MES.order.Dto; using DOAN.Model.MES.order; +using DOAN.Model.System.Dto; +using DOAN.Model; +using DOAN.Model.System; +using MiniExcelLibs; //创建时间:2025-02-17 namespace DOAN.Admin.WebApi.Controllers @@ -100,5 +104,59 @@ namespace DOAN.Admin.WebApi.Controllers return ToResponse(_OrderPurchaseService.Delete(idArr)); } + //TODO 下载模版 + /// + /// 导入模板下载 + /// + /// + [HttpGet("importTemplate")] + [Log(Title = "订单模板", BusinessType = BusinessType.EXPORT, IsSaveRequestData = true, IsSaveResponseData = false)] + [AllowAnonymous] + public IActionResult ImportTemplateExcel() + { + (string, string) result = DownloadImportTemplate("order"); + return ExportExcel(result.Item2, result.Item1); + } + + /// + /// 采购导入 + /// + /// 使用IFromFile必须使用name属性否则获取不到文件 + /// + [HttpPost("importData")] + [Log(Title = "采购导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = true)] + [ActionPermissionFilter(Permission = "system:user:import")] + public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile) + { + + if (formFile == null) + { + return SUCCESS(null); + } + int response = _OrderPurchaseService.ImportData(formFile, HttpContext.GetName()); + + return SUCCESS(response); + + + + } + + + /// + /// 采购订单excel导出 + /// + /// + /// + [HttpGet("export")] + [Log(Title = "用户导出", BusinessType = BusinessType.EXPORT)] + [ActionPermissionFilter(Permission = "system:user:export")] + public IActionResult UserExport([FromQuery] OrderPurchaseQueryDto order) + { + var list = _OrderPurchaseService.SelectOrderList(order); + + var result = ExportExcelMini(list, "order", "采购订单列表"); + return ExportExcel(result.Item2, result.Item1); + } + } } \ No newline at end of file diff --git a/DOAN.Admin.WebApi/wwwroot/ImportTemplate/order.xls b/DOAN.Admin.WebApi/wwwroot/ImportTemplate/order.xls new file mode 100644 index 0000000..1e3c208 Binary files /dev/null and b/DOAN.Admin.WebApi/wwwroot/ImportTemplate/order.xls differ diff --git a/DOAN.Model/MES/Order/Dto/OrderPurchaseDto.cs b/DOAN.Model/MES/Order/Dto/OrderPurchaseDto.cs index 4b605c7..e790a03 100644 --- a/DOAN.Model/MES/Order/Dto/OrderPurchaseDto.cs +++ b/DOAN.Model/MES/Order/Dto/OrderPurchaseDto.cs @@ -26,7 +26,7 @@ namespace DOAN.Model.MES.order.Dto public string Variety { get; set; } - public string Specordindicator { get; set; } + public int Specordindicator { get; set; } public string KdType { get; set; } @@ -50,7 +50,7 @@ namespace DOAN.Model.MES.order.Dto public DateTime? EndDate { get; set; } - public string Orderindicator { get; set; } + public int Orderindicator { get; set; } public string RouteCode { get; set; } diff --git a/DOAN.Model/MES/Order/OrderPurchase.cs b/DOAN.Model/MES/Order/OrderPurchase.cs index e6bd451..d824e93 100644 --- a/DOAN.Model/MES/Order/OrderPurchase.cs +++ b/DOAN.Model/MES/Order/OrderPurchase.cs @@ -44,7 +44,7 @@ namespace DOAN.Model.MES.order /// /// 是否非标 /// - public string Specordindicator { get; set; } + public int Specordindicator { get; set; } /// /// 类型 @@ -114,7 +114,7 @@ namespace DOAN.Model.MES.order /// /// 订单是否完成 /// - public string Orderindicator { get; set; } + public int Orderindicator { get; set; } /// /// 短描述(所属产线) diff --git a/DOAN.Service/MES/Order/IService/IOrderPurchaseService.cs b/DOAN.Service/MES/Order/IService/IOrderPurchaseService.cs index 9bb27a5..a9d1783 100644 --- a/DOAN.Service/MES/Order/IService/IOrderPurchaseService.cs +++ b/DOAN.Service/MES/Order/IService/IOrderPurchaseService.cs @@ -1,5 +1,6 @@ using DOAN.Model.MES.order.Dto; using DOAN.Model.MES.order; +using Microsoft.AspNetCore.Http; namespace DOAN.Service.MES.order.IService { @@ -12,10 +13,12 @@ namespace DOAN.Service.MES.order.IService OrderPurchase GetInfo(string Id); - + int ImportData(IFormFile formFile, string username); OrderPurchase AddOrderPurchase(OrderPurchase parm); int UpdateOrderPurchase(OrderPurchase parm); + List SelectOrderList(OrderPurchaseQueryDto orderPurchaseDto); + } } diff --git a/DOAN.Service/MES/Order/OrderPurchaseService.cs b/DOAN.Service/MES/Order/OrderPurchaseService.cs index 14a8547..e2e5174 100644 --- a/DOAN.Service/MES/Order/OrderPurchaseService.cs +++ b/DOAN.Service/MES/Order/OrderPurchaseService.cs @@ -4,6 +4,12 @@ using DOAN.Service.MES.order.IService; using DOAN.Repository; using DOAN.Model.MES.order.Dto; using DOAN.Model.MES.order; +using Microsoft.AspNetCore.Http; +using NPOI.SS.UserModel; +using NPOI.XSSF.UserModel; +using NPOI.SS.Formula.Functions; +using Aliyun.OSS; +using Mapster; namespace DOAN.Service.MES.order { @@ -75,5 +81,109 @@ namespace DOAN.Service.MES.order return predicate; } + + + public int ImportData(IFormFile formFile, string username) + { + List orderPurchases = new List(); + DateTime importDate = DateTime.MinValue; + using (var stream = formFile.OpenReadStream()) + { + try + { + IWorkbook workbook = new XSSFWorkbook(stream); + ISheet sheet = workbook.GetSheetAt(0); + IRow secondRow = sheet.GetRow(1); + NPOI.SS.UserModel.ICell cell = secondRow.GetCell(1); + + + // 将单元格的数字值转换为DateTime + importDate = cell.DateCellValue.Value; + + + // 遍历每一行 + for (int row = 4; row <= sheet.LastRowNum; row++) + { + IRow currentRow = sheet.GetRow(row); + if (currentRow != null) // 确保行不为空 + { + OrderPurchase model = new OrderPurchase(); + model.Id = SnowFlakeSingle.Instance.NextId().ToString(); + model.OrderNoMes = currentRow.GetCell(0)?.ToString(); + model.PurchaseOrderErp = currentRow.GetCell(1)?.ToString(); + model.Poitem = currentRow.GetCell(2)?.ToString(); + model.Variety = currentRow.GetCell(3)?.ToString(); + string specordindicator= currentRow.GetCell(4)?.ToString(); + if(!string.IsNullOrEmpty(specordindicator)&&specordindicator=="是") + { + model.Specordindicator = 1; + } + else if(!string.IsNullOrEmpty(specordindicator) && specordindicator == "否") + { + model.Specordindicator = 0; + } + else + { + model.Specordindicator = -1; + } + model.KdType = currentRow.GetCell(5)?.ToString(); + model.DocumentDate = currentRow.GetCell(6).DateCellValue.Value; + model.Seller = currentRow.GetCell(7)?.ToString(); + model.SalesArea = currentRow.GetCell(8)?.ToString(); + model.MaterialName = currentRow.GetCell(9)?.ToString(); + model.MaterialCode = currentRow.GetCell(10)?.ToString(); + model.DemandQuantity = (int)currentRow.GetCell(11).NumericCellValue; + model.DeliveryDate= currentRow.GetCell(12).DateCellValue.Value; + model.DeliveryQuantity = (int)currentRow.GetCell(13).NumericCellValue; + model.StartDate = currentRow.GetCell(14).DateCellValue.Value; + model.EndDate = currentRow.GetCell(15).DateCellValue.Value; + string Orderindicator = currentRow.GetCell(16)?.ToString(); + if (!string.IsNullOrEmpty(Orderindicator) && Orderindicator == "是") + { + model.Orderindicator = 1; + } + else if (!string.IsNullOrEmpty(Orderindicator) && Orderindicator == "否") + { + model.Orderindicator = 0; + } + else + { + model.Orderindicator = -1; + } + model.RouteCode = currentRow.GetCell(17)?.ToString(); + model.Remark = currentRow.GetCell(18)?.ToString(); + model.ImportDate = importDate; + model.CreatedTime = importDate; + model.CreatedBy = username; + orderPurchases.Add(model); + + } + } + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } + + if(orderPurchases.Count>0) + { + return Context.Insertable(orderPurchases).ExecuteCommand(); + } + else + { + return 0; + } + } + + public List SelectOrderList(OrderPurchaseQueryDto orderPurchaseDto) + { + var predicate = QueryExp(orderPurchaseDto); + + var response = Queryable() + .Where(predicate.ToExpression()).Adapt>(); + + return response; + } } } \ No newline at end of file