// 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; } }