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