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

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

@@ -320,15 +320,31 @@ namespace CoreCms.Net.Configuration
/// <summary>
/// 用户提现状态[对应CoreCmsUserTocash表的status字段]
/// </summary>
public enum UserTocashTypes
public enum UserTocashStatus
{
[Description("待审核")]
= 1,
[Description("提现成功")]
= 2,
[Description("提现失败")]
= 3
= 3,
[Description("提现异常")]
= 4
}
/// <summary>
/// 用户提现状态[对应CoreCmsUserTocash表的type字段]
/// </summary>
public enum UserTocashType
{
[Description("银行线下转账")]
线 = 0,
[Description("微信付款到零钱")]
= 1,
[Description("微信付款到银行卡")]
= 2
}
#endregion
#region Order订单相关=========================================================

View File

@@ -11,6 +11,7 @@
using System;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
@@ -46,7 +47,7 @@ namespace CoreCms.Net.IServices
/// <param name="id"></param>
/// <param name="status"></param>
/// <returns></returns>
Task<WebApiCallBack> Examine(int id = 0, int status = 0);
Task<WebApiCallBack> Examine(int id = 0, int status = 0, int type = (int)GlobalEnumVars.UserTocashType.线);
#region

View File

@@ -3,11 +3,13 @@
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2021-06-08 22:14:59
* Email: jianweie@163.com
* CreateTime: 2022/7/4 23:39:39
* Description: 暂无
***********************************************************************/
***********************************************************************/
using SqlSugar;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace CoreCms.Net.Model.Entities
@@ -15,11 +17,10 @@ namespace CoreCms.Net.Model.Entities
/// <summary>
/// 用户提现记录表
/// </summary>
[SugarTable("CoreCmsUserTocash",TableDescription = "用户提现记录表")]
public partial class CoreCmsUserTocash
{
/// <summary>
/// 用户提现记录表
/// 构造函数
/// </summary>
public CoreCmsUserTocash()
{
@@ -29,90 +30,144 @@ namespace CoreCms.Net.Model.Entities
/// id
/// </summary>
[Display(Name = "id")]
[SugarColumn(ColumnDescription = "id", IsPrimaryKey = true, IsIdentity = true)]
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
[Required(ErrorMessage = "请输入{0}")]
public System.Int32 id { get; set; }
/// <summary>
/// 用户ID
/// </summary>
[Display(Name = "用户ID")]
[SugarColumn(ColumnDescription = "用户ID")]
[Required(ErrorMessage = "请输入{0}")]
public System.Int32 userId { get; set; }
/// <summary>
/// 提现金额
/// </summary>
[Display(Name = "提现金额")]
[SugarColumn(ColumnDescription = "提现金额")]
[Required(ErrorMessage = "请输入{0}")]
public System.Decimal money { get; set; }
/// <summary>
/// 银行名称
/// </summary>
[Display(Name = "银行名称")]
[SugarColumn(ColumnDescription = "银行名称", IsNullable = true)]
[StringLength(60, ErrorMessage = "【{0}】不能超过{1}字符长度")]
[StringLength(maximumLength: 60, ErrorMessage = "{0}不能超过{1}字")]
public System.String bankName { get; set; }
/// <summary>
/// 银行缩写
/// </summary>
[Display(Name = "银行缩写")]
[SugarColumn(ColumnDescription = "银行缩写", IsNullable = true)]
[StringLength(12, ErrorMessage = "【{0}】不能超过{1}字符长度")]
[StringLength(maximumLength: 12, ErrorMessage = "{0}不能超过{1}字")]
public System.String bankCode { get; set; }
/// <summary>
/// 账号地区ID
/// </summary>
[Display(Name = "账号地区ID")]
[SugarColumn(ColumnDescription = "账号地区ID", IsNullable = true)]
public System.Int32? bankAreaId { get; set; }
/// <summary>
/// 开户行
/// </summary>
[Display(Name = "开户行")]
[SugarColumn(ColumnDescription = "开户行", IsNullable = true)]
[StringLength(255, ErrorMessage = "【{0}】不能超过{1}字符长度")]
[StringLength(maximumLength: 255, ErrorMessage = "{0}不能超过{1}字")]
public System.String accountBank { get; set; }
/// <summary>
/// 账户名
/// </summary>
[Display(Name = "账户名")]
[SugarColumn(ColumnDescription = "账户名", IsNullable = true)]
[StringLength(60, ErrorMessage = "【{0}】不能超过{1}字符长度")]
[StringLength(maximumLength: 60, ErrorMessage = "{0}不能超过{1}字")]
public System.String accountName { get; set; }
/// <summary>
/// 卡号
/// </summary>
[Display(Name = "卡号")]
[SugarColumn(ColumnDescription = "卡号", IsNullable = true)]
[StringLength(30, ErrorMessage = "【{0}】不能超过{1}字符长度")]
[StringLength(maximumLength: 30, ErrorMessage = "{0}不能超过{1}字")]
public System.String cardNumber { get; set; }
/// <summary>
/// 提现服务费
/// </summary>
[Display(Name = "提现服务费")]
[SugarColumn(ColumnDescription = "提现服务费")]
[Required(ErrorMessage = "请输入{0}")]
public System.Decimal withdrawals { get; set; }
/// <summary>
/// 提现状态
/// </summary>
[Display(Name = "提现状态")]
[SugarColumn(ColumnDescription = "提现状态")]
[Required(ErrorMessage = "请输入{0}")]
public System.Int32 status { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Display(Name = "创建时间")]
[SugarColumn(ColumnDescription = "创建时间")]
[Required(ErrorMessage = "请输入{0}")]
public System.DateTime createTime { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[Display(Name = "更新时间")]
[SugarColumn(ColumnDescription = "更新时间", IsNullable = true)]
public System.DateTime? updateTime { get; set; }
/// <summary>
/// 提现方式
/// </summary>
[Display(Name = "提现方式")]
[Required(ErrorMessage = "请输入{0}")]
public System.Int32 type { get; set; }
/// <summary>
/// 反馈结果
/// </summary>
[Display(Name = "反馈结果")]
[StringLength(maximumLength: 100, ErrorMessage = "{0}不能超过{1}字")]
public System.String message { get; set; }
}
}

View File

@@ -140,4 +140,26 @@ namespace CoreCms.Net.Model.FromBody
/// </summary>
public string propsDate { get; set; }
}
public class FMUserTocash
{
/// <summary>
/// 提现记录序列
/// </summary>
public int id { get; set; }
/// <summary>
/// 设置状态
/// </summary>
public int status { get; set; }
/// <summary>
/// 提现方式
/// </summary>
public int type { get; set; }
}
}

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;

