移动系统liao
4 天以前 72755602bfa01b6b126b0289582c8eef0eb76d0b
增加微信收款配置
5个文件已修改
15个文件已添加
4927 ■■■■■ 已修改文件
Admin.NET/Admin.NET.Application/Configuration/Database.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/Configuration/Swagger.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/Const/ApplicationConst.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.sln 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/ChangeOrder.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/Collection.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/Neirongfabu.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/TenderOrder.cs 326 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/TenderOrderBidding.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/FZFCGDD.ORDER.Application.csproj 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/Neirongfabu/Dto/NeirongfabuInput.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/Neirongfabu/Dto/NeirongfabuOutput.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/Neirongfabu/NeirongfabuService.cs 302 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/ShouyeGonggao/ShouyeGonggaoService.cs 490 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/SuplierTendOrder/SuplierTendOrderService.cs 392 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/Dto/TenderOrderDto.cs 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/Dto/TenderOrderInput.cs 1155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/Dto/TenderOrderOutput.cs 590 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/TenderOrderService.cs 858 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/Configuration/Database.json
@@ -16,6 +16,7 @@
        //"ConnectionString": "User Id=xxx; Password=xxx; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))", // Oracle
        "ConnectionString": "Server=192.168.18.15;Database=FZCZTB;User Id=SA;Password=123456;Encrypt=True;TrustServerCertificate=True;", // SqlServer
      //  "ConnectionString": "Server=MS-FSEUTNLCXFDB\\SQLEXPRESS;Database=FZCZTB;Encrypt=True;TrustServerCertificate=True;Integrated Security=true;", // SqlServer
        //"SlaveConnectionConfigs": [ // 读写分离/主从
        //    {
        //        "HitRate": 10,
Admin.NET/Admin.NET.Application/Configuration/Swagger.json
@@ -26,6 +26,13 @@
        "Order": 10000
      },
      {
        "Group": "FZFCGDD",
        "Title": "非政府采购订单",
        "Description": "非政府采购订单",
        "Version": "1.0.0",
        "Order": 10001
      },
      {
        "Group": "FZCCustomerGroupName",
        "Title": "前端客户和系统设置",
        "Description": "非政府采购交易平台",
Admin.NET/Admin.NET.Application/Const/ApplicationConst.cs
@@ -16,4 +16,8 @@
    /// </summary>
    public const string GroupName = "FZCCGPT";
    /// <summary>
    /// API分组名称
    /// </summary>
    public const string GroupNameDD = "FZFCGDD";
}
Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj
@@ -62,6 +62,8 @@
  <ItemGroup>
    <ProjectReference Include="..\Admin.NET.Web.Core\Admin.NET.Web.Core.csproj" />
    <ProjectReference Include="..\FZCZTB.TSCL.Application\FZCZTB.TSCL.Application.csproj" />
    <ProjectReference Include="..\FZFCGDD.ORDER.Application\FZFCGDD.ORDER.Application.csproj" />
  </ItemGroup>
</Project>
Admin.NET/Admin.NET.sln
@@ -11,7 +11,7 @@
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Admin.NET.Web.Entry", "Admin.NET.Web.Entry\Admin.NET.Web.Entry.csproj", "{11EA630B-4600-4236-A117-CE6C6CD67586}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Admin.NET.Test", "Admin.NET.Test\Admin.NET.Test.csproj", "{57350E6A-B5A0-452C-9FD4-C69617C6DA30}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Admin.NET.Test", "Admin.NET.Test\Admin.NET.Test.csproj", "{57350E6A-B5A0-452C-9FD4-C69617C6DA30}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{662E0B8E-F23E-4C7D-80BD-CAA5707503CC}"
    ProjectSection(SolutionItems) = preProject
@@ -30,11 +30,13 @@
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Admin.NET.Plugin.K3Cloud", "Plugins\Admin.NET.Plugin.K3Cloud\Admin.NET.Plugin.K3Cloud.csproj", "{72EB89AB-15F7-4F85-88DB-7C2EF7C3D588}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Admin.NET.Plugin.WorkWeixin", "Plugins\Admin.NET.Plugin.WorkWeixin\Admin.NET.Plugin.WorkWeixin.csproj", "{BFE4764F-1FF8-47A7-B4AD-085F7D8CD6C4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Admin.NET.Plugin.WorkWeixin", "Plugins\Admin.NET.Plugin.WorkWeixin\Admin.NET.Plugin.WorkWeixin.csproj", "{BFE4764F-1FF8-47A7-B4AD-085F7D8CD6C4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FZCZTB.TSCL.Application", "FZCZTB.TSCL.Application\FZCZTB.TSCL.Application.csproj", "{8EBCF91D-8A0B-4BF7-A391-ED335CAABAA1}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FZCZTB.TSCL.Application", "FZCZTB.TSCL.Application\FZCZTB.TSCL.Application.csproj", "{8EBCF91D-8A0B-4BF7-A391-ED335CAABAA1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FZCZTB.NET.MD", "FZCZTB.NET.MD\FZCZTB.NET.MD.csproj", "{6D667B23-0499-4352-BCA6-C9F2E388710B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FZCZTB.NET.MD", "FZCZTB.NET.MD\FZCZTB.NET.MD.csproj", "{6D667B23-0499-4352-BCA6-C9F2E388710B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FZFCGDD.ORDER.Application", "FZFCGDD.ORDER.Application\FZFCGDD.ORDER.Application.csproj", "{B3F43995-30FA-47AF-83A0-B37A2669C6A8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FZCZTB.Net.CustomerSYSTem", "FZCZTB.Net.CustomerSYSTem\FZCZTB.Net.CustomerSYSTem.csproj", "{72CBCF69-83C4-44DF-B066-7618D5672B03}"
EndProject
@@ -107,6 +109,10 @@
        {6D667B23-0499-4352-BCA6-C9F2E388710B}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {6D667B23-0499-4352-BCA6-C9F2E388710B}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {6D667B23-0499-4352-BCA6-C9F2E388710B}.Release|Any CPU.Build.0 = Release|Any CPU
        {B3F43995-30FA-47AF-83A0-B37A2669C6A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {B3F43995-30FA-47AF-83A0-B37A2669C6A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {B3F43995-30FA-47AF-83A0-B37A2669C6A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {B3F43995-30FA-47AF-83A0-B37A2669C6A8}.Release|Any CPU.Build.0 = Release|Any CPU
        {72CBCF69-83C4-44DF-B066-7618D5672B03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {72CBCF69-83C4-44DF-B066-7618D5672B03}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {72CBCF69-83C4-44DF-B066-7618D5672B03}.Release|Any CPU.ActiveCfg = Release|Any CPU
Admin.NET/FZCZTB.NET.MD/ChangeOrder.cs
New file
@@ -0,0 +1,68 @@
using Admin.NET.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FZCZTB.NET.MD
{
    /// <summary>
    /// 投诉质疑结果
    /// </summary>
    [SugarTable("FB_ChangeOrder")]
    [IncreTable]
    public partial class ChangeOrder : basemodelNoId
    {
        /// <summary>
        /// 变更ID,主键
        /// </summary>
        [SugarColumn(IsPrimaryKey = true)]
        public Guid Id { get; set; }
        /// <summary>
        /// 招标ID,外键
        /// </summary>
        public Guid TenderId { get; set; }
        /// <summary>
        /// 项目名称
        /// </summary>
        [SugarColumn(Length = 200, IsNullable = false, ColumnDescription = "项目名称")]
        public string ProjectName { get; set; }
        /// <summary>
        /// 变更文件
        /// </summary>
        [SugarColumn(Length = 512, IsNullable = true, ColumnDescription = "变更文件")]
        public string Biangengwenjian { get; set; }
        /// <summary>
        /// 投标报名开始时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "投标报名开始时间")]
        public DateTime? ToubiaoStartDate { get; set; }
        /// <summary>
        /// 投标报名结束时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "投标报名结束时间")]
        public DateTime? ToubiaoEndDate { get; set; }
        /// <summary>
        /// 开标时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "开标时间")]
        public DateTime? KaibiaoDate { get; set; }
        /// <summary>
        /// 开标地点
        /// </summary>
        [SugarColumn(Length = 250, IsNullable = true, ColumnDescription = "开标地点")]
        public string Kaibiaodidian { get; set; }
    }
}
Admin.NET/FZCZTB.NET.MD/Collection.cs
New file
@@ -0,0 +1,33 @@
using Admin.NET.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FZCZTB.NET.MD
{
    /// <summary>
    /// 投诉质疑结果
    /// </summary>
    [SugarTable("FB_Collection")]
    [IncreTable]
    public partial class Collection : basemodelNoId
    {
        /// <summary>
        /// ID,主键
        /// </summary>
        [SugarColumn(IsPrimaryKey = true)]
        public Guid Id { get; set; }
        /// <summary>
        /// 招标ID,外键
        /// </summary>
        [SugarColumn(IsPrimaryKey = true)]
        public Guid TenderId { get; set; }
    }
}
Admin.NET/FZCZTB.NET.MD/Neirongfabu.cs
New file
@@ -0,0 +1,84 @@
using Admin.NET.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FZCZTB.NET.MD
{
    /// <summary>
    /// 投诉质疑结果
    /// </summary>
    [SugarTable("FB_Neirongfabu")]
    [IncreTable]
    public partial class Neirongfabu :  basemodelNoId
    {
        /// <summary>
        /// ID,主键
        /// </summary>
        [SugarColumn(IsPrimaryKey = true)]
        public Guid Id { get; set; }
        /// <summary>
        /// 内容类型
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "内容类型")]
        public int? Leirongneixing { get; set; }
        /// <summary>
        /// 是否发布
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "是否发布")]
        public bool? IsFabu { get; set; }
        /// <summary>
        /// 是否首页显示
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "是否首页显示")]
        public bool? IsShouyexianshi { get; set; }
        /// <summary>
        /// 内容标题
        /// </summary>
        [SugarColumn(Length = 200, IsNullable = false, ColumnDescription = "内容标题")]
        public string NeirongTittle { get; set; }
        /// <summary>
        /// 封面图片
        /// </summary>
        [SugarColumn(Length = 512, IsNullable = true, ColumnDescription = "封面图片")]
        public string Fengmiantupian { get; set; }
        /// <summary>
        /// 排序 越小越靠前
        /// </summary>
        [SugarColumn( IsNullable = true, ColumnDescription = "排序 越小越靠前")]
        public int? Sort { get; set; }
        /// <summary>
        /// 发布时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "发布时间")]
        public DateTime? FabuDate { get; set; }
        /// <summary>
        /// 内容摘要
        /// </summary>
        [SugarColumn(Length = 200, IsNullable = true, ColumnDescription = "内容摘要")]
        public string NeirongZhaiyao { get; set; }
        /// <summary>
        /// 内容描述
        /// </summary>
        [SugarColumn(ColumnDescription = "内容描述", ColumnDataType = StaticConfig.CodeFirst_BigString)]
        public string NeirongMiaoshu { get; set; }
    }
}
Admin.NET/FZCZTB.NET.MD/TenderOrder.cs
New file
@@ -0,0 +1,326 @@
using Admin.NET.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FZCZTB.NET.MD
{
    /// <summary>
    /// 投诉质疑结果
    /// </summary>
    [SugarTable("FB_TenderOrder")]
    [IncreTable]
    public partial class TenderOrder : basemodelNoId
    {
        /// <summary>
        /// 招标ID,主键
        /// </summary>
        [SugarColumn(IsPrimaryKey = true)]
        public Guid Id { get; set; }
        /// <summary>
        /// 项目名称
        /// </summary>
        [SugarColumn(Length = 200, IsNullable = false, ColumnDescription = "项目名称")]
        public string ProjectName { get; set; }
        /// <summary>
        /// 项目编号
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = false, ColumnDescription = "项目编号")]
        public string ProjectCode { get; set; }
        /// <summary>
        /// 行业品目
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "行业品目")]
        public string Hangyepinmu { get; set; }
        /// <summary>
        /// 采购方式
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "采购方式")]
        public string Caigoufangshi { get; set; }
        /// <summary>
        /// 采购遇算
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "采购遇算")]
        public decimal? Caigouyusuan { get; set; }
        /// <summary>
        /// 定标规则
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "定标规则")]
        public string Dingbiaoguize { get; set; }
        /// <summary>
        /// 报名费
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "报名费")]
        public decimal? Baomingfei { get; set; }
        /// <summary>
        /// 投标保证金
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "投标保证金")]
        public decimal? Toubiaobaozhengjin { get; set; }
        /// <summary>
        /// 联合体投标
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "联合体投标")]
        public string Lianhetitoubiao { get; set; }
        /// <summary>
        /// 开标方式
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "开标方式")]
        public string Kaibiaofangshi { get; set; }
        /// <summary>
        /// 是否分包
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "是否分包")]
        public string Shifoufenbao { get; set; }
        /// <summary>
        /// 是否推送宣传
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "是否推送宣传")]
        public string Shifoutuisongxuanchuan { get; set; }
        /// <summary>
        /// 采购人名称
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "采购人名称")]
        public string Caigourenmingcheng { get; set; }
        /// <summary>
        /// 行政区域
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "行政区域")]
        public string Xingzhengquyu { get; set; }
        /// <summary>
        /// 行政区域名称
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "行政区域名称")]
        public string XingzhengquyuName { get; set; }
        /// <summary>
        /// 机构代码
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "机构代码")]
        public string Jigoudaima { get; set; }
        /// <summary>
        /// 代码类型
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "代码类型")]
        public string Daimaleixing { get; set; }
        /// <summary>
        /// 联系人
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "联系人")]
        public string Lianxiren { get; set; }
        /// <summary>
        /// 联系电话
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "联系电话")]
        public string Lianxidianhua { get; set; }
        /// <summary>
        /// 通信地址
        /// </summary>
        [SugarColumn(Length = 250, IsNullable = true, ColumnDescription = "通信地址")]
        public string Tongxindizhi { get; set; }
        /// <summary>
        /// 电子邮件
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "电子邮件")]
        public string Dianziyoujian { get; set; }
        /// <summary>
        /// 项目经办人
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "项目经办人")]
        public string Xiangmujingbanren { get; set; }
        /// <summary>
        /// 职务
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "职务")]
        public string Zhiwu { get; set; }
        /// <summary>
        /// 经办人电话
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "经办人电话")]
        public string Jingbanrendianhua { get; set; }
        /// <summary>
        /// 代理机构名称
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "代理机构名称")]
        public string Dailijigoumingcheng { get; set; }
        /// <summary>
        /// 代理机构联系人
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "代理机构联系人")]
        public string DailiLianxiren { get; set; }
        /// <summary>
        /// 代理机构联系电话
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "代理机构联系电话")]
        public string DailiLianxidianhua { get; set; }
        /// <summary>
        /// 代理机构电子邮件
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "代理机构电子邮件")]
        public string DailiDianziyoujian { get; set; }
        /// <summary>
        /// 代理机构通信地址
        /// </summary>
        [SugarColumn(Length = 250, IsNullable = true, ColumnDescription = "代理机构通信地址")]
        public string DailiTongxindizhi { get; set; }
        /// <summary>
        /// 代理机构项目经理
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "代理机构项目经理")]
        public string DailiXiangmujingli { get; set; }
        /// <summary>
        /// 代理机构项目经理联系电话
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "代理机构项目经理联系电话")]
        public string DailijingliLianxidianhua { get; set; }
        /// <summary>
        /// 质疑有无
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "质疑有无")]
        public bool? Zhiyi { get; set; }
        /// <summary>
        /// 投诉有无
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "投诉有无")]
        public bool? Tousu { get; set; }
        /// <summary>
        /// 订单状态
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "订单状态")]
        public int? OrderStatus { get; set; }
        /// <summary>
        /// 投标报名开始时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "投标报名开始时间")]
        public DateTime? ToubiaoStartDate { get; set; }
        /// <summary>
        /// 投标报名结束时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "投标报名结束时间")]
        public DateTime? ToubiaoEndDate { get; set; }
        /// <summary>
        /// 开标时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "开标时间")]
        public DateTime? KaibiaoDate { get; set; }
        /// <summary>
        /// 发布时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "发布时间")]
        public DateTime? FabuDate { get; set; }
        /// <summary>
        /// 招标文件
        /// </summary>
        [SugarColumn(Length = 512, IsNullable = true, ColumnDescription = "招标文件")]
        public string Zhaobiaowenjian { get; set; }
        /// <summary>
        /// 附件
        /// </summary>
        [SugarColumn(Length = 512, IsNullable = true, ColumnDescription = "附件")]
        public string Fujian { get; set; }
        /// <summary>
        /// 开标地点
        /// </summary>
        [SugarColumn(Length = 250, IsNullable = true, ColumnDescription = "开标地点")]
        public string Kaibiaodidian { get; set; }
        /// <summary>
        /// 中标供应商Id
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "中标供应商Id")]
        public  long? ZhongbiaoId { get; set; }
        /// <summary>
        /// 中标供应商姓名
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "中标供应商姓名", Length = 100)]
        public  string ZhongbiaoName { get; set; }
        /// <summary>
        /// 专家Id
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "专家Id", Length = 500)]
        public  string ZhuanjiaId { get; set; }
        /// <summary>
        /// 专家姓名
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "专家姓名", Length = 500)]
        public   string ZhuanjiaName { get; set; }
        /// <summary>
        /// 中标文件
        /// </summary>
        [SugarColumn(Length = 512, IsNullable = true, ColumnDescription = "中标文件")]
        public string Zhongbiaowenjian { get; set; }
        /// <summary>
        /// 中标时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "中标时间")]
        public DateTime? ZhongbiaoDate { get; set; }
        /// <summary>
        /// 中标tittle
        /// </summary>
        [SugarColumn(Length = 200, IsNullable = true, ColumnDescription = "中标tittle")]
        public string ZhongbiaoTittle { get; set; }
    }
}
Admin.NET/FZCZTB.NET.MD/TenderOrderBidding.cs
New file
@@ -0,0 +1,86 @@
using Admin.NET.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FZCZTB.NET.MD
{
    /// <summary>
    /// 投诉质疑结果
    /// </summary>
    [SugarTable("FB_TenderOrderBidding")]
    [IncreTable]
    public partial class TenderOrderBidding : basemodelNoId
    {
        /// <summary>
        /// 投标ID,主键
        /// </summary>
        [SugarColumn(IsPrimaryKey = true)]
        public Guid Id { get; set; }
        /// <summary>
        /// 招标ID
        /// </summary>
        [SugarColumn(ColumnDescription = "招标ID")]
        public Guid TenderId { get; set; }
        /// <summary>
        /// 投标文件
        /// </summary>
        [SugarColumn(Length = 512, IsNullable = true, ColumnDescription = "投标文件")]
        public string Touboaowenjian { get; set; }
        /// <summary>
        /// 是否中标
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "是否中标")]
        public bool? IsSelected { get; set; }
        /// <summary>
        /// 中标时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "中标时间")]
        public  DateTime? SelectedTime { get; set; }
        /// <summary>
        /// 是否支付
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "是否支付")]
        public bool? IsTransfer { get; set; }
        /// <summary>
        /// 支付时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "支付时间")]
        public DateTime? TransferTime { get; set; }
        /// <summary>
        /// 支付编号
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = true, ColumnDescription = "支付编号")]
        public string TransferNo { get; set; }
        /// <summary>
        ///支付金额
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "支付金额")]
        public decimal? Zhifujine { get; set; }
        /// <summary>
        /// 支付返回标号
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = true, ColumnDescription = "支付返回标号")]
        public string TradeNo { get; set; }
    }
}
Admin.NET/FZFCGDD.ORDER.Application/FZFCGDD.ORDER.Application.csproj
New file
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <GenerateDocumentationFile>True</GenerateDocumentationFile>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\Admin.NET.Application\Admin.NET.Application.csproj" />
    <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
    <ProjectReference Include="..\FZCZTB.NET.MD\FZCZTB.NET.MD.csproj" />
    <ProjectReference Include="..\Plugins\Admin.NET.Plugin.ApprovalFlow\Admin.NET.Plugin.ApprovalFlow.csproj" />
    <ProjectReference Include="..\Plugins\Admin.NET.Plugin.DingTalk\Admin.NET.Plugin.DingTalk.csproj" />
    <ProjectReference Include="..\Plugins\Admin.NET.Plugin.GoView\Admin.NET.Plugin.GoView.csproj" />
  </ItemGroup>
