/*********************************************************************** * 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; } } }