// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
//
|
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
//
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
|
using Admin.NET.Core.Service;
|
using Microsoft.AspNetCore.Http;
|
|
using Furion.DatabaseAccessor;
|
using Furion.FriendlyException;
|
using Mapster;
|
using SqlSugar;
|
using System.ComponentModel;
|
using System.ComponentModel.DataAnnotations;
|
using Microsoft.AspNetCore.Mvc;
|
using Admin.NET.Application;
|
using Admin.NET.Core;
|
using FZCZTB.NET.MD;
|
using Furion.DynamicApiController;
|
using Furion.DependencyInjection;
|
using System.Collections.Generic;
|
using System.Linq;
|
using NewLife.Xml;
|
using AngleSharp.Dom;
|
using DocumentFormat.OpenXml.Office2010.ExcelAc;
|
using Furion;
|
using System.Security.Claims;
|
using Microsoft.AspNetCore.Authorization;
|
using RazorEngine.Compilation.ImpromptuInterface;
|
using MimeKit;
|
using static SKIT.FlurlHttpClient.Wechat.Api.Events.TransferCustomerServiceReply.Types;
|
using Aop.Api.Domain;
|
namespace FZCZTB.TSCL.Application;
|
|
/// <summary>
|
/// 供应商接口 🧩
|
/// </summary>
|
[ApiDescriptionSettings(ApplicationConst.GroupNameDD, Order = 100)]
|
public class SuplierTendOrderService : IDynamicApiController, ITransient
|
{
|
private readonly SqlSugarRepository<TenderOrder> _TenderOrderRep;
|
private readonly ISqlSugarClient _sqlSugarClient;
|
private readonly SqlSugarRepository<Collection> _CollectionRep;
|
private readonly SqlSugarRepository<SysDictData> _sysDictDataRep;
|
private readonly SqlSugarRepository<TenderOrderBidding> _TenderOrderBiddingRep;
|
|
|
public SuplierTendOrderService(SqlSugarRepository<TenderOrder> TenderOrderRep, ISqlSugarClient sqlSugarClient,
|
SqlSugarRepository<Collection> collectionRep
|
, SqlSugarRepository<SysDictData> sysDictDataRep
|
, SqlSugarRepository<TenderOrderBidding> TenderOrderBiddingRep)
|
{
|
_TenderOrderRep = TenderOrderRep;
|
_sqlSugarClient = sqlSugarClient;
|
_CollectionRep = collectionRep;
|
_sysDictDataRep = sysDictDataRep;
|
_TenderOrderBiddingRep = TenderOrderBiddingRep;
|
}
|
|
|
/// <summary>
|
/// 供应商收藏或者取消收藏 ➕
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[DisplayName("供应商收藏或者取消收藏")]
|
[ApiDescriptionSettings(Name = "AddCollection"), HttpPost]
|
public async Task<bool> AddCollection(SuplierTendOrderInput input)
|
{
|
var entity = new Collection(); ;
|
|
long userId = 0;
|
long? usertrueId = null;
|
if (long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId))
|
{
|
usertrueId = userId;
|
}
|
var RealName = App.User?.FindFirstValue(ClaimConst.RealName);
|
|
var collection = await _CollectionRep.AsQueryable().Where(x =>x.TenderId == input.TenderOrderId).Where(x => x.CreateUserId == userId).FirstAsync();
|
if (input.isColection && collection != null)
|
{
|
return true;
|
}
|
|
if (!input.isColection && collection != null)
|
{
|
return await _CollectionRep.DeleteAsync(collection);
|
}
|
|
|
if (!input.isColection && collection == null)
|
{
|
throw Oops.Oh("不存在的收藏!");
|
}
|
|
if (input.isColection && collection == null)
|
{
|
entity.Id = Guid.NewGuid();
|
entity.CreateTime = DateTime.Now;
|
entity.UpdateTime = DateTime.Now;
|
entity.CreateUserId = usertrueId;
|
entity.CreateUserName = RealName;
|
entity.UpdateUserId = usertrueId;
|
entity.UpdateUserName = RealName;
|
entity.TenderId = input.TenderOrderId;
|
}
|
return await _CollectionRep.InsertAsync(entity);
|
}
|
|
|
|
|
/// <summary>
|
/// 供应商查询收藏 🔖
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[DisplayName("供应商查询收藏")]
|
[ApiDescriptionSettings(Name = "PageCollection"), HttpPost]
|
public async Task<SqlSugarPagedList<TenderOrderOutput>> PageCollection(PageSuplierTendOrderInput input)
|
{
|
long userId = 0;
|
long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId);
|
|
var query = _sqlSugarClient.Queryable<Collection,TenderOrder>((a, b) => a.TenderId == b.Id)
|
.Where((a, b) => a.CreateUserId == userId)
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.ProjectName), (a, b) => b.ProjectName.Contains(input.ProjectName.Trim()))
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Dailijigoumingcheng), (a, b) => b.Dailijigoumingcheng.Contains(input.Dailijigoumingcheng.Trim()))
|
|
|
.Select((a, b) => new TenderOrderOutput
|
{
|
Id = b.Id,
|
ProjectCode = b.ProjectCode,
|
ProjectName = b.ProjectName,
|
ToubiaoEndDate = b.ToubiaoEndDate.HasValue? b.ToubiaoEndDate.Value:DateTime.Now,
|
KaibiaoDate = b.KaibiaoDate.HasValue ? b.KaibiaoDate.Value : DateTime.Now,
|
Xingzhengquyu = b.Xingzhengquyu,
|
XingzhengquyuName = b.XingzhengquyuName,
|
Dailijigoumingcheng = b.Dailijigoumingcheng,
|
ToubiaoStartDate = b.ToubiaoStartDate.HasValue ? b.ToubiaoStartDate.Value : DateTime.Now,
|
FabuDate = b.FabuDate.HasValue ? b.FabuDate.Value : DateTime.Now,
|
});
|
return await query.OrderBuilder(input, "", "KaibiaoDate", true).ToPagedListAsync(input.Page, input.PageSize);
|
}
|
|
|
|
|
/// <summary>
|
/// 获取支付方式集合 🔖
|
/// </summary>
|
/// <returns></returns>
|
[DisplayName("获取支付方式集合")]
|
[ApiDescriptionSettings(Name = "GetFukuanfangshiList"), HttpGet]
|
[AllowAnonymous]
|
public async Task<List<SysDictData>> GetFukuanfangshiList()
|
{
|
return await GetDataListByCode("Fukuanfangshi");
|
}
|
|
|
/// <summary>
|
/// 获取字典值集合 🔖
|
/// </summary>
|
/// <param name="typeId"></param>
|
/// <param name="code"></param>
|
/// <returns></returns>
|
[NonAction]
|
public async Task<List<SysDictData>> GetDataListByCode(string code)
|
{
|
if (string.IsNullOrWhiteSpace(code))
|
throw Oops.Oh(ErrorCodeEnum.D3011);
|
|
var dictType = await _sysDictDataRep.Change<SysDictType>().AsQueryable()
|
.Where(u => u.Status == StatusEnum.Enable)
|
.WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code)
|
.FirstAsync();
|
if (dictType == null) return null;
|
|
|
|
var dictDataList = await _sysDictDataRep.AsQueryable()
|
.Where(u => u.DictTypeId == dictType.Id)
|
.Where(u => u.Status == StatusEnum.Enable)
|
.OrderBy(u => new { u.OrderNo, u.Value, u.Code })
|
.ToListAsync();
|
return dictDataList;
|
}
|
|
|
|
/// <summary>
|
/// 供应商支付报名费 ➕
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[DisplayName("供应商支付报名费")]
|
[ApiDescriptionSettings(Name = "AddBaomingfei"), HttpPost]
|
public async Task<bool> AddBaomingfei(SuplierBaomingfeiInput input)
|
{
|
|
|
long userId = 0;
|
long? usertrueId = null;
|
if (long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId))
|
{
|
usertrueId = userId;
|
}
|
var RealName = App.User?.FindFirstValue(ClaimConst.RealName);
|
|
|
var tenderOrder = await _TenderOrderRep.AsQueryable().Where(x => x.Id == input.TenderOrderId).FirstAsync();
|
if (tenderOrder == null)
|
{
|
throw Oops.Oh("不存在的招标!");
|
}
|
|
|
|
if (tenderOrder.Baomingfei.HasValue && tenderOrder.Baomingfei.Value > 0)
|
{
|
var tenderOrderBidding = await _TenderOrderBiddingRep.AsQueryable().Where(x => x.TenderId == input.TenderOrderId).Where(x => x.CreateUserId == userId).FirstAsync();
|
if(tenderOrderBidding!=null && (tenderOrderBidding.IsTransfer.HasValue && tenderOrderBidding.IsTransfer.Value))
|
{
|
throw Oops.Oh("已经付款!");
|
}
|
|
|
|
if (tenderOrderBidding == null)
|
{
|
tenderOrderBidding = new TenderOrderBidding();
|
tenderOrderBidding.Id = Guid.NewGuid();
|
tenderOrderBidding.TenderId = input.TenderOrderId;
|
//tenderOrderBidding.IsTransfer = true;
|
tenderOrderBidding.Zhifujine = tenderOrder.Baomingfei.Value;
|
tenderOrderBidding.TransferTime = DateTime.Now;
|
tenderOrderBidding.TransferNo = "BMF"+tenderOrderBidding.Id.ToString("N");
|
|
|
tenderOrderBidding.CreateTime = DateTime.Now;
|
tenderOrderBidding.CreateUserId = usertrueId;
|
tenderOrderBidding.CreateUserName = RealName;
|
tenderOrderBidding.UpdateTime = DateTime.Now;
|
tenderOrderBidding.UpdateUserId = usertrueId;
|
tenderOrderBidding.UpdateUserName = RealName;
|
return await _TenderOrderBiddingRep.InsertAsync(tenderOrderBidding);
|
}
|
else
|
{
|
tenderOrderBidding.Zhifujine = tenderOrder.Baomingfei.Value;
|
tenderOrderBidding.TransferTime = DateTime.Now;
|
tenderOrderBidding.TransferNo = "BMF" + tenderOrderBidding.Id.ToString("N");
|
tenderOrderBidding.UpdateTime = DateTime.Now;
|
tenderOrderBidding.UpdateUserId = usertrueId;
|
tenderOrderBidding.UpdateUserName = RealName;
|
return await _TenderOrderBiddingRep.UpdateAsync(tenderOrderBidding);
|
}
|
|
|
|
}
|
else
|
{
|
throw Oops.Oh("无需支付报名费!");
|
}
|
|
}
|
|
|
|
|
/// <summary>
|
/// 供应商上传招标文件 ➕
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[DisplayName("供应商上传招标文件")]
|
[ApiDescriptionSettings(Name = "AddToubiao"), HttpPost]
|
public async Task<bool> AddToubiao(SuplierToubiaoInput input)
|
{
|
|
|
long userId = 0;
|
long? usertrueId = null;
|
if (long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId))
|
{
|
usertrueId = userId;
|
}
|
var RealName = App.User?.FindFirstValue(ClaimConst.RealName);
|
|
var tenderOrderBidding = await _TenderOrderBiddingRep.AsQueryable().Where(x => x.TenderId == input.TenderOrderId).Where(x => x.CreateUserId == userId).FirstAsync();
|
|
var tenderOrder = await _TenderOrderRep.AsQueryable().Where(x => x.Id == input.TenderOrderId).FirstAsync();
|
if(tenderOrder == null)
|
{
|
throw Oops.Oh("不存在的招标!");
|
}
|
if(tenderOrder.Baomingfei.HasValue && tenderOrder.Baomingfei.Value > 0)
|
{
|
if (tenderOrderBidding == null || (!tenderOrderBidding.IsTransfer.HasValue || tenderOrderBidding.IsTransfer.Value == false))
|
{
|
throw Oops.Oh("必须先支付才能投标!");
|
}
|
}
|
|
if(tenderOrderBidding == null)
|
{
|
tenderOrderBidding = new TenderOrderBidding();
|
tenderOrderBidding.Id = Guid.NewGuid();
|
tenderOrderBidding.TenderId = input.TenderOrderId;
|
tenderOrderBidding.Touboaowenjian = input.Touboaowenjian;
|
tenderOrderBidding.IsTransfer = true;
|
tenderOrderBidding.Zhifujine = 0;
|
tenderOrderBidding.CreateTime = DateTime.Now;
|
tenderOrderBidding.CreateUserId = usertrueId;
|
tenderOrderBidding.CreateUserName = RealName;
|
tenderOrderBidding.UpdateTime = DateTime.Now;
|
tenderOrderBidding.UpdateUserId = usertrueId;
|
tenderOrderBidding.UpdateUserName = RealName;
|
return await _TenderOrderBiddingRep.InsertAsync(tenderOrderBidding);
|
}
|
|
tenderOrderBidding.Touboaowenjian = input.Touboaowenjian;
|
tenderOrderBidding.UpdateTime = DateTime.Now;
|
tenderOrderBidding.UpdateUserId = usertrueId;
|
tenderOrderBidding.UpdateUserName = RealName;
|
return await _TenderOrderBiddingRep.UpdateAsync(tenderOrderBidding);
|
}
|
|
|
|
/// <summary>
|
/// 供应商参与的项目查询 🔖
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[DisplayName("供应商参与的项目查询")]
|
[ApiDescriptionSettings(Name = "PageSupplierOrderList"), HttpPost]
|
public async Task<SqlSugarPagedList<TenderOrderOutput>> PageSupplierOrderList(PageSupplierOrderInput input)
|
{
|
long userId = 0;
|
long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId);
|
|
var query = _sqlSugarClient.Queryable<TenderOrderBidding, TenderOrder>((a, b) => a.TenderId == b.Id)
|
.Where((a, b) => a.CreateUserId == userId)
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.ProjectName), (a, b) => b.ProjectName.Contains(input.ProjectName.Trim()))
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Dailijigoumingcheng), (a, b) => b.Dailijigoumingcheng.Contains(input.Dailijigoumingcheng.Trim()))
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Caigourenmingcheng), (a, b) => b.Caigourenmingcheng.Contains(input.Caigourenmingcheng.Trim()))
|
.WhereIF(input.ZhiyiTousu.HasValue && input.ZhiyiTousu.Value, (a, b) => (b.Zhiyi == true || b.Tousu == true) )
|
.WhereIF(input.ZhiyiTousu.HasValue && input.ZhiyiTousu.Value == false, (a, b) => (b.Zhiyi == false || b.Zhiyi == null) && (b.Tousu == false || b.Tousu == null))
|
.WhereIF(input.IsSelected.HasValue && input.IsSelected.Value, (a, b) => a.IsSelected == true )
|
.WhereIF(input.IsSelected.HasValue && input.IsSelected.Value == false, (a, b) => (a.IsSelected == false || a.IsSelected == null) )
|
|
|
.Select((a, b) => new TenderOrderOutput
|
{
|
Id = b.Id,
|
ToubiaoStartDate = b.ToubiaoStartDate.HasValue ? b.ToubiaoStartDate.Value : DateTime.Now,
|
Xingzhengquyu = b.Xingzhengquyu,
|
XingzhengquyuName = b.XingzhengquyuName,
|
ProjectCode = b.ProjectCode,
|
ProjectName = b.ProjectName,
|
Dailijigoumingcheng = b.Dailijigoumingcheng,
|
ToubiaoEndDate = b.ToubiaoEndDate.HasValue ? b.ToubiaoEndDate.Value : DateTime.Now,
|
KaibiaoDate = b.KaibiaoDate.HasValue ? b.KaibiaoDate.Value : DateTime.Now,
|
OrderStatus = b.OrderStatus,
|
IsSelected = a.IsSelected,
|
IsSelectedName = a.IsSelected.HasValue&& a.IsSelected.Value?"是":"否",
|
FabuDate = b.FabuDate.HasValue ? b.FabuDate.Value : DateTime.Now,
|
});
|
|
var pagedList = await query.OrderBuilder(input, "", "KaibiaoDate", true).ToPagedListAsync(input.Page, input.PageSize);
|
var sysDictDatas = await GetDataListByCode("OrderStatus");
|
|
foreach (var tenderOrderOutput in pagedList.Items)
|
{
|
var sysDictData = sysDictDatas.Where(x => x.Value == tenderOrderOutput.OrderStatus.Value.ToString()).FirstOrDefault();
|
if (sysDictData != null)
|
{
|
tenderOrderOutput.OrderStatusName = sysDictData.Label;
|
}
|
}
|
return pagedList;
|
}
|
|
}
|