/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Caching.Manual;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.DTO;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.Repository
{
///
/// 用户对表的提交记录 接口实现
///
public class CoreCmsFormSubmitRepository : BaseRepository, ICoreCmsFormSubmitRepository
{
public CoreCmsFormSubmitRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
#region 实现重写增删改查操作==========================================================
///
/// 重写异步插入方法并返回自增值
///
/// 实体数据
///
public async Task InsertReturnIdentityAsync(CoreCmsFormSubmit entity)
{
return await DbClient.Insertable(entity).ExecuteReturnIdentityAsync();
}
///
/// 重写删除指定ID的数据
///
///
///
public async Task DeleteByIdAsync(object id)
{
var jm = new AdminUiCallBack();
var bl = await DbClient.Deleteable(id).ExecuteCommandHasChangeAsync();
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
return jm;
}
#endregion
#region 重写根据条件查询分页数据
///
/// 重写根据条件查询分页数据
///
/// 判断集合
/// 排序方式
/// 当前页面索引
/// 分布大小
///
/// 是否使用WITH(NOLOCK)
///
public async Task> QueryPageAsync(Expression> predicate,
Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
RefAsync totalCount = 0;
List page;
if (blUseNoLock)
{
page = await DbClient.Queryable((p, sc) => new JoinQueryInfos(
JoinType.Left, p.userId == sc.id))
.Select((p, sc) => new CoreCmsFormSubmit
{
id = p.id,
formId = p.formId,
formName = p.formName,
userId = p.userId,
money = p.money,
payStatus = p.payStatus,
status = p.status,
feedback = p.feedback,
ip = p.ip,
createTime = p.createTime,
updateTime = p.updateTime,
userName = sc.nickName,
avatarImage = sc.avatarImage
})
.With(SqlWith.NoLock)
.MergeTable()
.WhereIF(predicate != null, predicate)
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.ToPageListAsync(pageIndex, pageSize, totalCount);
}
else
{
page = await DbClient.Queryable((p, sc) => new JoinQueryInfos(
JoinType.Left, p.userId == sc.id))
.Select((p, sc) => new CoreCmsFormSubmit
{
id = p.id,
formId = p.formId,
formName = p.formName,
userId = p.userId,
money = p.money,
payStatus = p.payStatus,
status = p.status,
feedback = p.feedback,
ip = p.ip,
createTime = p.createTime,
updateTime = p.updateTime,
userName = sc.nickName,
avatarImage = sc.avatarImage
})
.MergeTable()
.WhereIF(predicate != null, predicate)
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.ToPageListAsync(pageIndex, pageSize, totalCount);
}
var list = new PageList(page, pageIndex, pageSize, totalCount);
return list;
}
#endregion
#region 表单支付
///
/// 表单支付
///
/// 序列
///
public async Task Pay(int id)
{
var jm = new WebApiCallBack();
if (id == 0)
{
jm.msg = "支付失败";
return jm;
}
await DbClient.Updateable().SetColumns(p => p.payStatus == true).Where(p => p.id == id && p.payStatus == false)
.ExecuteCommandAsync();
jm.status = true;
jm.data = jm.msg = "支付成功";
return jm;
}
#endregion
///
/// 获取表单的统计数据
///
/// 表单序列
/// 多少天内的数据
///
public async Task GetStatisticsByFormId(int formId, int day)
{
var dt = DateTime.Now;
var whereDt = dt.AddDays(-day);
var list = await DbClient.Queryable()
.Where(p => p.formId == formId)
.WhereIF(day > 0, p => p.createTime >= whereDt)
.GroupBy(p => new { p.createTime, p.formId })
.Select(p => new FormStatisticsDto()
{
day = p.createTime.ToString("yyyy-MM-dd"),
nums = SqlFunc.AggregateCount(p.id),
formId = p.formId
})
.OrderBy(p => p.day)
.With(SqlWith.NoLock)
.ToListAsync();
var num = day - 1;
var days = new int[day];
var d = new String[day];
for (int i = 0; i <= num; i++)
{
var j = num - i;
var iDt = dt.AddDays(-j).ToString("yyyy/MM/dd");
d[i] = iDt;
var result = list.Find(p => p.day == iDt);
if (result != null)
{
days[i] = result.nums;
}
else
{
days[i] = 0;
}
}
var obj = new FormStatisticsViewDto { data = days, day = d, formId = formId };
return obj;
}
}
}