// 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; using FZCZTB.NET.MD.CutomerMd.Extend; 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; } long customerExId = 0; long.TryParse(App.User?.FindFirst(ClaimConst.CustomerExId)?.Value, out customerExId); var RealName = App.User?.FindFirstValue(ClaimConst.RealName); var collection = await _CollectionRep.AsQueryable().Where(x =>x.TenderId == input.TenderOrderId).Where(x => x.CusExtendId == customerExId).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.CusExtendId = customerExId; 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); long customerExId = 0; long.TryParse(App.User?.FindFirst(ClaimConst.CustomerExId)?.Value, out customerExId); var query = _sqlSugarClient.Queryable((a, b) => a.TenderId == b.Id) .Where((a, b) => a.CusExtendId == customerExId) .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); // string? CustomerLogoinType = App.User?.FindFirst(ClaimConst.CustomerLogoinType)?.Value; // if (CustomerLogoinType != "GYS" ) // { // throw Oops.Oh("只有登录角色供应商才能支付报名费!"); // } // 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; // tenderOrderBidding.TransferTime = DateTime.Now; // tenderOrderBidding.TransferNo = "BMF"+tenderOrderBidding.Id.ToString("N"); // tenderOrderBidding.TradeNo = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000); // 订单号 // 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.IsTransfer = true; // tenderOrderBidding.Zhifujine = tenderOrder.Baomingfei; // tenderOrderBidding.TransferTime = DateTime.Now; // tenderOrderBidding.TransferNo = "BMF" + tenderOrderBidding.Id.ToString("N"); // tenderOrderBidding.TradeNo = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000); // 订单号 // tenderOrderBidding.UpdateTime = DateTime.Now; // tenderOrderBidding.UpdateUserId = usertrueId; // tenderOrderBidding.UpdateUserName = RealName; // return await _TenderOrderBiddingRep.UpdateAsync(tenderOrderBidding); // } // //} // //else // //{ // // throw Oops.Oh("无需支付报名费!"); // //} //} /// /// 供应商获取代理人的支付信息 ➕ /// /// /// [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); string? CustomerLogoinType = App.User?.FindFirst(ClaimConst.CustomerLogoinType)?.Value; if (CustomerLogoinType != "GYS") { throw Oops.Oh("只有登录角色供应商才能获取代理人的支付信息!"); } var tenderOrder = await _TenderOrderRep.AsQueryable().Where(x => x.Id == input.TenderOrderId).FirstAsync(); if (tenderOrder == null) { throw Oops.Oh("不存在的招标!"); } var cusExtend = await _sqlSugarClient.Queryable().Where(x => x.CustomerId == tenderOrder.CusExtendId ).FirstAsync(); var cusExtend1 = new FBS_CusExtend(); if (cusExtend != null) { cusExtend1.EnterpriseName = cusExtend.EnterpriseName; cusExtend1.BankName = cusExtend.BankName; cusExtend1.BankAccount = cusExtend.BankAccount; cusExtend1.BankAccountIMG = cusExtend.BankAccountIMG; } return cusExtend1; } /// /// 供应商上传招标文件 ➕ /// /// /// [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; } string? CustomerLogoinType = App.User?.FindFirst(ClaimConst.CustomerLogoinType)?.Value; if (CustomerLogoinType != "GYS") { throw Oops.Oh("只有登录角色供应商才能上传招标文件!"); } long customerExId = 0; long.TryParse(App.User?.FindFirst(ClaimConst.CustomerExId)?.Value, out customerExId); var RealName = App.User?.FindFirstValue(ClaimConst.RealName); var tenderOrderBidding = await _TenderOrderBiddingRep.AsQueryable().Where(x => x.TenderId == input.TenderOrderId).Where(x => x.CusExtendId == customerExId).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.TouboaowenjianName = input.TouboaowenjianName; 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; tenderOrderBidding.CusExtendId = customerExId; if( !tenderOrder.Baomingfei.HasValue || tenderOrder.Baomingfei.Value<=0) { tenderOrderBidding.IsTransfer = true; tenderOrderBidding.Zhifujine = 0; tenderOrderBidding.TransferTime = DateTime.Now; tenderOrderBidding.TransferNo = "BMF" + tenderOrderBidding.Id.ToString("N"); tenderOrderBidding.TradeNo = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000); // 订单号 } return await _TenderOrderBiddingRep.InsertAsync(tenderOrderBidding); } tenderOrderBidding.Touboaowenjian = input.Touboaowenjian; tenderOrderBidding.TouboaowenjianName = input.TouboaowenjianName; tenderOrderBidding.UpdateTime = DateTime.Now; tenderOrderBidding.UpdateUserId = usertrueId; tenderOrderBidding.UpdateUserName = RealName; if (!tenderOrder.Baomingfei.HasValue || tenderOrder.Baomingfei.Value <= 0) { tenderOrderBidding.IsTransfer = true; tenderOrderBidding.Zhifujine = 0; tenderOrderBidding.TransferTime = DateTime.Now; tenderOrderBidding.TransferNo = "BMF" + tenderOrderBidding.Id.ToString("N"); tenderOrderBidding.TradeNo = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000); // 订单号 } 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); long customerExId = 0; long.TryParse(App.User?.FindFirst(ClaimConst.CustomerExId)?.Value, out customerExId); var query = _sqlSugarClient.Queryable((a, b) => a.TenderId == b.Id) .Where((a, b) => a.CusExtendId == customerExId) .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; } /// /// 供应商下载中标文件 ➕ /// /// /// [DisplayName("供应商下载中标文件")] [ApiDescriptionSettings(Name = "DownZhongbiao"), HttpPost] public async Task DownZhongbiao(SuplierBaomingfeiInput input) { long userId = 0; long? usertrueId = null; if (long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId)) { usertrueId = userId; } string? CustomerLogoinType = App.User?.FindFirst(ClaimConst.CustomerLogoinType)?.Value; if (CustomerLogoinType != "GYS") { throw Oops.Oh("只有登录角色供应商才能上传招标文件!"); } long customerExId = 0; long.TryParse(App.User?.FindFirst(ClaimConst.CustomerExId)?.Value, out customerExId); 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.OrderStatus !=3) { throw Oops.Oh("只有中标之后才能下载中标文件!"); } var tenderOrderBidding = await _TenderOrderBiddingRep.AsQueryable().Where(x => x.TenderId == input.TenderOrderId).Where(x => x.CusExtendId == customerExId).FirstAsync(); if (tenderOrderBidding == null ) { throw Oops.Oh("不存在的投标!"); } if (!tenderOrderBidding.IsSelected.HasValue && tenderOrderBidding.IsSelected.Value) { throw Oops.Oh("没有中标!"); } if (!tenderOrderBidding.IsDailiTransfer.HasValue && tenderOrderBidding.IsDailiTransfer.Value) { throw Oops.Oh("没有缴纳代理费!"); } var tenderOrderOutput = new TenderOrderOutput(); tenderOrderOutput.Zhongbiaowenjian = tenderOrder.Zhongbiaowenjian; tenderOrderOutput.ZhongbiaowenjianName = tenderOrder.ZhongbiaowenjianName; return tenderOrderOutput; } }