【新增】后台提现审核功能增加【企业付款到零钱】【企业付款到银行卡】

This commit is contained in:
大灰灰
2022-07-05 22:46:27 +08:00
parent 4151efda10
commit c49b12b0d0
15 changed files with 700 additions and 91 deletions

View File

@@ -12,6 +12,7 @@ using System;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Caching.AccressToken;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
@@ -23,9 +24,17 @@ using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using CoreCms.Net.WeChat.Service.HttpClients;
using Essensoft.Paylink.WeChatPay;
using Essensoft.Paylink.WeChatPay.V2;
using Essensoft.Paylink.WeChatPay.V2.Request;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using SqlSugar;
using Yitter.IdGenerator;
namespace CoreCms.Net.Services
@@ -38,22 +47,28 @@ namespace CoreCms.Net.Services
private readonly ICoreCmsUserTocashRepository _dal;
private readonly IUnitOfWork _unitOfWork;
private readonly IServiceProvider _serviceProvider;
private readonly ICoreCmsSettingServices _settingServices;
private readonly ICoreCmsUserServices _userServices;
private readonly ICoreCmsUserBalanceServices _userBalanceServices;
private readonly ICoreCmsUserWeChatInfoServices _weChatInfoServices;
private readonly IOptions<WeChatPayOptions> _optionsAccessor;
private readonly IWeChatPayClient _client;
private readonly IHttpContextAccessor _httpContextAccessor;
public CoreCmsUserTocashServices(IUnitOfWork unitOfWork, ICoreCmsUserTocashRepository dal,
IServiceProvider serviceProvider, ICoreCmsSettingServices settingServices, ICoreCmsUserServices userServices, ICoreCmsUserBalanceServices userBalanceServices)
IServiceProvider serviceProvider, ICoreCmsUserServices userServices, ICoreCmsUserBalanceServices userBalanceServices, ICoreCmsUserWeChatInfoServices weChatInfoServices, IOptions<WeChatPayOptions> optionsAccessor, IWeChatPayClient client, IHttpContextAccessor httpContextAccessor)
{
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
_serviceProvider = serviceProvider;
_settingServices = settingServices;
_userServices = userServices;
_userBalanceServices = userBalanceServices;
_weChatInfoServices = weChatInfoServices;
_optionsAccessor = optionsAccessor;
_client = client;
_httpContextAccessor = httpContextAccessor;
}
/// <summary>
@@ -134,9 +149,10 @@ namespace CoreCms.Net.Services
cashModel.accountBank = bankcardsInfo.accountBank;
cashModel.accountName = bankcardsInfo.accountName;
cashModel.cardNumber = bankcardsInfo.cardNumber;
cashModel.status = (int)GlobalEnumVars.UserTocashTypes.;
cashModel.status = (int)GlobalEnumVars.UserTocashStatus.;
cashModel.withdrawals = cateMoney;
cashModel.createTime = DateTime.Now;
cashModel.type = (int)GlobalEnumVars.UserTocashType.线;
var res = await _dal.InsertAsync(cashModel);
if (res > 0)
@@ -182,7 +198,7 @@ namespace CoreCms.Net.Services
{
foreach (var item in list)
{
item.statusName = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.UserTocashTypes>(item.status);
item.statusName = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.UserTocashStatus>(item.status);
item.cardNumber = UserHelper.BankCardNoFormat(item.cardNumber);
}
}
@@ -206,57 +222,156 @@ namespace CoreCms.Net.Services
/// <param name="id"></param>
/// <param name="status"></param>
/// <returns></returns>
public async Task<WebApiCallBack> Examine(int id = 0, int status = 0)
public async Task<WebApiCallBack> Examine(int id = 0, int status = 0, int type = (int)GlobalEnumVars.UserTocashType.线)
{
var jm = new WebApiCallBack();
var info = await _dal.QueryByClauseAsync(p =>
p.id == id && p.status == (int)GlobalEnumVars.UserTocashTypes.);
var info = await _dal.QueryByClauseAsync(p => p.id == id && (p.status == (int)GlobalEnumVars.UserTocashStatus. || p.status == (int)GlobalEnumVars.UserTocashStatus.));
if (info == null)
{
jm.msg = "没有此记录或不是待审核状态";
return jm;
}
if (status > 0)
switch (type)
{
var bl = await _dal.UpdateAsync(p => new CoreCmsUserTocash() { status = status, updateTime = DateTime.Now }, p =>
p.id == id && p.status == (int)GlobalEnumVars.UserTocashTypes.);
jm.status = bl;
jm.data = status;
if (bl)
{
//失败给用户退钱到余额
if (status == (int)GlobalEnumVars.UserTocashTypes.)
case (int)GlobalEnumVars.UserTocashType.线 when status > 0:
{
var toCashInfo = await _dal.QueryByIdAsync(id);
// 提现金额 加 服务费返还
var newMoney = toCashInfo.money + toCashInfo.withdrawals;
var up = await _userServices.UpdateAsync(p => new CoreCmsUser() { balance = p.balance + newMoney }, p => p.id == toCashInfo.userId);
if (up)
var bl = await _dal.UpdateAsync(p => new CoreCmsUserTocash() { status = status, updateTime = DateTime.Now }, p => p.id == id && (p.status == (int)GlobalEnumVars.UserTocashStatus. || p.status == (int)GlobalEnumVars.UserTocashStatus.));
jm.status = bl;
jm.data = status;
if (bl)
{
//添加记录
var user = await _userServices.QueryByIdAsync(toCashInfo.userId);
//失败给用户退钱到余额
if (status == (int)GlobalEnumVars.UserTocashStatus.)
{
var toCashInfo = await _dal.QueryByIdAsync(id);
var balance = new CoreCmsUserBalance();
balance.type = (int)GlobalEnumVars.UserBalanceSourceTypes.Tocash;
balance.userId = toCashInfo.userId;
balance.balance = user.balance;
balance.createTime = DateTime.Now;
balance.memo = UserHelper.GetMemo(balance.type, toCashInfo.money);
balance.money = newMoney;
balance.sourceId = id.ToString();
// 提现金额 加 服务费返还
var newMoney = toCashInfo.money + toCashInfo.withdrawals;
var up = await _userServices.UpdateAsync(p => new CoreCmsUser() { balance = p.balance + newMoney }, p => p.id == toCashInfo.userId);
if (up)
{
//添加记录
var user = await _userServices.QueryByIdAsync(toCashInfo.userId);
await _userBalanceServices.InsertAsync(balance);
var balance = new CoreCmsUserBalance();
balance.type = (int)GlobalEnumVars.UserBalanceSourceTypes.Tocash;
balance.userId = toCashInfo.userId;
balance.balance = user.balance;
balance.createTime = DateTime.Now;
balance.memo = UserHelper.GetMemo(balance.type, toCashInfo.money);
balance.money = newMoney;
balance.sourceId = id.ToString();
await _userBalanceServices.InsertAsync(balance);
}
}
}
break;
}
}
}
else
{
jm.msg = GlobalErrorCodeVars.Code10000;
jm.status = false;
case (int)GlobalEnumVars.UserTocashType.线:
jm.msg = GlobalErrorCodeVars.Code10000;
jm.status = false;
break;
case (int)GlobalEnumVars.UserTocashType.:
{
var user = await _userServices.QueryByIdAsync(info.userId);
if (user == null)
{
jm.msg = "用户信息获取失败";
return jm;
}
var weChatUserInfo = await _weChatInfoServices.QueryByClauseAsync(p => p.userId == info.userId);
if (weChatUserInfo == null)
{
jm.msg = "微信用户数据获取失败";
return jm;
}
//按分计算
var amount = Convert.ToInt16((info.money - info.withdrawals) * 100);
//企业付款到零钱
var request = new WeChatPayPromotionTransfersRequest
{
PartnerTradeNo = YitIdHelper.NextId().ToString(),
OpenId = weChatUserInfo.openid,
CheckName = "NO_CHECK",
ReUserName = info.accountName,
Amount = amount,
Desc = "余额提现零钱",
SpBillCreateIp = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1"
};
var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success)
{
status = (int)GlobalEnumVars.UserTocashStatus.;
var message = JsonConvert.SerializeObject(response);
var bl = await _dal.UpdateAsync(p => new CoreCmsUserTocash() { status = status, updateTime = DateTime.Now, message = message }, p => p.id == id && (p.status == (int)GlobalEnumVars.UserTocashStatus. || p.status == (int)GlobalEnumVars.UserTocashStatus.));
jm.status = bl;
jm.data = status;
}
else
{
status = (int)GlobalEnumVars.UserTocashStatus.;
var message = JsonConvert.SerializeObject(response);
var bl = await _dal.UpdateAsync(p => new CoreCmsUserTocash() { status = status, updateTime = DateTime.Now, message = message }, p => p.id == id && (p.status == (int)GlobalEnumVars.UserTocashStatus. || p.status == (int)GlobalEnumVars.UserTocashStatus.));
jm.status = bl;
jm.data = status;
}
break;
}
case (int)GlobalEnumVars.UserTocashType.:
{
var user = await _userServices.QueryByIdAsync(info.userId);
if (user == null)
{
jm.msg = "用户信息获取失败";
return jm;
}
var weChatUserInfo = await _weChatInfoServices.QueryByClauseAsync(p => p.userId == info.userId);
if (weChatUserInfo == null)
{
jm.msg = "微信用户数据获取失败";
return jm;
}
//按分计算
var amount = Convert.ToInt16((info.money - info.withdrawals) * 100);
//企业付款到零钱
var request = new WeChatPayPayBankRequest
{
PartnerTradeNo = YitIdHelper.NextId().ToString(),
BankNo = info.cardNumber,
TrueName = info.accountName,
BankCode = info.accountBank,
Amount = amount,
Desc = "余额提现银行卡",
};
var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success)
{
status = (int)GlobalEnumVars.UserTocashStatus.;
var message = JsonConvert.SerializeObject(response);
var bl = await _dal.UpdateAsync(p => new CoreCmsUserTocash() { status = status, updateTime = DateTime.Now, message = message }, p => p.id == id && (p.status == (int)GlobalEnumVars.UserTocashStatus. || p.status == (int)GlobalEnumVars.UserTocashStatus.));
jm.status = bl;
jm.data = status;
}
else
{
status = (int)GlobalEnumVars.UserTocashStatus.;
var message = JsonConvert.SerializeObject(response);
var bl = await _dal.UpdateAsync(p => new CoreCmsUserTocash() { status = status, updateTime = DateTime.Now, message = message }, p => p.id == id && (p.status == (int)GlobalEnumVars.UserTocashStatus. || p.status == (int)GlobalEnumVars.UserTocashStatus.));
jm.status = bl;
jm.data = status;
}
break;
}
default:
jm.msg = "提现方式获取失败";
jm.status = false;
break;
}
return jm;