ComplianceServer/oldcode/Core.BLL/Application/QsurveyOrder/QsurveyOrderServices.cs

134 lines
5.4 KiB
C#

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<MySqlParameter>();
// 基础查询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<QsurveyOrderViewDto>(baseQuery, parameters.ToArray()).ToList(),
TotalCount = context.Database.SqlQuery<int>(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<QsurveyOrderViewDto> Items { get; set; }
public int TotalCount { get; set; }
}
}