View File

@@ -224,17 +224,54 @@ namespace CoreCms.Net.Web.Admin.Controllers
//返回数据
var jm = new AdminUiCallBack { code = 0 };
var userTocashTypes = EnumHelper.EnumToList<GlobalEnumVars.UserTocashTypes>();
var userTocashStatus = EnumHelper.EnumToList<GlobalEnumVars.UserTocashStatus>();
var userTocashType = EnumHelper.EnumToList<GlobalEnumVars.UserTocashType>();
jm.data = new
{
userTocashTypes
userTocashStatus,
userTocashType
};
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsUserTocash/GetTocash
/// <summary>
/// 提现处理
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("提现处理")]
public async Task<AdminUiCallBack> GetTocash([FromBody] FMIntId entity)
{
var jm = new AdminUiCallBack();
var model = await _coreCmsUserTocashServices.QueryByIdAsync(entity.id, false);
if (model == null)
{
jm.msg = "不存在此信息";
return jm;
}
jm.code = 0;
var userTocashStatus = EnumHelper.EnumToList<GlobalEnumVars.UserTocashStatus>();
var userTocashType = EnumHelper.EnumToList<GlobalEnumVars.UserTocashType>();
jm.data = new
{
model,
userTocashStatus,
userTocashType
};
return jm;
}
#endregion
#region ============================================================
@@ -246,7 +283,7 @@ namespace CoreCms.Net.Web.Admin.Controllers
/// <returns></returns>
[HttpPost]
[Description("设置状态")]
public async Task<AdminUiCallBack> SetStatus([FromBody] FMIntId entity)
public async Task<AdminUiCallBack> SetStatus([FromBody] FMUserTocash entity)
{
var jm = new AdminUiCallBack();
@@ -257,17 +294,54 @@ namespace CoreCms.Net.Web.Admin.Controllers
return jm;
}
var res = await _coreCmsUserTocashServices.Examine(entity.id, entity.data.ObjectToInt(0));
var res = await _coreCmsUserTocashServices.Examine(entity.id, entity.status, entity.type);
jm.code = res.status ? 0 : 1;
jm.data = res.data;
jm.msg = res.status ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
jm.msg = res.msg;
jm.otherData = entity;
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsUserTocash/GetDetails/10
/// <summary>
/// 预览数据
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("预览数据")]
public async Task<AdminUiCallBack> GetDetails([FromBody] FMIntId entity)
{
var jm = new AdminUiCallBack();
var model = await _coreCmsUserTocashServices.QueryByIdAsync(entity.id, false);
if (model == null)
{
jm.msg = "不存在此信息";
return jm;
}
jm.code = 0;
var userTocashStatus = EnumHelper.EnumToList<GlobalEnumVars.UserTocashStatus>();
var userTocashType = EnumHelper.EnumToList<GlobalEnumVars.UserTocashType>();
jm.data = new
{
model,
userTocashStatus,
userTocashType
};
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsUserTocash/SelectExportExcel/10

View File

@@ -0,0 +1,170 @@
<script type="text/html" template lay-done="layui.data.done(d);">
<table class="layui-table layui-form" lay-filter="LAY-app-CoreCmsUserTocash-detailsForm" id="LAY-app-CoreCmsUserTocash-detailsForm">
<colgroup>
<col width="100">
<col>
</colgroup>
<tbody>
<tr>
<td>
<label for="id">id</label>
</td>
<td>
{{ d.params.data.model.id || '' }}
</td>
</tr>
<tr>
<td>
<label for="userId">用户ID</label>
</td>
<td>
{{ d.params.data.model.userId || '' }}
</td>
</tr>
<tr>
<td>
<label for="money">提现金额</label>
</td>
<td>
{{ d.params.data.model.money || '' }}
</td>
</tr>
<tr>
<td>
<label for="bankName">银行名称</label>
</td>
<td>
{{ d.params.data.model.bankName || '' }}
</td>
</tr>
<tr>
<td>
<label for="bankCode">银行缩写</label>
</td>
<td>
{{ d.params.data.model.bankCode || '' }}
</td>
</tr>
<tr>
<td>
<label for="bankAreaId">账号地区ID</label>
</td>
<td>
{{ d.params.data.model.bankAreaId || '' }}
</td>
</tr>
<tr>
<td>
<label for="accountBank">开户行</label>
</td>
<td>
{{ d.params.data.model.accountBank || '' }}
</td>
</tr>
<tr>
<td>
<label for="accountName">账户名</label>
</td>
<td>
{{ d.params.data.model.accountName || '' }}
</td>
</tr>
<tr>
<td>
<label for="cardNumber">卡号</label>
</td>
<td>
{{ d.params.data.model.cardNumber || '' }}
</td>
</tr>
<tr>
<td>
<label for="withdrawals">提现服务费</label>
</td>
<td>
{{ d.params.data.model.withdrawals || '' }}
</td>
</tr>
<tr>
<td>
<label for="status">提现状态</label>
</td>
<td>
{{# layui.each(indexData.userTocashStatus, function(index, item){ }}
{{# if (d.params.data.model.status===item.value) {}}
{{ item.title }}
{{# }}}
{{# }); }}
</td>
</tr>
<tr>
<td>
<label for="createTime">创建时间</label>
</td>
<td>
{{ d.params.data.model.createTime || '' }}
</td>
</tr>
<tr>
<td>
<label for="updateTime">更新时间</label>
</td>
<td>
{{ d.params.data.model.updateTime || '' }}
</td>
</tr>
<tr>
<td>
<label for="type">提现方式</label>
</td>
<td>
{{# layui.each(indexData.userTocashType, function(index, item){ }}
{{# if (d.params.data.model.type===item.value) {}}
{{ item.title }}
{{# }}}
{{# }); }}
</td>
</tr>
<tr>
<td>
<label for="message">反馈结果</label>
</td>
<td>
{{ d.params.data.model.message || '' }}
</td>
</tr>
</tbody>
</table>
</script>
<script>
var debug = layui.setter.debug;
layui.data.done = function (d) {
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d.params.data); }
layui.use(['admin', 'form', 'coreHelper'], function () {
var $ = layui.$
, setter = layui.setter
, admin = layui.admin
, coreHelper = layui.coreHelper
, form = layui.form;
form.render(null, 'LAY-app-CoreCmsUserTocash-detailsForm');
});
};
</script>

View File

@@ -0,0 +1,74 @@
<script type="text/html" template lay-done="layui.data.sendParams(d);">
<div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-CoreCmsUserTocash-editForm" id="LAY-app-CoreCmsUserTocash-editForm">
<input type="hidden" name="id" value="{{d.params.data.model.id }}" />
<div class="layui-form-item">
<label for="type" class="layui-form-label layui-form-required">提现方式</label>
<div class="layui-input-block">
<select name="type" lay-verify="required|number" lay-reqText="请选择提现方式" lay-filter="selectType">
<option value="">请选择提现方式</option>
{{# layui.each(indexData.userTocashType, function(index, item){ }}
<option value="{{ item.value }}">{{ item.title }}</option>
{{# }); }}
</select>
</div>
</div>
<div class="layui-form-item" id="selectStatusBox">
<label for="type" class="layui-form-label layui-form-required">审核状态</label>
<div class="layui-input-block">
<select name="status" lay-verify="required|number" lay-reqText="请选择审核状态">
{{# layui.each(indexData.userTocashStatus, function(index, item){ }}
<option value="{{ item.value }}" {{item.value===d.params.data.model.status?'selected="selected"':''}}>{{ item.title }}</option>
{{# }); }}
</select>
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-mid">
<br />
1微信提现需微信支付商户开通了企业付款到零钱功能<br />
2只有提现方式银行卡才可主动设置成功失败<br />
3微信提现方式下将依据请求微信api接口返回信息进行状态处理<br />
4微信提现付款到零钱微信提现付款到银行卡再有异常的情况下都可继续进行新的处理可能会存在网络微信支付商户余额用户填写的银行卡信息错误等<br />
5微信提现付款到银行卡需要配置RsaPublicKey请自行添加不然会报异常
</div>
</div>
<div class="layui-form-item text-right core-hidden">
<input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-CoreCmsUserTocash-editForm-submit" id="LAY-app-CoreCmsUserTocash-editForm-submit" value="确认提现">
</div>
</div>
</script>
<script>
var debug = layui.setter.debug;
layui.data.sendParams = function (d) {
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d.params.data); }
layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'cropperImg'],
function () {
var $ = layui.$
, form = layui.form
, admin = layui.admin
, laydate = layui.laydate
, upload = layui.upload
, cropperImg = layui.cropperImg
, coreHelper = layui.coreHelper;
$('#selectStatusBox').hide();
form.on('select(selectType)', function (data) {
console.log(data.value); //复选框value值也可以通过data.elem.value得到
if (data.value === '0') {
$('#selectStatusBox').show();
} else {
$('#selectStatusBox').hide();
}
});
//重载form
form.render(null, 'LAY-app-CoreCmsUserTocash-editForm');
})
};
</script>

View File

@@ -31,9 +31,19 @@
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<select name="status" id="status" lay-filter="conditionCode">
<select name="status">
<option value="">请选择提现状态</option>
{{# layui.each(indexData.userTocashTypes, function(index, item){ }}
{{# layui.each(indexData.userTocashStatus, function(index, item){ }}
<option value="{{ item.value }}">{{ item.title }}</option>
{{# }); }}
</select>
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<select name="type">
<option value="">请选择提现方式</option>
{{# layui.each(indexData.userTocashType, function(index, item){ }}
<option value="{{ item.value }}">{{ item.title }}</option>
{{# }); }}
</select>
@@ -58,6 +68,16 @@
</div>
</script>
<script type="text/html" id="LAY-app-CoreCmsUserTocash-tableBox-bar">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
{{# if(d.status === 1 || d.status === 4) { }}
<a class="layui-btn layui-btn-xs" lay-event="getTocash">处理</a>
{{# } }}
</script>
<script>
var indexData;
var debug = layui.setter.debug;
@@ -78,7 +98,7 @@
, util = layui.util
, view = layui.view;
//重载form
form.render();
var searchwhere;
@@ -109,20 +129,20 @@
{ type: "checkbox", fixed: "left" },
{ field: 'id', title: 'ID号', width: 60, sort: false },
{
field: 'userNickName', title: '用户', sort: false, width: 105, templet: function (d) {
field: 'userNickName', title: '用户', sort: false, width: 200, templet: function (d) {
return d.userNickName + '' + d.userId + '';
}
},
{
field: 'operating', title: '操作', width: 100, align: 'center', templet: function (data) {
var html = '';
if (data.status == 1) {
html += '<a class="layui-btn layui-btn-xs option-yes" data-type="2" data-id="' + data.id + '">通过</a>';
html += '<a class="layui-btn layui-btn-danger layui-btn-xs option-no" data-type="3" data-id="' + data.id + '" >驳回</a>';
}
return html;
}
},
//{
// field: 'operating', title: '操作', width: 100, align: 'center', templet: function (data) {
// var html = '';
// if (data.status == 1) {
// html += '<a class="layui-btn layui-btn-xs option-yes" data-type="2" data-id="' + data.id + '">通过</a>';
// html += '<a class="layui-btn layui-btn-danger layui-btn-xs option-no" data-type="3" data-id="' + data.id + '" >驳回</a>';
// }
// return html;
// }
//},
{ field: 'money', title: '提现金额', sort: false, width: 80, templet: function (data) { return '¥' + data.money } },
{ field: 'bankName', title: '银行名称', sort: false, width: 105 },
{ field: 'bankCode', title: '银行缩写', sort: false, width: 65 },
@@ -133,9 +153,9 @@
{ field: 'withdrawals', title: '提现服务费', sort: false, width: 85 },
{
field: 'status', title: '提现状态', sort: false, width: 65, templet: function (data) {
for (var i = 0; i < d.data.userTocashTypes.length; i++) {
if (data.status == d.data.userTocashTypes[i].value) {
return d.data.userTocashTypes[i].title;
for (var i = 0; i < d.data.userTocashStatus.length; i++) {
if (data.status == d.data.userTocashStatus[i].value) {
return d.data.userTocashStatus[i].title;
}
}
return "";
@@ -143,6 +163,8 @@
},
{ field: 'createTime', title: '创建时间', width: 130, sort: false },
{ field: 'updateTime', title: '更新时间', width: 130, sort: false },
{ width: 120, align: 'center', title: '操作', fixed: 'right', toolbar: '#LAY-app-CoreCmsUserTocash-tableBox-bar' },
{ field: 'message', title: '反馈信息', width: 130, sort: false },
]
]
});
@@ -173,8 +195,57 @@
function (obj) {
if (obj.event === 'detail') {
doDetails(obj);
} else if (obj.event === 'getTocash') {
getTocash(obj)
}
});
//执行提现操作
function getTocash(obj) {
coreHelper.Post("Api/CoreCmsUserTocash/GetTocash", { id: obj.data.id }, function (e) {
if (e.code === 0) {
admin.popup({
shadeClose: false,
title: '提现操作',
area: ['400px', '400px'],
id: 'LAY-popup-CoreCmsUserTocash-edit',
success: function (layero, index) {
view(this.id).render('financial/usertocash/edit', { data: e.data }).done(function () {
//监听提交
form.on('submit(LAY-app-CoreCmsUserTocash-editForm-submit)',
function (data) {
var field = data.field; //获取提交的字段
if (debug) { console.log(field); } //开启调试返回数据
//提交 Ajax 成功后,关闭当前弹层并重载表格
coreHelper.Post("Api/CoreCmsUserTocash/SetStatus", field, function (e) {
console.log(e)
if (e.code === 0) {
layui.table.reloadData('LAY-app-CoreCmsUserTocash-tableBox'); //重载表格
layer.close(index); //再执行关闭
layer.msg(e.msg);
} else {
layer.msg(e.msg);
}
});
});
})
// 禁止弹窗出现滚动条
$(layero).children('.layui-layer-content').css('overflow', 'visible');
}
, btn: ['确定', '取消']
, yes: function (index, layero) {
layero.contents().find("#LAY-app-CoreCmsUserTocash-editForm-submit").click();
}
});
} else {
layer.msg(e.msg);
}
});
}
//执行预览操作
function doDetails(obj) {
coreHelper.Post("Api/CoreCmsUserTocash/GetDetails", { id: obj.data.id }, function (e) {
@@ -182,10 +253,10 @@
admin.popup({
shadeClose: false,
title: '查看详情',
area: ['600px', '400px'],
area: ['600px', '500px'],
id: 'LAY-popup-CoreCmsUserTocash-details',
success: function (layero, index) {
view(this.id).render('base/CoreCmsUserTocash/details', { data: e.data }).done(function () {
view(this.id).render('financial/usertocash/details', { data: e.data }).done(function () {
form.render();
});
}

View File

@@ -0,0 +1,2 @@
ALTER TABLE CoreCmsUserTocash ADD COLUMN type int DEFAULT 0 NOT NULL COMMENT '提现方式' AFTER updateTime;
ALTER TABLE CoreCmsUserTocash ADD COLUMN message VARCHAR(1000) DEFAULT NULL COMMENT '反馈结果' AFTER type;

View File

@@ -0,0 +1,6 @@
ALTER TABLE [dbo].[CoreCmsUserTocash] ADD [type] INT DEFAULT 0 NOT NULL;
ALTER TABLE [dbo].[CoreCmsUserTocash] ADD [message] NVARCHAR (1000) NULL;
GO
EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'提现方式', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'CoreCmsUserTocash', @level2type = N'COLUMN', @level2name = N'type';
EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'反馈结果', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'CoreCmsUserTocash', @level2type = N'COLUMN', @level2name = N'message';

View File

@@ -1,3 +1,6 @@
2022-07-05
【新增】表【CoreCmsUserTocash】用户提现表增加【type】提现方式【message】反馈信息两个字段
2022-07-04
【新增】表【WeChatTransactionComponentOrder】微信交易订单表增加【paymentId】字段。