using DocumentFormat.OpenXml.Bibliography; using DocumentFormat.OpenXml.Spreadsheet; using Infrastructure; using Infrastructure.Extensions; using Moq; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Interface; using OpenAuth.App.Request; using OpenAuth.App.ServiceApp.BiddingInfoManager.Request; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using Quartz.Impl.Triggers; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography.Xml; using System.Text; using System.Threading.Tasks; namespace OpenAuth.App.ServiceApp.BiddingInfoManager { public class BiddingInfoApp:SqlSugarBaseApp { private ISqlSugarClient client; #region 构造函数 public BiddingInfoApp( ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, ISqlSugarClient sqlSugarClient ) : base(unitWork, repository, auth) { this.client = sqlSugarClient; } #endregion #region 数据查询 /// /// 分页查询招标信息 /// /// /// public async Task>>> LoadBiddingInfo(BiddingInfoReq req) { RefAsync totalNumber = 0; List status = new List(); if (!string.IsNullOrEmpty(req.nowstatus)) { status = req.nowstatus.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList(); } var table = await base.Repository.AsQueryable() .WhereIF(!string.IsNullOrEmpty(req.nowstatus), r => status.Contains(r.NowStatus)) .WhereIF(!string.IsNullOrEmpty(req.projectname), r => r.ProjectName.Contains(req.projectname)) .WhereIF(!string.IsNullOrEmpty(req.projectnum), r => r.ProjectNum.Contains(req.projectnum)) .WhereIF(!string.IsNullOrEmpty(req.biddingtype), r => r.BiddingType == req.biddingtype) .WhereIF(!string.IsNullOrEmpty(req.biddingform), r => r.BiddingForm == req.biddingform) .WhereIF(req.year != null && req.year != 0, r => r.CreateTime != null && r.CreateTime.Value.Year == req.year) .LeftJoin((r,a)=>r.BidAgent==a.Id) .OrderByDescending((r, a) => r.CreateTime) .Select((r, a) => new { id=r.Id, projectName=r.ProjectName, projectNum = r.ProjectNum, biddingType = r.BiddingType, biddingAmount = SqlFunc.Round(r.BiddingAmount,2), biddingForm = r.BiddingForm, procuringEntity = r.ProcuringEntity, registrationDeadline = r.RegistrationDeadline, bidOpeningTime = r.BidOpeningTime, nowStatus = r.NowStatus, bidWinningAmount = SqlFunc.Round(r.BidWinningAmount,2), bidAgent=r.BidAgent, createTime=r.CreateTime, createUser=r.CreateUser, remark=r.Remark, winningCompanyId=r.WinningCompanyId, name=a.Name, overtimeflag=r.BidOpeningTime==null?false:(((DateTime)r.BidOpeningTime).AddDays(2)>>() { Result = new PageInfo> { Items = table, Total = totalNumber } }; } /// /// 根据id查询单个招标信息--编辑信息加载使用 /// /// /// public async Task> LoadBiddingInfoById(string id) { var data = await base.Repository.AsQueryable().Where(r=>r.Id == id).FirstAsync(); return new Response() { Result = data }; } /// /// 添加招标信息 /// /// /// public async Task> AddBiddingInfo(PpBiddinginfo info) { using (var db = UnitWork.CreateContext()) { if (db.PpBiddinginfo.GetFirst(r => r.ProjectNum == info.ProjectNum) != null) { return new Response { Result = false, Message = "项目编号已存在" }; } else { var user = _auth.GetCurrentUser().User; info.Id=Guid.NewGuid().ToString(); info.CreateTime=DateTime.Now; info.CreateUser=user.Id.ToString(); var flag = await db.PpBiddinginfo.InsertAsync(info); var flags = db.Commit(); if (flag && flags) { return new Response { Result = true, Message = "添加成功,"+info.Id }; } else { return new Response { Result = false, Message = "添加失败" }; } } } } /// /// 编辑招标信息 /// /// /// public async Task> EditBiddingInfo(PpBiddinginfo info) { using (var db = UnitWork.CreateContext()) { if (db.PpBiddinginfo.GetFirst(r => r.ProjectNum == info.ProjectNum && r.Id!=info.Id) != null) { return new Response { Result = false, Message = "项目编号已存在" }; } else { var flag = await db.PpBiddinginfo.UpdateAsync(it => new PpBiddinginfo() { ProjectName = info.ProjectName, ProjectNum = info.ProjectNum, BiddingType = info.BiddingType, BiddingForm = info.BiddingForm, BiddingAmount = info.BiddingAmount, ProcuringEntity = info.ProcuringEntity, BidOpeningTime = info.BidOpeningTime, RegistrationDeadline = info.RegistrationDeadline, NowStatus = info.NowStatus, BidWinningAmount = info.BidWinningAmount, BidAgent = info.BidAgent, Remark = info.Remark }, it => it.Id == info.Id); var flags = db.Commit(); if (flag && flags) { return new Response { Result = true, Message = "编辑成功" }; } else { return new Response { Result = false, Message = "编辑失败" }; } } } } /// /// 删除招标信息 /// /// /// public async Task> DeleteBiddingInfo(string id) { using (var db = UnitWork.CreateContext()) { var flag=await db.PpBiddinginfo.DeleteAsync(r=>r.Id==id); if (db.Commit() && flag) { return new Response { Result = true, Message = "删除成功" }; } else { return new Response { Result = false, Message = "删除失败" }; } } } #endregion #region 招标代理 /// /// 查询招标信息--代理公司的查询,只看自己代理的招标项目 /// /// /// public async Task>>> LoadAgencyBiddingInfo(BiddingInfoReq req) { var user=_auth.GetCurrentUser(); //查询当前账号关联的公司 if (user != null) { var acc = await base.Repository.ChangeRepository>().AsQueryable() .Where(r => r.UserId == user.User.Id.ToString()).FirstAsync(); if (acc != null) { RefAsync totalNumber = 0; List status = new List(); if (!string.IsNullOrEmpty(req.nowstatus)) { status = req.nowstatus.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList(); } var table = await base.Repository.AsQueryable() .Where(r=>r.BidAgent==acc.AgencyId) .WhereIF(!string.IsNullOrEmpty(req.nowstatus), r => status.Contains(r.NowStatus)) .WhereIF(!string.IsNullOrEmpty(req.projectname), r => r.ProjectName.Contains(req.projectname)) .WhereIF(!string.IsNullOrEmpty(req.projectnum), r => r.ProjectNum.Contains(req.projectnum)) .WhereIF(!string.IsNullOrEmpty(req.biddingtype), r => r.BiddingType == req.biddingtype) .WhereIF(!string.IsNullOrEmpty(req.biddingform), r => r.BiddingForm == req.biddingform) .WhereIF(req.year != null && req.year != 0, r => r.CreateTime != null && r.CreateTime.Value.Year == req.year) .LeftJoin((r, a) => r.BidAgent == a.Id) .OrderByDescending((r, a) => r.CreateTime) .Select((r, a) => new { id = r.Id, projectName = r.ProjectName, projectNum = r.ProjectNum, biddingType = r.BiddingType, biddingAmount = SqlFunc.Round(r.BiddingAmount, 2), biddingForm = r.BiddingForm, procuringEntity = r.ProcuringEntity, registrationDeadline = r.RegistrationDeadline, bidOpeningTime = r.BidOpeningTime, nowStatus = r.NowStatus, bidWinningAmount = SqlFunc.Round(r.BidWinningAmount, 2), bidAgent = r.BidAgent, createTime = r.CreateTime, createUser = r.CreateUser, remark = r.Remark, winningCompanyId = r.WinningCompanyId, name = a.Name, overtimeflag = r.BidOpeningTime == null ? false : (((DateTime)r.BidOpeningTime).AddDays(2) < DateTime.Now ? true : false) }) .ToPageListAsync(req.page, req.limit, totalNumber); return new Response>>() { Result = new PageInfo> { Items = table, Total = totalNumber } }; } else { return new Response>>() { Result = new PageInfo> { Items = null, Total = 0 } }; } } else { throw new Exception("请登录"); } } #endregion #region 供应商企业 /// /// 查询招标信息--代理商公司的查询,只看自己报名的招标项目 /// /// /// public async Task>>> LoadCompanyBiddingInfo(BiddingInfoReq req) { var user = _auth.GetCurrentUser(); //查询当前账号关联的公司 if (user != null) { var acc = await base.Repository.ChangeRepository>().AsQueryable() .Where(r => r.UserId == user.User.Id.ToString()).FirstAsync(); if (acc != null) { RefAsync totalNumber = 0; List status = new List(); if (!string.IsNullOrEmpty(req.nowstatus)) { status = req.nowstatus.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList(); } var table = await base.Repository.AsQueryable() .WhereIF(!string.IsNullOrEmpty(req.nowstatus), r => status.Contains(r.NowStatus)) .WhereIF(!string.IsNullOrEmpty(req.projectname), r => r.ProjectName.Contains(req.projectname)) .WhereIF(!string.IsNullOrEmpty(req.projectnum), r => r.ProjectNum.Contains(req.projectnum)) .WhereIF(!string.IsNullOrEmpty(req.biddingtype), r => r.BiddingType == req.biddingtype) .WhereIF(!string.IsNullOrEmpty(req.biddingform), r => r.BiddingForm == req.biddingform) .WhereIF(req.year != null && req.year != 0, r => r.CreateTime != null && r.CreateTime.Value.Year == req.year) .LeftJoin((r,g)=>r.Id==g.BiddingInfoId) .Where((r,g)=>g.CompanyId==acc.CompanyId) .LeftJoin((r, g, a) => r.BidAgent == a.Id) .OrderByDescending((r, g, a) => r.CreateTime) .Select((r, g, a) => new { id = r.Id, projectName = r.ProjectName, projectNum = r.ProjectNum, biddingType = r.BiddingType, biddingAmount = SqlFunc.Round(r.BiddingAmount, 2), biddingForm = r.BiddingForm, procuringEntity = r.ProcuringEntity, registrationDeadline = r.RegistrationDeadline, bidOpeningTime = r.BidOpeningTime, nowStatus = r.NowStatus, bidWinningAmount = SqlFunc.Round(r.BidWinningAmount, 2), bidAgent = r.BidAgent, createTime = r.CreateTime, createUser = r.CreateUser, remark = r.Remark, winningCompanyId = r.WinningCompanyId, name = a.Name, overtimeflag = r.BidOpeningTime == null ? false : (((DateTime)r.BidOpeningTime).AddDays(2) < DateTime.Now ? true : false) }) .ToPageListAsync(req.page, req.limit, totalNumber); return new Response>>() { Result = new PageInfo> { Items = table, Total = totalNumber } }; } else { return new Response>>() { Result = new PageInfo> { Items = null, Total = 0 } }; } } else { throw new Exception("请登录"); } } #endregion #region 招商代理--当前招标 public async Task>>> LoadAgencyBidding(BiddingInfoReq req) { RefAsync totalNumber = 0; List status = new List(); if (!string.IsNullOrEmpty(req.nowstatus)) { status = req.nowstatus.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList(); } else { throw new Exception("请传参"); } var user = _auth.GetCurrentUser(); if (user == null) { throw new Exception("请登录"); } var acc = await base.Repository.ChangeRepository>() .AsQueryable().Where(r => r.UserId == user.User.Id.ToString()).FirstAsync(); //全部正常和超期 var q1 = base.Repository.AsQueryable() .Where(r => r.NowStatus == status[1] || r.NowStatus == status[2]) .WhereIF(!string.IsNullOrEmpty(req.projectname), r => r.ProjectName.Contains(req.projectname)) .WhereIF(!string.IsNullOrEmpty(req.projectnum), r => r.ProjectNum.Contains(req.projectnum)) .WhereIF(!string.IsNullOrEmpty(req.biddingtype), r => r.BiddingType == req.biddingtype) .WhereIF(!string.IsNullOrEmpty(req.biddingform), r => r.BiddingForm == req.biddingform) .WhereIF(req.year != null && req.year != 0, r => r.CreateTime != null && r.CreateTime.Value.Year == req.year) .LeftJoin((r, a) => r.BidAgent == a.Id) .OrderByDescending((r, a) => r.CreateTime) .Select((r, a) => new { id = r.Id, projectName = r.ProjectName, projectNum = r.ProjectNum, biddingType = r.BiddingType, biddingAmount = SqlFunc.Round(r.BiddingAmount, 2), biddingForm = r.BiddingForm, procuringEntity = r.ProcuringEntity, registrationDeadline = r.RegistrationDeadline, bidOpeningTime = r.BidOpeningTime, nowStatus = r.NowStatus, bidWinningAmount = SqlFunc.Round(r.BidWinningAmount, 2), bidAgent = r.BidAgent, createTime = r.CreateTime, createUser = r.CreateUser, remark = r.Remark, winningCompanyId = r.WinningCompanyId, name = a.Name, overtimeflag = r.BidOpeningTime == null ? false : (((DateTime)r.BidOpeningTime).AddDays(2) < DateTime.Now ? true : false) }); if (acc != null) { //自己参与的待审核 var q2 = base.Repository.AsQueryable() .Where(r => r.BidAgent == acc.AgencyId && r.NowStatus == status[0]) .WhereIF(!string.IsNullOrEmpty(req.nowstatus), r => status.Contains(r.NowStatus)) .WhereIF(!string.IsNullOrEmpty(req.projectname), r => r.ProjectName.Contains(req.projectname)) .WhereIF(!string.IsNullOrEmpty(req.projectnum), r => r.ProjectNum.Contains(req.projectnum)) .WhereIF(!string.IsNullOrEmpty(req.biddingtype), r => r.BiddingType == req.biddingtype) .WhereIF(!string.IsNullOrEmpty(req.biddingform), r => r.BiddingForm == req.biddingform) .WhereIF(req.year != null && req.year != 0, r => r.CreateTime != null && r.CreateTime.Value.Year == req.year) .LeftJoin((r, a) => r.BidAgent == a.Id) .OrderByDescending((r, a) => r.CreateTime) .Select((r, a) => new { id = r.Id, projectName = r.ProjectName, projectNum = r.ProjectNum, biddingType = r.BiddingType, biddingAmount = SqlFunc.Round(r.BiddingAmount, 2), biddingForm = r.BiddingForm, procuringEntity = r.ProcuringEntity, registrationDeadline = r.RegistrationDeadline, bidOpeningTime = r.BidOpeningTime, nowStatus = r.NowStatus, bidWinningAmount = SqlFunc.Round(r.BidWinningAmount, 2), bidAgent = r.BidAgent, createTime = r.CreateTime, createUser = r.CreateUser, remark = r.Remark, winningCompanyId = r.WinningCompanyId, name = a.Name, overtimeflag = r.BidOpeningTime == null ? false : (((DateTime)r.BidOpeningTime).AddDays(2) < DateTime.Now ? true : false) }); var data=await client.UnionAll(q1,q2).ToPageListAsync(req.page, req.limit, totalNumber); return new Response>>() { Result = new PageInfo> { Items = data, Total = totalNumber } }; } else { var data = await q1.ToPageListAsync(req.page, req.limit, totalNumber); return new Response>>() { Result = new PageInfo> { Items = data, Total = totalNumber } }; } } #endregion #region 查询报名企业 public async Task>> LoadBidCompanyInfo(string bidinfoid) { var acc = await base.Repository.ChangeRepository>() .AsQueryable().Where(r => r.BiddingInfoId == bidinfoid) .LeftJoin((r, c) => r.CompanyId == c.Id) .Select((r, c) => c).ToListAsync(); return new Response>() { Result = acc }; } #endregion } }