From 025c0dd5c923499b311e6e8110e3725361b3df1a Mon Sep 17 00:00:00 2001 From: Abbh1 <86962549+Abbh1@users.noreply.github.com> Date: Wed, 22 Nov 2023 22:51:45 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=88=9D=E5=A7=8B=E5=8C=96=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TableDatas/TableDataDto.cs | 94 ++++++++ .../TableDataManage/TableDatas/TableData.cs | 205 ++++++++++++++++++ .../TableDataManage/TableDatas/TableDataVo.cs | 159 ++++++++++++++ .../TableDatas/TableDataRepository.cs | 20 ++ .../ProductsInvolvedService.cs | 45 ++-- .../TableDatas/TableDataService.cs | 189 ++++++++++++++++ .../TableDatas/ITableDataService.cs | 59 +++++ .../ProductsInvolvedController.cs | 18 +- .../TableDatas/TableDataController.cs | 180 +++++++++++++++ 9 files changed, 938 insertions(+), 31 deletions(-) create mode 100644 ARW.Model/Dto/Business/TableDataManage/TableDatas/TableDataDto.cs create mode 100644 ARW.Model/Models/Business/TableDataManage/TableDatas/TableData.cs create mode 100644 ARW.Model/Vo/Business/TableDataManage/TableDatas/TableDataVo.cs create mode 100644 ARW.Repository/Business/TableDataManage/TableDatas/TableDataRepository.cs create mode 100644 ARW.Service/Business/BusinessService/TableDataManage/TableDatas/TableDataService.cs create mode 100644 ARW.Service/Business/IBusinessService/TableDataManage/TableDatas/ITableDataService.cs create mode 100644 ARW.WebApi/Controllers/Business/TableDataManage/TableDatas/TableDataController.cs diff --git a/ARW.Model/Dto/Business/TableDataManage/TableDatas/TableDataDto.cs b/ARW.Model/Dto/Business/TableDataManage/TableDatas/TableDataDto.cs new file mode 100644 index 0000000..feccd3e --- /dev/null +++ b/ARW.Model/Dto/Business/TableDataManage/TableDatas/TableDataDto.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using ARW.Model.Models.Business.TableDataManage.TableDatas; + +namespace ARW.Model.Dto.Business.TableDataManage.TableDatas +{ + /// + /// 表格数据输入对象 + /// + /// @author lwh + /// @date 2023-11-22 + /// + public class TableDataDto + { + + public int TableDataId { get; set; } + + public long TableDataGuid { get; set; } + + [Required(ErrorMessage = "采购内容不能为空")] + public string TableDataProcurementContent { get; set; } + + [Required(ErrorMessage = "采购单位名称不能为空")] + public string TableDataProcurementUnit { get; set; } + + public string TableDataProcurementMethod { get; set; } + + public string TableDataSupplierName { get; set; } + + public decimal TableDataSupplierOffer { get; set; } + + public string TableDataProjectPricingForm { get; set; } + + public string TableDataLink { get; set; } + + [Required(ErrorMessage = "日期不能为空")] + public DateTime? TableDataDate { get; set; } + + public DateTime? TableDataDeadline { get; set; } + + public string TableDataWinningBidde { get; set; } + + public decimal TableDataBidWinningPrice { get; set; } + + [Required(ErrorMessage = "是否为中标公告不能为空")] + public int TableDataIsBidAnnouncement { get; set; } + + [Required(ErrorMessage = "是否是人力资源池或框架协议不能为空")] + public int TableDataIsHumanResourcePoolOrFrameworkAgreement { get; set; } + + [Required(ErrorMessage = "公告中是否包含多个包/标段/采购内容不能为空")] + public int TableDataIsMultiple { get; set; } + + [Required(ErrorMessage = "是否仅有一个中标人不能为空")] + public int TableDataIsOnlyBidder { get; set; } + + public string TableDataSingleSource { get; set; } + + public string TableDataDetails { get; set; } + + [Required(ErrorMessage = "排序不能为空")] + public int TableDataSort { get; set; } + + + + + + } + + + /// + /// 表格数据查询对象 + /// + /// @author lwh + /// @date 2023-11-22 + /// + public class TableDataQueryDto : PagerInfo + { + + public string TableDataProcurementContent { get; set; } + + public string TableDataProcurementUnit { get; set; } + + public DateTime? BeginTime { get; set; } + + public DateTime? EndTime { get; set; } + public string ids { get; set; } + } + + + + +} diff --git a/ARW.Model/Models/Business/TableDataManage/TableDatas/TableData.cs b/ARW.Model/Models/Business/TableDataManage/TableDatas/TableData.cs new file mode 100644 index 0000000..109383b --- /dev/null +++ b/ARW.Model/Models/Business/TableDataManage/TableDatas/TableData.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Generic; +using SqlSugar; +using OfficeOpenXml.Attributes; +using Newtonsoft.Json; + +namespace ARW.Model.Models.Business.TableDataManage.TableDatas +{ + /// + /// 表格数据,数据实体对象 + /// + /// @author lwh + /// @date 2023-11-22 + /// + [SugarTable("tb_table_data")] + public class TableData : BusinessBase + { + + /// + /// 描述 : + /// 空值 : false + /// + [EpplusTableColumn(Header = "TableDataId")] + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "table_data_id")] + public int TableDataId { get; set; } + + + /// + /// 描述 : + /// 空值 : false + /// + [EpplusTableColumn(Header = "TableDataGuid")] + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, IsIdentity = false, ColumnName = "table_data_guid")] + public long TableDataGuid { get; set; } + + + /// + /// 描述 :采购内容 + /// 空值 : false + /// + [EpplusTableColumn(Header = "采购内容")] + [SugarColumn(ColumnName = "table_data_procurement_content")] + public string TableDataProcurementContent { get; set; } + + + /// + /// 描述 :采购单位名称 + /// 空值 : false + /// + [EpplusTableColumn(Header = "采购单位名称")] + [SugarColumn(ColumnName = "table_data_procurement_unit")] + public string TableDataProcurementUnit { get; set; } + + + /// + /// 描述 :采购方式 + /// 空值 : true + /// + [EpplusTableColumn(Header = "采购方式")] + [SugarColumn(ColumnName = "table_data_procurement_method")] + public string TableDataProcurementMethod { get; set; } + + + /// + /// 描述 :供应商名称 + /// 空值 : true + /// + [EpplusTableColumn(Header = "供应商名称")] + [SugarColumn(ColumnName = "table_data_supplier_name")] + public string TableDataSupplierName { get; set; } + + + /// + /// 描述 :供应商的对应报价 + /// 空值 : true + /// + [EpplusTableColumn(Header = "供应商的对应报价")] + [SugarColumn(ColumnName = "table_data_supplier_offer")] + public decimal TableDataSupplierOffer { get; set; } + + + /// + /// 描述 :项目计价形式 + /// 空值 : true + /// + [EpplusTableColumn(Header = "项目计价形式")] + [SugarColumn(ColumnName = "table_data_project_pricing_form")] + public string TableDataProjectPricingForm { get; set; } + + + /// + /// 描述 :链接 + /// 空值 : true + /// + [EpplusTableColumn(Header = "链接")] + [SugarColumn(ColumnName = "table_data_link")] + public string TableDataLink { get; set; } + + + /// + /// 描述 :日期 + /// 空值 : false + /// + [EpplusTableColumn(Header = "日期", NumberFormat = "yyyy-MM-dd HH:mm:ss")] + [SugarColumn(ColumnName = "table_data_date")] + public DateTime? TableDataDate { get; set; } + + + /// + /// 描述 :截止日期 + /// 空值 : true + /// + [EpplusTableColumn(Header = "截止日期", NumberFormat = "yyyy-MM-dd HH:mm:ss")] + [SugarColumn(ColumnName = "table_data_deadline")] + public DateTime? TableDataDeadline { get; set; } + + + /// + /// 描述 :中标人或候选人 + /// 空值 : true + /// + [EpplusTableColumn(Header = "中标人或候选人")] + [SugarColumn(ColumnName = "table_data_winning_bidde")] + public string TableDataWinningBidde { get; set; } + + + /// + /// 描述 :中标金额 + /// 空值 : true + /// + [EpplusTableColumn(Header = "中标金额")] + [SugarColumn(ColumnName = "table_data_bid_winning_price")] + public decimal TableDataBidWinningPrice { get; set; } + + + /// + /// 描述 :是否为中标公告 + /// 空值 : false + /// + [EpplusTableColumn(Header = "是否为中标公告")] + [SugarColumn(ColumnName = "table_data_is_bid_announcement")] + public int TableDataIsBidAnnouncement { get; set; } + + + /// + /// 描述 :是否是人力资源池或框架协议 + /// 空值 : false + /// + [EpplusTableColumn(Header = "是否是人力资源池或框架协议")] + [SugarColumn(ColumnName = "table_data_is_human_resource_pool_or_framework_agreement")] + public int TableDataIsHumanResourcePoolOrFrameworkAgreement { get; set; } + + + /// + /// 描述 :公告中是否包含多个包/标段/采购内容 + /// 空值 : false + /// + [EpplusTableColumn(Header = "公告中是否包含多个包/标段/采购内容")] + [SugarColumn(ColumnName = "table_data_is_multiple")] + public int TableDataIsMultiple { get; set; } + + + /// + /// 描述 :是否仅有一个中标人 + /// 空值 : false + /// + [EpplusTableColumn(Header = "是否仅有一个中标人")] + [SugarColumn(ColumnName = "table_data_is_only_bidder")] + public int TableDataIsOnlyBidder { get; set; } + + + /// + /// 描述 :单一来源理由(如有) + /// 空值 : true + /// + [EpplusTableColumn(Header = "单一来源理由(如有)")] + [SugarColumn(ColumnName = "table_data_single_source")] + public string TableDataSingleSource { get; set; } + + + /// + /// 描述 :详情 + /// 空值 : true + /// + [EpplusTableColumn(Header = "详情")] + [SugarColumn(ColumnName = "table_data_details")] + public string TableDataDetails { get; set; } + + + /// + /// 描述 :排序 + /// 空值 : false + /// + [EpplusTableColumn(Header = "排序")] + [SugarColumn(ColumnName = "table_data_sort")] + public int TableDataSort { get; set; } + + + + + + + } +} \ No newline at end of file diff --git a/ARW.Model/Vo/Business/TableDataManage/TableDatas/TableDataVo.cs b/ARW.Model/Vo/Business/TableDataManage/TableDatas/TableDataVo.cs new file mode 100644 index 0000000..7ae3cd8 --- /dev/null +++ b/ARW.Model/Vo/Business/TableDataManage/TableDatas/TableDataVo.cs @@ -0,0 +1,159 @@ +using Newtonsoft.Json; +using OfficeOpenXml.Attributes; +using SqlSugar; +using System; + +namespace ARW.Model.Vo.Business.TableDataManage.TableDatas +{ + /// + /// 表格数据展示对象 + /// + /// @author lwh + /// @date 2023-11-22 + /// + public class TableDataVo + { + + + /// + /// 描述 : + /// + [EpplusIgnore] + public int TableDataId { get; set; } + + + /// + /// 描述 : + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long TableDataGuid { get; set; } + + + /// + /// 描述 :采购内容 + /// + [EpplusTableColumn(Header = "采购内容")] + public string TableDataProcurementContent { get; set; } + + + /// + /// 描述 :采购单位名称 + /// + [EpplusTableColumn(Header = "采购单位名称")] + public string TableDataProcurementUnit { get; set; } + + + /// + /// 描述 :采购方式 + /// + [EpplusIgnore] + public string TableDataProcurementMethod { get; set; } + + + /// + /// 描述 :供应商名称 + /// + [EpplusIgnore] + public string TableDataSupplierName { get; set; } + + + /// + /// 描述 :供应商的对应报价 + /// + [EpplusIgnore] + public decimal TableDataSupplierOffer { get; set; } + + + /// + /// 描述 :项目计价形式 + /// + [EpplusIgnore] + public string TableDataProjectPricingForm { get; set; } + + + /// + /// 描述 :链接 + /// + [EpplusIgnore] + public string TableDataLink { get; set; } + + + /// + /// 描述 :日期 + /// + [EpplusTableColumn(Header = "日期", NumberFormat = "yyyy-MM-dd HH:mm:ss")] + public DateTime? TableDataDate { get; set; } + + + /// + /// 描述 :截止日期 + /// + [EpplusIgnore] + public DateTime? TableDataDeadline { get; set; } + + + /// + /// 描述 :中标人或候选人 + /// + [EpplusIgnore] + public string TableDataWinningBidde { get; set; } + + + /// + /// 描述 :中标金额 + /// + [EpplusIgnore] + public decimal TableDataBidWinningPrice { get; set; } + + + /// + /// 描述 :是否为中标公告 + /// + [EpplusTableColumn(Header = "是否为中标公告")] + public int TableDataIsBidAnnouncement { get; set; } + + + /// + /// 描述 :是否是人力资源池或框架协议 + /// + [EpplusTableColumn(Header = "是否是人力资源池或框架协议")] + public int TableDataIsHumanResourcePoolOrFrameworkAgreement { get; set; } + + + /// + /// 描述 :公告中是否包含多个包/标段/采购内容 + /// + [EpplusTableColumn(Header = "公告中是否包含多个包/标段/采购内容")] + public int TableDataIsMultiple { get; set; } + + + /// + /// 描述 :是否仅有一个中标人 + /// + [EpplusTableColumn(Header = "是否仅有一个中标人")] + public int TableDataIsOnlyBidder { get; set; } + + + /// + /// 描述 :单一来源理由(如有) + /// + [EpplusIgnore] + public string TableDataSingleSource { get; set; } + + + /// + /// 描述 :详情 + /// + [EpplusIgnore] + public string TableDataDetails { get; set; } + + + /// + /// 描述 :排序 + /// + [EpplusTableColumn(Header = "排序")] + public int TableDataSort { get; set; } + + } +} diff --git a/ARW.Repository/Business/TableDataManage/TableDatas/TableDataRepository.cs b/ARW.Repository/Business/TableDataManage/TableDatas/TableDataRepository.cs new file mode 100644 index 0000000..8be1e8a --- /dev/null +++ b/ARW.Repository/Business/TableDataManage/TableDatas/TableDataRepository.cs @@ -0,0 +1,20 @@ +using System; +using Infrastructure.Attribute; +using ARW.Repository.System; +using ARW.Model.Models.Business.TableDataManage.TableDatas; + +namespace ARW.Repository.Business.TableDataManage.TableDatas +{ + /// + /// 表格数据仓储 + /// + /// @author lwh + /// @date 2023-11-22 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class TableDataRepository : BaseRepository + { + #region 业务逻辑代码 + #endregion + } +} \ No newline at end of file diff --git a/ARW.Service/Business/BusinessService/ProductsInvolveds/ProductsInvolvedService.cs b/ARW.Service/Business/BusinessService/ProductsInvolveds/ProductsInvolvedService.cs index 2d1f7ba..cf38f10 100644 --- a/ARW.Service/Business/BusinessService/ProductsInvolveds/ProductsInvolvedService.cs +++ b/ARW.Service/Business/BusinessService/ProductsInvolveds/ProductsInvolvedService.cs @@ -33,13 +33,13 @@ namespace ARW.Service.Business.BusinessService.ProductsInvolveds this._ProductsInvolvedRepository = ProductsInvolvedRepository; } - #region 业务逻辑代码 - - - /// + #region 业务逻辑代码 + + + /// /// 查询涉及产品分页列表 /// - public async Task> GetProductsInvolvedList(ProductsInvolvedQueryDto parm) + public async Task> GetProductsInvolvedList(ProductsInvolvedQueryDto parm) { //开始拼装查询条件d var predicate = Expressionable.Create(); @@ -48,20 +48,20 @@ namespace ARW.Service.Business.BusinessService.ProductsInvolveds var query = _ProductsInvolvedRepository .Queryable() .Where(predicate.ToExpression()) - .OrderBy(s => s.ProductsInvolvedSort,OrderByType.Asc) + .OrderBy(s => s.ProductsInvolvedSort, OrderByType.Asc) .Select(s => new ProductsInvolvedVo { - ProductsInvolvedId = s.ProductsInvolvedId, - ProductsInvolvedGuid = s.ProductsInvolvedGuid, - ProductsInvolvedName = s.ProductsInvolvedName, - ProductsInvolvedSort = s.ProductsInvolvedSort, - }); - + ProductsInvolvedId = s.ProductsInvolvedId, + ProductsInvolvedGuid = s.ProductsInvolvedGuid, + ProductsInvolvedName = s.ProductsInvolvedName, + ProductsInvolvedSort = s.ProductsInvolvedSort, + }); - return await query.ToPageAsync(parm); + + return await query.ToPageAsync(parm); } - /// + /// /// 添加或修改涉及产品 /// public async Task AddOrUpdateProductsInvolved(ProductsInvolved model) @@ -80,7 +80,7 @@ namespace ARW.Service.Business.BusinessService.ProductsInvolveds } #region Excel处理 - /// + /// /// 数据导入处理 /// public async Task HandleImportData(ProductsInvolvedVo ProductsInvolved) @@ -92,7 +92,7 @@ namespace ARW.Service.Business.BusinessService.ProductsInvolveds /// /// Excel导入 /// - public async Task ImportExcel(ProductsInvolved ProductsInvolved,int index,bool isUpdateSupport,string user) + public async Task ImportExcel(ProductsInvolved ProductsInvolved, int index, bool isUpdateSupport, string user) { try { @@ -103,7 +103,7 @@ namespace ARW.Service.Business.BusinessService.ProductsInvolveds { // 判断唯一值 var model = await GetFirstAsync(s => s.ProductsInvolvedId == ProductsInvolved.ProductsInvolvedId); - + // 如果为空就新增数据 if (model == null) { @@ -131,8 +131,9 @@ namespace ARW.Service.Business.BusinessService.ProductsInvolveds return editStr; } } - else{ - // 开启事务 + else + { + // 开启事务 var res = await UseTranAsync(async () => { var addRes = await AddOrUpdateProductsInvolved(ProductsInvolved); @@ -151,7 +152,7 @@ namespace ARW.Service.Business.BusinessService.ProductsInvolveds } - + /// /// Excel数据导出处理 /// @@ -161,10 +162,10 @@ namespace ARW.Service.Business.BusinessService.ProductsInvolveds } #endregion - -#endregion + + #endregion } } diff --git a/ARW.Service/Business/BusinessService/TableDataManage/TableDatas/TableDataService.cs b/ARW.Service/Business/BusinessService/TableDataManage/TableDatas/TableDataService.cs new file mode 100644 index 0000000..0408170 --- /dev/null +++ b/ARW.Service/Business/BusinessService/TableDataManage/TableDatas/TableDataService.cs @@ -0,0 +1,189 @@ +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Http; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Infrastructure; +using ARW.Model; +using ARW.Repository; +using ARW.Repository.Business.TableDataManage.TableDatas; +using ARW.Service.Business.IBusinessService.TableDataManage.TableDatas; +using ARW.Model.Dto.Business.TableDataManage.TableDatas; +using ARW.Model.Models.Business.TableDataManage.TableDatas; +using ARW.Model.Vo.Business.TableDataManage.TableDatas; + +namespace ARW.Service.Business.BusinessService.TableDataManage.TableDatas +{ + /// + /// 表格数据接口实现类 + /// + /// @author lwh + /// @date 2023-11-22 + /// + [AppService(ServiceType = typeof(ITableDataService), ServiceLifetime = LifeTime.Transient)] + public class TableDataServiceImpl : BaseService, ITableDataService + { + private readonly TableDataRepository _TableDataRepository; + + public TableDataServiceImpl(TableDataRepository TableDataRepository) + { + this._TableDataRepository = TableDataRepository; + } + + #region 业务逻辑代码 + + + /// + /// 查询表格数据分页列表 + /// + public async Task> GetTableDataList(TableDataQueryDto parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.TableDataProcurementContent), s => s.TableDataProcurementContent.Contains(parm.TableDataProcurementContent)); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.TableDataProcurementUnit), s => s.TableDataProcurementUnit.Contains(parm.TableDataProcurementUnit)); + predicate = predicate.AndIF(parm.BeginTime != null && parm.EndTime != null, it => it.TableDataDate >= parm.BeginTime && it.TableDataDate <= parm.EndTime); + predicate = predicate.AndIF(parm.BeginTime != null && parm.EndTime != null, it => it.TableDataDeadline >= parm.BeginTime && it.TableDataDeadline <= parm.EndTime); + var query = _TableDataRepository + .Queryable() + .Where(predicate.ToExpression()) + .OrderBy(s => s.TableDataSort,OrderByType.Asc) + .Select(s => new TableDataVo + { + TableDataId = s.TableDataId, + TableDataGuid = s.TableDataGuid, + TableDataProcurementContent = s.TableDataProcurementContent, + TableDataProcurementUnit = s.TableDataProcurementUnit, + TableDataProcurementMethod = s.TableDataProcurementMethod, + TableDataSupplierName = s.TableDataSupplierName, + TableDataSupplierOffer = s.TableDataSupplierOffer, + TableDataProjectPricingForm = s.TableDataProjectPricingForm, + TableDataLink = s.TableDataLink, + TableDataDate = s.TableDataDate, + TableDataDeadline = s.TableDataDeadline, + TableDataWinningBidde = s.TableDataWinningBidde, + TableDataBidWinningPrice = s.TableDataBidWinningPrice, + TableDataIsBidAnnouncement = s.TableDataIsBidAnnouncement, + TableDataIsHumanResourcePoolOrFrameworkAgreement = s.TableDataIsHumanResourcePoolOrFrameworkAgreement, + TableDataIsMultiple = s.TableDataIsMultiple, + TableDataIsOnlyBidder = s.TableDataIsOnlyBidder, + TableDataSingleSource = s.TableDataSingleSource, + TableDataDetails = s.TableDataDetails, + TableDataSort = s.TableDataSort, + }); + + + return await query.ToPageAsync(parm); + } + + /// + /// 添加或修改表格数据 + /// + public async Task AddOrUpdateTableData(TableData model) + { + if (model.TableDataId != 0) + { + var response = await _TableDataRepository.UpdateAsync(model); + return "修改成功!"; + } + else + { + + var response = await _TableDataRepository.InsertReturnSnowflakeIdAsync(model); + return "添加成功!"; + } + } + + #region Excel处理 + /// + /// 数据导入处理 + /// + public async Task HandleImportData(TableDataVo TableData) + { + return TableData; + } + + + /// + /// Excel导入 + /// + public async Task ImportExcel(TableData TableData,int index,bool isUpdateSupport,string user) + { + try + { + // 空值判断 + // if (TableData.TableDataId == null) throw new CustomException("表格数据不能为空"); + + if (isUpdateSupport) + { + // 判断唯一值 + var model = await GetFirstAsync(s => s.TableDataId == TableData.TableDataId); + + // 如果为空就新增数据 + if (model == null) + { + // 开启事务 + var res = await UseTranAsync(async () => + { + var addRes = await AddOrUpdateTableData(TableData); + }); + var addStr = $"第 {index} 行 => 表格数据:【{TableData.TableDataId}】新增成功!
"; + return addStr; + } + else + { + // 如果有数据就进行修改 + // 开启事务 + await UseTranAsync(async () => + { + TableData.TableDataId = model.TableDataId; + TableData.TableDataGuid = model.TableDataGuid; + TableData.Update_by = user; + TableData.Update_time = DateTime.Now; + var editRes = await AddOrUpdateTableData(TableData); + }); + var editStr = $"第 {index} 行 => 表格数据:【{TableData.TableDataId}】更新成功!
"; + return editStr; + } + } + else{ + // 开启事务 + var res = await UseTranAsync(async () => + { + var addRes = await AddOrUpdateTableData(TableData); + }); + //Console.WriteLine(res.IsSuccess); + var addStr = $"第 {index} 行 => 表格数据:【{TableData.TableDataId}】新增成功!
"; + return addStr; + } + } + catch (Exception ex) + { + var errorRes = $"第 {index} 行 => 表格数据:【{TableData.TableDataId}】导入失败!{ex.Message}
"; + return errorRes; + throw; + } + } + + + + /// + /// Excel数据导出处理 + /// + public async Task> HandleExportData(List data) + { + return data; + } + + #endregion + + + +#endregion + + } +} diff --git a/ARW.Service/Business/IBusinessService/TableDataManage/TableDatas/ITableDataService.cs b/ARW.Service/Business/IBusinessService/TableDataManage/TableDatas/ITableDataService.cs new file mode 100644 index 0000000..fba5fc9 --- /dev/null +++ b/ARW.Service/Business/IBusinessService/TableDataManage/TableDatas/ITableDataService.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Business.TableDataManage.TableDatas; +using ARW.Model.Models.Business.TableDataManage.TableDatas; +using ARW.Model.Vo.Business.TableDataManage.TableDatas; + +namespace ARW.Service.Business.IBusinessService.TableDataManage.TableDatas +{ + /// + /// 表格数据接口类 + /// + /// @author lwh + /// @date 2023-11-22 + /// + public interface ITableDataService : IBaseService + { + /// + /// 获取表格数据分页列表 + /// + /// + /// + Task> GetTableDataList(TableDataQueryDto parm); + + + /// + /// 添加或修改表格数据 + /// + /// + /// + Task AddOrUpdateTableData(TableData parm); + + + /// + /// 数据导入处理 + /// + /// + /// + Task HandleImportData(TableDataVo TableDataVo); + + + /// + /// Excel导入 + /// + /// + /// + Task ImportExcel(TableData TableData,int index,bool isUpdateSupport,string user); + + /// + /// Excel导出 + /// + Task> HandleExportData(List data); + + + } +} diff --git a/ARW.WebApi/Controllers/Business/ProductsInvolveds/ProductsInvolvedController.cs b/ARW.WebApi/Controllers/Business/ProductsInvolveds/ProductsInvolvedController.cs index 7c18325..9d88480 100644 --- a/ARW.WebApi/Controllers/Business/ProductsInvolveds/ProductsInvolvedController.cs +++ b/ARW.WebApi/Controllers/Business/ProductsInvolveds/ProductsInvolvedController.cs @@ -66,7 +66,7 @@ namespace ARW.WebApi.Controllers.Business.ProductsInvolveds { if (parm == null) { throw new CustomException("请求参数错误"); } - var modal = new ProductsInvolved(); + var modal = new ProductsInvolved(); if (parm.ProductsInvolvedId != 0) modal = parm.Adapt().ToUpdate(HttpContext); else modal = parm.Adapt().ToCreate(HttpContext); @@ -88,8 +88,8 @@ namespace ARW.WebApi.Controllers.Business.ProductsInvolveds var response = _ProductsInvolvedService.Delete(idsArr); return SUCCESS("删除成功!"); } - - /// + + /// /// 导入涉及产品 /// /// 使用IFromFile必须使用name属性否则获取不到文件 @@ -98,7 +98,7 @@ namespace ARW.WebApi.Controllers.Business.ProductsInvolveds [HttpPost("importData")] [Log(Title = "涉及产品导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = false)] [ActionPermissionFilter(Permission = "business:productsinvolved:import")] - public async Task ImportExcel([FromForm(Name = "file")] IFormFile formFile,bool updateSupport) + public async Task ImportExcel([FromForm(Name = "file")] IFormFile formFile, bool updateSupport) { var isUpdateSupport = updateSupport; IEnumerable parm = ExcelHelper.ImportData(formFile.OpenReadStream()); @@ -111,7 +111,7 @@ namespace ARW.WebApi.Controllers.Business.ProductsInvolveds var ProductsInvolved = await _ProductsInvolvedService.HandleImportData(item); var modal = ProductsInvolved.Adapt().ToCreate(HttpContext); var user = JwtUtil.GetLoginUser(App.HttpContext).UserName; - var msg = await _ProductsInvolvedService.ImportExcel(modal,i,isUpdateSupport,user); + var msg = await _ProductsInvolvedService.ImportExcel(modal, i, isUpdateSupport, user); msgList.Add(msg); } @@ -137,15 +137,15 @@ namespace ARW.WebApi.Controllers.Business.ProductsInvolveds return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{sFileName}"); } - - /// + + /// /// 导出涉及产品 /// /// [Log(Title = "涉及产品导出", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] [HttpGet("exportProductsInvolved")] [ActionPermissionFilter(Permission = "business:productsinvolved:export")] - public async Task ExportExcel([FromQuery] ProductsInvolvedQueryDto parm) + public async Task ExportExcel([FromQuery] ProductsInvolvedQueryDto parm) { parm.PageSize = 10000; var list = await _ProductsInvolvedService.GetProductsInvolvedList(parm); @@ -164,7 +164,7 @@ namespace ARW.WebApi.Controllers.Business.ProductsInvolveds data = selectDataList; } - + // 导出数据处理 var handleData = await _ProductsInvolvedService.HandleExportData(data); diff --git a/ARW.WebApi/Controllers/Business/TableDataManage/TableDatas/TableDataController.cs b/ARW.WebApi/Controllers/Business/TableDataManage/TableDatas/TableDataController.cs new file mode 100644 index 0000000..9f9ce35 --- /dev/null +++ b/ARW.WebApi/Controllers/Business/TableDataManage/TableDatas/TableDataController.cs @@ -0,0 +1,180 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.Dto.Business.TableDataManage.TableDatas; +using ARW.Service.Business.IBusinessService.TableDataManage.TableDatas; +using ARW.Admin.WebApi.Controllers; +using ARW.Model.Models.Business.TableDataManage.TableDatas; +using ARW.Model.Vo.Business.TableDataManage.TableDatas; +using Microsoft.AspNetCore.Authorization; +using ARW.Admin.WebApi.Framework; + + +namespace ARW.WebApi.Controllers.Business.TableDataManage.TableDatas +{ + /// + /// 表格数据控制器 + /// + /// @author lwh + /// @date 2023-11-22 + /// + [Verify] + [Route("business/[controller]")] + public class TableDataController : BaseController + { + private readonly ITableDataService _TableDataService; + + /// + /// 依赖注入 + /// + /// 表格数据服务 + public TableDataController(ITableDataService TableDataService) + { + _TableDataService = TableDataService; + } + + + /// + /// 获取表格数据列表 + /// + /// 查询参数 + /// + [HttpGet("getTableDataList")] + [ActionPermissionFilter(Permission = "business:tabledata:list")] + public async Task GetTableDataList([FromQuery] TableDataQueryDto parm) + { + var res = await _TableDataService.GetTableDataList(parm); + return SUCCESS(res); + } + + /// + /// 添加或修改表格数据 + /// + /// + /// + [HttpPost("addOrUpdateTableData")] + [ActionPermissionFilter(Permission = "business:tabledata:addOrUpdate")] + [Log(Title = "添加或修改表格数据", BusinessType = BusinessType.ADDORUPDATE)] + public async Task AddOrUpdateTableData([FromBody] TableDataDto parm) + { + if (parm == null) { throw new CustomException("请求参数错误"); } + + var modal = new TableData(); + if (parm.TableDataId != 0) modal = parm.Adapt().ToUpdate(HttpContext); + else modal = parm.Adapt().ToCreate(HttpContext); + + var res = await _TableDataService.AddOrUpdateTableData(modal); + return SUCCESS(res); + } + + /// + /// 删除表格数据 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "business:tabledata:delete")] + [Log(Title = "表格数据删除", BusinessType = BusinessType.DELETE)] + public IActionResult Delete(string ids) + { + long[] idsArr = Tools.SpitLongArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + var response = _TableDataService.Delete(idsArr); + return SUCCESS("删除成功!"); + } + + /// + /// 导入表格数据 + /// + /// 使用IFromFile必须使用name属性否则获取不到文件 + /// 是否需要更新 + /// + [HttpPost("importData")] + [Log(Title = "表格数据导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = false)] + [ActionPermissionFilter(Permission = "business:tabledata:import")] + public async Task ImportExcel([FromForm(Name = "file")] IFormFile formFile, bool updateSupport) + { + var isUpdateSupport = updateSupport; + IEnumerable parm = ExcelHelper.ImportData(formFile.OpenReadStream()); + + var i = 0; + var msgList = new List(); + foreach (TableDataVo item in parm) + { + i++; + var TableData = await _TableDataService.HandleImportData(item); + var modal = TableData.Adapt().ToCreate(HttpContext); + var user = JwtUtil.GetLoginUser(App.HttpContext).UserName; + var msg = await _TableDataService.ImportExcel(modal, i, isUpdateSupport, user); + msgList.Add(msg); + } + + return SUCCESS(msgList.ToArray()); + } + + + /// + /// 表格数据导入模板下载 + /// + /// + [HttpGet("importTemplate")] + [Log(Title = "表格数据模板", BusinessType = BusinessType.EXPORT, IsSaveRequestData = false, IsSaveResponseData = false)] + [AllowAnonymous] + public IActionResult ImportTemplateExcel() + { + List TableData = new List(); + MemoryStream stream = new MemoryStream(); + + // 示例数据 + var values = new List() { "111", "222", "333" }; + string sFileName = DownloadImportTemplate(TableData, stream, "表格数据导入模板", values); + + return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{sFileName}"); + } + + /// + /// 导出表格数据 + /// + /// + [Log(Title = "表格数据导出", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] + [HttpGet("exportTableData")] + [ActionPermissionFilter(Permission = "business:tabledata:export")] + public async Task ExportExcel([FromQuery] TableDataQueryDto parm) + { + parm.PageSize = 10000; + var list = await _TableDataService.GetTableDataList(parm); + var data = list.Result; + + // 选中数据 + if (!string.IsNullOrEmpty(parm.ids)) + { + int[] idsArr = Tools.SpitIntArrary(parm.ids); + var selectDataList = new List(); + foreach (var item in idsArr) + { + var select_data = data.Where(s => s.TableDataId == item).First(); + selectDataList.Add(select_data); + } + data = selectDataList; + } + + + + // 导出数据处理 + var handleData = await _TableDataService.HandleExportData(data); + + string sFileName = ExportExcel(handleData, "TableData", "表格数据列表"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + + + + + } +}