In [ ]:
In [217]:
import re
text = '''
//
//
'''
print(re.sub(r'\n\s*\n\s*\n', '\n', text))
// //
In [301]:
import json
import re
import sys
s_name_space = "com.eastmoney.em.wallet.model"
t_name_space = "EmWallet.Model"
annotation_param_regex = r'\s*\((.*?)\)'
def sub_name_space(s: str) -> str:
return s.replace(f"namespace {s_name_space}", f"namespace {t_name_space}")
def rm_warnings_and_Serializable(s: str) -> str:
s = re.sub("// JAVA TO C# CONVERTER.*?\n", "", s)
# s = re.sub("(@JsonProperty)", r"\n\1", s)
# 保留未识别的注解
s = re.sub(r"(@[A-Z]\w+(?>\s*\(.*?\))?)", r"\n\1", s)
res = []
skip = []
for line in s.splitlines():
# 去除部分注解开始的行
should_skip = False
for kw in [
"@Data",
"@Accessors",
"@ApiModel",
"@Accessors",
]:
if line.startswith(kw):
skip.append(line)
should_skip = True
break
if not should_skip:
res.append(line)
s = "\n".join(res)
print(f"\nskip={json.dumps(skip, ensure_ascii=False, indent=2)}\n", file=sys.stderr)
s = re.sub("// ORIGINAL LINE.*?\n", "", s)
# s = s.replace("using Data = lombok.Data;\n", "")
# s = re.sub("using AllArgsConstructor.*?\n", "", s)
# s = re.sub("using NoArgsConstructor.*?\n", "", s)
s = re.sub("using .*?=.*?\n", "", s)
s = re.sub("private System.Nullable.*?\n", "", s)
s = re.sub(r'(///\s*<summary>\s*///.*?\s*///\s*</summary>)'
r'(?>\s*///\s*<summary>\s*///.*?\s*///\s*</summary>)?', r"\n\1", s, re.DOTALL)
s = s.replace("[Serializable]", "")
return s
def add_get_set(s: str) -> str:
def rpl(match: re.Match):
g2 = match.group(2)
g2 = g2.lower() if "DateTime" not in g2 else g2
return "\npublic"+ g2 + match.group(3) + " { get; set; }\n"
# s = re.sub(r"(private(\s+[\w?]+)(\s+\w+);)[\s\n]*\1?", r"\npublic\2 { get; set; }", s, flags=re.RegexFlag.IGNORECASE)
s = re.sub(r"(private(\s+[\w?]+)(\s+\w+);)[\s\n]*\1?", rpl, s, flags=re.RegexFlag.IGNORECASE)
return s
def rm_extra_blank_lines(text):
# 使用正则表达式替换多行空白为单行空白
text = re.sub(r'({ get; set; })', r'\1\n', text)
text = re.sub(r'(?<!{ get; set; })\n\s*\n', r'\n', text)
text = re.sub(r'(///\s*<summary>\s*///.*?\s*///\s*</summary>)', r'\n\1', text)
return text
def sub_ApiModelProperty(s: str) ->str:
# s = """
# @ApiModelProperty(value = "虚拟币名称")
# @NotEmpty(message = "虚拟币名字不能为空")
# private String name;
# @ApiModelProperty(required=true,value ="虚拟币id")
# @NotNull(message = "虚拟币id")
# private Integer currencyId;"""
regex_ApiModelProperty_line = re.compile(r'@ApiModelProperty\s*\((.*?)\)')
for item in regex_ApiModelProperty_line.finditer(s):
if "using System.ComponentModel.DataAnnotations;" not in s:
s = "using System.ComponentModel.DataAnnotations;\n" + s
line = item.group()
params = item.group(1).split(",")
try:
param_dict = dict()
for param in params:
if "=" in param and not param.startswith('"'):
k, v = param.split("=", 1)
k, v = k.strip(), v.strip()
param_dict[k] = v.strip('"')
else:
# 默认是 value
param_dict["value"] = param.strip('"')
#print("param_dict", param_dict)
to_sub = "\n"
if "value" in param_dict:
# to_sub += f"/// <summary>\n/// {param_dict['value']}\n/// require={param_dict.get('required', 'false')}\n/// </summary>\n"
# to_sub += f"/// <summary>\n/// {param_dict['value']}\n/// </summary>\n"
to_sub += f'[Display(Name = "{param_dict["value"]}")]\n'
s = s.replace(line, to_sub)
except Exception as e:
print(line, params)
raise e
# print(line, "->", to_sub)
return s
def sub_notempty(s: str) -> str:
# s = """
# /**
# * 用户ct
# */
# @ApiModelProperty(required=true,value ="用户ct")
# @NotNull(message ="ct不能为空")
# @NotEmpty(message ="ct不能为空")
# @JsonProperty(value = "CToken")
# private String CToken;
# /**
# * 用户ut
# */
# @ApiModelProperty(required=true,value ="用户ut")
# @NotNull(message ="ut不能为空")
# @NotEmpty(message ="ut不能为空")
# @JsonProperty(value = "UToken")
# private String UToken;"""
regex_notempty_line = re.compile(r'(?:'
r'@NotNull\s*\((.*?)\)[\n\s]*'
r'|@NotEmpty\s*\((.*?)\)[\n\s]*'
r'|@NotNull'
r'|@NotEmpty'
r')+')
for item in regex_notempty_line.finditer(s):
if "using System.ComponentModel.DataAnnotations;" not in s:
s = "using System.ComponentModel.DataAnnotations;\n" + s
line = item.group()
params = (item.group(1) or item.group(2) or "").replace(" ", "").split(",")
param_dict = dict()
for param in params:
if "=" in param and not param.startswith('"'):
k, v = param.split("=", 1)
param_dict[k] = v.strip('"')
else:
# 默认是 value
param_dict["value"] = param.strip('"')
# print(line, "param_dict", param_dict)
to_sub = "\n"
if "message" in param_dict:
to_sub += f'[Required(AllowEmptyStrings = {"true" if "NotEmpty" not in line else "false"}, ErrorMessage = "{param_dict["message"]}")]\n'
else:
if "NotEmpty" not in line:
to_sub += f'[Required(AllowEmptyStrings = true)]\n'
else:
to_sub += f'[Required]\n'
s = s.replace(line, to_sub)
return s
def sub_range(s: str) -> str:
# s = """
# @ApiModelProperty(value = "昵称")
# @NotNull(message = "审核状态 2 审核通过 3 审核不通过")
# @Range(min=2,max = 3,message = "审核参数非法")
# private Integer auditStatus;"""
regex = re.compile(rf'@Range{annotation_param_regex}')
for item in regex.finditer(s):
if "using System.ComponentModel.DataAnnotations;" not in s:
s = "using System.ComponentModel.DataAnnotations;\n" + s
line = item.group()
params = item.group(1).replace(" ", "").split(",")
param_dict = dict()
for param in params:
if "=" in param and not param.startswith('"'):
k, v = param.split("=", 1)
if k in param_dict:
param_dict[k + "1"] = v.strip('"')
else:
param_dict[k] = v.strip('"')
else:
# 默认是 value
raise ValueError(params)
_min = param_dict.get("min", 0)
_max = param_dict.get("max", 0x7fffffff)
message = param_dict.get("message", "")
to_sub = f"""
[Range({_min}, {_max}, ErrorMessage = "{message}")]
"""
s = s.replace(line, to_sub)
return s
def sub_min_max(s: str) -> str:
# s = """
# /**
# * 虚拟币的类型 1、财富豆
# */
# @ApiModelProperty(required=true,value ="虚拟币的类型 1、财富豆")
# @Max(value = 3,message = "虚拟币类型非法")
# @Min(value = 1,message = "虚拟币类型非法")
# private int currency;"""
regex_min_max = re.compile(r'(?:'
r'@Min\s*\((.*?)\)[\n\s]*'
r'|@Max\s*\((.*?)\)[\n\s]*'
r')+')
for item in regex_min_max.finditer(s):
if "using System.ComponentModel.DataAnnotations;" not in s:
s = "using System.ComponentModel.DataAnnotations;\n" + s
line = item.group()
if item.group(1) or item.group(2):
g1 = item.group(1) or "value = 0"
g2 = item.group(2) or "value = int.MaxValue"
params = ( g1 + "," + g2).replace(" ", "").split(",")
param_dict = dict()
for param in params:
if "=" in param and not param.startswith('"'):
k, v = param.split("=", 1)
if k in param_dict:
param_dict[k + "1"] = v.strip('"')
else:
param_dict[k] = v.strip('"')
else:
# 默认是 value
raise ValueError(params)
if param_dict.get("message1", "") == param_dict["message"]:
del param_dict["message1"]
# print(line, "param_dict", param_dict)
to_sub = "\n"
to_sub += f'[Range({param_dict["value"]}, {param_dict["value1"]}, ErrorMessage="{param_dict["message"] + " " + param_dict.get("message1", "")}")]\n'
s = s.replace(line, to_sub)
return s
def sub_length(s: str) -> str:
regex = re.compile(rf'@Length{annotation_param_regex}')
for item in regex.finditer(s):
if "using System.ComponentModel.DataAnnotations;" not in s:
s = "using System.ComponentModel.DataAnnotations;\n" + s
line = item.group()
params = item.group(1).replace(" ", "").split(",")
param_dict = dict()
for param in params:
if "=" in param and not param.startswith('"'):
k, v = param.split("=", 1)
if k in param_dict:
param_dict[k + "1"] = v.strip('"')
else:
param_dict[k] = v.strip('"')
else:
# 默认是 value
raise ValueError(params)
# print(param_dict)
_min = param_dict.get("min", 0)
_max = param_dict.get("max", 0x7fffffff)
message = param_dict.get("message", "")
to_sub = f"""
[MinLength({_min}, ErrorMessage = "{message}")]
[MaxLength({_max}, ErrorMessage = "{message}")]
"""
s = s.replace(line, to_sub)
return s
def sub_pattern(s: str) -> str:
regex = re.compile(rf'@Pattern{annotation_param_regex}')
for item in regex.finditer(s):
if "using System.ComponentModel.DataAnnotations;" not in s:
s = "using System.ComponentModel.DataAnnotations;\n" + s
line = item.group()
params = item.group(1).split(",")
param_dict = dict()
for param in params:
if "=" in param and not param.startswith('"'):
k, v = tuple(map(str.strip, param.split("=", 1)))
if k in param_dict:
param_dict[k + "1"] = v.strip('"')
else:
param_dict[k] = v.strip('"')
else:
# 默认是 value
raise ValueError(params)
regexp = param_dict["regexp"]
message = param_dict.get("message", "不符合正则表达式:" + regexp)
to_sub = f"""
[RegularExpression("{regexp}", ErrorMessage = "{message}")]
"""
s = s.replace(line, to_sub)
return s
def sub_DateTimeFormat(s: str) -> str:
regex = re.compile(rf'@DateTimeFormat{annotation_param_regex}')
for item in regex.finditer(s):
if "using System.ComponentModel.DataAnnotations;" not in s:
s = "using System.ComponentModel.DataAnnotations;\n" + s
line = item.group()
params = item.group(1).split(",")
param_dict = dict()
for param in params:
if "=" in param and not param.startswith('"'):
k, v = tuple(map(str.strip, param.split("=", 1)))
if k in param_dict:
param_dict[k + "1"] = v.strip('"')
else:
param_dict[k] = v.strip('"')
else:
# 默认是 value
raise ValueError(params)
regexp = param_dict["pattern"]
message = param_dict.get("message", "不符合格式:" + regexp)
to_sub = f"""
[DisplayFormat(DataFormatString = "{regexp}", ErrorMessage = "{message}")]
"""
s = s.replace(line, to_sub)
return s
def sub_ExcelProperty(s: str) -> str:
regex = re.compile(rf'@ExcelProperty{annotation_param_regex}')
for item in regex.finditer(s):
if "using EmWallet.Model.attribute;" not in s:
s = "using EmWallet.Model.attribute;\n" + s
line = item.group()
params = item.group(1).split(",")
param_dict = dict()
for param in params:
if "=" in param and not param.startswith('"'):
k, v = tuple(map(str.strip, param.split("=", 1)))
param_dict[k] = v.strip('"')
else:
# 默认是 value
raise ValueError(params)
value = f'Value = "{param_dict["value"]}"'
_param_ls = [value]
if index := param_dict.get("index"):
_param_ls.append(f'Index = {index}')
to_sub = f"""
[ExcelProperty({",".join(_param_ls)})]
"""
s = s.replace(line, to_sub)
return s
def sub_json_ans(s: str) -> str:
if "@JsonIgnore" in s or "@JsonProperty" in s and "using System.Text.Json.Serialization;" not in s:
s = "using System.Text.Json.Serialization;\n" + s
s = s.replace("@JsonIgnore", "\n[JsonIgnore]\n")
regex = re.compile(rf'@JsonProperty{annotation_param_regex}')
for item in regex.finditer(s):
if "using EmWallet.Model.attribute;" not in s:
s = "using EmWallet.Model.attribute;\n" + s
line = item.group()
params = item.group(1).split(",")
param_dict = dict()
for param in params:
if "=" in param and not param.startswith('"'):
k, v = tuple(map(str.strip, param.split("=", 1)))
param_dict[k] = v.strip('"')
else:
# 默认是 value
param_dict["value"] = v.strip('"')
value = param_dict["value"]
to_sub = f"""
[JsonPropertyName("{value}")]
"""
s = s.replace(line, to_sub)
return s
converters = [
sub_name_space,
sub_ApiModelProperty,
sub_notempty,
sub_min_max,
sub_length,
sub_range,
sub_pattern,
sub_DateTimeFormat,
sub_ExcelProperty,
sub_json_ans,
rm_warnings_and_Serializable,
add_get_set,
rm_extra_blank_lines
]
src = """
using System;
namespace com.eastmoney.em.wallet.model.vo.request
{
using JsonProperty = com.fasterxml.jackson.annotation.JsonProperty;
using ApiModel = io.swagger.annotations.ApiModel;
using ApiModelProperty = io.swagger.annotations.ApiModelProperty;
using Data = lombok.Data;
/// <summary>
/// @author daijian 180330
/// @date 2021年10月28日 19点18分
/// @description 老钱包基础请求参数
/// </summary>
// JAVA TO C# CONVERTER TASK: Most Java annotations will not have direct .NET equivalent attributes:
// ORIGINAL LINE: @ApiModel(value = "BaseOldWalletRequest",description = "老钱包基础请求参数") @Data public class BaseOldWalletRequest implements java.io.Serializable
[Serializable]
public class BaseOldWalletRequest
{
// JAVA TO C# CONVERTER TASK: Most Java annotations will not have direct .NET equivalent attributes:
// ORIGINAL LINE: @ApiModelProperty(required=true,value ="用户ct") @NotNull(message ="ct不能为空") @NotEmpty(message ="ct不能为空") @JsonProperty(value = "CToken") private String CToken;
private string CToken;
/// <summary>
/// 用户ut
/// </summary>
// JAVA TO C# CONVERTER TASK: Most Java annotations will not have direct .NET equivalent attributes:
// ORIGINAL LINE: @ApiModelProperty(required=true,value ="用户ut") @NotNull(message ="ut不能为空") @NotEmpty(message ="ut不能为空") @JsonProperty(value = "UToken") private String UToken;
private string UToken;
}
}
"""
def conert(src: str) -> str:
# 移除 BOM
target = src.strip("\ufeff")
for converter in converters:
target = converter(target)
return target
print(conert(src))
using EmWallet.Model.attribute; using System.Text.Json.Serialization; using System.ComponentModel.DataAnnotations; using System; namespace EmWallet.Model.vo.request { /// <summary> /// @author daijian 180330 /// @date 2021年10月28日 19点18分 /// @description 老钱包基础请求参数 /// </summary> public class BaseOldWalletRequest { [Display(Name = "用户ct")] [Required(AllowEmptyStrings = false, ErrorMessage = "ct不能为空")] [JsonPropertyName("CToken")] public string CToken { get; set; } /// <summary> /// 用户ut /// </summary> [Display(Name = "用户ut")] [Required(AllowEmptyStrings = false, ErrorMessage = "ut不能为空")] [JsonPropertyName("UToken")] public string UToken { get; set; } } }
skip=[ "@ApiModel(value = \"BaseOldWalletRequest\",description = \"老钱包基础请求参数\") ", "@Data public class BaseOldWalletRequest implements java.io.Serializable" ]
In [302]:
with open(r'd:/Temp/cs/GetUserByAccountResp.cs', 'r', encoding='utf-8') as fpr:
s = fpr.read()
print(conert(s))
using EmWallet.Model.attribute; using System.Text.Json.Serialization; namespace EmWallet.Model.vo.response { /// <summary> /// @author wang.zhiqiang /// @version 1.0 /// @date 2021/11/15 10:44 /// @description /// </summary> [JsonIgnore] Properties(ignoreUnknown = true) public class GetUserByAccountResp public class GetUserByAccountResp { [JsonPropertyName("EncryptedMobile")] public string encryptedMobile { get; set; } [JsonIgnore] public string mobile { get; set; } [JsonIgnore] public string email { get; set; } [JsonPropertyName("EncryptedEmail")] public string encryptedEmail { get; set; } [JsonPropertyName("BindStatus")] public int? bindStatus { get; set; } [JsonPropertyName("BizAvailFlag1")] public int? bizAvailFlag1 { get; set; } [JsonPropertyName("BizAvailFlag2")] public int? bizAvailFlag2 { get; set; } [JsonPropertyName("UId")] public string uId { get; set; } [JsonPropertyName("SId")] public string sId { get; set; } [JsonPropertyName("UName")] public string uName { get; set; } [JsonPropertyName("UAlias")] public string uAlias { get; set; } [JsonPropertyName("UIntroduce")] public string uIntroduce { get; set; } [JsonPropertyName("UGender")] public string uGender { get; set; } [JsonPropertyName("URegisterTime")] public string uRegisterTime { get; set; } [JsonPropertyName("HasMobile")] public bool? hasMobile { get; set; } [JsonPropertyName("HasEmail")] public bool? hasEmail { get; set; } [JsonPropertyName("VType")] public string vType { get; set; } [JsonPropertyName("VTypeStatus")] public string vTypeStatus { get; set; } } }
skip=[ "@Data ", "@Accessors(chain = true) " ]
In [303]:
import os
import glob
from tqdm import tqdm
for file in tqdm(glob.glob(f'd:/Temp/cs/**/*.cs', recursive=True), desc='remove'):
os.remove(file)
remove: 100%|██████████| 66/66 [00:00<00:00, 1499.90it/s]
In [304]:
import glob
from tqdm import tqdm
import os
import time
src_dir = r'd:/Temp/cs'
target_dir = r'D:\WORK\EmWallet\EmWallet.Model\todo'
s_name_space = "com.eastmoney.em.wallet.model"
t_name_space = "EmWallet.Model"
for file in tqdm(glob.glob(f'{src_dir}/**/*.cs', recursive=True), desc='转换进度'):
time.sleep(0.05)
target_file = file.replace(src_dir, target_dir)
target_file_dir = os.path.dirname(target_file)
if os.path.exists(target_file):
print(f"{target_file} 已经存在, 跳过!")
print()
print()
continue
if not os.path.exists(target_file_dir):
os.makedirs(target_file_dir)
with open(file, 'r', encoding='utf-8') as fpr:
with open(target_file, 'w', encoding='utf-8') as fpw:
fpw.write(conert(fpr.read()))
# os.remove(file)
转换进度: 6%|▌ | 4/66 [00:00<00:03, 16.96it/s]
D:\WORK\EmWallet\EmWallet.Model\todo\AuthResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\BalanceQueryResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\BaseAdminResp.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\BaseResponse.cs 已经存在, 跳过!
转换进度: 12%|█▏ | 8/66 [00:00<00:03, 18.50it/s]
D:\WORK\EmWallet\EmWallet.Model\todo\BaseTreeResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\BenefitDataResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\CasResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\CurrencyBalanceResponse.cs 已经存在, 跳过!
转换进度: 18%|█▊ | 12/66 [00:00<00:02, 18.49it/s]
D:\WORK\EmWallet\EmWallet.Model\todo\CurrencyFLowQueryResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\CurrencyGrantResp.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\CurrencyManagerResp.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\CurrencyRateResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\CurrencyTotalResp.cs 已经存在, 跳过!
转换进度: 27%|██▋ | 18/66 [00:00<00:02, 18.96it/s]
D:\WORK\EmWallet\EmWallet.Model\todo\DataGroupResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\DepartResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\EmSmsResp.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\EmWalletSettingResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\GetcointokenResp.cs 已经存在, 跳过!
转换进度: 30%|███ | 20/66 [00:01<00:02, 19.19it/s] skip=[ "@Data ", "@Accessors(chain = true) public class GetUserByTokenResp" ]
D:\WORK\EmWallet\EmWallet.Model\todo\GetPassportUserInfoResponse.cs 已经存在, 跳过! D:\WORK\EmWallet\EmWallet.Model\todo\GetUserByAccountResp.cs 已经存在, 跳过!
skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"GetUserIDCardEncryptInfoResp\", description = \"获取身份证信息接口返回 通行证\") public class GetUserIDCardEncryptInfoResp" ] 转换进度: 33%|███▎ | 22/66 [00:01<00:02, 17.47it/s] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"GetUserWithEncryptedInfoByTokenResp\", description = \" Token获取用户加密信息V2接口的返回\") public class GetUserWithEncryptedInfoByTokenResp" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"GiftConfigResp\", description = \"礼物信息配置查询\") public class GiftConfigResp" ] 转换进度: 36%|███▋ | 24/66 [00:01<00:02, 17.73it/s] skip=[ "@ApiModel(value = \"GiftResponse\",description = \"礼物信息\") ", "@Data ", "@Accessors(chain = true) public class GiftResponse extends BaseResponse" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"GrantResp\", description = \"人工操作明细查询返回\") public class GrantResp" ] 转换进度: 39%|███▉ | 26/66 [00:01<00:02, 17.87it/s] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"ManagerResp\", description = \"提现账户管理返回明细\") public class ManagerResp" ] skip=[ "@ApiModel(value = \"MobileVcodeResponse\",description = \"获取手机验证码返回\") ", "@Data ", "@Accessors(chain = true) public class MobileVcodeResponse extends BaseResponse" ] 转换进度: 42%|████▏ | 28/66 [00:01<00:02, 18.16it/s] skip=[ "@Data " ] skip=[ "@Data ", "@ApiModel(value = \"MyMsgResponse\",description = \"我的消息响应体\") public class MyMsgResponse" ] 转换进度: 45%|████▌ | 30/66 [00:01<00:01, 18.42it/s] skip=[ "@Data ", "@Accessors(chain = true) public class OldWalletBalanceResp" ] skip=[ "@Data ", "@Accessors(chain = true) public class OldWalletUserBalanceResp" ] 转换进度: 48%|████▊ | 32/66 [00:01<00:01, 18.59it/s] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"OptionsResp\", description = \"下拉列表通用\") public class OptionsResp" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"OrderItemResp\", description = \"虚拟币订单明细查询的返回\") public class OrderItemResp" ] 转换进度: 52%|█████▏ | 34/66 [00:01<00:01, 18.65it/s] skip=[ "@Data ", "@Accessors(chain = true) public class PassportBaseResp<T>" ] skip=[ "@Data ", "@ApiModel(value = \"PassportCommonResp\", description = \"通行证接口返回外层\") public class PassportCommonResp<T>" ] 转换进度: 55%|█████▍ | 36/66 [00:01<00:01, 18.84it/s] skip=[ "@ApiModel(value = \"RechargeOrderQueryResponse\",description = \"虚拟币充值订单结果返回\") ", "@Data ", "@Accessors(chain = true) public class RechargeOrderQueryResponse extends BaseResponse" ] skip=[ "@ApiModel(value = \"RechargeQueryResponse\",description = \"虚拟币充值结果查询返回\") ", "@Data ", "@Accessors(chain = true) public class RechargeQueryResponse extends BaseResponse" ] 转换进度: 58%|█████▊ | 38/66 [00:02<00:01, 18.81it/s] skip=[ "@ApiModel(value = \"RechargeResponse\",description = \"虚拟币充值结果返回\") ", "@Data public class RechargeResponse extends BaseResponse" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"RefundResp\", description = \"退款明细表\") public class RefundResp" ] 转换进度: 61%|██████ | 40/66 [00:02<00:01, 18.88it/s] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"RefundWorkFlowResp\", description = \"用户退款审核流程明细\") public class RefundWorkFlowResp" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"RewardedResp\", description = \"打赏分成明细\") public class RewardedResp" ] 转换进度: 64%|██████▎ | 42/66 [00:02<00:01, 18.93it/s] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"RewardGiftFlowResp\", description = \"打赏礼物流水返回\") public class RewardGiftFlowResp" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"RewardItemResp\", description = \"消费对兑换明细查询的返回\") public class RewardItemResp" ] 转换进度: 67%|██████▋ | 44/66 [00:02<00:01, 18.86it/s] skip=[ "@ApiModel(value = \"RewardListResponse\",description = \"打赏结果信息\") ", "@Data ", "@Accessors(chain = true) public class RewardListResponse extends BaseResponse" ] skip=[ "@ApiModel(value = \"RewardUserResponse\",description = \"打赏用户信息\") ", "@Data ", "@Accessors(chain = true) public class RewardUserResponse extends BaseResponse" ] 转换进度: 70%|██████▉ | 46/66 [00:02<00:01, 18.91it/s] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"RiskGroupConfigResp\", description = \"风险组风险配置信息\") public class RiskGroupConfigResp" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"RiskRewardUserResponse\",description = \"钱包风险打赏用户信息\") public class RiskRewardUserResponse" ] 转换进度: 73%|███████▎ | 48/66 [00:02<00:00, 18.92it/s] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"RiskUserResponse\",description = \"钱包风险用户信息\") public class RiskUserResponse" ] skip=[ "@Data ", "@ApiModel(value = \"RoleAuthorityRes\",description = \"角色权限返回类\") public class RoleAuthorityResponse extends BaseAdminResp" ] 转换进度: 76%|███████▌ | 50/66 [00:02<00:00, 18.84it/s] skip=[ "@Data ", "@ApiModel(value = \"RoleRes\",description = \"角色返回类\") public class RoleResponse extends BaseAdminResp" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"SettleConfigResp\", description = \"基础信息配置\") public class SettleConfigResp" ] 转换进度: 79%|███████▉ | 52/66 [00:02<00:00, 18.97it/s] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"TotalResp\", description = \"提现账户管理-统计总计\") public class TotalResp" ] skip=[ "@Data public class User2Response extends BaseAdminResp" ] 转换进度: 82%|████████▏ | 54/66 [00:02<00:00, 18.96it/s] skip=[ "@Data ", "@Accessors(chain = true) " ] skip=[ "@ApiModel(value = \"UserResponse\",description = \"用户信息\") ", "@Data public class UserResponse extends BaseResponse" ] 转换进度: 85%|████████▍ | 56/66 [00:03<00:00, 18.84it/s] skip=[ "@ApiModel(value = \"VcodeResponse\",description = \"图片验证码返回\") ", "@Data ", "@Accessors(chain = true) public class VcodeResponse extends BaseResponse" ] skip=[ "@Data ", "@ApiModel(value = \"VerifyRealCommonResp\", description = \"实名认证接口返回外层\") public class VerifyRealCommonResp<T>" ] 转换进度: 88%|████████▊ | 58/66 [00:03<00:00, 18.93it/s] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"VerifyRealResp\", description = \"实名认证接口返回具体\") public class VerifyRealResp" ] skip=[ "@ApiModel(value = \"WalletFLowQueryResponse\",description = \"钱包明细查询\") ", "@Data ", "@Accessors(chain = true) public class WalletFLowQueryResponse extends BaseResponse" ] 转换进度: 91%|█████████ | 60/66 [00:03<00:00, 18.89it/s] skip=[ "@Data ", "@Accessors(chain = true) public class WalletResp" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"WalletSettingResp\",description = \"虚拟币钱包配置\") public class WalletSettingResp" ] 转换进度: 94%|█████████▍| 62/66 [00:03<00:00, 18.88it/s] skip=[ "@Data ", "@ApiModel(value = \"WithdrawalExportResponse\",description = \"提现报表导出\") public class WithdrawalExportResponse" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"WithdrawalResp\", description = \"用户体现明细的返回\") public class WithdrawalResp" ] 转换进度: 97%|█████████▋| 64/66 [00:03<00:00, 18.87it/s] skip=[ "@Data ", "@ApiModel(value = \"WithdrawalTaxResponse\",description = \"提现报税信息\") public class WithdrawalTaxResponse" ] skip=[ "@Data ", "@Accessors(chain = true) ", "@ApiModel(value = \"WithdrawTokenResp\", description = \"实名校验的token实体\") public class WithdrawTokenResp" ] 转换进度: 100%|██████████| 66/66 [00:03<00:00, 18.46it/s]