From 2d8739b04f86ab5e73ec7b0d3152e702a90a450b Mon Sep 17 00:00:00 2001
From: 移动系统liao <liaoxujun@qq.com>
Date: 星期一, 14 七月 2025 16:34:49 +0800
Subject: [PATCH] 修改用户扩展资料

---
 Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/TenderOrderService.cs |  858 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 858 insertions(+), 0 deletions(-)

diff --git a/Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/TenderOrderService.cs b/Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/TenderOrderService.cs
new file mode 100644
index 0000000..806d874
--- /dev/null
+++ b/Admin.NET/FZFCGDD.ORDER.Application/Service/TenderOrder/TenderOrderService.cs
@@ -0,0 +1,858 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+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>
+    /// 鑾峰彇浠g爜绫诲瀷闆嗗悎 馃敄
+    /// </summary>
+    /// <returns></returns>
+    [DisplayName("鑾峰彇浠g爜绫诲瀷闆嗗悎")]
+    [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>
+    /// 鎷涙爣浠g悊鍒嗛〉鏌ヨ闈炴斂搴滆鍗曞鐞� 馃敄
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("鎷涙爣浠g悊鍒嗛〉鏌ヨ闈炴斂搴滆鍗曞鐞�")]
+    [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>
+    /// 閲囪喘浠g悊浜哄鍔犻潪鏀垮簻璁㈠崟澶勭悊 鉃�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜哄鍔犻潪鏀垮簻璁㈠崟澶勭悊")]
+    [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>
+    /// 閲囪喘浠g悊浜烘洿鏂伴潪鏀垮簻璁㈠崟澶勭悊 鉁忥笍
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜烘洿鏂伴潪鏀垮簻璁㈠崟澶勭悊")]
+    [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>
+    /// 閲囪喘浠g悊浜烘洿鏂伴潪鏀垮簻璁㈠崟璐ㄧ枒 鉁忥笍
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜烘洿鏂伴潪鏀垮簻璁㈠崟璐ㄧ枒")]
+    [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>
+    /// 閲囪喘浠g悊浜烘洿鏂伴潪鏀垮簻璁㈠崟鎶曡瘔 鉁忥笍
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜烘洿鏂伴潪鏀垮簻璁㈠崟鎶曡瘔")]
+    [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>
+    /// 閲囪喘浠g悊浜哄垹闄ら潪鏀垮簻璁㈠崟澶勭悊 鉂�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜哄垹闄ら潪鏀垮簻璁㈠崟澶勭悊")]
+    [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>
+    /// 閲囪喘浠g悊浜烘壒閲忓垹闄ら潪鏀垮簻璁㈠崟澶勭悊 鉂�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜烘壒閲忓垹闄ら潪鏀垮簻璁㈠崟澶勭悊")]
+    [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), "閲囪喘浠g悊鏈烘瀯涓嶈兘涓虹┖")
+    //                    .SplitError(it => it.Item.ProcurementAgency?.Length > 100, "閲囪喘浠g悊鏈烘瀯闀垮害涓嶈兘瓒呰繃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>
+    /// 閲囪喘浠g悊浜哄彂甯冩嫑鏍� 鉁忥笍
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜哄彂甯冩嫑鏍�")]
+    [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>
+    /// 閲囪喘浠g悊浜烘洿鏂伴潪鏀垮簻璁㈠崟鏍囬 鉁忥笍
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜烘洿鏂伴潪鏀垮簻璁㈠崟鏍囬")]
+    [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>
+    /// 閲囪喘浠g悊浜哄彂甯冨彉鏇村叕鍛� 鉁忥笍
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜哄彂甯冨彉鏇村叕鍛�")]
+    [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>
+    /// 閲囪喘浠g悊浜哄垹闄ゅ彉鏇村叕鍛� 鉂�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("閲囪喘浠g悊浜哄垹闄ゅ彉鏇村叕鍛�")]
+    [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>
+    /// 浠g悊鍟嗗彂甯冧腑鏍囨枃浠� 鉃�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [DisplayName("浠g悊鍟嗗彂甯冧腑鏍囨枃浠�")]
+    [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);
+    }
+
+
+}

--
Gitblit v1.9.1