mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 17:33:27 +08:00
【新增】后台提现审核功能增加【企业付款到零钱】【企业付款到银行卡】
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user