// 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; /// /// 非政府招标代理订单处理服务 🧩 /// [ApiDescriptionSettings(ApplicationConst.GroupNameDD, Order = 100)] public class TenderOrderService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _TenderOrderRep; private readonly ISqlSugarClient _sqlSugarClient; private readonly SqlSugarRepository _sysDictDataRep; private readonly SysCacheService _sysCacheService; private readonly SqlSugarRepository _sysRegionRep; private readonly SqlSugarRepository _ChangeOrderRep; private readonly SqlSugarRepository _TenderOrderBiddingRep; public TenderOrderService(SqlSugarRepository TenderOrderRep, ISqlSugarClient sqlSugarClient, SqlSugarRepository sysDictDataRep, SysCacheService sysCacheService, SqlSugarRepository sysRegionRep, SqlSugarRepository changeOrderRep , SqlSugarRepository TenderOrderBiddingRep) { _TenderOrderRep = TenderOrderRep; _sqlSugarClient = sqlSugarClient; _sysDictDataRep = sysDictDataRep; _sysCacheService = sysCacheService; _sysRegionRep = sysRegionRep; _ChangeOrderRep = changeOrderRep; _TenderOrderBiddingRep = TenderOrderBiddingRep; } /// /// 获取行政区域列表 🔖 /// /// [DisplayName("获取行政区域列表")] [ApiDescriptionSettings(Name = "GetRegionList"), HttpGet] [AllowAnonymous] public async Task> GetRegionList() { var sysRegions = await _sysRegionRep.AsQueryable().WhereIF(!string.IsNullOrWhiteSpace(""), u => u.Level != 4).Select().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; } /// /// 获取开标方式集合 🔖 /// /// [DisplayName("获取开标方式集合")] [ApiDescriptionSettings(Name = "GetKaibiaofangshiList"), HttpGet] [AllowAnonymous] public async Task> GetKaibiaofangshiList() { return await GetDataListByCode("Kaibiaofangshi"); } /// /// 获取是否枚举集合 🔖 /// /// [DisplayName("获取是否枚举集合")] [ApiDescriptionSettings(Name = "GetYesNoEnumList"), HttpGet] [AllowAnonymous] public async Task> GetYesNoEnumList() { return await GetDataListByCode("YesNoEnum"); } /// /// 获取复合体投标集合 🔖 /// /// [DisplayName("获取复合体投标集合")] [ApiDescriptionSettings(Name = "GetFuhetitoubiaoList"), HttpGet] [AllowAnonymous] public async Task> GetFuhetitoubiaoList() { return await GetDataListByCode("Fuhetitoubiao"); } /// /// 获取定标规则集合 🔖 /// /// [DisplayName("获取定标规则集合")] [ApiDescriptionSettings(Name = "GetDingbiaoguizeList"), HttpGet] [AllowAnonymous] public async Task> GetDingbiaoguizeList() { return await GetDataListByCode("Dingbiaoguize"); } /// /// 获取代码类型集合 🔖 /// /// [DisplayName("获取代码类型集合")] [ApiDescriptionSettings(Name = "GetDaimaleixingList"), HttpGet] [AllowAnonymous] public async Task> GetDaimaleixingList() { return await GetDataListByCode("Daimaleixing"); } /// /// 获取采购方式集合 🔖 /// /// [DisplayName("获取采购方式集合")] [ApiDescriptionSettings(Name = "GetCaigoufangshiList"), HttpGet] [AllowAnonymous] public async Task> GetCaigoufangshiList() { return await GetDataListByCode("Caigoufangshi"); } /// /// 获取行业品目集合 🔖 /// /// [DisplayName("获取行业品目集合")] [ApiDescriptionSettings(Name = "GetHangyepingmuList"), HttpGet] [AllowAnonymous] public async Task> GetHangyepingmuList() { return await GetDataListByCode("Hangyepingmu"); } /// /// 获取项目进度集合 🔖 /// /// [DisplayName("获取项目进度集合")] [ApiDescriptionSettings(Name = "GetOrderStatusList"), HttpGet] [AllowAnonymous] public async Task> GetOrderStatusList() { return await GetDataListByCode("OrderStatus"); } /// /// 获取字典值集合 🔖 /// /// /// /// [NonAction] public async Task> GetDataListByCode(string code) { if (string.IsNullOrWhiteSpace(code)) throw Oops.Oh(ErrorCodeEnum.D3011); var dictType = await _sysDictDataRep.Change().AsQueryable() .Where(u => u.Status == StatusEnum.Enable) .WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code) .FirstAsync(); if (dictType == null) return null; var dictDataList = await _sysDictDataRep.AsQueryable() .Where(u => u.DictTypeId == dictType.Id) .Where(u => u.Status == StatusEnum.Enable) .OrderBy(u => new { u.OrderNo, u.Value, u.Code }) .ToListAsync(); return dictDataList; } /// /// 招标代理分页查询非政府订单处理 🔖 /// /// /// [DisplayName("招标代理分页查询非政府订单处理")] [ApiDescriptionSettings(Name = "Page"), HttpPost] public async Task> 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(); return await query.OrderBuilder(input,"", "CreateTime",true).ToPagedListAsync(input.Page, input.PageSize); } /// /// 获取非政府订单处理详情 ℹ️ /// /// /// [DisplayName("获取非政府订单处理详情")] [ApiDescriptionSettings(Name = "Detail"), HttpGet] public async Task 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().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() .Where(x => x.TenderId == input.Id) .Where(x=>x.IsTransfer == true) .Select().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; } /// /// 采购代理人增加非政府订单处理 ➕ /// /// /// [DisplayName("采购代理人增加非政府订单处理")] [ApiDescriptionSettings(Name = "Add"), HttpPost] public async Task Add(AddTenderOrderInput input) { var entity = input.Adapt(); 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); } /// /// 采购代理人更新非政府订单处理 ✏️ /// /// /// [DisplayName("采购代理人更新非政府订单处理")] [ApiDescriptionSettings(Name = "Update"), HttpPost] public async Task Update(UpdateTenderOrderInput input) { var entity = input.Adapt(); 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); } /// /// 采购代理人更新非政府订单质疑 ✏️ /// /// /// [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); } /// /// 采购代理人更新非政府订单投诉 ✏️ /// /// /// [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); } /// /// 采购代理人删除非政府订单处理 ❌ /// /// /// [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().Where(x=>x.Id== input.Id).FirstAsync() ?? throw Oops.Oh(ErrorCodeEnum.D1002); //await _TenderOrderRep.FakeDeleteAsync(entity); //假删除 await _TenderOrderRep.DeleteAsync(entity); //真删除 } /// /// 采购代理人批量删除非政府订单处理 ❌ /// /// /// [DisplayName("采购代理人批量删除非政府订单处理")] [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost] public async Task BatchDelete([Required(ErrorMessage = "主键列表不能为空")]List input) { var exp = Expressionable.Create(); 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) ; //真删除 } /// /// 导出非政府订单处理记录 🔖 /// /// /// [DisplayName("导出非政府订单处理记录")] [ApiDescriptionSettings(Name = "Export"), HttpPost, NonUnify] public async Task Export(PageTenderOrderInput input) { var list = (await Page(input)).Items?.Adapt>() ?? new(); //if (input.SelectKeyList?.Count > 0) list = list.Where(x => input.SelectKeyList.Contains(x.Id)).ToList(); return ExcelHelper.ExportTemplate(list, "非政府订单处理导出记录"); } /// /// 下载非政府订单处理数据导入模板 ⬇️ /// /// [DisplayName("下载非政府订单处理数据导入模板")] [ApiDescriptionSettings(Name = "Import"), HttpGet, NonUnify] public IActionResult DownloadTemplate() { return ExcelHelper.ExportTemplate(new List(), "非政府订单处理导入模板"); } private static readonly object _TenderOrderImportLock = new object(); /// /// 导入非政府订单处理记录 💾 /// /// //[DisplayName("导入非政府订单处理记录")] //[ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork] //public IActionResult ImportData([Required] IFormFile file) //{ // lock (_TenderOrderImportLock) // { // var stream = ExcelHelper.ImportData(file, (list, markerErrorAction) => // { // _sqlSugarClient.Utilities.PageEach(list, 2048, pageItems => // { // // 校验并过滤必填基本类型为null的字段 // var rows = pageItems.Where(x => { // return true; // }).Adapt>(); // 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; // } //} /// /// 采购代理人发布招标 ✏️ /// /// /// [DisplayName("采购代理人发布招标")] [ApiDescriptionSettings(Name = "Fabuzhaobiao"), HttpPost] public async Task Fabuzhaobiao(FabuTenderOrderInput input) { var entity = input.Adapt(); 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); } /// /// 采购代理人更新非政府订单标题 ✏️ /// /// /// [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); } /// /// 采购代理人发布变更公告 ✏️ /// /// /// [DisplayName("采购代理人发布变更公告")] [ApiDescriptionSettings(Name = "Changezhaobiao"), HttpPost] public async Task Changezhaobiao(ChangeTenderOrderInput input) { var entity = input.Adapt(); 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); } /// /// 获取变更公告详情 ℹ️ /// /// /// [DisplayName("获取变更公告详情")] [ApiDescriptionSettings(Name = "ChangeDetail"), HttpGet] public async Task ChangeDetail([FromQuery] QueryByIdTenderOrderInput input) { //var tenderOrderOutput = await _TenderOrderRep.AsQueryable().Where(x => x.Id == input.Id).Select().FirstAsync(); var changeOrder = await _ChangeOrderRep.AsQueryable().Where(x => x.TenderId == input.Id).Select().FirstAsync(); //changeOrder.ToubiaoStartDate = tenderOrderOutput.ToubiaoStartDate; //changeOrder.ToubiaoEndDate = tenderOrderOutput.ToubiaoEndDate; //changeOrder.KaibiaoDate = tenderOrderOutput.KaibiaoDate; //changeOrder.Kaibiaodidian = tenderOrderOutput.Kaibiaodidian; return changeOrder; } /// /// 采购代理人删除变更公告 ❌ /// /// /// [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().Where(x => x.Id == input.Id).FirstAsync() ?? throw Oops.Oh(ErrorCodeEnum.D1002); //await _TenderOrderRep.FakeDeleteAsync(entity); //假删除 await _ChangeOrderRep.DeleteAsync(entity); //真删除 } /// /// 代理商发布中标文件 ➕ /// /// /// [DisplayName("代理商发布中标文件")] [ApiDescriptionSettings(Name = "AddZhongbiao"), HttpPost] public async Task 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); } }