using Tiobon.Core.IServices;
using Tiobon.Core.Model.Models;
using Tiobon.Core.Services.BASE;
using Tiobon.Core.IRepository.Base;
using Tiobon.Core.Common.Caches;
using Newtonsoft.Json.Linq;
using SqlSugar;
using Tiobon.Core.Common;
using Tiobon.Core.Model;
using Newtonsoft.Json;
namespace Tiobon.Core.Services;
///
/// 学分记录 (服务)
///
public class Ghre_CreditPointServices : BaseServices, IGhre_CreditPointServices
{
private readonly IBaseRepository _dal;
public Ghre_CreditPointServices(ICaching caching, IBaseRepository dal)
{
this._dal = dal;
base.BaseDal = dal;
base._caching = caching;
}
public async Task> QueryTotal(QueryBody filter)
{
RefAsync totalCount = 0;
string sql = @"SELECT *
FROM (SELECT StaffId Id,
StaffNo,
StaffName,
DeptNo,
DepteName,
TitleName,
CONVERT (NVARCHAR (10), Indate, 120) Indate,
InStatusLabel,
DeptID,
TitleID,
SUM (CreditPoints) CreditPoints
FROM Ghre_CreditPoint_V
WHERE {0}
GROUP BY StaffId,
StaffNo,
StaffName,
DeptNo,
DepteName,
TitleName,
Indate,
InStatusLabel,
DeptID,
TitleID) A";
if (string.IsNullOrWhiteSpace(filter.orderBy))
filter.orderBy = "StaffNo ASC";
string conditions = "1=1";
if (filter.jsonParam != null)
foreach (JProperty jProperty in filter.jsonParam.Properties())
{
var name = jProperty.Name;
var value = jProperty.Value.ToString();
if (name == "page" || name == "pageSize")
continue;
//if (name == "Indate")
//{
// var jsonParam = JsonConvert.DeserializeObject(value);
// conditions += $" AND (Indate BETWEEN '{jsonParam.columnValue[0]}' AND '{jsonParam.columnValue[1]}')";
// continue;
//}
if (name == "Date")
{
var jsonParam = JsonConvert.DeserializeObject(value);
conditions += $" AND (Date BETWEEN '{jsonParam.columnValue[0]}' AND '{jsonParam.columnValue[1]}')";
continue;
}
if (name == "CreditPoints")
{
var jsonParam = JsonConvert.DeserializeObject(value);
switch (jsonParam.operationKey)
{
case "Include":
sql += $" WHERE {name} LIKE '%{jsonParam.columnValue}%'";
break;
case "NotInclude":
sql += $" WHERE {name} NOT LIKE '%{jsonParam.columnValue}%'";
break;
case "IsNull":
sql += $" WHERE {name} IS NULL";
break;
case "NotNull":
sql += $" WHERE {name} IS NOT NULL";
break;
case "Equal":
sql += $" WHERE {name} ='{jsonParam.columnValue}'";
break;
case "NotEqual":
sql += $" WHERE {name} !='{jsonParam.columnValue}'";
break;
case "GreaterOrEqual"://大于等于
sql += $" WHERE {name} >='{jsonParam.columnValue}'";
break;
case "Greater"://大于
sql += $" WHERE {name} >'{jsonParam.columnValue}'";
break;
case "LessOrEqual"://小于等于
sql += $" WHERE {name} <='{jsonParam.columnValue}'";
break;
case "Less"://小于
sql += $" WHERE {name} <'{jsonParam.columnValue}'";
break;
default:
break;
}
continue;
}
if (!string.IsNullOrWhiteSpace(value))
{
var jsonParam = JsonConvert.DeserializeObject(value);
switch (jsonParam.operationKey)
{
case "Include":
conditions += $" AND {name} LIKE '%{jsonParam.columnValue}%'";
break;
case "NotInclude":
conditions += $" AND {name} NOT LIKE '%{jsonParam.columnValue}%'";
break;
case "IsNull":
conditions += $" AND {name} IS NULL";
break;
case "NotNull":
conditions += $" AND {name} IS NOT NULL";
break;
case "Equal":
conditions += $" AND {name} ='{jsonParam.columnValue}'";
break;
case "NotEqual":
conditions += $" AND {name} !='{jsonParam.columnValue}'";
break;
default:
break;
}
}
}
//if (ids != null && ids.Any())
// conditions += $" AND Id IN({string.Join(",", ids)})";
sql = string.Format(sql, conditions);
if (filter.pageSize == 0)
filter.pageSize = 10000;
var data = await Db.SqlQueryable(sql)
.OrderBy(filter.orderBy)
.ToPageListAsync(filter.pageNum, filter.pageSize, totalCount);
return new ServicePageResult(filter.pageNum, totalCount, filter.pageSize, data);
}
public async Task> QueryDetail(QueryBody filter, string staffId)
{
RefAsync totalCount = 0;
string sql = @$"SELECT A.Id,
CONVERT (VARCHAR (100), A.[Date], 23) Date,
A.[Date] Date1,
A.CreditPoints,
B.CoverUrl,
B.CourseClass,
B.CourseScene,
B.CourseNo,
B.CourseName
FROM Ghre_CreditPoint A LEFT JOIN Ghre_CourseSnap B ON A.CourseSnapId = B.Id
WHERE A.StaffId = '{staffId}'";
if (string.IsNullOrWhiteSpace(filter.orderBy))
filter.orderBy = "Date1 DESC";
string conditions = "1=1";
if (filter.jsonParam != null)
foreach (JProperty jProperty in filter.jsonParam.Properties())
{
var name = jProperty.Name;
var value = jProperty.Value.ToString();
if (name == "page" || name == "pageSize")
continue;
//if (name == "Indate")
//{
// var jsonParam = JsonConvert.DeserializeObject(value);
// conditions += $" AND (Indate BETWEEN '{jsonParam.columnValue[0]}' AND '{jsonParam.columnValue[1]}')";
// continue;
//}
if (name == "Date")
{
var jsonParam = JsonConvert.DeserializeObject(value);
conditions += $" AND (Date BETWEEN '{jsonParam.columnValue[0]}' AND '{jsonParam.columnValue[1]}')";
continue;
}
if (name == "CreditPoints")
{
var jsonParam = JsonConvert.DeserializeObject(value);
switch (jsonParam.operationKey)
{
case "Include":
sql += $" WHERE {name} LIKE '%{jsonParam.columnValue}%'";
break;
case "NotInclude":
sql += $" WHERE {name} NOT LIKE '%{jsonParam.columnValue}%'";
break;
case "IsNull":
sql += $" WHERE {name} IS NULL";
break;
case "NotNull":
sql += $" WHERE {name} IS NOT NULL";
break;
case "Equal":
sql += $" WHERE {name} ='{jsonParam.columnValue}'";
break;
case "NotEqual":
sql += $" WHERE {name} !='{jsonParam.columnValue}'";
break;
case "GreaterOrEqual"://大于等于
sql += $" WHERE {name} >='{jsonParam.columnValue}'";
break;
case "Greater"://大于
sql += $" WHERE {name} >'{jsonParam.columnValue}'";
break;
case "LessOrEqual"://小于等于
sql += $" WHERE {name} <='{jsonParam.columnValue}'";
break;
case "Less"://小于
sql += $" WHERE {name} <'{jsonParam.columnValue}'";
break;
default:
break;
}
continue;
}
if (!string.IsNullOrWhiteSpace(value))
{
var jsonParam = JsonConvert.DeserializeObject(value);
switch (jsonParam.operationKey)
{
case "Include":
conditions += $" AND {name} LIKE '%{jsonParam.columnValue}%'";
break;
case "NotInclude":
conditions += $" AND {name} NOT LIKE '%{jsonParam.columnValue}%'";
break;
case "IsNull":
conditions += $" AND {name} IS NULL";
break;
case "NotNull":
conditions += $" AND {name} IS NOT NULL";
break;
case "Equal":
conditions += $" AND {name} ='{jsonParam.columnValue}'";
break;
case "NotEqual":
conditions += $" AND {name} !='{jsonParam.columnValue}'";
break;
default:
break;
}
}
}
sql = string.Format(sql, conditions);
if (filter.pageSize == 0)
filter.pageSize = 10000;
var data = await Db.SqlQueryable(sql)
.OrderBy(filter.orderBy)
.ToPageListAsync(filter.pageNum, filter.pageSize, totalCount);
return new ServicePageResult(filter.pageNum, totalCount, filter.pageSize, data);
}
}