wxd 12 months ago
parent
commit
ae8a1fa3f3
  1. 4
      src/Shentun.WebPeis.Application.Contracts/Wechats/CreateWeChatOrderInputDto.cs
  2. 47
      src/Shentun.WebPeis.Application/Wechats/WeChatOrderAppService.cs

4
src/Shentun.WebPeis.Application.Contracts/Wechats/CreateWeChatOrderInputDto.cs

@ -7,9 +7,9 @@ namespace Shentun.WebPeis.Wechats
public class CreateWeChatOrderInputDto
{
/// <summary>
/// 用户标识
/// 人员ID
/// </summary>
public string Openid { get; set; }
public Guid PersonId { get; set; }
/// <summary>
/// 订单金额 元

47
src/Shentun.WebPeis.Application/Wechats/WeChatOrderAppService.cs

@ -1,4 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using Azure;
using Flurl.Util;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
@ -33,14 +35,15 @@ namespace Shentun.WebPeis.Wechats
private readonly IWechatTenpayClientFactory _wechatTenpayClientFactory;
private readonly ILogger<WeChatOrderAppService> _logger;
private readonly IConfiguration _configuration;
private readonly IRepository<Person> _personRepository;
public WeChatOrderAppService(
IRepository<WeChatOrder> weChatOrderRepository,
IRepository<AppointPatientRegister> appointPatientRegisterRepository,
IRepository<WeChatOrderRefund> weChatOrderRefundRepository,
IWechatTenpayClientFactory wechatTenpayClientFactory,
ILogger<WeChatOrderAppService> logger,
IConfiguration configuration)
IConfiguration configuration,
IRepository<Person> personRepository)
{
_weChatOrderRepository = weChatOrderRepository;
_appointPatientRegisterRepository = appointPatientRegisterRepository;
@ -48,6 +51,7 @@ namespace Shentun.WebPeis.Wechats
_wechatTenpayClientFactory = wechatTenpayClientFactory;
_logger = logger;
_configuration = configuration;
_personRepository = personRepository;
}
@ -67,9 +71,9 @@ namespace Shentun.WebPeis.Wechats
throw new UserFriendlyException("预约ID不能为空");
}
if (string.IsNullOrWhiteSpace(input.Openid))
if (input.PersonId == Guid.Empty)
{
throw new UserFriendlyException("openid不能为空");
throw new UserFriendlyException("人员ID不能为空");
}
if (input.OrderMoney <= 0)
@ -83,10 +87,15 @@ namespace Shentun.WebPeis.Wechats
throw new UserFriendlyException("预约Id不正确");
}
if (appointPatientRegisterEnt == null)
var personEnt = await _personRepository.FirstOrDefaultAsync(f => f.PersonId == input.PersonId);
if (personEnt == null)
{
throw new UserFriendlyException("预约Id不正确");
throw new UserFriendlyException("人员不存在");
}
string appid = _configuration.GetSection("WeChat:Appid").Value;
string mchid = _configuration.GetSection("Merchant:MchId").Value;
string notifyUrl = _configuration.GetSection("Merchant:NotifyUrl").Value;
@ -107,7 +116,7 @@ namespace Shentun.WebPeis.Wechats
},
Payer = new CreatePayTransactionJsapiRequest.Types.Payer()
{
OpenId = input.Openid
OpenId = personEnt.WechatOpenId
}
};
var response = await _wechatTenpayClient.ExecuteCreatePayTransactionJsapiAsync(request);
@ -123,7 +132,7 @@ namespace Shentun.WebPeis.Wechats
Appid = appid,
AppointPatientRegisterId = input.AppointPatientRegisterId,
Mchid = mchid,
Openid = input.Openid,
Openid = personEnt.WechatOpenId,
OrderMoney = Convert.ToInt32(Math.Round(input.OrderMoney * 100)),
OutTradeNo = outTradeNo,
Status = "NOTPAY",
@ -135,7 +144,7 @@ namespace Shentun.WebPeis.Wechats
{
weChatOrderEnt.Appid = appid;
weChatOrderEnt.Mchid = mchid;
weChatOrderEnt.Openid = input.Openid;
weChatOrderEnt.Openid = personEnt.WechatOpenId;
weChatOrderEnt.OrderMoney = Convert.ToInt32(Math.Round(input.OrderMoney * 100));
weChatOrderEnt.OutTradeNo = outTradeNo;
weChatOrderEnt.TransactionId = "";
@ -190,8 +199,17 @@ namespace Shentun.WebPeis.Wechats
}
#endregion
var weChatOrderEnt = await _weChatOrderRepository.FirstOrDefaultAsync(f => f.AppointPatientRegisterId == input.AppointPatientRegisterId);
var weChatOrderEnt = await _weChatOrderRepository.FirstOrDefaultAsync(f => f.AppointPatientRegisterId == input.AppointPatientRegisterId
&& f.Status == "SUCCESS");
if (weChatOrderEnt != null)
{
if (input.RefundMoney * 100 > weChatOrderEnt.OrderMoney)
{
throw new UserFriendlyException($"退款金额不能大于支付金额");
}
var weChatOrderRefundEnt = await _weChatOrderRefundRepository.FirstOrDefaultAsync(f => f.WeChatOrderId == weChatOrderEnt.WeChatOrderId);
if (weChatOrderRefundEnt == null)
{
string appid = _configuration.GetSection("WeChat:Appid").Value;
string mchid = _configuration.GetSection("Merchant:MchId").Value;
@ -217,7 +235,7 @@ namespace Shentun.WebPeis.Wechats
#region 生成订单
var weChatOrderRefundEnt = new WeChatOrderRefund
weChatOrderRefundEnt = new WeChatOrderRefund
{
RefundMoney = request.Amount.Refund,
Status = "PROCESSING",
@ -240,6 +258,11 @@ namespace Shentun.WebPeis.Wechats
}
}
else
{
throw new UserFriendlyException($"已申请过退款,不要重复退款");
}
}
else
{
throw new UserFriendlyException("预约Id不正确");
}

Loading…
Cancel
Save