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