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; using ARW.Model.Models.Business.ProductsInvolveds; using ARW.Model.Models.Business.TableDataManage.TableDataProductsInvolves; using ARW.Repository.Business.TableDataManage.TableDataProductsInvolves; using ARW.Repository.Business.ProductsInvolveds; 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; private readonly TableDataProductsInvolveRepository _TableDataProductsInvolveRepository; private readonly ProductsInvolvedRepository _ProductsInvolveRepository; public TableDataServiceImpl(TableDataRepository TableDataRepository, TableDataProductsInvolveRepository tableDataProductsInvolveRepository, ProductsInvolvedRepository productsInvolveRepository) { this._TableDataRepository = TableDataRepository; _TableDataProductsInvolveRepository = tableDataProductsInvolveRepository; _ProductsInvolveRepository = productsInvolveRepository; } #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, }); var list = await query.ToPageAsync(parm); foreach (var item in list.Result) { var productsInvolvedList = await _TableDataProductsInvolveRepository.GetListAsync(s => s.TableGuid == item.TableDataGuid); if (productsInvolvedList.Count > 0) { var str = ""; List stringId = new List(); foreach (var item1 in productsInvolvedList) { var productsInvolved = await _ProductsInvolveRepository.GetFirstAsync(s => s.ProductsInvolvedId == item1.ProductsInvolvedId); if (productsInvolved != null) { str += productsInvolved.ProductsInvolvedName + ","; stringId.Add(item1.ProductsInvolvedId); } } // 检查字符串是否以逗号结尾 if (str.EndsWith(",")) { // 去掉字符串末尾的逗号 str = str.TrimEnd(','); } item.ProductsInvolvedName = str; item.ProductsInvolvedGuid = stringId; } } return list; } /// /// 添加或修改表格数据 /// public async Task AddOrUpdateTableData(TableData model, TableDataDto dto) { if (model.TableDataId != 0) { var list = await _TableDataProductsInvolveRepository.GetListAsync(s => s.TableGuid == model.TableDataGuid); if (list.Count > 0) { await _TableDataProductsInvolveRepository.DeleteAsync(s => s.TableGuid == model.TableDataGuid); await HandleAddTableDataProductsInvolves(model.TableDataGuid, dto); } var response = await _TableDataRepository.UpdateAsync(model); return "修改成功!"; } else { var response = await _TableDataRepository.InsertReturnSnowflakeIdAsync(model); await HandleAddTableDataProductsInvolves(response, dto); return "添加成功!"; } } /// /// 添加表格数据所属涉及产品 /// /// 商品Model /// public async Task HandleAddTableDataProductsInvolves(long tableGuid, TableDataDto dto) { if (!string.IsNullOrEmpty(dto.ProductsInvolvedGuid)) { var productsInvolvedIds = dto.ProductsInvolvedGuid.Split(','); var productsInvolvedList = new List(); foreach (var id in productsInvolvedIds) { var productsInvolved = new TableDataProductsInvolve { TableGuid = tableGuid, ProductsInvolvedId = Convert.ToInt32(id), Create_time = DateTime.Now, }; productsInvolvedList.Add(productsInvolved); } await _TableDataProductsInvolveRepository.InsertReturnSnowflakeIdAsync(productsInvolvedList); } } #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, new TableDataDto()); }); 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, new TableDataDto()); }); var editStr = $"第 {index} 行 => 表格数据:【{TableData.TableDataId}】更新成功!
"; return editStr; } } else { // 开启事务 var res = await UseTranAsync(async () => { var addRes = await AddOrUpdateTableData(TableData, new TableDataDto()); }); //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 } }