key1_beacon_api/ARW.Service/Business/BusinessService/TableDataManage/TableDatas/TableDataService.cs
2023-11-23 14:17:53 +08:00

359 lines
16 KiB
C#

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;
using Senparc.CO2NET.Extensions;
namespace ARW.Service.Business.BusinessService.TableDataManage.TableDatas
{
/// <summary>
/// 表格数据接口实现类
///
/// @author lwh
/// @date 2023-11-22
/// </summary>
[AppService(ServiceType = typeof(ITableDataService), ServiceLifetime = LifeTime.Transient)]
public class TableDataServiceImpl : BaseService<TableData>, 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
/// <summary>
/// 查询表格数据分页列表
/// </summary>
public async Task<PagedInfo<TableDataVo>> GetTableDataList(TableDataQueryDto parm)
{
//开始拼装查询条件d
var predicate = Expressionable.Create<TableData>();
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,
TableDataDateName = s.TableDataDate.ToString("yyyy/m/d"),
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<int> stringId = new List<int>();
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;
}
/// <summary>
/// 添加或修改表格数据
/// </summary>
public async Task<string> 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 "添加成功!";
}
}
/// <summary>
/// 添加表格数据所属涉及产品
/// </summary>
/// <param name="model">商品Model</param>
/// <returns></returns>
public async Task HandleAddTableDataProductsInvolves(long tableGuid, TableDataDto dto)
{
if (!string.IsNullOrEmpty(dto.ProductsInvolvedGuid))
{
var productsInvolvedIds = dto.ProductsInvolvedGuid.Split(',');
var productsInvolvedList = new List<TableDataProductsInvolve>();
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处理
/// <summary>
/// 数据导入处理
/// </summary>
public async Task<TableDataVo> HandleImportData(TableDataVo TableData)
{
// 空值判断
if (string.IsNullOrEmpty(TableData.TableDataProcurementContent)) throw new CustomException("采购内容不能为空");
if (string.IsNullOrEmpty(TableData.TableDataIsHumanResourcePoolOrFrameworkAgreementName))
throw new CustomException("是否是人力资源池或框架协议不能为空");
else
TableData.TableDataIsHumanResourcePoolOrFrameworkAgreement = GetYesOrNoNum(TableData.TableDataIsHumanResourcePoolOrFrameworkAgreementName);
if (string.IsNullOrEmpty(TableData.TableDataIsBidAnnouncementName))
throw new CustomException("是否为中标公告不能为空");
else
TableData.TableDataIsBidAnnouncement = GetYesOrNoNum(TableData.TableDataIsBidAnnouncementName);
if (string.IsNullOrEmpty(TableData.TableDataIsMultipleName))
throw new CustomException("公告中是否包含多个包/标段/采购内容 不能为空");
else
TableData.TableDataIsMultiple = GetYesOrNoNum(TableData.TableDataIsMultipleName);
if (string.IsNullOrEmpty(TableData.TableDataIsOnlyBidderName))
throw new CustomException("是否仅有一个中标人 不能为空");
else
TableData.TableDataIsOnlyBidder = GetYesOrNoNum(TableData.TableDataIsOnlyBidderName);
if (TableData.TableDataSort == 0) TableData.TableDataSort = 100;
return TableData;
}
private int GetYesOrNoNum(string str)
{
if (str == "是")
return 1;
if (str == "否")
return 2;
return 0;
}
private string GetYesOrNoStr(int num)
{
if (num ==1)
return "是";
if (num == 2)
return "否";
return "";
}
/// <summary>
/// Excel导入
/// </summary>
public async Task<string> ImportExcel(TableDataVo TableDataVo, int index, bool isUpdateSupport, string user)
{
try
{
TableDataVo = await HandleImportData(TableDataVo);
// 表格数据所属涉及产品
var dto = new TableDataDto();
var productsInvolvedIdList = new List<string>();
if (!string.IsNullOrEmpty(TableDataVo.ProductsInvolvedName))
{
var nameList = TableDataVo.ProductsInvolvedName.Split(',').ToList();
foreach (var item in nameList)
{
var productsInvolved = await _ProductsInvolveRepository.GetFirstAsync(s => s.ProductsInvolvedName == item);
if (productsInvolved == null)
throw new CustomException($"{item} 涉及产品不存在!");
else
{
productsInvolvedIdList.Add(productsInvolved.ProductsInvolvedId.ToString());
}
}
if (productsInvolvedIdList.Count > 0)
{
dto.ProductsInvolvedGuid = string.Join(",", productsInvolvedIdList);
}
}
var TableData = new TableData
{
TableDataProcurementContent = TableDataVo.TableDataProcurementContent,
TableDataProcurementUnit = TableDataVo.TableDataProcurementUnit,
TableDataProcurementMethod = TableDataVo.TableDataProcurementMethod,
TableDataSupplierName = TableDataVo.TableDataSupplierName,
TableDataProjectPricingForm = TableDataVo.TableDataProjectPricingForm,
TableDataLink = TableDataVo.TableDataLink,
TableDataDate = TableDataVo.TableDataDate,
TableDataDeadline = TableDataVo.TableDataDeadline,
TableDataWinningBidde = TableDataVo.TableDataWinningBidde,
TableDataBidWinningPrice = TableDataVo.TableDataBidWinningPrice,
TableDataIsBidAnnouncement = TableDataVo.TableDataIsBidAnnouncement,
TableDataIsHumanResourcePoolOrFrameworkAgreement = TableDataVo.TableDataIsHumanResourcePoolOrFrameworkAgreement,
TableDataIsMultiple = TableDataVo.TableDataIsMultiple,
TableDataIsOnlyBidder = TableDataVo.TableDataIsOnlyBidder,
TableDataSingleSource = TableDataVo.TableDataSingleSource,
TableDataDetails = TableDataVo.TableDataDetails,
TableDataSort = TableDataVo.TableDataSort,
};
if (isUpdateSupport)
{
// 判断唯一值
var model = await GetFirstAsync(s => s.TableDataId == TableData.TableDataId);
// 如果为空就新增数据
if (model == null)
{
// 开启事务
var res = await UseTranAsync(async () =>
{
var addRes = await AddOrUpdateTableData(TableData, dto);
});
var addStr = $"第 {index} 行 => 表格数据:【{TableData.TableDataProcurementContent}】<span style='color:#27af49'>新增成功!</span><br>";
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,dto);
});
var editStr = $"第 {index} 行 => 表格数据:【{TableData.TableDataProcurementContent}】<span style='color:#e6a23c'>更新成功!</span><br>";
return editStr;
}
}
else
{
// 开启事务
var res = await UseTranAsync(async () =>
{
var addRes = await AddOrUpdateTableData(TableData,dto);
});
//Console.WriteLine(res.IsSuccess);
var addStr = $"第 {index} 行 => 表格数据:【{TableData.TableDataProcurementContent}】<span style='color:#27af49'>新增成功!</span><br>";
return addStr;
}
}
catch (Exception ex)
{
var errorRes = $"第 {index} 行 => 表格数据:【{TableDataVo.TableDataProcurementContent}】<span style='color:red'>导入失败!{ex.Message}</span><br>";
return errorRes;
throw;
}
}
/// <summary>
/// Excel数据导出处理
/// </summary>
public async Task<List<TableDataVo>> HandleExportData(List<TableDataVo> data)
{
foreach (var item in data)
{
item.TableDataIsBidAnnouncementName = GetYesOrNoStr(item.TableDataIsBidAnnouncement);
item.TableDataIsHumanResourcePoolOrFrameworkAgreementName = GetYesOrNoStr(item.TableDataIsHumanResourcePoolOrFrameworkAgreement);
item.TableDataIsMultipleName = GetYesOrNoStr(item.TableDataIsMultiple);
item.TableDataIsOnlyBidderName = GetYesOrNoStr(item.TableDataIsOnlyBidder);
}
return data;
}
#endregion
#endregion
}
}