移动系统liao
12 小时以前 a9bfc98a7e670f350529fc3e91d6cde453115a38
Admin.NET/FZCZTB.TSCL.Application/Service/ProcurementComplaint/ProcurementComplaintService.cs
@@ -23,6 +23,7 @@
using System.Linq;
using NewLife.Xml;
using AngleSharp.Dom;
using static Elastic.Clients.Elasticsearch.JoinField;
namespace FZCZTB.TSCL.Application;
/// <summary>
@@ -50,8 +51,8 @@
    public async Task<SqlSugarPagedList<ProcurementComplaintOutput>> Page(PageProcurementComplaintInput input)
    {
        input.Keyword = input.Keyword?.Trim();
        var query = _procurementComplaintRep.AsQueryable()
            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.ProjectCode.Contains(input.Keyword) || u.ProjectName.Contains(input.Keyword) || u.Purchaser.Contains(input.Keyword) || u.ProcurementAgency.Contains(input.Keyword) || u.Complainant.Contains(input.Keyword) || u.ProcurementSupervisionDepartment.Contains(input.Keyword) || u.Url.Contains(input.Keyword))
        var query = _procurementComplaintRep.AsQueryable().Includes(u => u.Complaints)
            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Complaints.Any(uu => uu.ItemDescription.Contains(input.Keyword)))
            .WhereIF(!string.IsNullOrWhiteSpace(input.ProjectCode), u => u.ProjectCode.Contains(input.ProjectCode.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.ProjectName), u => u.ProjectName.Contains(input.ProjectName.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.Purchaser), u => u.Purchaser.Contains(input.Purchaser.Trim()))
@@ -60,7 +61,21 @@
            .WhereIF(!string.IsNullOrWhiteSpace(input.ProcurementSupervisionDepartment), u => u.ProcurementSupervisionDepartment.Contains(input.ProcurementSupervisionDepartment.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.Url), u => u.Url.Contains(input.Url.Trim()))
            .WhereIF(input.DecisionDateRange?.Length == 2, u => u.DecisionDate >= input.DecisionDateRange[0] && u.DecisionDate <= input.DecisionDateRange[1])
            .Select<ProcurementComplaintOutput>();
            .WhereIF(input.Status != null && input.Status == PComplaintStatus.Valid, u =>( u.Complaints.Any(uu => uu.HandlingStatus == PComplaintStatus.Valid)))
            .WhereIF(input.Status != null && input.Status == PComplaintStatus.Rejected, u => ( !u.Complaints.Any(uu=>uu.HandlingStatus== PComplaintStatus.Other||uu.HandlingStatus== PComplaintStatus.Valid||uu.HandlingStatus==null)))
            .WhereIF(input.Status != null && input.Status == PComplaintStatus.Other, u =>!( u.Complaints.Any(uu=>uu.HandlingStatus== PComplaintStatus.Valid)|| (!u.Complaints.Any(uu => uu.HandlingStatus == PComplaintStatus.Other || uu.HandlingStatus == PComplaintStatus.Valid || uu.HandlingStatus == null))))
            .Select(n => new ProcurementComplaintOutput
            {
                Complaints = n.Complaints
            },true)
            .Mapper(n =>
             {
                 n.Status =n.Complaints==null?  PComplaintStatus.Other:n.Complaints.Any(x => x.HandlingStatus == PComplaintStatus.Valid) ? PComplaintStatus.Valid :
                 n.Complaints.All(x => x.HandlingStatus == PComplaintStatus.Rejected) ? PComplaintStatus.Rejected : PComplaintStatus.Other ;
                 n.Complaints = null;
            }
            );
      return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
    }
@@ -73,7 +88,8 @@
    [ApiDescriptionSettings(Name = "Detail"), HttpGet]
    public async Task<ProcurementComplaint> Detail([FromQuery] QueryByIdProcurementComplaintInput input)
    {
        return await _procurementComplaintRep.GetFirstAsync(u => u.Id == input.Id);
        return await _procurementComplaintRep.AsQueryable().Where(x=>x.Id==input.Id).Includes(x=>x.Complaints.OrderBy(xx=>xx.sort).ToList()).FirstAsync();
    }
    /// <summary>
@@ -87,6 +103,13 @@
    {
        var entity = input.Adapt<ProcurementComplaint>();
        entity.Id = Guid.NewGuid();
        int index = 0;
        if (entity.Complaints != null)
            foreach (var item in entity.Complaints)
        {
            item.Id = Guid.NewGuid();
                item.sort = index++;
            }
        return await _sqlSugarClient.InsertNav(entity).Include(x=>x.Complaints).ExecuteCommandAsync();
    }
@@ -101,7 +124,14 @@
    public async Task Update(UpdateProcurementComplaintInput input)
    {
        var entity = input.Adapt<ProcurementComplaint>();
        await _procurementComplaintRep.AsUpdateable(entity)
        int index = 0;
        if(entity.Complaints!=null)
        foreach (var item in entity.Complaints)
        {
            item.Id = Guid.NewGuid();
            item.sort=    index++;
        }
        await _procurementComplaintRep.AsSugarClient().UpdateNav(entity).Include(x=>x.Complaints)
        .ExecuteCommandAsync();
    }
@@ -167,46 +197,46 @@
    /// 导入政府采购投诉数据处理记录 💾
    /// </summary>
    /// <returns></returns>
    [DisplayName("导入政府采购投诉数据处理记录")]
    [ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork]
    public IActionResult ImportData([Required] IFormFile file)
    {
        lock (_procurementComplaintImportLock)
        {
            var stream = ExcelHelper.ImportData<ImportProcurementComplaintInput, ProcurementComplaint>(file, (list, markerErrorAction) =>
            {
                _sqlSugarClient.Utilities.PageEach(list, 2048, pageItems =>
                {
    //[DisplayName("导入政府采购投诉数据处理记录")]
    //[ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork]
    //public IActionResult ImportData([Required] IFormFile file)
    //{
    //    lock (_procurementComplaintImportLock)
    //    {
    //        var stream = ExcelHelper.ImportData<ImportProcurementComplaintInput, ProcurementComplaint>(file, (list, markerErrorAction) =>
    //        {
    //            _sqlSugarClient.Utilities.PageEach(list, 2048, pageItems =>
    //            {
                    
                    // 校验并过滤必填基本类型为null的字段
                    var rows = pageItems.Where(x => {
                        return true;
                    }).Adapt<List<ProcurementComplaint>>();
    //                // 校验并过滤必填基本类型为null的字段
    //                var rows = pageItems.Where(x => {
    //                    return true;
    //                }).Adapt<List<ProcurementComplaint>>();
                    
                    var storageable = _procurementComplaintRep.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();
    //                var storageable = _procurementComplaintRep.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();// 存在更新
    //                storageable.AsInsertable.ExecuteCommand();// 不存在插入
    //                storageable.AsUpdateable.ExecuteCommand();// 存在更新
                    
                    // 标记错误信息
                    markerErrorAction.Invoke(storageable, pageItems, rows);
                });
            });
    //                // 标记错误信息
    //                markerErrorAction.Invoke(storageable, pageItems, rows);
    //            });
    //        });
            
            return stream;
        }
    }
    //        return stream;
    //    }
    //}
}