using cylsg.Core;
using cylsg.Core.Attributes;
using cylsg.Model.UserModel;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace cylsg.Model.TransferOrder
{
///
/// 转账单账模型
///
[SugarTable(TableDescription = "转账单账模型")]
[CoderFirst]
public class WeChatTransferOrder: BaseModel
{
///
/// ID
///
[SugarColumn(ColumnDescription = "ID", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
///
/// 获取或设置商户批次单号。
///
[SugarColumn(ColumnDescription = "获取或设置商户批次单号")]
public string OutBatchNumber { get; set; }
///
/// 获取或设置微信批次单号。
///
[SugarColumn(ColumnDescription = "获取或设置微信批次单号",IsNullable =true)]
public string? BatchId { get; set; }
///
/// 获取或设置批次状态。
///
[SugarColumn(ColumnDescription = "获取或设置批次状态",IsNullable =true)]
public string? BatchStatus { get; set; }
///
/// 用户ID。
///
[SugarColumn(ColumnDescription = "用户ID")]
public int UserID { get; set; }
///
/// 用户表情。
///
[Navigate(NavigateType.OneToOne, nameof(UserID))]
public User user { get; set; }
///
/// 获取或设置批次的名称。
/// 示例: "2019年1月深圳分部报销单"
///
///
[SugarColumn(ColumnDescription = "获取或设置批次的名称", IsNullable = true)]
public string? BatchName { get; set; }
///
/// 获取或设置批次的备注。
/// 示例: "2019年1月深圳分部报销单"
///
///
[SugarColumn(ColumnDescription = "获取或设置批次的备注", IsNullable = true)]
public string? BatchRemark { get; set; }
///
/// 获取或设置关闭批次的原因。
/// 示例: "OVERDUE_CLOSE"
///
///
[SugarColumn(ColumnDescription = "获取或设置关闭批次的原因", IsNullable = true)]
public string? CloseReason { get; set; }
///
/// 获取或设置批次中的总金额。
/// 示例: 4000000
///
///
[SugarColumn(ColumnDescription = "获取或设置批次中的总金额", IsNullable = true)]
public int? TotalAmount { get; set; }
///
/// 获取或设置批次中的项目总数。
/// 示例: 200
///
///
[SugarColumn(ColumnDescription = "获取或设置批次中的项目总数", IsNullable = true)]
public int? TotalNum { get; set; }
///
/// 获取或设置批次中的成功总金额。
/// 示例: 3900000
///
///
[SugarColumn(ColumnDescription = "获取或设置批次中的成功总金额", IsNullable = true)]
public int? SuccessAmount { get; set; }
///
/// 获取或设置批次中的成功项目数。
/// 示例: 199
///
///
[SugarColumn(ColumnDescription = "获取或设置批次中的成功项目数", IsNullable = true)]
public int? SuccessNum { get; set; }
///
/// 获取或设置批次中的失败总金额。
/// 示例: 100000
///
///
[SugarColumn(ColumnDescription = "获取或设置批次中的失败总金额", IsNullable = true)]
public int? FailAmount { get; set; }
///
/// 获取或设置批次中的失败项目数。
/// 示例: 1
///
///
[SugarColumn(ColumnDescription = "获取或设置批次中的失败项目数", IsNullable = true)]
public int? FailNum { get; set; }
///
/// 获取或设置转账场景标识符。
/// 示例: "1000"
///
[SugarColumn(ColumnDescription = "获取或设置转账场景标识符", IsNullable = true)]
public string? TransferSceneId { get; set; }
///
/// 错误消息
///
[SugarColumn(ColumnDescription = "错误消息", IsNullable = true)]
public string? ErrorMsg { get; set; }
///
/// 错误标识
///
[SugarColumn(ColumnDescription = "错误标识", IsNullable = true)]
public string? ErrorCode { get; set; }
///
/// 获取或设置批次中的详细转账列表。
///
[Navigate(NavigateType.OneToMany,nameof(WeChatTransferItem.WeChatTransferOrderID))]
public List TransferDetailList { get; set; }
///
/// 再次发起时 的描述
///
[SugarColumn(ColumnDescription = "其他描述", IsNullable = true)]
public string? RemakeDes { get; set; }
///
/// 是否重新发起支付,当支付失败后,超出重新的支付单失败后,需要重新更换单号重新发起新的支付请求,重新发起支付请求单
///
[SugarColumn(ColumnDescription = "是重新发起的支付订单", IsNullable = true)]
public int? WeChatTransferOrderPrId { get; set; }
///
/// 重新支付订单列表
///
[Navigate(NavigateType.OneToMany, nameof(WeChatTransferOrderPrId))]
public List? AgWeChatTransferOrders { get; set; }
///
/// 是否已经完成处理 默认未处理
///
[SugarColumn(ColumnDescription = "是否已经完成处理", DefaultValue ="0")]
public bool IsSetOK { get; set; }= false;
}
///
/// 转账单列表
///
[SugarTable(TableDescription = "转账单账详细列表模型")]
[CoderFirst]
public class WeChatTransferItem:BaseModel
{
///
/// ID
///
[SugarColumn(ColumnDescription = "ID", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
///
/// WeChatTransferOrderID
///
[SugarColumn(ColumnDescription = "获取或设置批次状态")]
public int WeChatTransferOrderID { get; set; }
///
/// 获取或设置商户明细单号。
///
[SugarColumn(ColumnDescription = "获取或设置批次状态")]
public string OutDetailNumber { get; set; }
///
/// 获取或设置转账金额(单位:分)。
///
[SugarColumn(ColumnDescription = "获取或设置批次状态")]
public int TransferAmount { get; set; }
///
/// 获取或设置转账备注。
///
[SugarColumn(ColumnDescription = "获取或设置批次状态")]
public string TransferRemark { get; set; }
///
/// 获取或设置收款用户的 OpenId。
///
[SugarColumn(ColumnDescription = "获取或设置收款用户的 OpenId")]
public string OpenId { get; set; }
///
/// 获取或设置收款用户姓名(需使用平台公钥/证书加密)。
///
[SugarColumn(ColumnDescription = "获取或设置收款用户姓名",IsNullable =true)]
public string? UserName { get; set; }
///
/// 获取或设置收款用户身份证号(需使用平台公钥/证书加密)。
///
[SugarColumn(ColumnDescription = "获取或设置收款用户身份证号",IsNullable =true)]
public string? UserIdCardNumber { get; set; }
///
/// 获取或设置明细状态。
/// INIT: 初始态。系统转账校验中
/// WAIT_PAY: 待确认。待商户确认, 符合免密条件时, 系统会自动扭转为转账中
/// PROCESSING: 转账中。正在处理中,转账结果尚未明确
/// SUCCESS: 转账成功
/// FAIL: 转账失败。需要确认失败原因后,再决定是否重新发起对该笔明细单的转账(并非整个转账批次单)
/// 最大长度: 32
///
[SugarColumn(ColumnDescription = "获取或设置明细状态", IsNullable = true)]
public string? DetailStatus { get; set; }
///
/// 获取或设置明细失败原因。
/// 如果转账失败则有失败原因。
/// 可选取值:
/// ACCOUNT_FROZEN: 该用户账户被冻结
/// REAL_NAME_CHECK_FAIL: 收款人未实名认证,需要用户完成微信实名认证
/// NAME_NOT_CORRECT: 收款人姓名校验不通过,请核实信息
/// OPENID_INVALID: Openid格式错误或者不属于商家公众账号
/// TRANSFER_QUOTA_EXCEED: 超过用户单笔收款额度,核实产品设置是否准确
/// DAY_RECEIVED_QUOTA_EXCEED: 超过用户单日收款额度,核实产品设置是否准确
/// MONTH_RECEIVED_QUOTA_EXCEED: 超过用户单月收款额度,核实产品设置是否准确
/// DAY_RECEIVED_COUNT_EXCEED: 超过用户单日收款次数,核实产品设置是否准确
/// PRODUCT_AUTH_CHECK_FAIL: 未开通该权限或权限被冻结,请核实产品权限状态
/// OVERDUE_CLOSE: 超过系统重试期,系统自动关闭
/// ID_CARD_NOT_CORRECT: 收款人身份证校验不通过,请核实信息
/// ACCOUNT_NOT_EXIST: 该用户账户不存在
/// TRANSFER_RISK: 该笔转账可能存在风险,已被微信拦截
/// OTHER_FAIL_REASON_TYPE: 其它失败原因
/// REALNAME_ACCOUNT_RECEIVED_QUOTA_EXCEED: 用户账户收款受限,请引导用户在微信支付查看详情
/// RECEIVE_ACCOUNT_NOT_PERMMIT: 未配置该用户为转账收款人,请在产品设置中调整,添加该用户为收款人
/// PAYEE_ACCOUNT_ABNORMAL: 用户账户收款异常,请联系用户完善其在微信支付的身份信息以继续收款
/// PAYER_ACCOUNT_ABNORMAL: 商户账户付款受限,可前往商户平台获取解除功能限制指引
/// TRANSFER_SCENE_UNAVAILABLE: 该转账场景暂不可用,请确认转账场景ID是否正确
/// TRANSFER_SCENE_INVALID: 你尚未获取该转账场景,请确认转账场景ID是否正确
/// TRANSFER_REMARK_SET_FAIL: 转账备注设置失败, 请调整后重新再试
/// RECEIVE_ACCOUNT_NOT_CONFIGURE: 请前往商户平台-商家转账到零钱-前往功能-转账场景中添加
/// BLOCK_B2C_USERLIMITAMOUNT_BSRULE_MONTH: 超出用户单月转账收款20w限额,本月不支持继续向该用户付款
/// BLOCK_B2C_USERLIMITAMOUNT_MONTH: 用户账户存在风险收款受限,本月不支持继续向该用户付款
/// MERCHANT_REJECT: 商户员工(转账验密人)已驳回转账
/// MERCHANT_NOT_CONFIRM: 商户员工(转账验密人)超时未验密
///
[SugarColumn(ColumnDescription = "获取或设置明细失败原因", IsNullable = true)]
public string? FailReason { get; set; }
}
}