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]