mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 10:37:41 +08:00 
			
		
		
		
	支付系统的实体的初始化
This commit is contained in:
		| @ -0,0 +1,6 @@ | |||||||
|  | /** | ||||||
|  |  * 提供 POJO 类的实体转换 | ||||||
|  |  * | ||||||
|  |  * 目前使用 MapStruct 框架 | ||||||
|  |  */ | ||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay.convert; | ||||||
| @ -0,0 +1 @@ | |||||||
|  | <http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao> | ||||||
| @ -0,0 +1,57 @@ | |||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.merchant; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 支付应用 DO | ||||||
|  |  * 一个商户下,可能会有多个支付应用。例如说,京东有京东商城、京东到家等等 | ||||||
|  |  * 不过一般来说,一个商户,只有一个应用哈~ | ||||||
|  |  * | ||||||
|  |  * 即 PayMerchantDO : PayAppDO = 1 : n | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | public class PayAppDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 应用编号,数据库自增 | ||||||
|  |      */ | ||||||
|  |     @TableId | ||||||
|  |     private Long id; | ||||||
|  |     /** | ||||||
|  |      * 应用号 | ||||||
|  |      * 例如说,60cc81e0e4b06afc4d3f0cfq | ||||||
|  |      */ | ||||||
|  |     private String no; | ||||||
|  |     /** | ||||||
|  |      * 应用名 | ||||||
|  |      */ | ||||||
|  |     private String name; | ||||||
|  |     /** | ||||||
|  |      * 状态 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link CommonStatusEnum} | ||||||
|  |      */ | ||||||
|  |     private Integer status; | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |     /** | ||||||
|  |      * 应用私钥 | ||||||
|  |      * TODO 芋艿:用途 | ||||||
|  |      */ | ||||||
|  |     private String secret; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 商户编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayMerchantDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long merchantId; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,55 @@ | |||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.merchant; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.adminserver.modules.pay.enums.PayChannelCodeEnum; | ||||||
|  | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 支付渠道 DO | ||||||
|  |  * 一个应用下,会有多种支付渠道,例如说微信支付、支付宝支付等等 | ||||||
|  |  * | ||||||
|  |  * 即 PayAppDO : PayChannelDO = 1 : n | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | public class PayChannelDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 渠道编号,数据库自增 | ||||||
|  |      */ | ||||||
|  |     private Long id; | ||||||
|  |     /** | ||||||
|  |      * 渠道编码 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link PayChannelCodeEnum} | ||||||
|  |      */ | ||||||
|  |     private String code; | ||||||
|  |     /** | ||||||
|  |      * 状态 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link CommonStatusEnum} | ||||||
|  |      */ | ||||||
|  |     private Integer status; | ||||||
|  |     /** | ||||||
|  |      * 渠道费率,单位:百分比 | ||||||
|  |      */ | ||||||
|  |     private Double feeRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 商户编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayMerchantDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long merchantId; | ||||||
|  |     /** | ||||||
|  |      * 应用编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayAppDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private String appId; | ||||||
|  |  | ||||||
|  |     // TODO 芋艿:不同渠道的配置。暂时考虑硬编码 | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,46 @@ | |||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.merchant; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 商户信息 DO | ||||||
|  |  * 目前暂时没有特别的用途,主要为未来多商户提供基础。 | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | public class PayMerchantDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 商户编号,数据库自增 | ||||||
|  |      */ | ||||||
|  |     @TableId | ||||||
|  |     private Long id; | ||||||
|  |     /** | ||||||
|  |      * 商户号 | ||||||
|  |      * 例如说,M233666999 | ||||||
|  |      */ | ||||||
|  |     private String no; | ||||||
|  |     /** | ||||||
|  |      * 商户全称 | ||||||
|  |      */ | ||||||
|  |     private String name; | ||||||
|  |     /** | ||||||
|  |      * 商户简称 | ||||||
|  |      */ | ||||||
|  |     private String shortName; | ||||||
|  |     /** | ||||||
|  |      * 状态 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link CommonStatusEnum} | ||||||
|  |      */ | ||||||
|  |     private Integer status; | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.order; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 商户支付、退款等的通知 | ||||||
|  |  * 在支付系统收到支付渠道的支付、退款的结果后,需要不断的通知到业务系统,直到成功。 | ||||||
|  |  * TODO 芋艿:待完善 | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | public class PayNotifyDO extends BaseDO { | ||||||
|  | } | ||||||
| @ -0,0 +1,167 @@ | |||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.order; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.merchant.PayAppDO; | ||||||
|  | import cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.merchant.PayChannelDO; | ||||||
|  | import cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.merchant.PayMerchantDO; | ||||||
|  | import cn.iocoder.yudao.adminserver.modules.pay.enums.PayChannelCodeEnum; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 支付订单 DO | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | public class PayOrderDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 订单编号,数据库自增 | ||||||
|  |      */ | ||||||
|  |     private Long id; | ||||||
|  |     /** | ||||||
|  |      * 订单号,根据规则生成 | ||||||
|  |      * | ||||||
|  |      * 例如说,P202110132239124200055 | ||||||
|  |      */ | ||||||
|  |     private String no; | ||||||
|  |     /** | ||||||
|  |      * 商户编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayMerchantDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long merchantId; | ||||||
|  |     /** | ||||||
|  |      * 应用编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayAppDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long appId; | ||||||
|  |     /** | ||||||
|  |      * 渠道编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayChannelDO#getMerchantId()} | ||||||
|  |      */ | ||||||
|  |     private Long channelId; | ||||||
|  |     /** | ||||||
|  |      * 商户编码 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link PayChannelCodeEnum} | ||||||
|  |      */ | ||||||
|  |     private String channelCode; | ||||||
|  |  | ||||||
|  |     // ========== 商户相关字段 ========== | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 商户订单号 | ||||||
|  |      * 例如说,内部系统 A 的订单号。需要保证每个 PayMerchantDO 唯一 TODO 芋艿:需要在测试下 | ||||||
|  |      */ | ||||||
|  |     private String merchantOrderNo; | ||||||
|  |     /** | ||||||
|  |      * 商品标题 | ||||||
|  |      */ | ||||||
|  |     private String subject; | ||||||
|  |     /** | ||||||
|  |      * 商品描述信息 | ||||||
|  |      */ | ||||||
|  |     private String body; | ||||||
|  |     /** | ||||||
|  |      * 商户拓展参数 | ||||||
|  |      */ | ||||||
|  |     private String merchantExtra; | ||||||
|  |     /** | ||||||
|  |      * 通知商户支付结果的回调状态 | ||||||
|  |      * TODO 芋艿:0 未发送 1 已发送 | ||||||
|  |      */ | ||||||
|  |     private Integer notifyStatus; | ||||||
|  |  | ||||||
|  |     // ========== 订单相关字段 ========== | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 支付金额,单位:分 | ||||||
|  |      */ | ||||||
|  |     private Long amount; | ||||||
|  |     /** | ||||||
|  |      * 渠道手续费 | ||||||
|  |      * | ||||||
|  |      * 冗余 {@link PayChannelDO#getFeeRate()} | ||||||
|  |      */ | ||||||
|  |     private Double channelFeeRate; | ||||||
|  |     /** | ||||||
|  |      * 渠道手续金额 | ||||||
|  |      */ | ||||||
|  |     private Long channelFeeAmount; | ||||||
|  |     /** | ||||||
|  |      * 支付状态 | ||||||
|  |      * | ||||||
|  |      * TODO 芋艿:状态枚举 | ||||||
|  |      */ | ||||||
|  |     private Integer status; | ||||||
|  |     /** | ||||||
|  |      * 客户端 IP | ||||||
|  |      */ | ||||||
|  |     private String clientIp; | ||||||
|  |     /** | ||||||
|  |      * 订单支付成功时间 | ||||||
|  |      */ | ||||||
|  |     private Date successTime; | ||||||
|  |     /** | ||||||
|  |      * 订单失效时间 | ||||||
|  |      */ | ||||||
|  |     private Date expiredTime; | ||||||
|  |     /** | ||||||
|  |      * 支付渠道的额外参数 | ||||||
|  |      * | ||||||
|  |      * 参见 https://www.pingxx.com/api/支付渠道%20extra%20参数说明.html | ||||||
|  |      */ | ||||||
|  |     private String channelExtra; | ||||||
|  |     /** | ||||||
|  |      * 异步通知地址 | ||||||
|  |      */ | ||||||
|  |     private String notifyUrl; | ||||||
|  |     /** | ||||||
|  |      * 页面跳转地址 | ||||||
|  |      */ | ||||||
|  |     private String returnUrl; | ||||||
|  |  | ||||||
|  |     // TODO 芋艿:可能要优化 | ||||||
|  |     /** | ||||||
|  |      * 渠道支付错误码 | ||||||
|  |      */ | ||||||
|  |     private String errorCode; | ||||||
|  |     /** | ||||||
|  |      * 渠道支付错误消息 | ||||||
|  |      */ | ||||||
|  |     private String errorMessage; | ||||||
|  |  | ||||||
|  |     // ========== 退款相关字段 ========== | ||||||
|  |     /** | ||||||
|  |      * 退款状态 | ||||||
|  |      * | ||||||
|  |      * TODO 芋艿:0 - 未退款;1 - 部分退款; 2 - 全额退款 | ||||||
|  |      */ | ||||||
|  |     private Integer refundStatus; | ||||||
|  |     /** | ||||||
|  |      * 退款次数 | ||||||
|  |      */ | ||||||
|  |     private Integer refundTimes; | ||||||
|  |     /** | ||||||
|  |      * 退款总金额,单位:分 | ||||||
|  |      */ | ||||||
|  |     private Long refundAmount; | ||||||
|  |  | ||||||
|  |     // ========== 渠道相关字段 ========== | ||||||
|  |     /** | ||||||
|  |      * 渠道用户编号 | ||||||
|  |      * | ||||||
|  |      * 例如说,微信 openid、支付宝账号 | ||||||
|  |      */ | ||||||
|  |     private String channelUserId; | ||||||
|  |     /** | ||||||
|  |      * 渠道订单号 | ||||||
|  |      */ | ||||||
|  |     private String channelOrderNo; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,133 @@ | |||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.order; | ||||||
|  |  | ||||||
|  | import cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.merchant.PayAppDO; | ||||||
|  | import cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.merchant.PayChannelDO; | ||||||
|  | import cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject.merchant.PayMerchantDO; | ||||||
|  | import cn.iocoder.yudao.adminserver.modules.pay.enums.PayChannelCodeEnum; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 支付退款单 DO | ||||||
|  |  * 一个支付订单,可以拥有多个支付退款单 | ||||||
|  |  * | ||||||
|  |  * 即 PayOrderDO : PayRefundDO = 1 : n | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | public class PayRefundDO extends BaseDO { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 退款单编号,数据库自增 | ||||||
|  |      */ | ||||||
|  |     private Long id; | ||||||
|  |     /** | ||||||
|  |      * 退款单号,根据规则生成 | ||||||
|  |      * | ||||||
|  |      * 例如说,R202109181134287570000 | ||||||
|  |      */ | ||||||
|  |     private String no; | ||||||
|  |     /** | ||||||
|  |      * 商户编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayMerchantDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long merchantId; | ||||||
|  |     /** | ||||||
|  |      * 应用编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayAppDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long appId; | ||||||
|  |     /** | ||||||
|  |      * 渠道编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayChannelDO#getMerchantId()} | ||||||
|  |      */ | ||||||
|  |     private Long channelId; | ||||||
|  |     /** | ||||||
|  |      * 商户编码 | ||||||
|  |      * | ||||||
|  |      * 枚举 {@link PayChannelCodeEnum} | ||||||
|  |      */ | ||||||
|  |     private String channelCode; | ||||||
|  |     /** | ||||||
|  |      * 订单编号 | ||||||
|  |      * | ||||||
|  |      * 关联 {@link PayOrderDO#getId()} | ||||||
|  |      */ | ||||||
|  |     private Long orderId; | ||||||
|  |  | ||||||
|  |     // ========== 商户相关字段 ========== | ||||||
|  |     /** | ||||||
|  |      * 商户退款订单号 | ||||||
|  |      * 例如说,内部系统 A 的退款订单号。需要保证每个 PayMerchantDO 唯一 TODO 芋艿:需要在测试下 | ||||||
|  |      */ | ||||||
|  |     private String merchantRefundNo; | ||||||
|  |     /** | ||||||
|  |      * 商户拓展参数 | ||||||
|  |      */ | ||||||
|  |     private String merchantExtra; | ||||||
|  |  | ||||||
|  |     // ========== 退款相关字段 ========== | ||||||
|  |     /** | ||||||
|  |      * 退款状态 | ||||||
|  |      * | ||||||
|  |      * TODO 芋艿:状态枚举 | ||||||
|  |      */ | ||||||
|  |     private Integer status; | ||||||
|  |     /** | ||||||
|  |      * 客户端 IP | ||||||
|  |      */ | ||||||
|  |     private String clientIp; | ||||||
|  |     /** | ||||||
|  |      * 退款金额,单位:分 | ||||||
|  |      */ | ||||||
|  |     private Long amount; | ||||||
|  |     /** | ||||||
|  |      * 退款原因 | ||||||
|  |      */ | ||||||
|  |     private String reason; | ||||||
|  |     /** | ||||||
|  |      * 订单退款成功时间 | ||||||
|  |      */ | ||||||
|  |     private Date successTime; | ||||||
|  |     /** | ||||||
|  |      * 退款失效时间 | ||||||
|  |      */ | ||||||
|  |     private Date expiredTime; | ||||||
|  |     /** | ||||||
|  |      * 支付渠道的额外参数 | ||||||
|  |      * | ||||||
|  |      * 参见 https://www.pingxx.com/api/Refunds%20退款概述.html | ||||||
|  |      */ | ||||||
|  |     private String channelExtra; | ||||||
|  |     /** | ||||||
|  |      * 异步通知地址 | ||||||
|  |      */ | ||||||
|  |     private String notifyUrl; | ||||||
|  |  | ||||||
|  |     // TODO 芋艿:可能要优化 | ||||||
|  |     /** | ||||||
|  |      * 渠道支付错误码 | ||||||
|  |      */ | ||||||
|  |     private String errorCode; | ||||||
|  |     /** | ||||||
|  |      * 渠道支付错误消息 | ||||||
|  |      */ | ||||||
|  |     private String errorMessage; | ||||||
|  |  | ||||||
|  |     // ========== 渠道相关字段 ========== | ||||||
|  |     /** | ||||||
|  |      * 渠道订单号 | ||||||
|  |      */ | ||||||
|  |     private String channelOrderNo; | ||||||
|  |     /** | ||||||
|  |      * 渠道退款号 | ||||||
|  |      */ | ||||||
|  |     private String channelRefundNo; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1 @@ | |||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay.dal.dataobject; | ||||||
| @ -0,0 +1,28 @@ | |||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay.enums; | ||||||
|  |  | ||||||
|  | import lombok.AllArgsConstructor; | ||||||
|  | import lombok.Getter; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 支付渠道的编码的枚举 | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | @Getter | ||||||
|  | @AllArgsConstructor | ||||||
|  | public enum PayChannelCodeEnum { | ||||||
|  |  | ||||||
|  |     wx_pub("wx_pub", "微信 JSAPI 支付"); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 编码 | ||||||
|  |      * | ||||||
|  |      * 参考 https://www.pingxx.com/api/支付渠道属性值.html | ||||||
|  |      */ | ||||||
|  |     private String code; | ||||||
|  |     /** | ||||||
|  |      * 名字 | ||||||
|  |      */ | ||||||
|  |     private String name; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,7 @@ | |||||||
|  | /** | ||||||
|  |  * pay 包下,我们放支付业务,提供业务的支付能力。 | ||||||
|  |  * 例如说:商户、应用、支付、退款等等 | ||||||
|  |  * | ||||||
|  |  * 缩写:pay | ||||||
|  |  */ | ||||||
|  | package cn.iocoder.yudao.adminserver.modules.pay; | ||||||
| @ -3,6 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger; | |||||||
| import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||||
| import cn.iocoder.yudao.coreservice.modules.infra.enums.logger.InfApiErrorLogProcessStatusEnum; | import cn.iocoder.yudao.coreservice.modules.infra.enums.logger.InfApiErrorLogProcessStatusEnum; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
| import com.baomidou.mybatisplus.annotation.TableName; | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
| import lombok.*; | import lombok.*; | ||||||
|  |  | ||||||
| @ -25,6 +26,7 @@ public class InfApiErrorLogDO extends BaseDO { | |||||||
|     /** |     /** | ||||||
|      * 编号 |      * 编号 | ||||||
|      */ |      */ | ||||||
|  |     @TableId | ||||||
|     private Long id; |     private Long id; | ||||||
|     /** |     /** | ||||||
|      * 用户编号 |      * 用户编号 | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV