// 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;
///
/// 供应商接口 🧩
///
[ApiDescriptionSettings(ApplicationConst.GroupNameDD, Order = 100)]
public class SuplierTendOrderService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _TenderOrderRep;
private readonly ISqlSugarClient _sqlSugarClient;
private readonly SqlSugarRepository _CollectionRep;
private readonly SqlSugarRepository _sysDictDataRep;
private readonly SqlSugarRepository _TenderOrderBiddingRep;
public SuplierTendOrderService(SqlSugarRepository TenderOrderRep, ISqlSugarClient sqlSugarClient,
SqlSugarRepository collectionRep
, SqlSugarRepository sysDictDataRep
, SqlSugarRepository TenderOrderBiddingRep)
{
_TenderOrderRep = TenderOrderRep;
_sqlSugarClient = sqlSugarClient;
_CollectionRep = collectionRep;
_sysDictDataRep = sysDictDataRep;
_TenderOrderBiddingRep = TenderOrderBiddingRep;
}
///
/// 供应商收藏或者取消收藏 ➕
///
///
///
[DisplayName("供应商收藏或者取消收藏")]
[ApiDescriptionSettings(Name = "AddCollection"), HttpPost]
public async Task 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);
}
///
/// 供应商查询收藏 🔖
///
///
///
[DisplayName("供应商查询收藏")]
[ApiDescriptionSettings(Name = "PageCollection"), HttpPost]
public async Task> PageCollection(PageSuplierTendOrderInput input)
{
long userId = 0;
long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId);
var query = _sqlSugarClient.Queryable((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);
}
///
/// 获取支付方式集合 🔖
///
///
[DisplayName("获取支付方式集合")]
[ApiDescriptionSettings(Name = "GetFukuanfangshiList"), HttpGet]
[AllowAnonymous]
public async Task> GetFukuanfangshiList()
{
return await GetDataListByCode("Fukuanfangshi");
}
///
/// 获取字典值集合 🔖
///
///
///
///
[NonAction]
public async Task> GetDataListByCode(string code)
{
if (string.IsNullOrWhiteSpace(code))
throw Oops.Oh(ErrorCodeEnum.D3011);
var dictType = await _sysDictDataRep.Change().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;
}
///
/// 供应商支付报名费 ➕
///
///
///
[DisplayName("供应商支付报名费")]
[ApiDescriptionSettings(Name = "AddBaomingfei"), HttpPost]
public async Task 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("无需支付报名费!");
}
}
///
/// 供应商上传招标文件 ➕
///
///
///
[DisplayName("供应商上传招标文件")]
[ApiDescriptionSettings(Name = "AddToubiao"), HttpPost]
public async Task 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);
}
///
/// 供应商参与的项目查询 🔖
///
///
///
[DisplayName("供应商参与的项目查询")]
[ApiDescriptionSettings(Name = "PageSupplierOrderList"), HttpPost]
public async Task> PageSupplierOrderList(PageSupplierOrderInput input)
{
long userId = 0;
long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId);
var query = _sqlSugarClient.Queryable((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;
}
}