</Project>
Admin.NET/FZFCGDD.ORDER.Application/Service/Neirongfabu/Dto/NeirongfabuInput.cs
New file
@@ -0,0 +1,107 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Admin.NET.Core;
using System.ComponentModel.DataAnnotations;
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Excel;
using FZCZTB.NET.MD;
using SqlSugar;
namespace FZFCGDD.ORDER.Application.Service.Neirongfabu.Dto;
/// <summary>
/// 内容发布基础输入参数
/// </summary>
public class NeirongfabuInput
{
    /// <summary>
    /// ID,主键
    /// </summary>
    [SugarColumn(IsPrimaryKey = true)]
    public Guid Id { get; set; }
    /// <summary>
    /// 内容类型
    /// </summary>
    [Required(ErrorMessage = "内容类型不能为空")]
    public int Leirongneixing { get; set; }
    /// <summary>
    /// 是否发布
    /// </summary>
    [Required(ErrorMessage = "是否发布不能为空")]
    public bool IsFabu { get; set; }
    /// <summary>
    /// 是否首页显示
    /// </summary>
    [Required(ErrorMessage = "是否首页显示不能为空")]
    public bool IsShouyexianshi { get; set; }
    /// <summary>
    /// 内容标题
    /// </summary>
    [Required(ErrorMessage = "内容标题不能为空")]
    public string NeirongTittle { get; set; }
    /// <summary>
    /// 封面图片
    /// </summary>
    public string Fengmiantupian { get; set; }
    /// <summary>
    /// 排序 越小越靠前
    /// </summary>
    public int? Sort { get; set; }
    /// <summary>
    /// 发布时间
    /// </summary>
    [Required(ErrorMessage = "发布时间不能为空")]
    public DateTime FabuDate { get; set; }
    /// <summary>
    /// 内容摘要
    /// </summary>
    public string NeirongZhaiyao { get; set; }
    /// <summary>
    /// 内容描述
    /// </summary>
    [Required(ErrorMessage = "内容描述不能为空")]
    public string NeirongMiaoshu { get; set; }
}
/// <summary>
/// 内容发布分页查询输入参数
/// </summary>
public class PageNeirongfabuInput : BasePageInput
{
    /// <summary>
    /// 发布日期范围
    /// </summary>
    public DateTime?[] CreateDateRange { get; set; }
    /// <summary>
    /// 内容类型
    /// </summary>
    public int? Leirongneixing { get; set; }
    /// <summary>
    /// 内容标题
    /// </summary>
    public string NeirongTittle { get; set; }
}
Admin.NET/FZFCGDD.ORDER.Application/Service/Neirongfabu/Dto/NeirongfabuOutput.cs
New file
@@ -0,0 +1,117 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Admin.NET.Core;
using System.ComponentModel.DataAnnotations;
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Excel;
using FZCZTB.NET.MD;
using SqlSugar;
namespace FZFCGDD.ORDER.Application.Service.Neirongfabu.Dto;
/// <summary>
/// 内容发布基础输出参数
/// </summary>
public class NeirongfabuOutput
{
    /// <summary>
    /// ID,主键
    /// </summary>
    public Guid Id { get; set; }
    /// <summary>
    /// 内容类型
    /// </summary>
    public int? Leirongneixing { get; set; }
    /// <summary>
    /// 内容类型名称
    /// </summary>
    public string LeirongneixingName { get; set; }
    /// <summary>
    /// 是否发布
    /// </summary>
    public bool? IsFabu { get; set; }
    /// <summary>
    /// 是否首页显示名称
    /// </summary>
    public string IsFabuName { get; set; }
    /// <summary>
    /// 是否首页显示
    /// </summary>
    public bool? IsShouyexianshi { get; set; }
    /// <summary>
    /// 是否首页显示名称
    /// </summary>
    public string IsShouyexianshiName { get; set; }
    /// <summary>
    /// 内容标题
    /// </summary>
    public string NeirongTittle { get; set; }
    /// <summary>
    /// 封面图片
    /// </summary>
    public string Fengmiantupian { get; set; }
    /// <summary>
    /// 排序 越小越靠前
    /// </summary>
    public int? Sort { get; set; }
    /// <summary>
    /// 发布时间
    /// </summary>
    public DateTime? FabuDate { get; set; }
    /// <summary>
    /// 内容摘要
    /// </summary>
    public string NeirongZhaiyao { get; set; }
    /// <summary>
    /// 内容描述
    /// </summary>
    public string NeirongMiaoshu { get; set; }
    /// <summary>
    /// 创建时间
    /// </summary>
    public DateTime? CreateTime { get; set; }
    /// <summary>
    /// 更新时间
    /// </summary>
    public DateTime? UpdateTime { get; set; }
    /// <summary>
    /// 创建者Id
    /// </summary>
    public long? CreateUserId { get; set; }
    /// <summary>
    /// 创建者姓名
    /// </summary>
    public string? CreateUserName { get; set; }
    /// <summary>
    /// 修改者Id
    /// </summary>
    public long? UpdateUserId { get; set; }
    /// <summary>
    /// 修改者姓名
    /// </summary>
    public string? UpdateUserName { get; set; }
}
Admin.NET/FZFCGDD.ORDER.Application/Service/Neirongfabu/NeirongfabuService.cs
New file
@@ -0,0 +1,302 @@
// 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 FZCZTB.TSCL.Application.ChangeTenderOrderOut;
using FZFCGDD.ORDER.Application.Service.Neirongfabu.Dto;
namespace FZCZTB.TSCL.Application;
/// <summary>
/// 内容发布接口 🧩
/// </summary>
[ApiDescriptionSettings(ApplicationConst.GroupNameDD, Order = 100)]
public class NeirongfabuService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<SysDictData> _sysDictDataRep;
    private readonly SqlSugarRepository<Neirongfabu> _neirongfabu;
    private readonly ISqlSugarClient _sqlSugarClient;
    public NeirongfabuService(SqlSugarRepository<SysDictData> sysDictDataRep
     , SqlSugarRepository<Neirongfabu> neirongfabu
        , ISqlSugarClient sqlSugarClient)
    {
        _sysDictDataRep = sysDictDataRep;
        _neirongfabu = neirongfabu;
        _sqlSugarClient = sqlSugarClient;
    }
    /// <summary>
    /// 获取内容类型集合 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取内容类型集合")]
    [ApiDescriptionSettings(Name = "GetLeirongneixingList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<SysDictData>> GetLeirongneixingList()
    {
        return await GetDataListByCode("Leirongneixing");
    }
    /// <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 = "Page"), HttpPost]
    public async Task<SqlSugarPagedList<NeirongfabuOutput>> Page(PageNeirongfabuInput input)
    {
        long userId = 0;
        long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId);
        var query = _neirongfabu.AsQueryable()
                        .WhereIF(input.CreateDateRange != null && input.CreateDateRange.Length == 2, u => u.FabuDate >= input.CreateDateRange[0] && u.FabuDate <= input.CreateDateRange[1])
              .WhereIF(input.Leirongneixing.HasValue, u => u.Leirongneixing == input.Leirongneixing)
                        .WhereIF(!string.IsNullOrWhiteSpace(input.NeirongTittle), u => u.NeirongTittle.Contains(input.NeirongTittle.Trim()))
            .Select(x => new NeirongfabuOutput
            {
                Id = x.Id,
                Leirongneixing = x.Leirongneixing,
                IsFabu = x.IsFabu,
                IsShouyexianshi = x.IsShouyexianshi,
                NeirongTittle = x.NeirongTittle,
                Fengmiantupian = x.Fengmiantupian,
                Sort = x.Sort,
                FabuDate = x.FabuDate,
                NeirongZhaiyao = x.NeirongZhaiyao,
                // NeirongMiaoshu = x.NeirongMiaoshu,
                CreateTime = x.CreateTime,
                UpdateTime = x.UpdateTime,
                CreateUserId = x.CreateUserId,
                CreateUserName = x.CreateUserName,
                UpdateUserId = x.UpdateUserId,
                UpdateUserName = x.UpdateUserName,
            });
        var pagedList = await query.OrderBuilder(input, "", "Sort", false).ToPagedListAsync(input.Page, input.PageSize);
        var sysDictDatas = await GetDataListByCode("Leirongneixing");
        foreach (var neirongfabuOutput in pagedList.Items)
        {
            var sysDictData = sysDictDatas.Where(x => x.Value == neirongfabuOutput.Leirongneixing.Value.ToString()).FirstOrDefault();
            if (sysDictData != null)
            {
                neirongfabuOutput.LeirongneixingName = sysDictData.Label;
            }
            if(neirongfabuOutput.IsFabu.HasValue && neirongfabuOutput.IsFabu.Value)
            {
                neirongfabuOutput.IsFabuName = "是";
            }
            else
            {
                neirongfabuOutput.IsFabuName = "否";
            }
            if (neirongfabuOutput.IsShouyexianshi.HasValue && neirongfabuOutput.IsShouyexianshi.Value)
            {
                neirongfabuOutput.IsShouyexianshiName = "是";
            }
            else
            {
                neirongfabuOutput.IsShouyexianshiName = "否";
            }
        }
        return pagedList;
    }
    /// <summary>
    /// 获取内容发布详情 ℹ️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("获取内容发布详情")]
    [ApiDescriptionSettings(Name = "Detail"), HttpGet]
    public async Task<NeirongfabuOutput> Detail([FromQuery] QueryByIdTenderOrderInput input)
    {
        var Leirongneixing = await GetDataListByCode("Leirongneixing");
        var neirongfabuOutput = await _neirongfabu.AsQueryable().Where(x => x.Id == input.Id).Select<NeirongfabuOutput>().FirstAsync();
        if (neirongfabuOutput != null)
        {
            if (neirongfabuOutput.Leirongneixing.HasValue)
            {
                neirongfabuOutput.LeirongneixingName = Leirongneixing.Where(x => x.Value == neirongfabuOutput.Leirongneixing.Value.ToString()).Select(x => x.Label).FirstOrDefault() ?? "";
            }
            if (neirongfabuOutput.IsFabu.HasValue && neirongfabuOutput.IsFabu.Value)
            {
                neirongfabuOutput.IsFabuName = "是";
            }
            else
            {
                neirongfabuOutput.IsFabuName = "否";
            }
            if (neirongfabuOutput.IsShouyexianshi.HasValue && neirongfabuOutput.IsShouyexianshi.Value)
            {
                neirongfabuOutput.IsShouyexianshiName = "是";
            }
            else
            {
                neirongfabuOutput.IsShouyexianshiName = "否";
            }
        }
        return neirongfabuOutput;
    }
    /// <summary>
    /// 新增内容发布 ➕
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("新增内容发布")]
    [ApiDescriptionSettings(Name = "Add"), HttpPost]
    public async Task<bool> Add(NeirongfabuInput input)
    {
        var entity = input.Adapt<Neirongfabu>();
        entity.Id = Guid.NewGuid();
        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);
        entity.CreateTime = DateTime.Now;
        entity.UpdateTime = DateTime.Now;
        entity.CreateUserId = usertrueId;
        entity.CreateUserName = RealName;
        entity.UpdateUserId = usertrueId;
        entity.UpdateUserName = RealName;
        return await _neirongfabu.InsertAsync(entity);
    }
    /// <summary>
    /// 修改内容发布 ✏️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("修改内容发布")]
    [ApiDescriptionSettings(Name = "Update"), HttpPost]
    public async Task Update(NeirongfabuInput input)
    {
        var entity = input.Adapt<Neirongfabu>();
        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);
        entity.UpdateTime = DateTime.Now;
        entity.UpdateUserId = usertrueId;
        entity.UpdateUserName = RealName;
        await _neirongfabu.UpdateAsync(entity);
    }
    /// <summary>
    /// 删除内容发布 ❌
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("删除内容发布")]
    [ApiDescriptionSettings(Name = "Delete"), HttpPost]
    public async Task Delete(DeleteTenderOrderInput input)
    {
        //var entity = await _TenderOrderRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        var entity = await _sqlSugarClient.Queryable<Neirongfabu>().Where(x => x.Id == input.Id).FirstAsync() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        //await _TenderOrderRep.FakeDeleteAsync(entity);   //假删除
        await _neirongfabu.DeleteAsync(entity);   //真删除
    }
    /// <summary>
    /// 批量删除内容发布 ❌
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("批量删除内容发布")]
    [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost]
    public async Task<bool> BatchDelete([Required(ErrorMessage = "主键列表不能为空")] List<DeleteTenderOrderInput> input)
    {
        var exp = Expressionable.Create<Neirongfabu>();
        foreach (var row in input) exp = exp.Or(it => it.Id == row.Id);
        var list = await _neirongfabu.AsQueryable().Where(exp.ToExpression()).ToListAsync();
        // return await _TenderOrderRep.FakeDeleteAsync(list);   //假删除
        return await _neirongfabu.DeleteAsync(list);   //真删除
    }
}
Admin.NET/FZFCGDD.ORDER.Application/Service/ShouyeGonggao/ShouyeGonggaoService.cs
New file
@@ -0,0 +1,490 @@
// 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 FZFCGDD.ORDER.Application.Service.Neirongfabu.Dto;
namespace FZCZTB.TSCL.Application;
/// <summary>
/// 首页接口 🧩
/// </summary>
[ApiDescriptionSettings(ApplicationConst.GroupNameDD, Order = 100)]
public class ShouyeGonggaoService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<TenderOrder> _TenderOrderRep;
    private readonly ISqlSugarClient _sqlSugarClient;
    private readonly SqlSugarRepository<Collection> _CollectionRep;
    private readonly SqlSugarRepository<SysDictData> _sysDictDataRep;
    private readonly SqlSugarRepository<ChangeOrder> _ChangeOrderRep;
    private readonly SqlSugarRepository<Neirongfabu> _neirongfabuRep;
    public ShouyeGonggaoService(SqlSugarRepository<TenderOrder> TenderOrderRep, ISqlSugarClient sqlSugarClient,
        SqlSugarRepository<Collection> collectionRep, SqlSugarRepository<SysDictData> sysDictDataRep
        , SqlSugarRepository<ChangeOrder> changeOrderRep
        , SqlSugarRepository<Neirongfabu> neirongfabuRep)
    {
        _TenderOrderRep = TenderOrderRep;
        _sqlSugarClient = sqlSugarClient;
        _CollectionRep = collectionRep;
        _sysDictDataRep = sysDictDataRep;
        _ChangeOrderRep = changeOrderRep;
        _neirongfabuRep = neirongfabuRep;
    }
    /// <summary>
    /// 首页查询非政府订单处理 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("首页查询非政府订单处理")]
    [AllowAnonymous]
    [ApiDescriptionSettings(Name = "ShouyeOrder"), HttpPost]
    public async Task<List<TenderOrderOutput>> ShouyeOrder()//SHouyeTenderOrderInput input
    {
        var query = _TenderOrderRep.AsQueryable().Where(x => (x.OrderStatus == 2 || x.OrderStatus == 3))
            // .WhereIF(!string.IsNullOrWhiteSpace(input.Hangyepinmu), u => u.Hangyepinmu == input.Hangyepinmu.Trim())
            .OrderByDescending(x => x.FabuDate)
            .Take(7)
                .Select<TenderOrderOutput>();
        return await query.ToListAsync();
    }
    /// <summary>
    /// 首页变更公告 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("首页变更公告")]
    [AllowAnonymous]
    [ApiDescriptionSettings(Name = "ShouyeChangeOrder"), HttpPost]
    public async Task<List<ChangeTenderOrderOut>> ShouyeChangeOrder()//SHouyeTenderOrderInput input
    {
        var query = _ChangeOrderRep.AsQueryable()
            .OrderByDescending(x => x.CreateTime)
            .Select(x => new ChangeTenderOrderOut { Id = x.Id, TenderId = x.TenderId, ProjectName = x.ProjectName, ToubiaoStartDate = x.ToubiaoStartDate.Value, ToubiaoEndDate = x.ToubiaoEndDate.Value, KaibiaoDate = x.KaibiaoDate.Value, Biangengwenjian = x.Biangengwenjian, Kaibiaodidian = x.Kaibiaodidian, CreateTime = x.CreateTime })
            .Take(7);
        return await query.ToListAsync();
    }
    /// <summary>
    /// 首页中标公告 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("首页中标公告")]
    [AllowAnonymous]
    [ApiDescriptionSettings(Name = "ShouyeZhongbiaoOrder"), HttpPost]
    public async Task<List<TenderOrderOutput>> ShouyeZhongbiaoOrder()//SHouyeTenderOrderInput input
    {
        var query = _TenderOrderRep.AsQueryable().Where(x =>   x.OrderStatus == 3 )
            // .WhereIF(!string.IsNullOrWhiteSpace(input.Hangyepinmu), u => u.Hangyepinmu == input.Hangyepinmu.Trim())
            .OrderByDescending(x => x.ZhongbiaoDate)
            .Take(7)
                .Select<TenderOrderOutput>();
        return await query.ToListAsync();
    }
    /// <summary>
    /// 首页公告信息-招采公告 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("首页公告信息-招采公告")]
    [AllowAnonymous]
    [ApiDescriptionSettings(Name = "PageGonggao"), HttpPost]
    public async Task<SqlSugarPagedList<TenderOrderOutput>> PageGonggao(PageShouyeTendOrderInput input)
    {
        long userId = 0;
        long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId);
        var query = _sqlSugarClient.Queryable< TenderOrder>()
            //.Where((a, b) => a.CreateUserId == userId)
            .Where(x => (x.OrderStatus == 2 || x.OrderStatus == 3))
                      .WhereIF(!string.IsNullOrWhiteSpace(input.ProjectName), b=> b.ProjectName.Contains(input.ProjectName.Trim()))
                       .WhereIF(input.CreateDateRange != null && input.CreateDateRange.Length == 2, u => u.FabuDate >= input.CreateDateRange[0] && u.FabuDate <= input.CreateDateRange[1])
            .Select(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,
                Caigoufangshi = b.Caigoufangshi,
            });
        var pagedList = await query.OrderBuilder(input, "", "KaibiaoDate", true).ToPagedListAsync(input.Page, input.PageSize);
        var sysDictDatas = await GetDataListByCode("Caigoufangshi");
        foreach (var tenderOrderOutput in pagedList.Items)
        {
           var sysDictData = sysDictDatas.Where(x => x.Value == tenderOrderOutput.Caigoufangshi).FirstOrDefault();
            if (sysDictData != null)
            {
                tenderOrderOutput.CaigoufangshiName = sysDictData.Label;
            }
        }
        return pagedList;
    }
    /// <summary>
    /// 首页公告信息-更正公告 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("首页公告信息-更正公告")]
    [AllowAnonymous]
    [ApiDescriptionSettings(Name = "PageGengzgeng"), HttpPost]
    public async Task<SqlSugarPagedList<TenderOrderOutput>> PageGengzgeng(PageShouyeTendOrderInput input)
    {
        long userId = 0;
        long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId);
        var query = _sqlSugarClient.Queryable<ChangeOrder, TenderOrder>((a, b) => a.TenderId == b.Id)
            //.Where((a, b) => a.CreateUserId == userId)
                      .WhereIF(!string.IsNullOrWhiteSpace(input.ProjectName), (a, b) => a.ProjectName.Contains(input.ProjectName.Trim()))
                       .WhereIF(input.CreateDateRange != null && input.CreateDateRange.Length == 2, (a, b) => a.CreateTime >= input.CreateDateRange[0] && a.CreateTime <= input.CreateDateRange[1])
            .Select((a, b) => new TenderOrderOutput
            {
                Id = b.Id,
                ProjectCode = b.ProjectCode,
                ProjectName = a.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,
                CreateTime = a.CreateTime,
                Caigoufangshi = b.Caigoufangshi,
            });
        var pagedList = await query.OrderBuilder(input, "", "a.CreateTime", true).ToPagedListAsync(input.Page, input.PageSize);
        var sysDictDatas = await GetDataListByCode("Caigoufangshi");
        foreach (var tenderOrderOutput in pagedList.Items)
        {
            var sysDictData = sysDictDatas.Where(x => x.Value == tenderOrderOutput.Caigoufangshi).FirstOrDefault();
            if (sysDictData != null)
            {
                tenderOrderOutput.CaigoufangshiName = sysDictData.Label;
            }
        }
        return pagedList;
    }
    /// <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("首页公告信息-中标公告")]
    [AllowAnonymous]
    [ApiDescriptionSettings(Name = "PageZhongbiaoGonggao"), HttpPost]
    public async Task<SqlSugarPagedList<TenderOrderOutput>> PageZhongbiaoGonggao(PageShouyeTendOrderInput input)
    {
        long userId = 0;
        long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId);
        var query = _sqlSugarClient.Queryable<TenderOrder>()
                      //.Where((a, b) => a.CreateUserId == userId)
                      .Where(x => x.OrderStatus == 3)
                      .WhereIF(!string.IsNullOrWhiteSpace(input.ProjectName), b => b.ZhongbiaoTittle.Contains(input.ProjectName.Trim()))
                       .WhereIF(input.CreateDateRange != null && input.CreateDateRange.Length == 2, u => u.ZhongbiaoDate >= input.CreateDateRange[0] && u.ZhongbiaoDate <= input.CreateDateRange[1])
            .Select(b => new TenderOrderOutput
            {
                Id = b.Id,
                ProjectCode = b.ProjectCode,
                ProjectName = b.ZhongbiaoTittle,
                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,
                Caigoufangshi = b.Caigoufangshi,
                ZhongbiaoDate = b.ZhongbiaoDate,
                ZhongbiaoTittle = b.ZhongbiaoTittle
            });
        var pagedList = await query.OrderBuilder(input, "", "ZhongbiaoDate", true).ToPagedListAsync(input.Page, input.PageSize);
        var sysDictDatas = await GetDataListByCode("Caigoufangshi");
        foreach (var tenderOrderOutput in pagedList.Items)
        {
            var sysDictData = sysDictDatas.Where(x => x.Value == tenderOrderOutput.Caigoufangshi).FirstOrDefault();
            if (sysDictData != null)
            {
                tenderOrderOutput.CaigoufangshiName = sysDictData.Label;
            }
        }
        return pagedList;
    }
    /// <summary>
    /// 首页内容发布 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("首页内容发布")]
    [AllowAnonymous]
    [ApiDescriptionSettings(Name = "ShouyeNeirongfabu"), HttpPost]
    public async Task<List<NeirongfabuOutput>> ShouyeNeirongfabu(SHouyeNeirongfabuInput input)
    {
        var query = _neirongfabuRep.AsQueryable()
            .Where(x=>x.IsFabu == true)
            .WhereIF(input.Leirongneixing.HasValue, u => u.Leirongneixing == input.Leirongneixing.Value)
             .WhereIF(input.IsShouyexianshi.HasValue, u => u.IsShouyexianshi == input.IsShouyexianshi.Value)
           // .OrderBy(x => x.Sort)
            .OrderByDescending(x=>x.FabuDate)
            .Take(7)
               .Select(x => new NeirongfabuOutput
               {
                   Id = x.Id,
                   Leirongneixing = x.Leirongneixing,
                   IsFabu = x.IsFabu,
                   IsShouyexianshi = x.IsShouyexianshi,
                   NeirongTittle = x.NeirongTittle,
                   Fengmiantupian = x.Fengmiantupian,
                   Sort = x.Sort,
                   FabuDate = x.FabuDate,
                   NeirongZhaiyao = x.NeirongZhaiyao,
                   // NeirongMiaoshu = x.NeirongMiaoshu,
                   CreateTime = x.CreateTime,
                   UpdateTime = x.UpdateTime,
                   CreateUserId = x.CreateUserId,
                   CreateUserName = x.CreateUserName,
                   UpdateUserId = x.UpdateUserId,
                   UpdateUserName = x.UpdateUserName,
               });
        return await query.ToListAsync();
    }
    /// <summary>
    /// 首页咨询中心-内容发布 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("首页咨询中心-内容发布")]
    [AllowAnonymous]
    [ApiDescriptionSettings(Name = "PageNeirongfabu"), HttpPost]
    public async Task<SqlSugarPagedList<NeirongfabuOutput>> PageNeirongfabu(PageShouyeNeirongfabuInput input)
    {
        var query = _neirongfabuRep.AsQueryable()
             .Where(x => x.IsFabu == true)
   .WhereIF(input.Leirongneixing.HasValue, u => u.Leirongneixing == input.Leirongneixing.Value)
 .WhereIF(input.IsShouyexianshi.HasValue, u => u.IsShouyexianshi == input.IsShouyexianshi.Value)
          .WhereIF(!string.IsNullOrWhiteSpace(input.NeirongTittle), b => b.NeirongTittle.Contains(input.NeirongTittle.Trim()))
           .WhereIF(input.CreateDateRange != null && input.CreateDateRange.Length == 2, u => u.FabuDate >= input.CreateDateRange[0] && u.FabuDate <= input.CreateDateRange[1])
 .Select(x => new NeirongfabuOutput
 {
     Id = x.Id,
     Leirongneixing = x.Leirongneixing,
     IsFabu = x.IsFabu,
     IsShouyexianshi = x.IsShouyexianshi,
     NeirongTittle = x.NeirongTittle,
     Fengmiantupian = x.Fengmiantupian,
     Sort = x.Sort,
     FabuDate = x.FabuDate,
     NeirongZhaiyao = x.NeirongZhaiyao,
     // NeirongMiaoshu = x.NeirongMiaoshu,
     CreateTime = x.CreateTime,
     UpdateTime = x.UpdateTime,
     CreateUserId = x.CreateUserId,
     CreateUserName = x.CreateUserName,
     UpdateUserId = x.UpdateUserId,
     UpdateUserName = x.UpdateUserName,
 });
        var pagedList = await query.OrderBuilder(input, "", "FabuDate", true).ToPagedListAsync(input.Page, input.PageSize);
        var sysDictDatas = await GetDataListByCode("Leirongneixing");
        foreach (var neirongfabuOutput in pagedList.Items)
        {
            var sysDictData = sysDictDatas.Where(x => x.Value == neirongfabuOutput.Leirongneixing.Value.ToString()).FirstOrDefault();
            if (sysDictData != null)
            {
                neirongfabuOutput.LeirongneixingName = sysDictData.Label;
            }
            if (neirongfabuOutput.IsFabu.HasValue && neirongfabuOutput.IsFabu.Value)
            {
                neirongfabuOutput.IsFabuName = "是";
            }
            else
            {
                neirongfabuOutput.IsFabuName = "否";
            }
            if (neirongfabuOutput.IsShouyexianshi.HasValue && neirongfabuOutput.IsShouyexianshi.Value)
            {
                neirongfabuOutput.IsShouyexianshiName = "是";
            }
            else
            {
                neirongfabuOutput.IsShouyexianshiName = "否";
            }
        }
        return pagedList;
    }
    /// <summary>
    /// 获取内容发布详情 ℹ️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("获取内容发布详情")]
    [AllowAnonymous]
    [ApiDescriptionSettings(Name = "NeirongfabuDetail"), HttpGet]
    public async Task<NeirongfabuOutput> NeirongfabuDetail([FromQuery] QueryByIdTenderOrderInput input)
    {
        var Leirongneixing = await GetDataListByCode("Leirongneixing");
        var neirongfabuOutput = await _neirongfabuRep.AsQueryable().Where(x => x.Id == input.Id).Select<NeirongfabuOutput>().FirstAsync();
        if (neirongfabuOutput != null)
        {
            if (neirongfabuOutput.Leirongneixing.HasValue)
            {
                neirongfabuOutput.LeirongneixingName = Leirongneixing.Where(x => x.Value == neirongfabuOutput.Leirongneixing.Value.ToString()).Select(x => x.Label).FirstOrDefault() ?? "";
            }
            if (neirongfabuOutput.IsFabu.HasValue && neirongfabuOutput.IsFabu.Value)
            {
                neirongfabuOutput.IsFabuName = "是";
            }
            else
            {
                neirongfabuOutput.IsFabuName = "否";
            }
            if (neirongfabuOutput.IsShouyexianshi.HasValue && neirongfabuOutput.IsShouyexianshi.Value)
            {
                neirongfabuOutput.IsShouyexianshiName = "是";
            }
            else
            {
                neirongfabuOutput.IsShouyexianshiName = "否";
            }
        }
        return neirongfabuOutput;
    }
}
Admin.NET/FZFCGDD.ORDER.Application/Service/SuplierTendOrder/SuplierTendOrderService.cs
New file
@@ -0,0 +1,392 @@
// 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;
    }
}
Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/Dto/TenderOrderDto.cs
New file
@@ -0,0 +1,272 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using SqlSugar;
namespace FZCZTB.TSCL.Application;
/// <summary>
/// 政府采购投诉数据处理输出参数
/// </summary>
public class TenderOrderDto
{
    /// <summary>
    /// 投诉ID,主键
    /// </summary>
    public Guid Id { get; set; }
    /// <summary>
    /// 项目名称
    /// </summary>
    public string ProjectName { get; set; }
    /// <summary>
    /// 项目编号
    /// </summary>
    public string ProjectCode { get; set; }
    /// <summary>
    /// 行业品目
    /// </summary>
    public string Hangyepinmu { get; set; }
    /// <summary>
    /// 采购方式
    /// </summary>
    public string Caigoufangshi { get; set; }
    /// <summary>
    /// 采购遇算
    /// </summary>
    public decimal? Caigouyusuan { get; set; }
    /// <summary>
    /// 定标规则
    /// </summary>
    public string Dingbiaoguize { get; set; }
    /// <summary>
    /// 报名费
    /// </summary>
    public decimal? Baomingfei { get; set; }
    /// <summary>
    /// 投标保证金
    /// </summary>
    public decimal? Toubiaobaozhengjin { get; set; }
    /// <summary>
    /// 联合体投标
    /// </summary>
    public string Lianhetitoubiao { get; set; }
    /// <summary>
    /// 开标方式
    /// </summary>
    public string Kaibiaofangshi { get; set; }
    /// <summary>
    /// 是否分包
    /// </summary>
    public string Shifoufenbao { get; set; }
    /// <summary>
    /// 是否推送宣传
    /// </summary>
    public string Shifoutuisongxuanchuan { get; set; }
    /// <summary>
    /// 采购人名称
    /// </summary>
    public string Caigourenmingcheng { get; set; }
    /// <summary>
    /// 行政区域
    /// </summary>
    public string Xingzhengquyu { get; set; }
    /// <summary>
    /// 行政区域名称
    /// </summary>
    public string XingzhengquyuName { get; set; }
    /// <summary>
    /// 机构代码
    /// </summary>
    public string Jigoudaima { get; set; }
    /// <summary>
    /// 代码类型
    /// </summary>
    public string Daimaleixing { get; set; }
    /// <summary>
    /// 联系人
    /// </summary>
    public string Lianxiren { get; set; }
    /// <summary>
    /// 联系电话
    public string Lianxidianhua { get; set; }
    /// <summary>
    /// 通信地址
    /// </summary>
    public string Tongxindizhi { get; set; }
    /// <summary>
    /// 电子邮件
    /// </summary>
    public string Dianziyoujian { get; set; }
    /// <summary>
    /// 项目经办人
    /// </summary>
    public string Xiangmujingbanren { get; set; }
    /// <summary>
    /// 职务
    /// </summary>
    public string Zhiwu { get; set; }
    /// <summary>
    /// 经办人电话
    /// </summary>
    public string Jingbanrendianhua { get; set; }
    /// <summary>
    /// 代理机构名称
    /// </summary>
    public string Dailijigoumingcheng { get; set; }
    /// <summary>
    /// 代理机构联系人
    /// </summary>
    public string DailiLianxiren { get; set; }
    /// <summary>
    /// 代理机构联系电话
    /// </summary>
    public string DailiLianxidianhua { get; set; }
    /// <summary>
    /// 代理机构电子邮件
    /// </summary>
    public string DailiDianziyoujian { get; set; }
    /// <summary>
    /// 代理机构通信地址
    /// </summary>
    public string DailiTongxindizhi { get; set; }
    /// <summary>
    /// 代理机构项目经理
    /// </summary>
    public string DailiXiangmujingli { get; set; }
    /// <summary>
    /// 代理机构项目经理联系电话
    /// </summary>
    public string DailijingliLianxidianhua { get; set; }
    /// <summary>
    /// 质疑有无
    /// </summary>
    public bool? Zhiyi { get; set; }
    /// <summary>
    /// 投诉有无
    /// </summary>
    public bool? Tousu { get; set; }
    /// <summary>
    /// 订单状态
    /// </summary>
    public int? OrderStatus { get; set; }
    /// <summary>
    /// 投标报名开始时间
    /// </summary>
    public DateTime ToubiaoStartDate { get; set; }
    /// <summary>
    /// 投标报名结束时间
    /// </summary>
    public DateTime ToubiaoEndDate { get; set; }
    /// <summary>
    /// 开标时间
    /// </summary>
    public DateTime KaibiaoDate { get; set; }
    /// <summary>
    /// 开标地点
    /// </summary>
    public string Kaibiaodidian { get; set; }
    /// <summary>
    /// 中标供应商Id
    /// </summary>
    public long? ZhongbiaoId { get; set; }
    /// <summary>
    /// 中标供应商姓名
    /// </summary>
    public string ZhongbiaoName { get; set; }
    /// <summary>
    /// 专家Id
    /// </summary>
    public string ZhuanjiaId { get; set; }
    /// <summary>
    /// 专家姓名
    /// </summary>
    public string ZhuanjiaName { get; set; }
    /// <summary>
    /// 创建时间
    /// </summary>
    public DateTime? CreateTime { get; set; }
    /// <summary>
    /// 更新时间
    /// </summary>
    public DateTime? UpdateTime { get; set; }
    /// <summary>
    /// 创建者Id
    /// </summary>
    public long? CreateUserId { get; set; }
    /// <summary>
    /// 创建者姓名
    /// </summary>
    public string? CreateUserName { get; set; }
    /// <summary>
    /// 修改者Id
    /// </summary>
    public long? UpdateUserId { get; set; }
    /// <summary>
    /// 修改者姓名
    /// </summary>
    public string? UpdateUserName { get; set; }
}
Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/Dto/TenderOrderInput.cs
New file
@@ -0,0 +1,1155 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Admin.NET.Core;
using System.ComponentModel.DataAnnotations;
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Excel;
using FZCZTB.NET.MD;
using SqlSugar;
namespace FZCZTB.TSCL.Application;
/// <summary>
/// 非政府订单基础输入参数
/// </summary>
public class TenderOrderBaseInput
{
    /// <summary>
    /// 主键Id
    /// </summary>
    public virtual Guid Id { get; set; }
    /// <summary>
    /// 项目名称
    /// </summary>
    [Required(ErrorMessage = "项目名称不能为空")]
    public virtual string ProjectName { get; set; }
    /// <summary>
    /// 项目编号
    /// </summary>
    [Required(ErrorMessage = "项目编号不能为空")]
    public virtual string ProjectCode { get; set; }
    /// <summary>
    /// 行业品目
    /// </summary>
    public virtual string Hangyepinmu { get; set; }
    /// <summary>
    /// 采购方式
    /// </summary>
    public virtual string Caigoufangshi { get; set; }
    /// <summary>
    /// 采购遇算
    /// </summary>
    public virtual decimal? Caigouyusuan { get; set; }
    /// <summary>
    /// 定标规则
    /// </summary>
    public virtual string Dingbiaoguize { get; set; }
    /// <summary>
    /// 报名费
    /// </summary>
    public virtual decimal? Baomingfei { get; set; }
    /// <summary>
    /// 投标保证金
    /// </summary>
    public virtual decimal? Toubiaobaozhengjin { get; set; }
    /// <summary>
    /// 联合体投标
    /// </summary>
    public virtual string Lianhetitoubiao { get; set; }
    /// <summary>
    /// 开标方式
    /// </summary>
    public virtual string Kaibiaofangshi { get; set; }
    /// <summary>
    /// 是否分包
    /// </summary>
    public virtual string Shifoufenbao { get; set; }
    /// <summary>
    /// 是否推送宣传
    /// </summary>
    public virtual string Shifoutuisongxuanchuan { get; set; }
    /// <summary>
    /// 采购人名称
    /// </summary>
    public virtual string Caigourenmingcheng { get; set; }
    /// <summary>
    /// 行政区域
    /// </summary>
    public virtual string Xingzhengquyu { get; set; }
    /// <summary>
    /// 行政区域名称
    /// </summary>
    public virtual string XingzhengquyuName { get; set; }
    /// <summary>
    /// 机构代码
    /// </summary>
    public virtual string Jigoudaima { get; set; }
    /// <summary>
    /// 代码类型
    /// </summary>
    public virtual string Daimaleixing { get; set; }
    /// <summary>
    /// 联系人
    /// </summary>
    public virtual string Lianxiren { get; set; }
    /// <summary>
    /// 联系电话
    public virtual string Lianxidianhua { get; set; }
    /// <summary>
    /// 通信地址
    /// </summary>
    public virtual string Tongxindizhi { get; set; }
    /// <summary>
    /// 电子邮件
    /// </summary>
    public virtual string Dianziyoujian { get; set; }
    /// <summary>
    /// 项目经办人
    /// </summary>
    public virtual string Xiangmujingbanren { get; set; }
    /// <summary>
    /// 职务
    /// </summary>
    public virtual string Zhiwu { get; set; }
    /// <summary>
    /// 经办人电话
    /// </summary>
    public virtual string Jingbanrendianhua { get; set; }
    /// <summary>
    /// 代理机构名称
    /// </summary>
    public virtual string Dailijigoumingcheng { get; set; }
    /// <summary>
    /// 代理机构联系人
    /// </summary>
    public virtual string DailiLianxiren { get; set; }
    /// <summary>
    /// 代理机构联系电话
    /// </summary>
    public virtual string DailiLianxidianhua { get; set; }
    /// <summary>
    /// 代理机构电子邮件
    /// </summary>
    public virtual string DailiDianziyoujian { get; set; }
    /// <summary>
    /// 代理机构通信地址
    /// </summary>
    public virtual string DailiTongxindizhi { get; set; }
    /// <summary>
    /// 代理机构项目经理
    /// </summary>
    public virtual string DailiXiangmujingli { get; set; }
    /// <summary>
    /// 代理机构项目经理联系电话
    /// </summary>
    public virtual string DailijingliLianxidianhua { get; set; }
}
/// <summary>
/// 非政府订单分页查询输入参数
/// </summary>
public class PageTenderOrderInput : BasePageInput
{
    /// <summary>
    /// 新增日期范围
    /// </summary>
    public DateTime?[] CreateDateRange { get; set; }
    /// <summary>
    /// 行政区域
    /// </summary>
    public string Xingzhengquyu { get; set; }
    /// <summary>
    /// 行业品目
    /// </summary>
    public string Hangyepinmu { get; set; }
    /// <summary>
    /// 订单状态
    /// </summary>
    public int? OrderStatus { get; set; }
    /// <summary>
    /// 质疑有无
    /// </summary>
    public bool? Zhiyi { get; set; }
    /// <summary>
    /// 投诉有无
    /// </summary>
    public bool? Tousu { get; set; }
    /// <summary>
    /// 项目名称
    /// </summary>
    public string ProjectName { get; set; }
    /// <summary>
    /// 代理机构名称
    /// </summary>
    public string Dailijigoumingcheng { get; set; }
    /// <summary>
    /// 中标供应商姓名
    /// </summary>
    public string ZhongbiaoName { get; set; }
    /// <summary>
    /// 专家姓名
    /// </summary>
    public string ZhuanjiaName { get; set; }
}
/// <summary>
/// 非政府订单增加输入参数
/// </summary>
public class AddTenderOrderInput
{
    /// <summary>
    /// 项目编号
    /// </summary>
    [Required(ErrorMessage = "项目编号不能为空")]
    [MaxLength(100, ErrorMessage = "项目编号字符长度不能超过50")]
    public string ProjectCode { get; set; }
    /// <summary>
    /// 项目名称
    /// </summary>
    [Required(ErrorMessage = "项目名称不能为空")]
    [MaxLength(200, ErrorMessage = "项目名称字符长度不能超过200")]
    public string ProjectName { get; set; }
    /// <summary>
    /// 行业品目
    /// </summary>
    [MaxLength(100, ErrorMessage = "行业品目字符长度不能超过100")]
    public string Hangyepinmu { get; set; }
    /// <summary>
    /// 采购方式
    /// </summary>
    [MaxLength(100, ErrorMessage = "采购方式字符长度不能超过100")]
    public string Caigoufangshi { get; set; }
    /// <summary>
    /// 采购遇算
    /// </summary>
    public decimal? Caigouyusuan { get; set; }
    /// <summary>
    /// 定标规则
    /// </summary>
    [MaxLength(100, ErrorMessage = "定标规则字符长度不能超过100")]
    public string Dingbiaoguize { get; set; }
    /// <summary>
    /// 报名费
    /// </summary>
    public decimal? Baomingfei { get; set; }
    /// <summary>
    /// 投标保证金
    /// </summary>
    public decimal? Toubiaobaozhengjin { get; set; }
    /// <summary>
    /// 联合体投标
    /// </summary>
    [MaxLength(100, ErrorMessage = "联合体投标字符长度不能超过100")]
    public string Lianhetitoubiao { get; set; }
    /// <summary>
    /// 开标方式
    /// </summary>
    [MaxLength(100, ErrorMessage = "开标方式字符长度不能超过100")]
    public string Kaibiaofangshi { get; set; }
    /// <summary>
    ///  是否分包
    /// </summary>
    [MaxLength(100, ErrorMessage = " 是否分包字符长度不能超过100")]
    public string Shifoufenbao { get; set; }
    /// <summary>
    /// 是否推送宣传
    /// </summary>
    [MaxLength(100, ErrorMessage = "是否推送宣传字符长度不能超过100")]
    public string Shifoutuisongxuanchuan { get; set; }
    /// <summary>
    /// 采购人名称
    /// </summary>
    [MaxLength(100, ErrorMessage = "采购人名称字符长度不能超过100")]
    public string Caigourenmingcheng { get; set; }
    /// <summary>
    /// 行政区域510000,510100,510101
    /// </summary>
    [MaxLength(100, ErrorMessage = "行政区域字符长度不能超过100")]
    public string Xingzhengquyu { get; set; }
    /// <summary>
    /// 行政区域名称 四川省 / 成都市 / 市本级
    /// </summary>
    [MaxLength(100, ErrorMessage = "行政区域名称字符长度不能超过100")]
    public string XingzhengquyuName { get; set; }
    /// <summary>
    /// 机构代码
    /// </summary>
    [MaxLength(100, ErrorMessage = "机构代码字符长度不能超过100")]
    public string Jigoudaima { get; set; }
    /// <summary>
    /// 代码类型
    /// </summary>
    [MaxLength(100, ErrorMessage = "代码类型字符长度不能超过100")]
    public string Daimaleixing { get; set; }
    /// <summary>
    /// 联系人
    /// </summary>
    [MaxLength(100, ErrorMessage = "联系人称字符长度不能超过100")]
    public string Lianxiren { get; set; }
    /// <summary>
    /// 联系电话
    /// </summary>
    [MaxLength(100, ErrorMessage = "联系电话字符长度不能超过100")]
    public string Lianxidianhua { get; set; }
    /// <summary>
    /// 通信地址
    /// </summary>
    [MaxLength(250, ErrorMessage = "通信地址字符长度不能超过250")]
    public string Tongxindizhi { get; set; }
    /// <summary>
    /// 电子邮件
    /// </summary>
    [MaxLength(100, ErrorMessage = "电子邮件字符长度不能超过100")]
    public string Dianziyoujian { get; set; }
    /// <summary>
    /// 项目经办人
    /// </summary>
    [MaxLength(100, ErrorMessage = "项目经办人字符长度不能超过100")]
    public string Xiangmujingbanren { get; set; }
    /// <summary>
    /// 职务
    /// </summary>
    [MaxLength(100, ErrorMessage = "职务字符长度不能超过100")]
    public string Zhiwu { get; set; }
    /// <summary>
    /// 经办人电话
    /// </summary>
    [MaxLength(100, ErrorMessage = "经办人电话字符长度不能超过100")]
    public string Jingbanrendianhua { get; set; }
    /// <summary>
    /// 代理机构名称
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构名称字符长度不能超过100")]
    public string Dailijigoumingcheng { get; set; }
    /// <summary>
    /// 代理机构联系人
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构联系人字符长度不能超过100")]
    public string DailiLianxiren { get; set; }
    /// <summary>
    /// 代理机构联系电话
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构联系电话字符长度不能超过100")]
    public string DailiLianxidianhua { get; set; }
    /// <summary>
    /// 代理机构电子邮件
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构电子邮件字符长度不能超过100")]
    public string DailiDianziyoujian { get; set; }
    /// <summary>
    /// 代理机构通信地址
    /// </summary>
    [MaxLength(205, ErrorMessage = "代理机构通信地址字符长度不能超过250")]
    public string DailiTongxindizhi { get; set; }
    /// <summary>
    /// 代理机构项目经理
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构项目经理字符长度不能超过100")]
    public string DailiXiangmujingli { get; set; }
    /// <summary>
    /// 代理机构项目经理联系电话
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构项目经理联系电话字符长度不能超过100")]
    public string DailijingliLianxidianhua { get; set; }
}
/// <summary>
/// 非政府订单删除输入参数
/// </summary>
public class DeleteTenderOrderInput
{
    /// <summary>
    /// 主键Id
    /// </summary>
    [Required(ErrorMessage = "主键Id不能为空")]
    public Guid Id { get; set; }
}
/// <summary>
/// 非政府订单首页查询
/// </summary>
public class SHouyeTenderOrderInput
{
    /// <summary>
    /// 行业品目
    /// </summary>
    public string Hangyepinmu { get; set; }
}
/// <summary>
/// 非政府订单更新输入参数
/// </summary>
public class UpdateTenderOrderInput
{
    /// <summary>
    /// 主键Id
    /// </summary>
    [Required(ErrorMessage = "主键Id不能为空")]
    public Guid Id { get; set; }
    /// <summary>
    /// 项目编号
    /// </summary>
    [Required(ErrorMessage = "项目编号不能为空")]
    [MaxLength(100, ErrorMessage = "项目编号字符长度不能超过50")]
    public string ProjectCode { get; set; }
    /// <summary>
    /// 项目名称
    /// </summary>
    [Required(ErrorMessage = "项目名称不能为空")]
    [MaxLength(200, ErrorMessage = "项目名称字符长度不能超过200")]
    public string ProjectName { get; set; }
    /// <summary>
    /// 行业品目
    /// </summary>
    [MaxLength(100, ErrorMessage = "行业品目字符长度不能超过100")]
    public string Hangyepinmu { get; set; }
    /// <summary>
    /// 采购方式
    /// </summary>
    [MaxLength(100, ErrorMessage = "采购方式字符长度不能超过100")]
    public string Caigoufangshi { get; set; }
    /// <summary>
    /// 采购遇算
    /// </summary>
    public decimal? Caigouyusuan { get; set; }
    /// <summary>
    /// 定标规则
    /// </summary>
    [MaxLength(100, ErrorMessage = "定标规则字符长度不能超过100")]
    public string Dingbiaoguize { get; set; }
    /// <summary>
    /// 报名费
    /// </summary>
    public decimal? Baomingfei { get; set; }
    /// <summary>
    /// 投标保证金
    /// </summary>
    public decimal? Toubiaobaozhengjin { get; set; }
    /// <summary>
    /// 联合体投标
    /// </summary>
    [MaxLength(100, ErrorMessage = "联合体投标字符长度不能超过100")]
    public string Lianhetitoubiao { get; set; }
    /// <summary>
    /// 开标方式
    /// </summary>
    [MaxLength(100, ErrorMessage = "开标方式字符长度不能超过100")]
    public string Kaibiaofangshi { get; set; }
    /// <summary>
    ///  是否分包
    /// </summary>
    [MaxLength(100, ErrorMessage = " 是否分包字符长度不能超过100")]
    public string Shifoufenbao { get; set; }
    /// <summary>
    /// 是否推送宣传
    /// </summary>
    [MaxLength(100, ErrorMessage = "是否推送宣传字符长度不能超过100")]
    public string Shifoutuisongxuanchuan { get; set; }
    /// <summary>
    /// 采购人名称
    /// </summary>
    [MaxLength(100, ErrorMessage = "采购人名称字符长度不能超过100")]
    public string Caigourenmingcheng { get; set; }
    /// <summary>
    /// 行政区域510000,510100,510101
    /// </summary>
    [MaxLength(100, ErrorMessage = "行政区域字符长度不能超过100")]
    public string Xingzhengquyu { get; set; }
    /// <summary>
    /// 行政区域名称 四川省 / 成都市 / 市本级
    /// </summary>
    [MaxLength(100, ErrorMessage = "行政区域名称字符长度不能超过100")]
    public string XingzhengquyuName { get; set; }
    /// <summary>
    /// 机构代码
    /// </summary>
    [MaxLength(100, ErrorMessage = "机构代码字符长度不能超过100")]
    public string Jigoudaima { get; set; }
    /// <summary>
    /// 代码类型
    /// </summary>
    [MaxLength(100, ErrorMessage = "代码类型字符长度不能超过100")]
    public string Daimaleixing { get; set; }
    /// <summary>
    /// 联系人
    /// </summary>
    [MaxLength(100, ErrorMessage = "联系人称字符长度不能超过100")]
    public string Lianxiren { get; set; }
    /// <summary>
    /// 联系电话
    /// </summary>
    [MaxLength(100, ErrorMessage = "联系电话字符长度不能超过100")]
    public string Lianxidianhua { get; set; }
    /// <summary>
    /// 通信地址
    /// </summary>
    [MaxLength(250, ErrorMessage = "通信地址字符长度不能超过250")]
    public string Tongxindizhi { get; set; }
    /// <summary>
    /// 电子邮件
    /// </summary>
    [MaxLength(100, ErrorMessage = "电子邮件字符长度不能超过100")]
    public string Dianziyoujian { get; set; }
    /// <summary>
    /// 项目经办人
    /// </summary>
    [MaxLength(100, ErrorMessage = "项目经办人字符长度不能超过100")]
    public string Xiangmujingbanren { get; set; }
    /// <summary>
    /// 职务
    /// </summary>
    [MaxLength(100, ErrorMessage = "职务字符长度不能超过100")]
    public string Zhiwu { get; set; }
    /// <summary>
    /// 经办人电话
    /// </summary>
    [MaxLength(100, ErrorMessage = "经办人电话字符长度不能超过100")]
    public string Jingbanrendianhua { get; set; }
    /// <summary>
    /// 代理机构名称
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构名称字符长度不能超过100")]
    public string Dailijigoumingcheng { get; set; }
    /// <summary>
    /// 代理机构联系人
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构联系人字符长度不能超过100")]
    public string DailiLianxiren { get; set; }
    /// <summary>
    /// 代理机构联系电话
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构联系电话字符长度不能超过100")]
    public string DailiLianxidianhua { get; set; }
    /// <summary>
    /// 代理机构电子邮件
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构电子邮件字符长度不能超过100")]
    public string DailiDianziyoujian { get; set; }
    /// <summary>
    /// 代理机构通信地址
    /// </summary>
    [MaxLength(205, ErrorMessage = "代理机构通信地址字符长度不能超过250")]
    public string DailiTongxindizhi { get; set; }
    /// <summary>
    /// 代理机构项目经理
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构项目经理字符长度不能超过100")]
    public string DailiXiangmujingli { get; set; }
    /// <summary>
    /// 代理机构项目经理联系电话
    /// </summary>
    [MaxLength(100, ErrorMessage = "代理机构项目经理联系电话字符长度不能超过100")]
    public string DailijingliLianxidianhua { get; set; }
}
/// <summary>
/// 非政府订单主键查询输入参数
/// </summary>
public class QueryByIdTenderOrderInput : DeleteTenderOrderInput
{
}
/// <summary>
/// 非政府订单修改质疑
/// </summary>
public class UpdateZhiyiByIdTenderOrderInput : DeleteTenderOrderInput
{
    /// <summary>
    /// 是否质疑
    /// </summary>
    [Required(ErrorMessage = "是否质疑不能为空")]
    public bool Zhiyi { get; set; }
}
/// <summary>
/// 非政府订单修改标题
/// </summary>
public class UpdateTittleByIdTenderOrderInput : DeleteTenderOrderInput
{
    /// <summary>
    /// 标题
    /// </summary>
    [Required(ErrorMessage = "标题不能为空")]
    public string ProjectName { get; set; }
}
/// <summary>
/// 非政府订单数据导入实体
/// </summary>
[ExcelImporter(SheetIndex = 1, IsOnlyErrorRows = true)]
public class ImportTenderOrderInput : BaseImportInput
{
    /// <summary>
    /// 项目编号
    /// </summary>
    [ImporterHeader(Name = "*项目编号")]
    [ExporterHeader("*项目编号", Format = "", Width = 25, IsBold = true)]
    public string ProjectCode { get; set; }
    /// <summary>
    /// 项目名称
    /// </summary>
    [ImporterHeader(Name = "*项目名称")]
    [ExporterHeader("*项目名称", Format = "", Width = 25, IsBold = true)]
    public string ProjectName { get; set; }
    /// <summary>
    /// 决定日期
    /// </summary>
    [ImporterHeader(Name = "*决定日期")]
    [ExporterHeader("*决定日期", Format = "", Width = 25, IsBold = true)]
    public DateTime DecisionDate { get; set; }
    /// <summary>
    /// 采购人
    /// </summary>
    [ImporterHeader(Name = "*采购人")]
    [ExporterHeader("*采购人", Format = "", Width = 25, IsBold = true)]
    public string Purchaser { get; set; }
    /// <summary>
    /// 采购代理机构
    /// </summary>
    [ImporterHeader(Name = "*采购代理机构")]
    [ExporterHeader("*采购代理机构", Format = "", Width = 25, IsBold = true)]
    public string ProcurementAgency { get; set; }
    /// <summary>
    /// 投诉人
    /// </summary>
    [ImporterHeader(Name = "投诉人")]
    [ExporterHeader("投诉人", Format = "", Width = 25, IsBold = true)]
    public string? Complainant { get; set; }
    /// <summary>
    /// 采购监督部门
    /// </summary>
    [ImporterHeader(Name = "采购监督部门")]
    [ExporterHeader("采购监督部门", Format = "", Width = 25, IsBold = true)]
    public string? ProcurementSupervisionDepartment { get; set; }
    /// <summary>
    /// 线上地址
    /// </summary>
    [ImporterHeader(Name = "线上地址")]
    [ExporterHeader("线上地址", Format = "", Width = 25, IsBold = true)]
    public string? Url { get; set; }
}
/// <summary>
/// 非政府订单增加输入参数
/// </summary>
public class FabuTenderOrderInput
{
    /// <summary>
    /// 主键Id
    /// </summary>
    [Required(ErrorMessage = "主键Id不能为空")]
    public Guid Id { get; set; }
    /// <summary>
    /// 投标报名开始时间
    /// </summary>
    [Required(ErrorMessage = "投标报名开始时间不能为空")]
    public DateTime ToubiaoStartDate { get; set; }
    /// <summary>
    /// 投标报名结束时间
    /// </summary>
    [Required(ErrorMessage = "投标报名结束时间不能为空")]
    public DateTime ToubiaoEndDate { get; set; }
    /// <summary>
    /// 开标时间
    /// </summary>
    [Required(ErrorMessage = "开标时间不能为空")]
    public DateTime KaibiaoDate { get; set; }
    ///// <summary>
    ///// 发布时间
    ///// </summary>
    //[SugarColumn(IsNullable = true, ColumnDescription = "发布时间")]
    //public DateTime? FabuDate { get; set; }
    /// <summary>
    /// 招标文件
    /// </summary>
    [MaxLength(512, ErrorMessage = "招标文件字符长度不能超过512")]
    [Required(ErrorMessage = "招标文件不能为空")]
    public string Zhaobiaowenjian { get; set; }
    /// <summary>
    /// 附件
    /// </summary>
    [MaxLength(512, ErrorMessage = "附件字符长度不能超过512")]
    public string Fujian { get; set; }
    /// <summary>
    /// 开标地点
    /// </summary>
    [MaxLength(250, ErrorMessage = "开标地点字符长度不能超过250")]
    [Required(ErrorMessage = "开标地点不能为空")]
    public string Kaibiaodidian { get; set; }
}
/// <summary>
/// 非政府订单变更公告
/// </summary>
public class ChangeTenderOrderInput
{
    /// <summary>
    /// 招标主键Id
    /// </summary>
    [Required(ErrorMessage = "招标主键Id不能为空")]
    public Guid TenderId { get; set; }
    /// <summary>
    /// 变更名称
    /// </summary>
    [Required(ErrorMessage = "变更名称Id不能为空")]
    public string ProjectName { get; set; }
    /// <summary>
    /// 投标报名开始时间
    /// </summary>
    [Required(ErrorMessage = "投标报名开始时间不能为空")]
    public DateTime ToubiaoStartDate { get; set; }
    /// <summary>
    /// 投标报名结束时间
    /// </summary>
    [Required(ErrorMessage = "投标报名结束时间不能为空")]
    public DateTime ToubiaoEndDate { get; set; }
    /// <summary>
    /// 开标时间
    /// </summary>
    [Required(ErrorMessage = "开标时间不能为空")]
    public DateTime KaibiaoDate { get; set; }
    ///// <summary>
    ///// 发布时间
    ///// </summary>
    //[SugarColumn(IsNullable = true, ColumnDescription = "发布时间")]
    //public DateTime? FabuDate { get; set; }
    /// <summary>
    /// 招标文件
    /// </summary>
    [MaxLength(512, ErrorMessage = "招标文件字符长度不能超过512")]
    [Required(ErrorMessage = "招标文件不能为空")]
    public string Biangengwenjian { get; set; }
    /// <summary>
    /// 开标地点
    /// </summary>
    [MaxLength(250, ErrorMessage = "开标地点字符长度不能超过250")]
    [Required(ErrorMessage = "开标地点不能为空")]
    public string Kaibiaodidian { get; set; }
}
/// <summary>
/// 工银上收藏输入
/// </summary>
public class SuplierTendOrderInput
{
    /// <summary>
    /// 招标Id
    /// </summary>
    [Required(ErrorMessage = "招标Id不能为空")]
    public Guid TenderOrderId { get; set; }
    /// <summary>
    /// 是否收藏
    /// </summary>
    [Required(ErrorMessage = "是否收藏不能为空")]
    public bool isColection { get; set; }
}
/// <summary>
/// 供应商上传招标文件
/// </summary>
public class SuplierToubiaoInput
{
    /// <summary>
    /// 招标Id
    /// </summary>
    [Required(ErrorMessage = "招标Id不能为空")]
    public Guid TenderOrderId { get; set; }
    /// <summary>
    /// 投标文件
    /// </summary>
    [Required(ErrorMessage = "投标文件不能为空")]
    public string Touboaowenjian { get; set; }
}
/// <summary>
/// 代理商发布中标文件
/// </summary>
public class OrderZhongbiaoInput
{
    /// <summary>
    /// 招标Id
    /// </summary>
    [Required(ErrorMessage = "招标Id不能为空")]
    public Guid TenderOrderId { get; set; }
    /// <summary>
    /// 中标文件
    /// </summary>
    [Required(ErrorMessage = "中标文件不能为空")]
    public string Zhongbiaowenjian { get; set; }
    /// <summary>
    /// 中标供应商id
    /// </summary>
    [Required(ErrorMessage = "中标供应商id不能为空")]
    public long SupplierUserId { get; set; }
    /// <summary>
    /// 中标供应商Name
    /// </summary>
    [Required(ErrorMessage = "中标供应商Name不能为空")]
    public string SupplierUserName { get; set; }
    /// <summary>
    /// 中标tittle
    /// </summary>
    [Required(ErrorMessage = "中标tittle不能为空")]
    public string ZhongbiaoTittle { get; set; }
}
/// <summary>
/// 供应商支付报名费
/// </summary>
public class SuplierBaomingfeiInput
{
    /// <summary>
    /// 招标Id
    /// </summary>
    [Required(ErrorMessage = "招标Id不能为空")]
    public Guid TenderOrderId { get; set; }
}
/// <summary>
/// 非政府订单分页查询输入参数
/// </summary>
public class PageSuplierTendOrderInput : BasePageInput
{
    /// <summary>
    /// 项目名称
    /// </summary>
    public string ProjectName { get; set; }
    /// <summary>
    /// 代理机构名称
    /// </summary>
    public string Dailijigoumingcheng { get; set; }
}
// <summary>
/// 供应商参与的项目查询
/// </summary>
public class PageSupplierOrderInput : BasePageInput
{
    /// <summary>
    /// 项目名称
    /// </summary>
    public string ProjectName { get; set; }
    /// <summary>
    /// 采购人名称
    /// </summary>
    public string Caigourenmingcheng { get; set; }
    /// <summary>
    /// 代理机构名称
    /// </summary>
    public string Dailijigoumingcheng { get; set; }
    /// <summary>
    /// 是否质疑投诉
    /// </summary>
    [SugarColumn(IsNullable = true, ColumnDescription = "是否质疑投诉")]
    public bool? ZhiyiTousu { get; set; }
    /// <summary>
    /// 是否中标
    /// </summary>
    [SugarColumn(IsNullable = true, ColumnDescription = "是否中标")]
    public bool? IsSelected { get; set; }
}
/// <summary>
/// 首页公告信息
/// </summary>
public class PageShouyeTendOrderInput : BasePageInput
{
    /// <summary>
    /// 项目名称
    /// </summary>
    public string ProjectName { get; set; }
    /// <summary>
    /// 新增日期范围
    /// </summary>
    public DateTime?[] CreateDateRange { get; set; }
}
/// <summary>
/// 非政府订单首页查询
/// </summary>
public class SHouyeNeirongfabuInput
{
    /// <summary>
    /// 内容类型
    /// </summary>
    public int? Leirongneixing { get; set; }
    /// <summary>
    /// 是否首页显示
    /// </summary>
    public bool? IsShouyexianshi { get; set; }
}
/// <summary>
/// 非政府订单首页翻页查询查询
/// </summary>
public class PageShouyeNeirongfabuInput : BasePageInput
{
    /// <summary>
    /// 内容类型
    /// </summary>
    public int? Leirongneixing { get; set; }
    /// <summary>
    /// 是否首页显示
    /// </summary>
    public bool? IsShouyexianshi { get; set; }
    /// <summary>
    /// 内容标题
    /// </summary>
    public string NeirongTittle { get; set; }
    /// <summary>
    /// 新增日期范围
    /// </summary>
    public DateTime?[] CreateDateRange { get; set; }
}
Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/Dto/TenderOrderOutput.cs
New file
@@ -0,0 +1,590 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Admin.NET.Core;
using FZCZTB.NET.MD;
using Magicodes.ExporterAndImporter.Core;
using SqlSugar;
using System.ComponentModel.DataAnnotations;
using static FZCZTB.TSCL.Application.ChangeTenderOrderOut;
namespace FZCZTB.TSCL.Application;
/// <summary>
/// 政府采购投诉数据处理输出参数
/// </summary>
public class TenderOrderOutput
{
    /// <summary>
    /// 投诉ID,主键
    /// </summary>
    public Guid Id { get; set; }
    /// <summary>
    /// 项目名称
    /// </summary>
    public string ProjectName { get; set; }
    /// <summary>
    /// 项目编号
    /// </summary>
    public string ProjectCode { get; set; }
    /// <summary>
    /// 行业品目
    /// </summary>
    public string Hangyepinmu { get; set; }
    /// <summary>
    /// 行业品目名称
    /// </summary>
    public string HangyepinmuName { get; set; }
    /// <summary>
    /// 采购方式
    /// </summary>
    public string Caigoufangshi { get; set; }
    /// <summary>
    /// 采购方式名称
    /// </summary>
    public string CaigoufangshiName { get; set; }
    /// <summary>
    /// 采购遇算
    /// </summary>
    public decimal? Caigouyusuan { get; set; }
    /// <summary>
    /// 定标规则
    /// </summary>
    public string Dingbiaoguize { get; set; }
    /// <summary>
    /// 定标规则名称
    /// </summary>
    public string DingbiaoguizeName { get; set; }
    /// <summary>
    /// 报名费
    /// </summary>
    public decimal? Baomingfei { get; set; }
    /// <summary>
    /// 投标保证金
    /// </summary>
    public decimal? Toubiaobaozhengjin { get; set; }
    /// <summary>
    /// 联合体投标
    /// </summary>
    public string Lianhetitoubiao { get; set; }
    /// <summary>
    /// 联合体投标名称
    /// </summary>
    public string LianhetitoubiaoName { get; set; }
    /// <summary>
    /// 开标方式
    /// </summary>
    public string Kaibiaofangshi { get; set; }
    /// <summary>
    /// 开标方式名称
    /// </summary>
    public string KaibiaofangshiName { get; set; }
    /// <summary>
    /// 是否分包
    /// </summary>
    public string Shifoufenbao { get; set; }
    /// <summary>
    /// 是否分包名称
    /// </summary>
    public string ShifoufenbaoName { get; set; }
    /// <summary>
    /// 是否推送宣传
    /// </summary>
    public string Shifoutuisongxuanchuan { get; set; }
    /// <summary>
    /// 是否推送宣传名称
    /// </summary>
    public string ShifoutuisongxuanchuanName { get; set; }
    /// <summary>
    /// 采购人名称
    /// </summary>
    public string Caigourenmingcheng { get; set; }
    /// <summary>
    /// 行政区域
    /// </summary>
    public string Xingzhengquyu { get; set; }
    /// <summary>
    /// 行政区域名称
    /// </summary>
    public string XingzhengquyuName { get; set; }
    /// <summary>
    /// 机构代码
    /// </summary>
    public string Jigoudaima { get; set; }
    /// <summary>
    /// 代码类型
    /// </summary>
    public string Daimaleixing { get; set; }
    /// <summary>
    /// 代码类型名称
    /// </summary>
    public string DaimaleixingName { get; set; }
    /// <summary>
    /// 联系人
    /// </summary>
    public string Lianxiren { get; set; }
    /// <summary>
    /// 联系电话
    public string Lianxidianhua { get; set; }
    /// <summary>
    /// 通信地址
    /// </summary>
    public string Tongxindizhi { get; set; }
    /// <summary>
    /// 电子邮件
    /// </summary>
    public string Dianziyoujian { get; set; }
    /// <summary>
    /// 项目经办人
    /// </summary>
    public string Xiangmujingbanren { get; set; }
    /// <summary>
    /// 职务
    /// </summary>
    public string Zhiwu { get; set; }
    /// <summary>
    /// 经办人电话
    /// </summary>
    public string Jingbanrendianhua { get; set; }
    /// <summary>
    /// 代理机构名称
    /// </summary>
    public string Dailijigoumingcheng { get; set; }
    /// <summary>
    /// 代理机构联系人
    /// </summary>
    public string DailiLianxiren { get; set; }
    /// <summary>
    /// 代理机构联系电话
    /// </summary>
    public string DailiLianxidianhua { get; set; }
    /// <summary>
    /// 代理机构电子邮件
    /// </summary>
    public string DailiDianziyoujian { get; set; }
    /// <summary>
    /// 代理机构通信地址
    /// </summary>
    public string DailiTongxindizhi { get; set; }
    /// <summary>
    /// 代理机构项目经理
    /// </summary>
    public string DailiXiangmujingli { get; set; }
    /// <summary>
    /// 代理机构项目经理联系电话
    /// </summary>
    public string DailijingliLianxidianhua { get; set; }
    /// <summary>
    /// 质疑有无
    /// </summary>
    public bool? Zhiyi { get; set; }
    /// <summary>
    /// 投诉有无
    /// </summary>
    public bool? Tousu { get; set; }
    /// <summary>
    /// 是否中标
    /// </summary>
    public bool? IsSelected { get; set; }
    /// <summary>
    /// 是否中标
    /// </summary>
    public string IsSelectedName { get; set; }
    /// <summary>
    /// 订单状态
    /// </summary>
    public int? OrderStatus { get; set; }
    /// <summary>
    /// 订单状态
    /// </summary>
    public string OrderStatusName { get; set; }
    /// <summary>
    /// 投标报名开始时间
    /// </summary>
    public DateTime ToubiaoStartDate { get; set; }
    /// <summary>
    /// 投标报名结束时间
    /// </summary>
    public DateTime ToubiaoEndDate { get; set; }
    /// <summary>
    /// 开标时间
    /// </summary>
    public DateTime KaibiaoDate { get; set; }
    /// <summary>
    /// 发布时间
    /// </summary>
    public DateTime? FabuDate { get; set; }
    /// <summary>
    /// 招标文件
    /// </summary>
    public string Zhaobiaowenjian { get; set; }
    /// <summary>
    /// 附件
    /// </summary>
    public string Fujian { get; set; }
    /// <summary>
    /// 开标地点
    /// </summary>
    public string Kaibiaodidian { get; set; }
    /// <summary>
    /// 中标供应商Id
    /// </summary>
    public long? ZhongbiaoId { get; set; }
    /// <summary>
    /// 中标供应商姓名
    /// </summary>
    public string ZhongbiaoName { get; set; }
    /// <summary>
    /// 专家Id
    /// </summary>
    public string ZhuanjiaId { get; set; }
    /// <summary>
    /// 专家姓名
    /// </summary>
    public string ZhuanjiaName { get; set; }
    /// <summary>
    /// 创建时间
    /// </summary>
    public DateTime? CreateTime { get; set; }
    /// <summary>
    /// 更新时间
    /// </summary>
    public DateTime? UpdateTime { get; set; }
    /// <summary>
    /// 创建者Id
    /// </summary>
    public long? CreateUserId { get; set; }
    /// <summary>
    /// 创建者姓名
    /// </summary>
    public string? CreateUserName { get; set; }
    /// <summary>
    /// 修改者Id
    /// </summary>
    public long? UpdateUserId { get; set; }
    /// <summary>
    /// 修改者姓名
    /// </summary>
    public string? UpdateUserName { get; set; }
    /// <summary>
    /// 中标文件
    /// </summary>
    public string Zhongbiaowenjian { get; set; }
    /// <summary>
    /// 中标时间
    /// </summary>
    public DateTime? ZhongbiaoDate { get; set; }
    /// <summary>
    /// 中标tittle
    /// </summary>
    public string ZhongbiaoTittle { get; set; }
    /// <summary>
    /// 变更公告
    /// </summary>
    public ChangeOrder? changeOrder { get; set; }
    /// <summary>
    /// 投标情况
    /// </summary>
    public List<TenderOrderBiddingOutput>? tenderOrderBiddings { get; set; }
}
public class RegionOutput
{
    /// <summary>
    /// Id
    /// </summary>
    public long Id { get; set; }
    /// <summary>
    /// 父节点Id
    /// </summary>
    public long Pid { get; set; }
    /// <summary>
    /// 名称
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// 编码
    /// </summary>
    public string Code { get; set; }
    /// <summary>
    /// 等级
    /// </summary>
    public int Level { get; set; }
    /// <summary>
    /// 编码
    /// </summary>
    public List<RegionOutput> Regions { get; set; }
}
/// <summary>
/// 政府采购投诉数据处理数据导入模板实体
/// </summary>
public class ExportTenderOrderOutput : ImportTenderOrderInput
{
    [ImporterHeader(IsIgnore = true)]
    [ExporterHeader(IsIgnore = true)]
    public override string Error { get; set; }
}
/// <summary>
/// 非政府订单变更公告
/// </summary>
public class ChangeTenderOrderOut
{
    /// <summary>
    /// 变更主键Id
    /// </summary>
    public Guid Id { get; set; }
    /// <summary>
    /// 招标主键Id
    /// </summary>
    public Guid TenderId { get; set; }
    /// <summary>
    /// 变更名称
    /// </summary>
    public string ProjectName { get; set; }
    /// <summary>
    /// 投标报名开始时间
    /// </summary>
    public DateTime ToubiaoStartDate { get; set; }
    /// <summary>
    /// 投标报名结束时间
    /// </summary>
    public DateTime ToubiaoEndDate { get; set; }
    /// <summary>
    /// 开标时间
    /// </summary>
    public DateTime KaibiaoDate { get; set; }
    ///// <summary>
    ///// 发布时间
    ///// </summary>
    //[SugarColumn(IsNullable = true, ColumnDescription = "发布时间")]
    //public DateTime? FabuDate { get; set; }
    /// <summary>
    /// 变更文件
    /// </summary>
    public string Biangengwenjian { get; set; }
    /// <summary>
    /// 开标地点
    /// </summary>
    public string Kaibiaodidian { get; set; }
    /// <summary>
    /// 创建时间
    /// </summary>
    public DateTime? CreateTime { get; set; }
    /// <summary>
    /// 政府采购投诉数据处理输出参数
    /// </summary>
    public class TenderOrderBiddingOutput
    {
        /// <summary>
        /// 投标ID,主键
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 招标ID
        /// </summary>
        public Guid TenderId { get; set; }
        /// <summary>
        /// 投标文件
        public string Touboaowenjian { get; set; }
        /// <summary>
        /// 是否中标
        /// </summary>
        public bool? IsSelected { get; set; }
        /// <summary>
        /// 是否中标name
        /// </summary>
        public string IsSelectedName { get; set; }
        /// <summary>
        /// 中标时间
        /// </summary>
        public DateTime? SelectedTime { get; set; }
        /// <summary>
        /// 是否支付
        /// </summary>
        public bool? IsTransfer { get; set; }
        /// <summary>
        /// 是否支付name
        /// </summary>
        public string IsTransferName { get; set; }
        /// <summary>
        /// 支付时间
        /// </summary>
        public DateTime? TransferTime { get; set; }
        /// <summary>
        /// 支付编号
        /// </summary>
        public string TransferNo { get; set; }
        /// <summary>
        ///支付金额
        /// </summary>
        public decimal? Zhifujine { get; set; }
        /// <summary>
        /// 支付返回标号
        /// </summary>
        public string TradeNo { get; set; }
        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime? CreateTime { get; set; }
        /// <summary>
        /// 更新时间
        /// </summary>
        public DateTime? UpdateTime { get; set; }
        /// <summary>
        /// 创建者Id
        /// </summary>
        public long? CreateUserId { get; set; }
        /// <summary>
        /// 创建者姓名
        /// </summary>
        public string? CreateUserName { get; set; }
        /// <summary>
        /// 厂商名字
        /// </summary>
        public string? ChangshangName { get; set; }
        /// <summary>
        /// 修改者Id
        /// </summary>
        public long? UpdateUserId { get; set; }
        /// <summary>
        /// 修改者姓名
        /// </summary>
        public string? UpdateUserName { get; set; }
    }
}
Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/TenderOrderService.cs
New file
@@ -0,0 +1,858 @@
// 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 FZCZTB.TSCL.Application.ChangeTenderOrderOut;
namespace FZCZTB.TSCL.Application;
/// <summary>
/// 非政府招标代理订单处理服务 🧩
/// </summary>
[ApiDescriptionSettings(ApplicationConst.GroupNameDD, Order = 100)]
public class TenderOrderService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<TenderOrder> _TenderOrderRep;
    private readonly ISqlSugarClient _sqlSugarClient;
    private readonly SqlSugarRepository<SysDictData> _sysDictDataRep;
    private readonly SysCacheService _sysCacheService;
    private readonly SqlSugarRepository<SysRegion> _sysRegionRep;
    private readonly SqlSugarRepository<ChangeOrder> _ChangeOrderRep;
    private readonly SqlSugarRepository<TenderOrderBidding> _TenderOrderBiddingRep;
    public TenderOrderService(SqlSugarRepository<TenderOrder> TenderOrderRep, ISqlSugarClient sqlSugarClient,
        SqlSugarRepository<SysDictData> sysDictDataRep,
        SysCacheService sysCacheService,
        SqlSugarRepository<SysRegion> sysRegionRep,
        SqlSugarRepository<ChangeOrder> changeOrderRep
        , SqlSugarRepository<TenderOrderBidding> TenderOrderBiddingRep)
    {
        _TenderOrderRep = TenderOrderRep;
        _sqlSugarClient = sqlSugarClient;
        _sysDictDataRep = sysDictDataRep;
        _sysCacheService = sysCacheService;
        _sysRegionRep = sysRegionRep;
        _ChangeOrderRep = changeOrderRep;
        _TenderOrderBiddingRep = TenderOrderBiddingRep;
    }
    /// <summary>
    /// 获取行政区域列表 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取行政区域列表")]
    [ApiDescriptionSettings(Name = "GetRegionList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<RegionOutput>> GetRegionList()
    {
        var sysRegions = await _sysRegionRep.AsQueryable().WhereIF(!string.IsNullOrWhiteSpace(""), u => u.Level != 4).Select<RegionOutput>().ToListAsync();
        var regions =   sysRegions.Where(x => x.Level == 1).ToList();
        var regionOutputs =   sysRegions.Where(x => x.Level == 2).ToList();
        var regionOutputs1 =   sysRegions.Where(x => x.Level == 3).ToList();
        foreach (var region in regions)
        {
            var regionOutputs2 = regionOutputs.Where(x => x.Pid == region.Id).ToList();
            foreach (var regionOutput in regionOutputs2)
            {
                var regionOutputs3 = regionOutputs1.Where(x => x.Pid == regionOutput.Id ).ToList();
                regionOutput.Regions = regionOutputs3;
            }
            region.Regions = regionOutputs2;
        }
        return regions;
    }
    /// <summary>
    /// 获取开标方式集合 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取开标方式集合")]
    [ApiDescriptionSettings(Name = "GetKaibiaofangshiList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<SysDictData>> GetKaibiaofangshiList()
    {
        return await GetDataListByCode("Kaibiaofangshi");
    }
    /// <summary>
    /// 获取是否枚举集合 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取是否枚举集合")]
    [ApiDescriptionSettings(Name = "GetYesNoEnumList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<SysDictData>> GetYesNoEnumList()
    {
        return await GetDataListByCode("YesNoEnum");
    }
    /// <summary>
    /// 获取复合体投标集合 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取复合体投标集合")]
    [ApiDescriptionSettings(Name = "GetFuhetitoubiaoList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<SysDictData>> GetFuhetitoubiaoList()
    {
        return await GetDataListByCode("Fuhetitoubiao");
    }
    /// <summary>
    /// 获取定标规则集合 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取定标规则集合")]
    [ApiDescriptionSettings(Name = "GetDingbiaoguizeList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<SysDictData>> GetDingbiaoguizeList()
    {
        return await GetDataListByCode("Dingbiaoguize");
    }
    /// <summary>
    /// 获取代码类型集合 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取代码类型集合")]
    [ApiDescriptionSettings(Name = "GetDaimaleixingList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<SysDictData>> GetDaimaleixingList()
    {
        return await GetDataListByCode("Daimaleixing");
    }
    /// <summary>
    /// 获取采购方式集合 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取采购方式集合")]
    [ApiDescriptionSettings(Name = "GetCaigoufangshiList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<SysDictData>> GetCaigoufangshiList()
    {
        return await GetDataListByCode("Caigoufangshi");
    }
    /// <summary>
    /// 获取行业品目集合 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取行业品目集合")]
    [ApiDescriptionSettings(Name = "GetHangyepingmuList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<SysDictData>> GetHangyepingmuList()
    {
        return await GetDataListByCode("Hangyepingmu");
    }
    /// <summary>
    /// 获取项目进度集合 🔖
    /// </summary>
    /// <returns></returns>
    [DisplayName("获取项目进度集合")]
    [ApiDescriptionSettings(Name = "GetOrderStatusList"), HttpGet]
    [AllowAnonymous]
    public async Task<List<SysDictData>> GetOrderStatusList()
    {
        return await GetDataListByCode("OrderStatus");
    }
    /// <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 = "Page"), HttpPost]
    public async Task<SqlSugarPagedList<TenderOrderOutput>> Page(PageTenderOrderInput input)
    {
        long userId = 0;
        long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId);
        var query = _TenderOrderRep.AsQueryable()
            .Where(x => x.CreateUserId == userId)
            .WhereIF(!string.IsNullOrWhiteSpace(input.Xingzhengquyu), u => u.Xingzhengquyu.Contains(input.Xingzhengquyu.Trim()))
              .WhereIF(!string.IsNullOrWhiteSpace(input.Hangyepinmu), u => u.Hangyepinmu == input.Hangyepinmu.Trim())
               .WhereIF( input.OrderStatus.HasValue, u => u.OrderStatus == input.OrderStatus)
                 .WhereIF(input.Zhiyi.HasValue, u => u.Zhiyi == input.Zhiyi)
                   .WhereIF(input.Tousu.HasValue, u => u.Tousu == input.Tousu)
                      .WhereIF(!string.IsNullOrWhiteSpace(input.ProjectName), u => u.ProjectName.Contains(input.ProjectName.Trim()))
                       .WhereIF(!string.IsNullOrWhiteSpace(input.Dailijigoumingcheng), u => u.Dailijigoumingcheng.Contains(input.Dailijigoumingcheng.Trim()))
                        .WhereIF(!string.IsNullOrWhiteSpace(input.ZhongbiaoName), u => u.ZhongbiaoName.Contains(input.ZhongbiaoName.Trim()))
                         .WhereIF(!string.IsNullOrWhiteSpace(input.ZhuanjiaName), u => u.ZhuanjiaName.Contains(input.ZhuanjiaName.Trim()))
            .WhereIF(input.CreateDateRange != null && input.CreateDateRange.Length == 2, u => u.CreateTime >= input.CreateDateRange[0] && u.CreateTime <= input.CreateDateRange[1])
            .Select<TenderOrderOutput>();
        return await query.OrderBuilder(input,"", "CreateTime",true).ToPagedListAsync(input.Page, input.PageSize);
    }
    /// <summary>
    /// 获取非政府订单处理详情 ℹ️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("获取非政府订单处理详情")]
    [ApiDescriptionSettings(Name = "Detail"), HttpGet]
    public async Task<TenderOrderOutput> Detail([FromQuery] QueryByIdTenderOrderInput input)
    {
        var Kaibiaofangshi = await GetDataListByCode("Kaibiaofangshi");
        var Caigoufangshi = await GetDataListByCode("Caigoufangshi");
        var Hangyepinmu = await GetDataListByCode("Hangyepingmu");
        var Fuhetitoubiao = await GetDataListByCode("Fuhetitoubiao");
        var Dingbiaoguize = await GetDataListByCode("Dingbiaoguize");
        var Daimaleixing = await GetDataListByCode("Daimaleixing");
        var YesNoEnum = await GetDataListByCode("YesNoEnum");
        var OrderStatus = await GetDataListByCode("OrderStatus");
        var tenderOrderOutput = await _TenderOrderRep.AsQueryable().Where(x => x.Id == input.Id).Select<TenderOrderOutput>().FirstAsync();
        if (tenderOrderOutput != null)
        {
            if (!string.IsNullOrEmpty(tenderOrderOutput.Kaibiaofangshi))
            {
                tenderOrderOutput.KaibiaofangshiName = Kaibiaofangshi.Where(x => x.Value == tenderOrderOutput.Kaibiaofangshi).Select(x=>x.Label).FirstOrDefault()??"";
            }
            if (!string.IsNullOrEmpty(tenderOrderOutput.Caigoufangshi))
            {
                tenderOrderOutput.CaigoufangshiName = Caigoufangshi.Where(x => x.Value == tenderOrderOutput.Caigoufangshi).Select(x => x.Label).FirstOrDefault() ?? "";
            }
            if (!string.IsNullOrEmpty(tenderOrderOutput.Hangyepinmu))
            {
                tenderOrderOutput.HangyepinmuName = Hangyepinmu.Where(x => x.Value == tenderOrderOutput.Hangyepinmu).Select(x => x.Label).FirstOrDefault() ?? "";
            }
            if (!string.IsNullOrEmpty(tenderOrderOutput.Lianhetitoubiao))
            {
                tenderOrderOutput.LianhetitoubiaoName = Fuhetitoubiao.Where(x => x.Value == tenderOrderOutput.Lianhetitoubiao).Select(x => x.Label).FirstOrDefault() ?? "";
            }
            if (!string.IsNullOrEmpty(tenderOrderOutput.Dingbiaoguize))
            {
                tenderOrderOutput.DingbiaoguizeName = Dingbiaoguize.Where(x => x.Value == tenderOrderOutput.Dingbiaoguize).Select(x => x.Label).FirstOrDefault() ?? "";
            }
            if (!string.IsNullOrEmpty(tenderOrderOutput.Daimaleixing))
            {
                tenderOrderOutput.DaimaleixingName = Daimaleixing.Where(x => x.Value == tenderOrderOutput.Daimaleixing).Select(x => x.Label).FirstOrDefault() ?? "";
            }
            if (!string.IsNullOrEmpty(tenderOrderOutput.Shifoufenbao))
            {
                tenderOrderOutput.ShifoufenbaoName = YesNoEnum.Where(x => x.Value == tenderOrderOutput.Shifoufenbao).Select(x => x.Label).FirstOrDefault() ?? "";
            }
            if (!string.IsNullOrEmpty(tenderOrderOutput.Shifoutuisongxuanchuan))
            {
                tenderOrderOutput.ShifoutuisongxuanchuanName = YesNoEnum.Where(x => x.Value == tenderOrderOutput.Shifoutuisongxuanchuan).Select(x => x.Label).FirstOrDefault() ?? "";
            }
            if (tenderOrderOutput.OrderStatus.HasValue)
            {
                tenderOrderOutput.OrderStatusName = OrderStatus.Where(x => x.Value == tenderOrderOutput.OrderStatus.Value.ToString()).Select(x => x.Label).FirstOrDefault() ?? "";
            }
        }
        var changeOrder = await _ChangeOrderRep.AsQueryable().Where(x => x.TenderId == input.Id).FirstAsync();
        tenderOrderOutput.changeOrder = changeOrder;
        var tenderOrderBiddings = await _sqlSugarClient.Queryable<TenderOrderBidding>()
            .Where(x => x.TenderId == input.Id)
            .Where(x=>x.IsTransfer == true)
            .Select<TenderOrderBiddingOutput>().ToListAsync();
        if (tenderOrderBiddings != null)
        {
            foreach (var tenderOrderBiddingOutput in tenderOrderBiddings)
            {
               if (tenderOrderBiddingOutput.IsSelected.HasValue && tenderOrderBiddingOutput.IsSelected.Value)
                {
                    tenderOrderBiddingOutput.IsSelectedName = "是";
                }
                else
                {
                    tenderOrderBiddingOutput.IsSelectedName = "否";
                }
                if (tenderOrderBiddingOutput.IsTransfer.HasValue && tenderOrderBiddingOutput.IsTransfer.Value)
                {
                    tenderOrderBiddingOutput.IsTransferName = "是";
                }
                else
                {
                    tenderOrderBiddingOutput.IsTransferName = "否";
                }
            }
        }
        tenderOrderOutput.tenderOrderBiddings = tenderOrderBiddings;
        return tenderOrderOutput;
    }
    /// <summary>
    /// 采购代理人增加非政府订单处理 ➕
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人增加非政府订单处理")]
    [ApiDescriptionSettings(Name = "Add"), HttpPost]
    public async Task<bool> Add(AddTenderOrderInput input)
    {
        var entity = input.Adapt<TenderOrder>();
        entity.Id = Guid.NewGuid();
        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);
        entity.CreateTime = DateTime.Now;
        entity.UpdateTime = DateTime.Now;
        entity.CreateUserId = usertrueId;
        entity.CreateUserName = RealName;
        entity.UpdateUserId = usertrueId;
        entity.UpdateUserName = RealName;
        entity.OrderStatus = 1;
        entity.Tousu = false;
        entity.Zhiyi = false;
        return await _TenderOrderRep.InsertAsync(entity);
    }
    /// <summary>
    /// 采购代理人更新非政府订单处理 ✏️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人更新非政府订单处理")]
    [ApiDescriptionSettings(Name = "Update"), HttpPost]
    public async Task Update(UpdateTenderOrderInput input)
    {
        var entity = input.Adapt<TenderOrder>();
        long userId = 0;
        long? usertrueId = null;
        if (long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId))
        {
            usertrueId = userId;
        }
        var tenderOrder = _TenderOrderRep.AsQueryable().Where(x => x.Id == input.Id).First();
        if(tenderOrder == null)
        {
            throw Oops.Oh("订单不存在!");
        }
        if(tenderOrder.OrderStatus != 1)
        {
            throw Oops.Oh("只有处于保存状态的订单才能修改!");
        }
        var RealName = App.User?.FindFirstValue(ClaimConst.RealName);
        entity.UpdateTime = DateTime.Now;
        entity.UpdateUserId = usertrueId;
        entity.UpdateUserName = RealName;
        await _sqlSugarClient.Updateable(entity).UpdateColumns(x=> new { x.ProjectName, x.ProjectCode, x.Hangyepinmu, x.Caigoufangshi, x.Caigouyusuan, x.Dingbiaoguize, x.Baomingfei, x.Toubiaobaozhengjin, x.Lianhetitoubiao, x.Kaibiaofangshi, x.Shifoufenbao, x.Shifoutuisongxuanchuan, x.Caigourenmingcheng, x.Xingzhengquyu, x.XingzhengquyuName, x.Jigoudaima, x.Daimaleixing, x.Lianxiren, x.Lianxidianhua, x.Tongxindizhi, x.Dianziyoujian, x.Xiangmujingbanren, x.Zhiwu, x.Jingbanrendianhua, x.Dailijigoumingcheng, x.DailiLianxiren, x.DailiLianxidianhua, x.DailiDianziyoujian, x.DailiTongxindizhi, x.DailiXiangmujingli, x.DailijingliLianxidianhua, x.UpdateTime, x.UpdateUserId, x.UpdateUserName }).ExecuteCommandAsync();
        //await _TenderOrderRep.UpdateAsync(entity);
    }
    /// <summary>
    /// 采购代理人更新非政府订单质疑 ✏️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人更新非政府订单质疑")]
    [ApiDescriptionSettings(Name = "UpdateZhiyi"), HttpPost]
    public async Task UpdateZhiyi(UpdateZhiyiByIdTenderOrderInput 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 = _TenderOrderRep.AsQueryable().Where(x => x.Id == input.Id).First();
        if (tenderOrder == null)
        {
            throw Oops.Oh("订单不存在!");
        }
        tenderOrder.Zhiyi = input.Zhiyi;
        tenderOrder.UpdateTime = DateTime.Now;
        tenderOrder.UpdateUserId = usertrueId;
        tenderOrder.UpdateUserName = RealName;
        await _TenderOrderRep.UpdateAsync(tenderOrder);
    }
    /// <summary>
    /// 采购代理人更新非政府订单投诉 ✏️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人更新非政府订单投诉")]
    [ApiDescriptionSettings(Name = "UpdateTousu"), HttpPost]
    public async Task UpdateTousu(UpdateZhiyiByIdTenderOrderInput 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 = _TenderOrderRep.AsQueryable().Where(x => x.Id == input.Id).First();
        if (tenderOrder == null)
        {
            throw Oops.Oh("订单不存在!");
        }
        tenderOrder.Tousu = input.Zhiyi;
        tenderOrder.UpdateTime = DateTime.Now;
        tenderOrder.UpdateUserId = usertrueId;
        tenderOrder.UpdateUserName = RealName;
        await _TenderOrderRep.UpdateAsync(tenderOrder);
    }
    /// <summary>
    /// 采购代理人删除非政府订单处理 ❌
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人删除非政府订单处理")]
    [ApiDescriptionSettings(Name = "Delete"), HttpPost]
    public async Task Delete(DeleteTenderOrderInput input)
    {
        //var entity = await _TenderOrderRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        var entity = await _sqlSugarClient.Queryable<TenderOrder>().Where(x=>x.Id== input.Id).FirstAsync() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        //await _TenderOrderRep.FakeDeleteAsync(entity);   //假删除
        await _TenderOrderRep.DeleteAsync(entity);   //真删除
    }
    /// <summary>
    /// 采购代理人批量删除非政府订单处理 ❌
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人批量删除非政府订单处理")]
    [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost]
    public async Task<bool > BatchDelete([Required(ErrorMessage = "主键列表不能为空")]List<DeleteTenderOrderInput> input)
    {
        var exp = Expressionable.Create<TenderOrder>();
        foreach (var row in input) exp = exp.Or(it => it.Id == row.Id);
        var list = await _TenderOrderRep.AsQueryable().Where(exp.ToExpression()).ToListAsync();
        // return await _TenderOrderRep.FakeDeleteAsync(list);   //假删除
        return await _TenderOrderRep.DeleteAsync(list) ;   //真删除
    }
    /// <summary>
    /// 导出非政府订单处理记录 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("导出非政府订单处理记录")]
    [ApiDescriptionSettings(Name = "Export"), HttpPost, NonUnify]
    public async Task<IActionResult> Export(PageTenderOrderInput input)
    {
        var list = (await Page(input)).Items?.Adapt<List<ExportTenderOrderOutput>>() ?? new();
        //if (input.SelectKeyList?.Count > 0) list = list.Where(x => input.SelectKeyList.Contains(x.Id)).ToList();
        return ExcelHelper.ExportTemplate(list, "非政府订单处理导出记录");
    }
    /// <summary>
    /// 下载非政府订单处理数据导入模板 ⬇️
    /// </summary>
    /// <returns></returns>
    [DisplayName("下载非政府订单处理数据导入模板")]
    [ApiDescriptionSettings(Name = "Import"), HttpGet, NonUnify]
    public IActionResult DownloadTemplate()
    {
        return ExcelHelper.ExportTemplate(new List<ExportTenderOrderOutput>(), "非政府订单处理导入模板");
    }
    private static readonly object _TenderOrderImportLock = new object();
    /// <summary>
    /// 导入非政府订单处理记录 💾
    /// </summary>
    /// <returns></returns>
    //[DisplayName("导入非政府订单处理记录")]
    //[ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork]
    //public IActionResult ImportData([Required] IFormFile file)
    //{
    //    lock (_TenderOrderImportLock)
    //    {
    //        var stream = ExcelHelper.ImportData<ImportTenderOrderInput, TenderOrder>(file, (list, markerErrorAction) =>
    //        {
    //            _sqlSugarClient.Utilities.PageEach(list, 2048, pageItems =>
    //            {
    //                // 校验并过滤必填基本类型为null的字段
    //                var rows = pageItems.Where(x => {
    //                    return true;
    //                }).Adapt<List<TenderOrder>>();
    //                var storageable = _TenderOrderRep.Context.Storageable(rows)
    //                    .SplitError(it => string.IsNullOrWhiteSpace(it.Item.ProjectCode), "项目编号不能为空")
    //                    .SplitError(it => it.Item.ProjectCode?.Length > 50, "项目编号长度不能超过50个字符")
    //                    .SplitError(it => string.IsNullOrWhiteSpace(it.Item.ProjectName), "项目名称不能为空")
    //                    .SplitError(it => it.Item.ProjectName?.Length > 200, "项目名称长度不能超过200个字符")
    //                    .SplitError(it => string.IsNullOrWhiteSpace(it.Item.Purchaser), "采购人不能为空")
    //                    .SplitError(it => it.Item.Purchaser?.Length > 100, "采购人长度不能超过100个字符")
    //                    .SplitError(it => string.IsNullOrWhiteSpace(it.Item.ProcurementAgency), "采购代理机构不能为空")
    //                    .SplitError(it => it.Item.ProcurementAgency?.Length > 100, "采购代理机构长度不能超过100个字符")
    //                    .SplitError(it => it.Item.Complainant?.Length > 100, "投诉人长度不能超过100个字符")
    //                    .SplitError(it => it.Item.ProcurementSupervisionDepartment?.Length > 100, "采购监督部门长度不能超过100个字符")
    //                    .SplitError(it => it.Item.Url?.Length > 255, "线上地址长度不能超过255个字符")
    //                    .SplitInsert(_ => true)
    //                    .ToStorage();
    //                storageable.AsInsertable.ExecuteCommand();// 不存在插入
    //                storageable.AsUpdateable.ExecuteCommand();// 存在更新
    //                // 标记错误信息
    //                markerErrorAction.Invoke(storageable, pageItems, rows);
    //            });
    //        });
    //        return stream;
    //    }
    //}
    /// <summary>
    /// 采购代理人发布招标 ✏️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人发布招标")]
    [ApiDescriptionSettings(Name = "Fabuzhaobiao"), HttpPost]
    public async Task Fabuzhaobiao(FabuTenderOrderInput input)
    {
        var entity = input.Adapt<TenderOrder>();
        long userId = 0;
        long? usertrueId = null;
        if (long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId))
        {
            usertrueId = userId;
        }
        var tenderOrder = _TenderOrderRep.AsQueryable().Where(x => x.Id == input.Id).First();
        if (tenderOrder == null)
        {
            throw Oops.Oh("订单不存在!");
        }
        if (tenderOrder.OrderStatus != 1)
        {
            throw Oops.Oh("只有处于保存状态的订单才能发布!");
        }
        var RealName = App.User?.FindFirstValue(ClaimConst.RealName);
        entity.UpdateTime = DateTime.Now;
        entity.UpdateUserId = usertrueId;
        entity.UpdateUserName = RealName;
        entity.FabuDate = entity.UpdateTime;
        entity.OrderStatus = 2;
        await _sqlSugarClient.Updateable(entity).UpdateColumns(x => new { x.ToubiaoStartDate, x.ToubiaoEndDate, x.KaibiaoDate, x.FabuDate, x.Zhaobiaowenjian, x.Fujian, x.Kaibiaodidian, x.UpdateTime, x.UpdateUserId, x.UpdateUserName,x.OrderStatus }).ExecuteCommandAsync();
        //await _TenderOrderRep.UpdateAsync(entity);
    }
    /// <summary>
    /// 采购代理人更新非政府订单标题 ✏️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人更新非政府订单标题")]
    [ApiDescriptionSettings(Name = "UpdateTittle"), HttpPost]
    public async Task UpdateTittle(UpdateTittleByIdTenderOrderInput 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 = _TenderOrderRep.AsQueryable().Where(x => x.Id == input.Id).First();
        if (tenderOrder == null)
        {
            throw Oops.Oh("订单不存在!");
        }
        tenderOrder.ProjectName = input.ProjectName.Trim();
        tenderOrder.UpdateTime = DateTime.Now;
        tenderOrder.UpdateUserId = usertrueId;
        tenderOrder.UpdateUserName = RealName;
        await _TenderOrderRep.UpdateAsync(tenderOrder);
    }
    /// <summary>
    /// 采购代理人发布变更公告 ✏️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人发布变更公告")]
    [ApiDescriptionSettings(Name = "Changezhaobiao"), HttpPost]
    public async Task Changezhaobiao(ChangeTenderOrderInput input)
    {
        var entity = input.Adapt<TenderOrder>();
        long userId = 0;
        long? usertrueId = null;
        if (long.TryParse(App.User?.FindFirst(ClaimConst.UserId)?.Value, out userId))
        {
            usertrueId = userId;
        }
        var tenderOrder = _TenderOrderRep.AsQueryable().Where(x => x.Id == input.TenderId).First();
        if (tenderOrder == null)
        {
            throw Oops.Oh("订单不存在!");
        }
        if (tenderOrder.OrderStatus != 2)
        {
            throw Oops.Oh("只有处于发布状态的订单才能变更公告!");
        }
        var changeOrder =  await _ChangeOrderRep.AsQueryable().Where(x => x.TenderId == input.TenderId).FirstAsync();
        if(changeOrder != null)
        {
            throw Oops.Oh("已经上传过变更公告!");
        }
        changeOrder = new ChangeOrder();
        var RealName = App.User?.FindFirstValue(ClaimConst.RealName);
        changeOrder.Id = Guid.NewGuid();
        changeOrder.TenderId = input.TenderId;
        changeOrder.ProjectName = input.ProjectName;
        changeOrder.Biangengwenjian = input.Biangengwenjian;
        changeOrder.CreateTime = DateTime.Now;
        changeOrder.CreateUserId = usertrueId;
        changeOrder.CreateUserName = RealName;
        changeOrder.UpdateTime = DateTime.Now;
        changeOrder.UpdateUserId = usertrueId;
        changeOrder.UpdateUserName = RealName;
        changeOrder.ToubiaoStartDate = input.ToubiaoStartDate;
        changeOrder.ToubiaoEndDate = input.ToubiaoEndDate;
        changeOrder.KaibiaoDate = input.KaibiaoDate;
        changeOrder.Kaibiaodidian = input.Kaibiaodidian;
        await _ChangeOrderRep.InsertAsync(changeOrder);
        entity.Id = input.TenderId;
        entity.ToubiaoStartDate = input.ToubiaoStartDate;
        entity.ToubiaoEndDate = input.ToubiaoEndDate;
        entity.KaibiaoDate = input.KaibiaoDate;
        entity.Kaibiaodidian = input.Kaibiaodidian;
        entity.UpdateTime = DateTime.Now;
        entity.UpdateUserId = usertrueId;
        entity.UpdateUserName = RealName;
        await _sqlSugarClient.Updateable(entity).UpdateColumns(x => new { x.ToubiaoStartDate, x.ToubiaoEndDate, x.KaibiaoDate , x.Kaibiaodidian, x.UpdateTime, x.UpdateUserId, x.UpdateUserName }).ExecuteCommandAsync();
        //await _TenderOrderRep.UpdateAsync(entity);
    }
    /// <summary>
    /// 获取变更公告详情 ℹ️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("获取变更公告详情")]
    [ApiDescriptionSettings(Name = "ChangeDetail"), HttpGet]
    public async Task<ChangeTenderOrderOut> ChangeDetail([FromQuery] QueryByIdTenderOrderInput input)
    {
        //var tenderOrderOutput = await _TenderOrderRep.AsQueryable().Where(x => x.Id == input.Id).Select<TenderOrderOutput>().FirstAsync();
        var changeOrder = await _ChangeOrderRep.AsQueryable().Where(x => x.TenderId == input.Id).Select<ChangeTenderOrderOut>().FirstAsync();
        //changeOrder.ToubiaoStartDate = tenderOrderOutput.ToubiaoStartDate;
        //changeOrder.ToubiaoEndDate = tenderOrderOutput.ToubiaoEndDate;
        //changeOrder.KaibiaoDate = tenderOrderOutput.KaibiaoDate;
        //changeOrder.Kaibiaodidian = tenderOrderOutput.Kaibiaodidian;
        return changeOrder;
    }
    /// <summary>
    /// 采购代理人删除变更公告 ❌
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("采购代理人删除变更公告")]
    [ApiDescriptionSettings(Name = "CHangeDelete"), HttpPost]
    public async Task CHangeDelete(DeleteTenderOrderInput input)
    {
        //var entity = await _TenderOrderRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        var entity = await _sqlSugarClient.Queryable<ChangeOrder>().Where(x => x.Id == input.Id).FirstAsync() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        //await _TenderOrderRep.FakeDeleteAsync(entity);   //假删除
        await _ChangeOrderRep.DeleteAsync(entity);   //真删除
    }
    /// <summary>
    /// 代理商发布中标文件 ➕
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("代理商发布中标文件")]
    [ApiDescriptionSettings(Name = "AddZhongbiao"), HttpPost]
    public async Task<bool> AddZhongbiao(OrderZhongbiaoInput 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.OrderStatus >=3 )
        {
            throw Oops.Oh("已经中标的项目不能再次中标!");
        }
        var tenderOrderBidding = await _TenderOrderBiddingRep.AsQueryable().Where(x => x.TenderId == input.TenderOrderId).Where(x => x.CreateUserId == input.SupplierUserId).FirstAsync();
        if (tenderOrderBidding == null)
        {
            throw Oops.Oh("不存在的投标!");
        }
        if (tenderOrderBidding.IsTransfer != true )
        {
            throw Oops.Oh("没有支付报名费。不能中标!");
        }
        if (string.IsNullOrEmpty(tenderOrderBidding.Touboaowenjian) )
        {
            throw Oops.Oh("没有投标文件。不能中标!");
        }
        tenderOrder.ZhongbiaoId = input.SupplierUserId;
        tenderOrder.ZhongbiaoName = input.SupplierUserName;
        tenderOrder.Zhongbiaowenjian = input.Zhongbiaowenjian;
        tenderOrder.ZhongbiaoDate = DateTime.Now;
        tenderOrder.UpdateTime = DateTime.Now;
        tenderOrder.UpdateUserId = usertrueId;
        tenderOrder.UpdateUserName = RealName;
        tenderOrder.OrderStatus = 3;
        tenderOrder.ZhongbiaoTittle = input.ZhongbiaoTittle;
        await _TenderOrderRep.UpdateAsync(tenderOrder);
        tenderOrderBidding.IsSelected = true;
        tenderOrderBidding.SelectedTime = tenderOrder.ZhongbiaoDate;
        tenderOrderBidding.UpdateTime = DateTime.Now;
        tenderOrderBidding.UpdateUserId = usertrueId;
        tenderOrderBidding.UpdateUserName = RealName;
        return await _TenderOrderBiddingRep.UpdateAsync(tenderOrderBidding);
    }
}