mahjong_group/server/CoreCms.Net.Services/SQ/SQReservationsServices.cs
2026-01-01 14:35:52 +08:00

223 lines
8.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2025/9/2 17:54:05
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.Caching.AutoMate.RedisCache;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using CoreCms.Net.Model.ViewModels.SQ;
namespace CoreCms.Net.Services
{
/// <summary>
/// 预约表 接口实现
/// </summary>
public class SQReservationsServices : BaseServices<SQReservations>, ISQReservationsServices
{
private readonly ISQReservationsRepository _dal;
private readonly IUnitOfWork _unitOfWork;
private readonly IRedisOperationRepository _redisOperationRepository;
private readonly ISQMessageServices _messageServices;
public SQReservationsServices(IUnitOfWork unitOfWork, ISQReservationsRepository dal, IRedisOperationRepository redisOperationRepository, ISQMessageServices messageServices)
{
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
_redisOperationRepository = redisOperationRepository;
_messageServices = messageServices;
}
#region ==========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public new async Task<AdminUiCallBack> InsertAsync(SQReservations entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(SQReservations entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(List<SQReservations> entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
{
return await _dal.DeleteByIdAsync(id);
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
{
return await _dal.DeleteByIdsAsync(ids);
}
#endregion
#region ==========================================================
/// <summary>
/// 获取缓存的所有数据
/// </summary>
/// <returns></returns>
public async Task<List<SQReservations>> GetCaChe()
{
return await _dal.GetCaChe();
}
/// <summary>
/// 更新cache
/// </summary>
public async Task<List<SQReservations>> UpdateCaChe()
{
return await _dal.UpdateCaChe();
}
#endregion
#region
/// <summary>
/// 重写根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
/// <returns></returns>
public new async Task<IPageList<SQReservations>> QueryPageAsync(Expression<Func<SQReservations, bool>> predicate,
Expression<Func<SQReservations, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
}
#endregion
#region ==========================================================
public async Task NotifyReservationFailedAsync(SQReservations reservation, IEnumerable<SQReservationParticipants> participants, string tips = "组局人数未满,自动解散!")
{
if (reservation == null || participants == null)
{
return;
}
foreach (var user in participants)
{
// 发送微信模板消息
var parameters = new JObject();
parameters.Add("title", reservation.title);
parameters.Add("context", "组局失败!");
parameters.Add("createTime", reservation.start_time);
parameters.Add("tips", "组局人数未满,自动解散!");
var @params = new JObject();
@params.Add("parameters", parameters);
var data = new
{
userId = user.user_id,
code = GlobalEnumVars.WeChatMsgTemplateType.reservation_change.ToString(),
parameters = @params
};
await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.SendWxTemplateMessage, JsonConvert.SerializeObject(data));
// 发送站内信
var messageTitle = "组局失败通知";
var messageContent = $"您参与的组局{reservation.title}因人数未满已自动解散。\n\n房间{reservation.room_name}\n时间{reservation.start_time:yyyy-MM-dd HH:mm}\n原因{tips}";
await _messageServices.SendSystemNoticeAsync(user.user_id, messageTitle, messageContent, 1, reservation.id);
}
}
public async Task NotifyReservationSuccessAsync(SQReservations reservation, IEnumerable<SQReservationParticipants> participants)
{
if (reservation == null || participants == null)
{
return;
}
foreach (var user in participants)
{
// 发送微信模板消息
var parameters = new JObject();
parameters.Add("title", reservation.title);
parameters.Add("roomName", reservation.room_name);
parameters.Add("createTime", reservation.start_time);
parameters.Add("tips", "组局成功!");
var @params = new JObject();
@params.Add("parameters", parameters);
var data = new
{
userId = user.user_id,
code = GlobalEnumVars.WeChatMsgTemplateType.reservation_success.ToString(),
parameters = @params
};
await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.SendWxTemplateMessage, JsonConvert.SerializeObject(data));
// 发送站内信
var messageTitle = "组局成功通知";
var messageContent = $"恭喜您!组局{reservation.title}已成功!\n\n房间{reservation.room_name}\n时间{reservation.start_time:yyyy-MM-dd HH:mm}\n请准时到达祝您游戏愉快";
await _messageServices.SendSystemNoticeAsync(user.user_id, messageTitle, messageContent, 1, reservation.id);
}
}
public Task<(bool success, int reservationId, string message, SQReservations reservation)> CreateReservationBySlotAsync(SQReservationsAddBySlotDto dto, int userId)
{
throw new NotImplementedException();
}
public Task<(bool canCreate, string reason)> ValidateReservationBySlotAsync(SQReservationsAddBySlotDto dto, int userId)
{
throw new NotImplementedException();
}
#endregion
}
}