using CRM.Core.BLL.Util; using CRM.Core.BLL.Wx; using CRM.Core.Model.Entity; using CRM.Core.Model.EntityUserCenter; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CRM.Core.BLL.Application.QsurveyOrder { public class QsurveyOrderServices { private readonly CACHE_BL _cache; public QsurveyOrderServices() { _cache = new CACHE_BL(); } public QsurveyOrderResultDto GetList(QsurveyOrderQueryDto query) { var qsurveyids = _cache.GetValue_Parameter("qsurveyids"); if (string.IsNullOrEmpty(qsurveyids)) qsurveyids = "82"; // 声明参数列表 var parameters = new List(); // 基础查询SQL // 基础查询SQL var baseQuery = $@" SELECT a.*, c.umid, c.username, c.nickname, c.headimgurl FROM ( SELECT a.qsurveyid, a.appid, a.appuserid, MIN(a.cTime) AS cTime FROM `dncmsbase`.`qsurveyorder` a WHERE a.`qsurveyid` IN ({qsurveyids}) {(query.starttime.HasValue ? "AND a.cTime >= @StartTime" : "")} {(query.endtime.HasValue ? "AND a.cTime <= @EndTime" : "")} GROUP BY a.qsurveyid, a.appid, a.appuserid ) a LEFT JOIN `dncmsbase`.`user` AS b ON a.appid = b.appid AND a.appuserid = b.appuserid LEFT JOIN `dncmsbase`.`user_customer` AS c ON b.customerid = c.customerid {(string.IsNullOrEmpty(query.umid) ? "" : "WHERE c.umid = @Umid")} {(string.IsNullOrEmpty(query.username) ? "" : (string.IsNullOrEmpty(query.umid) ? "WHERE " : "AND ") + "c.username LIKE @Username")} LIMIT @PageOffset, @PageSize"; // 总记录数SQL var countQuery = $@" SELECT COUNT(1) FROM ( SELECT a.qsurveyid, a.appid, a.appuserid, MIN(a.cTime) AS cTime FROM `dncmsbase`.`qsurveyorder` a WHERE a.`qsurveyid` IN ({qsurveyids}) {(query.starttime.HasValue ? "AND a.cTime >= @StartTime" : "")} {(query.endtime.HasValue ? "AND a.cTime <= @EndTime" : "")} GROUP BY a.qsurveyid, a.appid, a.appuserid ) a {(string.IsNullOrEmpty(query.umid) && string.IsNullOrEmpty(query.username) ? "" : $@" LEFT JOIN `dncmsbase`.`user` AS b ON a.appid = b.appid AND a.appuserid = b.appuserid LEFT JOIN `dncmsbase`.`user_customer` AS c ON b.customerid = c.customerid {(string.IsNullOrEmpty(query.umid) ? "" : "WHERE c.umid = @Umid")} {(string.IsNullOrEmpty(query.username) ? "" : (string.IsNullOrEmpty(query.umid) ? "WHERE " : "AND ") + "c.username LIKE @Username")}")}"; // 参数添加保持不变 if (query.starttime.HasValue) parameters.Add(new MySqlParameter("@StartTime", query.starttime.Value)); if (query.endtime.HasValue) parameters.Add(new MySqlParameter("@EndTime", query.endtime.Value)); if (!string.IsNullOrEmpty(query.umid)) parameters.Add(new MySqlParameter("@Umid", query.umid)); if (!string.IsNullOrEmpty(query.username)) parameters.Add(new MySqlParameter("@Username", $"%{query.username}%")); parameters.Add(new MySqlParameter("@PageOffset", (query.PageIndex - 1) * query.PageSize)); parameters.Add(new MySqlParameter("@PageSize", query.PageSize)); using (var context = new UserCenterContext()) { var result = new QsurveyOrderResultDto { Items = context.Database.SqlQuery(baseQuery, parameters.ToArray()).ToList(), TotalCount = context.Database.SqlQuery(countQuery, parameters.ToArray()).FirstOrDefault() }; return result; } } } public class QsurveyOrderQueryDto { public string umid { get; set; } public string username { get; set; } public DateTime? starttime { get; set; } public DateTime? endtime { get; set; } public int PageIndex { get; set; } = 1; public int PageSize { get; set; } = 20; } public class QsurveyOrderViewDto { public int QsurveyId { get; set; } public string AppId { get; set; } public string AppUserId { get; set; } public string Umid { get; set; } public string Username { get; set; } public string Nickname { get; set; } public string Headimgurl { get; set; } public DateTime cTime { get; set; } } public class QsurveyOrderResultDto { public List Items { get; set; } public int TotalCount { get; set; } } }