using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MyCode.Project.Domain.Message.Request.LxmZHMDReport; using MyCode.Project.Domain.Message.Response.LxmZHMDReport; using MyCode.Project.Infrastructure; using MyCode.Project.Infrastructure.Cache; using MyCode.Project.Infrastructure.Common; using MyCode.Project.Infrastructure.Constant; using MyCode.Project.Infrastructure.Enumeration; using MyCode.Project.Services.IServices; namespace MyCode.Project.Services.BLL.ReportExport { public class MemberAssetInquiryExport : BaseExport { #region 初始化 private readonly ILxmReport2023Service _reportService; private IMyCodeCacheService _myCodeCacheService; public MemberAssetInquiryExport(ILxmReport2023Service reportService , IMyCodeCacheService myCodeCacheService) { _reportService = reportService; } #endregion #region Execute(执行) public override string Execute() { var req = JsonHelper.ToObject(Condition.ToString()); var resultData = new ReportCalRateResp() { Total = 0, Rate = 0.01m }; var result = new Result() { Data = resultData, Code = ResultCode.Success }; if (base.ExcelFileType == (int)ExportFileType.Zip) { //类型为0是报表专用,验证客户端是否在线 WebSocketBLL.CheckOnline(ReportId, 0); //开始运算,先发送个进度0%,表明开始 WebSocketBLL.SendSocketMsg(ReportId, JsonHelper.ToJson(result, false, true)); } var pageSearch = base.GetPageSearch(Condition, 1); var list = _reportService.GetMemberAssetInquiry(pageSearch, this.CurrentUser); resultData.Total = list.TotalCount; var fileName = $"会员统计--会员查询"; if (base.ExcelFileType == (int)ExportFileType.Zip) { resultData.Rate = 0.02m; result.Data = resultData; WebSocketBLL.SendSocketMsg(ReportId, JsonHelper.ToJson(result, false, true)); } pageSearch.Page = 1; pageSearch.PageSize = 10000; int maxPage = (list.TotalCount+ pageSearch.PageSize-1) / pageSearch.PageSize; string zipFile = ""; string hasDownloadZipCacheKey = CacheKey.HasDownloadZipCacheKey + $@":{ReportId}"; while (pageSearch.Page <= maxPage) { list = _reportService.GetMemberAssetInquiry(pageSearch, this.CurrentUser); zipFile =base.PageListExecute(list, pageSearch.Page, pageSearch.PageSize, list.TotalCount, fileName, hasDownloadZipCacheKey); pageSearch.Page++; } if (zipFile == "") { resultData.CurQty = list.TotalCount; resultData.Rate = 1; WebSocketBLL.SendSocketMsg(ReportId, JsonHelper.ToJson(result, false, true)); //移除正在下载 _myCodeCacheService.Delete($"{hasDownloadZipCacheKey}"); } return zipFile; } #endregion } }