From b53ae616ffa63079dc9d723458414c94196831d8 Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 26 Sep 2025 17:43:19 +0800 Subject: [PATCH] 321 --- .../SQ/ISQReservationParticipantsServices.cs | 4 + .../SQ/ISQReservationsServices.cs | 2 + .../Entities/SQ/SQReservationParticipants.cs | 10 +- .../Bill/CoreCmsBillPaymentsServices.cs | 9 +- CoreCms.Net.Services/Pay/WeChatPayServices.cs | 3 +- .../SQ/SQReservationParticipantsServices.cs | 27 ++++- .../SQ/SQReservationsServices.cs | 109 +++++++++--------- .../Controllers/SQController.cs | 30 ++++- CoreCms.Net.Web.WebApi/Doc.xml | 7 ++ 9 files changed, 141 insertions(+), 60 deletions(-) diff --git a/CoreCms.Net.IServices/SQ/ISQReservationParticipantsServices.cs b/CoreCms.Net.IServices/SQ/ISQReservationParticipantsServices.cs index 23e1c56..4784a57 100644 --- a/CoreCms.Net.IServices/SQ/ISQReservationParticipantsServices.cs +++ b/CoreCms.Net.IServices/SQ/ISQReservationParticipantsServices.cs @@ -95,5 +95,9 @@ namespace CoreCms.Net.IServices Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false); #endregion + + #region 用户支付鸽子费 + Task Pay(string paymentId); + #endregion } } diff --git a/CoreCms.Net.IServices/SQ/ISQReservationsServices.cs b/CoreCms.Net.IServices/SQ/ISQReservationsServices.cs index fe8869f..974286d 100644 --- a/CoreCms.Net.IServices/SQ/ISQReservationsServices.cs +++ b/CoreCms.Net.IServices/SQ/ISQReservationsServices.cs @@ -113,5 +113,7 @@ namespace CoreCms.Net.IServices /// 需通知的参与人集合 Task NotifyReservationSuccessAsync(SQReservations reservation, IEnumerable participants); #endregion + + } } diff --git a/CoreCms.Net.Model/Entities/SQ/SQReservationParticipants.cs b/CoreCms.Net.Model/Entities/SQ/SQReservationParticipants.cs index 11b5db6..b462862 100644 --- a/CoreCms.Net.Model/Entities/SQ/SQReservationParticipants.cs +++ b/CoreCms.Net.Model/Entities/SQ/SQReservationParticipants.cs @@ -128,9 +128,9 @@ namespace CoreCms.Net.Model.Entities public System.String important_data { get; set; } /// - /// 是否需要退款。0 无需退款,未交押金,1 交押金,待退款,2,交押金,退款中,3 退款成功,9退款失败 + /// 是否需要退款。0 无需退款,未交押金,1 待支付 ,2 已支付 ,9退款失败 /// - [Display(Name = "是否需要退款。0 无需退款,未交押金,1 交押金,待退款,2,交押金,退款中,3 退款成功,9退款失败")] + [Display(Name = "是否需要退款。0 无需退款,未交押金,1 待支付 ,2 已支付 ,9退款失败")] public System.Int32 is_refund { get; set; } /// @@ -145,5 +145,11 @@ namespace CoreCms.Net.Model.Entities /// [Display(Name = "是否评论过")] public System.Int32 is_evaluation { get; set; } + + /// + /// 订单id + /// + [Display(Name = "订单id")] + public string paymentId { get; set; } } } diff --git a/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs b/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs index d892ddd..7b1b3e8 100644 --- a/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs +++ b/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs @@ -52,7 +52,7 @@ namespace CoreCms.Net.Services private readonly IUnitOfWork _unitOfWork; private readonly IServiceProvider _serviceProvider; - + private readonly ISQReservationParticipantsServices _sqReservationParticipantsServices; private readonly ICoreCmsSettingServices _settingServices; private readonly ICoreCmsUserBalanceServices _userBalanceServices; private readonly ICoreCmsFormSubmitServices _formSubmitServices; @@ -81,6 +81,7 @@ namespace CoreCms.Net.Services , ICoreCmsUserServicesOrderServices userServicesOrderServices , ICoreCmsUserWeChatInfoServices userWeChatInfoServices , IOptions weChatOptions + , ISQReservationParticipantsServices sqReservationParticipantsServices ) { this._dal = dal; @@ -100,6 +101,7 @@ namespace CoreCms.Net.Services _userServicesOrderServices = userServicesOrderServices; _userWeChatInfoServices = userWeChatInfoServices; _weChatOptions = weChatOptions.Value; + _sqReservationParticipantsServices = sqReservationParticipantsServices; } #region 生成支付单的时候,格式化支付单明细 @@ -699,6 +701,11 @@ namespace CoreCms.Net.Services var id = billPaymentInfo.sourceId.ObjectToInt(0); await _formSubmitServices.Pay(id); } + else if (billPaymentInfo.type == (int)GlobalEnumVars.BillPaymentsType.GeZiFei) + { + //form表单支付 + await _sqReservationParticipantsServices.Pay(paymentId); + } else { //::todo 其他业务逻辑 diff --git a/CoreCms.Net.Services/Pay/WeChatPayServices.cs b/CoreCms.Net.Services/Pay/WeChatPayServices.cs index c5d9264..9e13d7a 100644 --- a/CoreCms.Net.Services/Pay/WeChatPayServices.cs +++ b/CoreCms.Net.Services/Pay/WeChatPayServices.cs @@ -115,7 +115,8 @@ namespace CoreCms.Net.Services SpBillCreateIp = entity.ip, NotifyUrl = weChatPayUrl, TradeType = tradeType, - OpenId = openId + OpenId = openId, + TimeExpire= DateTime.Now.AddMinutes(5).ToString("yyyyMMddHHmmss") }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); diff --git a/CoreCms.Net.Services/SQ/SQReservationParticipantsServices.cs b/CoreCms.Net.Services/SQ/SQReservationParticipantsServices.cs index 37ad4e7..467214b 100644 --- a/CoreCms.Net.Services/SQ/SQReservationParticipantsServices.cs +++ b/CoreCms.Net.Services/SQ/SQReservationParticipantsServices.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; + using CoreCms.Net.Configuration; using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; @@ -19,6 +20,7 @@ using CoreCms.Net.IServices; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.UI; + using SqlSugar; @@ -114,7 +116,7 @@ namespace CoreCms.Net.Services #endregion - #region 重写根据条件查询分页数据 + #region 重写根据条件查询分页数据 /// /// 重写根据条件查询分页数据 /// @@ -131,7 +133,30 @@ namespace CoreCms.Net.Services { return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock); } + + public async Task Pay(string paymentId) + { + var model = await _dal.QueryByClauseAsync(it => it.paymentId == paymentId); + if (model == null) + { + throw new Exception("未找到订单记录"); + } + if (model.status == 1) + { + model.is_refund = 2; + await _dal.UpdateAsync(model); + } + else + { + //订单出错 + throw new Exception("订单状态异常"); + } + + } #endregion + + + } } diff --git a/CoreCms.Net.Services/SQ/SQReservationsServices.cs b/CoreCms.Net.Services/SQ/SQReservationsServices.cs index 3d426f8..a95d18c 100644 --- a/CoreCms.Net.Services/SQ/SQReservationsServices.cs +++ b/CoreCms.Net.Services/SQ/SQReservationsServices.cs @@ -36,7 +36,7 @@ namespace CoreCms.Net.Services private readonly IUnitOfWork _unitOfWork; private readonly IRedisOperationRepository _redisOperationRepository; - public SQReservationsServices(IUnitOfWork unitOfWork, ISQReservationsRepository dal, IRedisOperationRepository redisOperationRepository) + public SQReservationsServices(IUnitOfWork unitOfWork, ISQReservationsRepository dal, IRedisOperationRepository redisOperationRepository) { this._dal = dal; base.BaseDal = dal; @@ -98,7 +98,7 @@ namespace CoreCms.Net.Services #endregion - #region 获取缓存的所有数据========================================================== + #region 获取缓存的所有数据========================================================== /// /// 获取缓存的所有数据 @@ -119,7 +119,7 @@ namespace CoreCms.Net.Services #endregion - #region 重写根据条件查询分页数据 + #region 重写根据条件查询分页数据 /// /// 重写根据条件查询分页数据 /// @@ -138,57 +138,60 @@ namespace CoreCms.Net.Services } #endregion - #region 预约模板消息通知========================================================== - public async Task NotifyReservationFailedAsync(SQReservations reservation, IEnumerable 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)); - } - } + #region 预约模板消息通知========================================================== + public async Task NotifyReservationFailedAsync(SQReservations reservation, IEnumerable 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)); + } + } - public async Task NotifyReservationSuccessAsync(SQReservations reservation, IEnumerable 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)); - } - } - #endregion + public async Task NotifyReservationSuccessAsync(SQReservations reservation, IEnumerable 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)); + } + } + + + #endregion + } } diff --git a/CoreCms.Net.Web.WebApi/Controllers/SQController.cs b/CoreCms.Net.Web.WebApi/Controllers/SQController.cs index d2e1089..271e85a 100644 --- a/CoreCms.Net.Web.WebApi/Controllers/SQController.cs +++ b/CoreCms.Net.Web.WebApi/Controllers/SQController.cs @@ -29,6 +29,7 @@ using ToolGood.Words.internals; using NPOI.SS.Formula.PTG; using NPOI.OpenXmlFormats.Dml; using Humanizer; +using Newtonsoft.Json; namespace CoreCms.Net.Web.WebApi.Controllers; /// @@ -534,7 +535,31 @@ public class SQController : ControllerBase Msg = "该时间段房间已被预约" }; } - + string paymentId = ""; + if (dto.deposit_fee > 0) + { + var imdata = JsonConvert.DeserializeObject>(dto.important_data); + if (imdata == null || !imdata.ContainsKey("paymentId") || string.IsNullOrEmpty(imdata["paymentId"].ToString())) + { + return new WebApiDto() + { + Code = 500, + Data = null, + Msg = "押金支付信息错误!" + }; + } + //订单编号 + paymentId = imdata["paymentId"].ToString(); + } + if (string.IsNullOrEmpty(paymentId)) + { + return new WebApiDto() + { + Code = 500, + Data = null, + Msg = "生成订单失败!" + }; + } // 5. 创建预约记录 var reservation = new SQReservations { @@ -581,7 +606,8 @@ public class SQController : ControllerBase role = 1, status = 0, is_refund = dto.deposit_fee > 0 ? 1 : 0, - important_data = dto.important_data + important_data = dto.important_data, + paymentId = paymentId }; await _SQReservationParticipantsServices.InsertAsync(participant); diff --git a/CoreCms.Net.Web.WebApi/Doc.xml b/CoreCms.Net.Web.WebApi/Doc.xml index dcb9b3e..8ddab8f 100644 --- a/CoreCms.Net.Web.WebApi/Doc.xml +++ b/CoreCms.Net.Web.WebApi/Doc.xml @@ -844,6 +844,13 @@ + + + 用户是否可以创建预约(仅校验,不创建) + + 创建预约所需参数 + 返回可否创建及原因 + 用户加入预约接口