15个文件已修改
19个文件已添加
5086 ■■■■■ 已修改文件
Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/Configuration/Database.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/Configuration/Swagger.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/Configuration/Wechat.json 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/Const/ApplicationConst.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/WxPayCert/apiclient_cert.p12 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/WxPayCert/apiclient_cert.pem 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/WxPayCert/apiclient_key.pem 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/WxPayCert/证书使用说明.txt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.sln 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCTB.NET.API.Application/User/CustomerService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/ChangeOrder.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/Collection.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/CutomerMd/Extend/FBS_CusExtend.cs 12 ●●●● 补丁 | 查看 | 原始文档 | 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/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/Dto/FBS_EnterpriseTypeOutput.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/FBS_EnterpriseTypeService.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | 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 | 历史
Web/.env.development 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/api/Customer/fBS_EnterpriseType.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/Customer/fBS_EnterpriseType/index.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj
@@ -35,4 +35,10 @@
    <Folder Include="Service\" />
  </ItemGroup>
  <ItemGroup>
    <None Update="WxPayCert\apiclient_key.pem">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>
Admin.NET/Admin.NET.Application/Configuration/Database.json
@@ -14,8 +14,9 @@
        //"ConnectionString": "PORT=5432;DATABASE=xxx;HOST=localhost;PASSWORD=xxx;USER ID=xxx", // PostgreSQL
        //"ConnectionString": "Server=localhost;Database=xxx;Uid=xxx;Pwd=xxx;SslMode=None;AllowLoadLocalInfile=true;AllowUserVariables=true;", // MySql,
        //"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.0.31;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
        "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/Configuration/Wechat.json
@@ -16,10 +16,10 @@
  },
  // å¾®ä¿¡æ”¯ä»˜
  "WechatPay": {
    "AppId": "", // å¾®ä¿¡å…¬ä¼—平台AppId、开放平台AppId、小程序AppId、企业微信CorpId
    "MerchantId": "", // å•†æˆ·å¹³å°çš„商户号
    "MerchantV3Secret": "", // å•†æˆ·å¹³å°çš„APIv3密钥
    "MerchantCertificateSerialNumber": "", // å•†æˆ·å¹³å°çš„证书序列号
    "AppId": "1611252867", // å¾®ä¿¡å…¬ä¼—平台AppId、开放平台AppId、小程序AppId、企业微信CorpId
    "MerchantId": "1611252867", // å•†æˆ·å¹³å°çš„商户号
    "MerchantV3Secret": "dasldkIIUIUHNG2356568K5dLJ556KKd", // å•†æˆ·å¹³å°çš„APIv3密钥
    "MerchantCertificateSerialNumber": "73580401FFE2057F19ABABCC62475D9BF057254C", // å•†æˆ·å¹³å°çš„证书序列号
    "MerchantCertificatePrivateKey": "\\WxPayCert\\apiclient_key.pem" // å•†æˆ·å¹³å°çš„API证书私钥(apiclient_key.pem文件内容)
  },
  // æ”¯ä»˜å›žè°ƒ
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.Application/WxPayCert/apiclient_cert.p12
Binary files differ
Admin.NET/Admin.NET.Application/WxPayCert/apiclient_cert.pem
New file
@@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIUc1gEAf/iBX8Zq6vMYkddm/BXJUwwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjUwNzE0MDYxNjIyWhcNMzAwNzEzMDYxNjIyWjCBhDETMBEGA1UEAwwK
MTYxMTI1Mjg2NzEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
DCflm5vlt53mlL/ph4fmi5vmipXmoIflkqjor6LmnInpmZDlhazlj7gxCzAJBgNV
BAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAOmENCFIvyGXyPRGFseirnsKy0ibv2PtPLIZ1uYht+tdnOQBcx3c
TlvecbbHCFCe/o/Xt37zNDT+uyV+nn0WU8qWULTZOux5Fl4LOQclpHe251BQsqEx
i3ZQXUhxMwyBm1hqwcIaI/bTE8TPTT2h8Zu2AaKl1bDfxQdV/PtJL187HmcpiW3b
DNRfDnMFIygusZak4ZzsazqTaCCQ27/U4Eeni06+yM9WDcvZ9xom8vejm61FADui
mhiM10CjoIJqb10qOX/6DakCzAHMMmQbCH7cLdI0XAptypClINew6lOMFFu5h+Jk
c/YaOrcv+jX4ZGb3TXGsA0cQ121n1ZEQuLMCAwEAAaOBuTCBtjAJBgNVHRMEAjAA
MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2
Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD
MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC
MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQC5
gJJxMEt82WQSjaNW7cWBM4i8PnHytNP+QBhGayW1zCWjlPLmSw1Pex/bxsrbT9dN
ztG9zWSRuTt5cJIWrWqGSWeWPdrV6Nt4rbKz0q4gdCTFq6ILKIKwyxUzgR6QhrDP
MjcATx0w7osBhNpbYy4ZdOA529WHL1Dy1tGUCfoav0leIzv2d2aRJ0SYmGXQI0QZ
oELdkWkw48dX+P9vkWGSA6MBNwiSmDbrX1E87+knBZL0bRxHR8nB4h/bXlGBstuJ
zFcOdDRTNN6WF86I2gwYW+2w067cgYY0SSRhPtrfj6wEcZxkHnYPfZAp7Ez2X0CY
qYyYFWxE4mrxKfQWmu85
-----END CERTIFICATE-----
Admin.NET/Admin.NET.Application/WxPayCert/apiclient_key.pem
New file
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDphDQhSL8hl8j0
RhbHoq57CstIm79j7TyyGdbmIbfrXZzkAXMd3E5b3nG2xwhQnv6P17d+8zQ0/rsl
fp59FlPKllC02TrseRZeCzkHJaR3tudQULKhMYt2UF1IcTMMgZtYasHCGiP20xPE
z009ofGbtgGipdWw38UHVfz7SS9fOx5nKYlt2wzUXw5zBSMoLrGWpOGc7Gs6k2gg
kNu/1OBHp4tOvsjPVg3L2fcaJvL3o5utRQA7opoYjNdAo6CCam9dKjl/+g2pAswB
zDJkGwh+3C3SNFwKbcqQpSDXsOpTjBRbuYfiZHP2Gjq3L/o1+GRm901xrANHENdt
Z9WRELizAgMBAAECggEABcPfzZqQLXIj4fQBB/i6OgtwLWC6/uqSfwsoRRI8CjGL
eA2ZG/mebaI2SH7tc6AZRM/clePHPC+1yx0vKINumifP4kcir0fmB3hbdhO11cbM
Oy1i25vvh4JAa1NwITTp8urf0bz3elaHvGopzAW9g0yhCbTya6V6pc23qzSJWN5+
stds/81LDdjDeliuDhJMflZYtXUaddN0eStfdyFB6GEPDgXLVpk83tcdOy94peGy
lrrKPJ1uVgpgQ2/AgPlzLZmK51Zh1Eh9qEDGDzytYw2cz9a8v+QIl2G9bZP52nHN
Sx3svca2bfe8cGJ/+ppFCllJXgkz4a63DyA1QHVIYQKBgQD94Bf+i6gLeukKmKiQ
bqAMH66+y6JSfbKGz4eHAoy02qOYb238VX3VhfwJcy2dvPiOyLq/MD+YKlgaUctL
W9WSnAS/Dh4rw8JdgMUBs/1/cpMYy/Ac1MlDRYC8zDeGqmgV6KNjHlxO+DX++xZG
q8JFC/VK+NKy+FSPK8UxnuZ4eQKBgQDreH4bTW0YROvWbSoyF3vjEeJZ6LxYMfmD
3jFrIIecItDGZk0aQg9dSLegtbxJToyZAhE4mEFQfcHSewaK1KF+7BF2ghxAZ+QK
ZCny+v6976XSBqeEGBcA5iU2RNgYSAxNagiPIwzbyVYWYC8pZcgOzYHld34xKAkP
UoXI3TIHiwKBgQCQH6jfe78RjVxBBLslC3hWiaH1dLsY43z3JVeGIL9qaHjZL+Eb
kBkYn7CeWMG7u6zLuk6x/R0NMHTFtEuZ42+ShHn5UHV2WPK9jD3LIrg1owC44gXV
CEOdqhZUmAapr5HZZjFjMrgqqKRWtYpG4nkuI4TEZA+RRIMUqD+RVOj32QKBgHH6
mjhHCzbDLdFWeCVVHr+0SXex43Fhh2DgbdVoIpxeceaHYG0EawGBkHk3XxOw9Pef
e4yEjqESrn5e1LTg5edVB8LwihJW95hcEb4u5p4z4XU/iVi0fHYP8RVKz7s5LNNQ
LyJyGehNleEw38NPJD6eFXFonOnYckI7dMzc3TmvAoGBAM46LFxzuiujDow6p+vH
RKZzWVIJ8jq5hQ+2i5CA3Sh4ShNON9I3HRg4W2A10VyaSQPNClnWe9+1yrvzQFUm
R0eDcmjqxjLV0QEkcjP8IFr9lfQs5WMkwIw6Rj9m7p65ko+jYKZD44HgJXMQDrIE
xV1bnAsORzYbyIPKkU9C+STH
-----END PRIVATE KEY-----
Admin.NET/Admin.NET.Application/WxPayCert/Ö¤ÊéʹÓÃ˵Ã÷.txt
New file
@@ -0,0 +1,18 @@
欢迎使用微信支付!
附件中的三份文件(证书pkcs12格式、证书pem格式、证书密钥pem格式),为接口中强制要求时需携带的证书文件。
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
不同开发语言下的证书格式不同,以下为说明指引:
    è¯ä¹¦pkcs12格式(apiclient_cert.p12)
        åŒ…含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份
        éƒ¨åˆ†å®‰å…¨æ€§è¦æ±‚较高的API需要使用该证书来确认您的调用身份
        windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户号(如:1900006031)
    è¯ä¹¦pem格式(apiclient_cert.pem)
        ä»Žapiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制
        éƒ¨åˆ†å¼€å‘语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
        æ‚¨ä¹Ÿå¯ä»¥ä½¿ç”¨openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem
    è¯ä¹¦å¯†é’¥pem格式(apiclient_key.pem)
        ä»Žapiclient_cert.p12中导出密钥部分的文件,为pem格式
        éƒ¨åˆ†å¼€å‘语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
        æ‚¨ä¹Ÿå¯ä»¥ä½¿ç”¨openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
备注说明:
        ç”±äºŽç»å¤§éƒ¨åˆ†æ“ä½œç³»ç»Ÿå·²å†…置了微信支付服务器证书的根CA证书,  2018å¹´3月6日后, ä¸å†æä¾›CA证书文件(rootca.pem)下载
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/FZCTB.NET.API.Application/User/CustomerService.cs
@@ -51,12 +51,14 @@
    /// 
    /// </summary>
    public CustomerService(SysCacheService cacheService, CustomerManagerS managerS,SqlSugarRepository<FBS_Customer>  repository
        , SqlSugarRepository<FBS_EnterpriseType> fbsenrep,IMapper mapper )
        , SqlSugarRepository<FBS_EnterpriseType> fbsenrep,IMapper mapper,SqlSugarRepository<FBS_ExRole> exroles , SqlSugarRepository<FBS_CusExtend> cusrep)
    {
        _sysCacheService= cacheService;
         _customerManager = managerS;
        _fBS_CustomerRep = repository;
        _fBS_EnterpriseTypeRep = fbsenrep;
        _fBS_ExRoleRep = exroles;
        _fBS_CusExtendRep = cusrep;
        _mapper = mapper;
    }
@@ -172,7 +174,7 @@
            throw Oops.Oh("交易主体不存在");
        }
        if(user.CoutomerExRols.Any(x=>x.ExRole.Code==cusExtend.TransactionCode&& x.HasFlsh==true))
        if(user.CoutomerExRols?.Any(x=>x.ExRole.Code==cusExtend.TransactionCode&& x.HasFlsh==true)==true)
        {
            throw Oops.Oh("用户已经注册了该主体");
        }
Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs
@@ -99,7 +99,7 @@
    /// æ³¨å†Œèµ„金(单位:万元 ï¼‰
    /// </summary>
    public decimal RegisteredCapital { get; set; }
    public string RegisteredCapital { get; set; }
    /// <summary>
    /// æ³•定代表人姓名
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/CutomerMd/Extend/FBS_CusExtend.cs
@@ -70,7 +70,15 @@
    /// </summary>
    [Required(ErrorMessage = "注册资金为必填项")]
    [SugarColumn(ColumnDescription = "注册资金")]
    public decimal RegisteredCapital { get; set; }
    public string RegisteredCapital { get; set; }
    ///// <summary>
    ///// æ³¨å†Œèµ„金(单位:万元 ï¼‰
    ///// </summary>
    //[Required(ErrorMessage = "注册资金为必填项")]
    //[SugarColumn(ColumnDescription = "注册资金")]
    //public decimal RegisteredCapital { get; set; }
    /// <summary>
    /// æ³•定代表人姓名
@@ -127,7 +135,7 @@
    /// ä¼ä¸šä¸»è¥ä¸šåŠ¡
    /// </summary>
    [Required(ErrorMessage = "主营业务为必填项")]
    [SugarColumn(ColumnDescription = "企业主营业务")]
    [SugarColumn(ColumnDescription = "企业主营业务",Length =Int32.MaxValue,IsNullable = true)]
    public string MainBusiness { get; set; }
    /// <summary>
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/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/Dto/FBS_EnterpriseTypeOutput.cs
@@ -3,6 +3,7 @@
// æœ¬é¡¹ç›®ä¸»è¦éµå¾ª MIT è®¸å¯è¯å’Œ Apache è®¸å¯è¯ï¼ˆç‰ˆæœ¬ 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT å’Œ LICENSE-APACHE æ–‡ä»¶ã€‚
//
// ä¸å¾—利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using FZCZTB.NET.MD.ConfigMd;
using Magicodes.ExporterAndImporter.Core;
namespace FZCZTB.Net.CustomerSYSTem;
@@ -59,13 +60,18 @@
    /// <summary>
    /// ä¿®æ”¹è€…Id
    /// </summary>
    public long? UpdateUserId { get; set; }
    public long? UpdateUserId { get; set; }
    /// <summary>
    /// ä¿®æ”¹è€…姓名
    /// </summary>
    public string? UpdateUserName { get; set; }
    public string? UpdateUserName { get; set; }
    /// <summary>
    /// å­ç±»
    /// </summary>
    public List<FBS_EnterpriseType>? Child { get; set; }
}
/// <summary>
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/FBS_EnterpriseTypeService.cs
@@ -54,6 +54,24 @@
    }
    /// <summary>
    /// èŽ·å–æ ‘å½¢æ•°æ®
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("获取树形数据")]
    [ApiDescriptionSettings(Name = "TreeData"), HttpPost]
    public async Task<List<FBS_EnterpriseTypeOutput>> GetTreeData(PageFBS_EnterpriseTypeInput input)
    {
        input.Keyword = input.Keyword?.Trim();
        var query = _fBS_EnterpriseTypeRep.AsQueryable()
            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Name.Contains(input.Keyword) || u.Code.Contains(input.Keyword))
            .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.Code), u => u.Code.Contains(input.Code.Trim()))
            .WhereIF(input.ParentId != null, u => u.ParentId == input.ParentId)
            .Select<FBS_EnterpriseTypeOutput>();
        return await query.OrderBuilder(input).ToTreeAsync( x=>x.Child, x=>x.ParentId,0,x => x.Id);
    }
    /// <summary>
    /// èŽ·å–ä¼ä¸šç±»é…ç½®è¡¨è¯¦æƒ… â„¹ï¸
    /// </summary>
    /// <param name="input"></param>
@@ -106,6 +124,8 @@
        await _fBS_EnterpriseTypeRep.DeleteAsync(entity);   //真删除
    }
    /// <summary>
    /// æ‰¹é‡åˆ é™¤ä¼ä¸šç±»é…ç½®è¡¨ âŒ
    /// </summary>
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);
    }
}
Web/.env.development
@@ -1,8 +1,17 @@
###
 # @FilePath: .env.development
 # @Author: å°é£žä¾ 
 # @Date: 2025-06-17 14:09:57
 # @LastEditors:
 # @LastEditTime: 2025-07-14 11:22:52
 # Copyright: 2025  MinTinge CO.,LTD. All Rights Reserved.
 # @Descripttion: å†™å…¥ä½ çš„æè¿°
###
# æœ¬åœ°çŽ¯å¢ƒ
ENV = development
# æœ¬åœ°çŽ¯å¢ƒæŽ¥å£åœ°å€ http://www.feizhengcai.cn:9009 http://192.168.0.36:5005
VITE_API_URL = http://192.168.0.36:5005
VITE_API_URL = http://127.0.0.1:5005
# ç™»é™†ç•Œé¢é»˜è®¤ç”¨æˆ·
VITE_DEFAULT_USER = superadmin
Web/src/api/Customer/fBS_EnterpriseType.ts
@@ -49,4 +49,6 @@
    updateUserId: number;
    // ä¿®æ”¹è€…姓名
    updateUserName: string;
    // å­é¡¹
    Child:FBS_EnterpriseType[];
}
Web/src/views/Customer/fBS_EnterpriseType/index.vue
@@ -186,6 +186,9 @@
      <editDialog ref="editDialogRef" @reloadTable="handleQuery" />
    </el-card>
  </div>
  <div>
  </div>
</template>
<style scoped>
:deep(.el-input), :deep(.el-select), :deep(.el-input-number) {