add:初始化工程

This commit is contained in:
drygrass
2025-10-18 21:32:31 +08:00
parent f55b636faa
commit e1b57847f9
48 changed files with 67186 additions and 0 deletions

35048
UF20函数关系图.txt Normal file

File diff suppressed because one or more lines are too long

1651
UF20函数调用图.txt Normal file

File diff suppressed because it is too large Load Diff

15621
UF20账户函数关系图.txt Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,89 @@
228309:AS_交易账户同步平台调用_证券账户信息同步
1228309:LF_交易账户同步平台调用_证券账户信息同步
2101038:AS_用户公用_系统节点部署信息获取
3100090:AF_系统公用_系统节点部署表信息获取
3100000:AF_系统公用_内存表获取
3100064:AF_系统公用_节点系统信息获取
3100000:AF_系统公用_内存表获取
2103207:AS_证券公用_证券账户控制表更新
3100006:AF_系统公用_系统配置信息获取
3100002:AF_系统公用_系统参数信息获取
3100000:AF_系统公用_内存表获取
2228207:AS_交易账户平台调用公用(新)_资产账户节点信息获取
3100024:AF_系统公用_账户节点信息获取
3100000:AF_系统公用_内存表获取
3100064:AF_系统公用_节点系统信息获取
3100000:AF_系统公用_内存表获取
3100007:AF_系统公用_数据字典名称获取
3100000:AF_系统公用_内存表获取
2228200:AS_交易账户平台调用公用(新)_账户基本参数信息获取
3228202:AF_交易账户平台调用(公用)_账户基本参数信息获取
3100000:AF_系统公用_内存表获取
3228203:AF_交易账户平台调用(公用)_系统当前日期时间获取
1228208:LF_交易账户平台调用(公用)_异步推送
2228240:AS_交易账户平台调用公用(新)_分支机构信息获取
3100080:AF_系统公用_分支机构信息获取
3100000:AF_系统公用_内存表获取
2228207:AS_交易账户平台调用公用(新)_资产账户节点信息获取
3100024:AF_系统公用_账户节点信息获取
3100000:AF_系统公用_内存表获取
3100064:AF_系统公用_节点系统信息获取
3100000:AF_系统公用_内存表获取
3100007:AF_系统公用_数据字典名称获取
3100000:AF_系统公用_内存表获取
2229902:AS_机构柜台平台调用_异步请求数据插入
3100002:AF_系统公用_系统参数信息获取
3100000:AF_系统公用_内存表获取
4102000:AP_账户公用_子系统流水号获取
1228216:LF_交易账户平台调用(公用)_机构同步未处理记录查询
2229904:AS_机构柜台平台调用_账户信息同步记录查询
2228221:AS_交易账户平台调用公用(新)_证券账户信息查询
2226233:AS_存管平台调用_持仓席位更新
2228222:AS_交易账户平台调用公用(新)_证券账户信息设置
3100006:AF_系统公用_系统配置信息获取
3100002:AF_系统公用_系统参数信息获取
3100000:AF_系统公用_内存表获取
4102000:AP_账户公用_子系统流水号获取
2156434:AS_转融通账户_证券账户席位转移统一处理
3100006:AF_系统公用_系统配置信息获取
3100002:AF_系统公用_系统参数信息获取
3100000:AF_系统公用_内存表获取
2101001:AS_用户公用_系统参数信息获取
3100002:AF_系统公用_系统参数信息获取
3100000:AF_系统公用_内存表获取
3100007:AF_系统公用_数据字典名称获取
3100000:AF_系统公用_内存表获取
1228362:LF_交易账户同步平台调用_主系统UFT证券账户信息同步
1228361:LF_交易账户同步平台调用_主系统UFT同步业务数据打包
2101061:AS_用户公用_UFT资产账户部署信息获取
3100121:AF_系统公用_UFT配置表信息获取
3100000:AF_系统公用_内存表获取
850410:AS_证券平台接口公用_通用数据同步
2228207:AS_交易账户平台调用公用(新)_资产账户节点信息获取
3100024:AF_系统公用_账户节点信息获取
3100000:AF_系统公用_内存表获取
3100064:AF_系统公用_节点系统信息获取
3100000:AF_系统公用_内存表获取
3100007:AF_系统公用_数据字典名称获取
3100000:AF_系统公用_内存表获取
2103226:AS_证券公用_ETF申赎权限开通股份处理
1228369:LF_交易账户同步平台调用_证券账户信息UFT同步
850410:AS_证券平台接口公用_通用数据同步
853852:AS_账户UFT同步_UF20证券账户信息修改同步
1228361:LF_交易账户同步平台调用_主系统UFT同步业务数据打包
2101061:AS_用户公用_UFT资产账户部署信息获取
3100121:AF_系统公用_UFT配置表信息获取
3100000:AF_系统公用_内存表获取
853807:AS_账户UFT同步_证券账号限制同步证券UFT
2160662:AS_对接UF30_转融通客户一站式迁移
2101014:AS_用户公用_系统配置信息获取
3100006:AF_系统公用_系统配置信息获取
3100002:AF_系统公用_系统参数信息获取
3100000:AF_系统公用_内存表获取
2106104:AS_综业公用_证券账户控制表更新
3100121:AF_系统公用_UFT配置表信息获取
3100000:AF_系统公用_内存表获取
3100006:AF_系统公用_系统配置信息获取
3100002:AF_系统公用_系统参数信息获取
3100000:AF_系统公用_内存表获取
2228210:AS_交易账户平台调用公用(新)_客户基本信息获取

7910
UF30函数关系图.txt Normal file

File diff suppressed because one or more lines are too long

2
UF30函数调用图.txt Normal file
View File

@@ -0,0 +1,2 @@
332647:LS_综合业务周边_债券现券交易协商委托
332648:LS_综合业务周边_债券现券交易协商确认委托

696
app.py Normal file
View File

@@ -0,0 +1,696 @@
from flask import Flask, request, jsonify
import sqlite3
import time
import json
import uf30_buildMap_class
import uf20_buildMap_class
import uf20_asset_buildMap_class
import re
from flask_cors import CORS
import importResources
import public
from t2sdk.t2sdk_demo_syn import execMdbSql
import t2sdk.t2sdk_demo_syn as t2Syn
from importlib import reload # Python 3 推荐方式
import sys
reload(sys)
# 添加.pyd文件所在的目录路径可以是绝对路径或相对路径
sys.path.append(r"F:\sescode_review\toolset\hstools\py-hstools\t2sdk")
# 20250827 add 配置文件获取
config_file = "config.json" # JSON文件路径
# 读取配置
config = public.load_config(config_file)
if config == None:
print("config.json配置文件读取失败")
app = Flask(__name__)
# 1. 提前初始化 CORS 扩展,放在其他模块导入之前
cors = CORS(app, resources={
r"/*": {
"origins": "*", # 允许所有域名
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"], # 明确的 HTTP 方法
"allow_headers": ["Content-Type", "Authorization"] # 允许的请求头
}
})
# 2. 添加自动的 OPTIONS 请求处理
@app.after_request
def after_request(response):
response.headers.add('Access-Control-Allow-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
response.headers.add('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS')
return response
# 3. 解决跨域问题的 OPTIONS 路由
@app.route('/', defaults={'path': ''}, methods=['OPTIONS'])
@app.route('/<path:path>', methods=['OPTIONS'])
def options_handler(path):
response = jsonify()
response.headers.add('Access-Control-Allow-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
response.headers.add('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS')
return response
# @todo:后续支持从配置文件中设置工程目录等
uft30build = uf30_buildMap_class.BuildMap(projectPath=config['uft30_path'])
uft30build.init_func_call_map()
uf20Build = uf20_buildMap_class.UF20BuildMap(projectPath=config['uf20_path'])
uf20Build.init_func_call_map()
uf20AssetBuild = uf20_asset_buildMap_class.UF20AssetBuildMap(projectPath=config['uf20_asset_path'])
uf20AssetBuild.init_func_call_map()
importresource = importResources.ImportSources()
# app = Flask(__name__)
# CORS(app) # 默认允许所有域名跨域访问
app.config['JSON_AS_ASCII'] = False # 禁用ASCII编码确保中文正常显示
DATABASE = 'hstool.db'
print('初始化完成')
def get_db_connection():
conn = sqlite3.connect(DATABASE)
conn.row_factory = sqlite3.Row
conn.text_factory = str # 确保文本数据以字符串形式返回
return conn
# 检查SQL语句是否合法只允许特定的更新操作
def is_valid_update_sql(sql):
# 去除注释和多余空格
clean_sql = re.sub(r'--.*?\n', '', sql) # 移除单行注释
clean_sql = re.sub(r'/\*.*?\*/', '', clean_sql, flags=re.DOTALL) # 移除多行注释
clean_sql = ' '.join(clean_sql.split()).lower() # 标准化空格
# 检查是否是允许的更新操作
# if not re.match(r'^\s*(insert\s+into|update\s+\w+\s+set|delete\s+from)\s', clean_sql):
# return False
# # 禁止危险操作
# if any(keyword in clean_sql for keyword in ['drop', 'truncate', 'create', 'replace']):
# return False
return True
@app.route('/query', methods=['POST'])
def query_database():
try:
# 获取请求数据
request_data = request.get_json()
if not request_data or 'sql' not in request_data:
return jsonify({
"code": "400",
"message": "请求参数错误",
"data": None
}), 400
sql = request_data['sql']
# 简单的SQL注入检查
if any(keyword in sql.lower() for keyword in ['insert', 'update', 'delete', 'drop', 'alter']):
return jsonify({
"code": "403",
"message": "禁止的操作类型",
"data": None
}), 403
start_time = time.time()
conn = get_db_connection()
cursor = conn.cursor()
# 执行查询
cursor.execute(sql)
results = cursor.fetchall()
# 格式化结果
table_records = [dict(row) for row in results]
elapsed_time = int((time.time() - start_time) * 1000) # 毫秒
# 使用json.dumps确保中文正常序列化
response_data = {
"code": "200",
"message": "成功",
"data": {
"tableRecords": table_records,
"time": elapsed_time,
"totalCount": len(table_records)
}
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
except sqlite3.Error as e:
return jsonify({
"code": "500",
"message": f"数据库错误: {str(e)}",
"data": None
}), 500
except Exception as e:
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
if 'conn' in locals():
conn.close()
@app.route('/update', methods=['POST'])
def update_database():
try:
# 获取请求数据
request_data = request.get_json()
if not request_data or 'sql' not in request_data:
return jsonify({
"code": "400",
"message": "请求参数错误",
"data": None
}), 400
sql = request_data['sql']
# 验证SQL语句是否合法
if not is_valid_update_sql(sql):
return jsonify({
"code": "403",
"message": "非法的更新操作",
"data": None
}), 403
start_time = time.time()
conn = get_db_connection()
cursor = conn.cursor()
# 执行更新操作
cursor.execute(sql)
affected_rows = cursor.rowcount
results = cursor.fetchall()
# 格式化结果
table_records = [dict(row) for row in results]
conn.commit() # 提交事务
elapsed_time = int((time.time() - start_time) * 1000) # 毫秒
response_data = {
"code": "200",
"message": "更新成功",
"data": {
"affectedRows": affected_rows,
"time": elapsed_time,
"tableRecords": table_records,
"totalCount": len(table_records)
}
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
except sqlite3.Error as e:
# 回滚事务
if 'conn' in locals():
conn.rollback()
return jsonify({
"code": "500",
"message": f"数据库错误: {str(e)}",
"data": None
}), 500
except Exception as e:
# 回滚事务
if 'conn' in locals():
conn.rollback()
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
if 'conn' in locals():
conn.close()
@app.route('/uft30mapclass', methods=['POST'])
def uft30MapClass():
try:
# 获取请求数据
request_data = request.get_json()
if not request_data or 'func_list' not in request_data:
return jsonify({
"code": "400",
"message": "func_list notfund",
"data": None
}), 400
print('data:')
print(request_data)
func_list = request_data['func_list']
dir_path = request_data['dir_path']
search = request_data['search']
search_direction = request_data['search_direction']
search_dir = 0
if search_direction == 'pre':
search_dir = 1
print('type search_dir:', type(search_dir))
# func_lists = []
# func_lists.append(str(func_list).strip())
func_lists = public.safe_comma_string_to_list(func_list)
print(f'func_lists = {func_lists}')
dir_path = 'F:\\sesCode'
# buildMap.traverse_all(dir_path+'\\', buildMap.subProject, func_lists, search, "函数调用图.txt",
# model_flag=0, project="ucbp", search_direction=search_dir)
uft30build.gene_func_call_map(func_lists, search, search_direction=search_dir, project='ucbp', gene_file='')
with open("UF30函数调用图.txt", 'r', encoding='utf-8') as file:
content = file.read()
# print(content)
response_data = {
"code": "200",
"message": "成功",
"result": content
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
pass
except Exception as e:
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
print('end')
@app.route('/uft20mapclass', methods=['POST'])
def uf20MapClass():
try:
# 获取请求数据
request_data = request.get_json()
if not request_data or 'func_list' not in request_data:
return jsonify({
"code": "400",
"message": "func_list notfund",
"data": None
}), 400
print('data:')
print(request_data)
func_list = request_data['func_list']
dir_path = request_data['dir_path']
search = request_data['search']
search_direction = request_data['search_direction']
search_dir = 0
if search_direction == 'pre':
search_dir = 1
print('type search_dir:', type(search_dir))
# func_lists = []
# func_lists.append(str(func_list).strip())
func_lists = public.safe_comma_string_to_list(func_list)
print(f'func_lists = {func_lists}')
print(func_lists)
dir_path = 'F:\\sesCode'
# buildMap.traverse_all(dir_path+'\\', buildMap.subProject, func_lists, search, "函数调用图.txt",
# model_flag=0, project="ucbp", search_direction=search_dir)
uf20Build.gene_func_call_map(func_lists, search, search_direction=search_dir)
with open("UF20函数调用图.txt", 'r', encoding='utf-8') as file:
content = file.read()
# print(content)
response_data = {
"code": "200",
"message": "成功",
"result": content
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
pass
except Exception as e:
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
print('end')
@app.route('/uft20assetmapclass', methods=['POST'])
def uf20assetMapClass():
try:
# 获取请求数据
request_data = request.get_json()
if not request_data or 'func_list' not in request_data:
return jsonify({
"code": "400",
"message": "func_list notfund",
"data": None
}), 400
print('data:')
print(request_data)
func_list = request_data['func_list']
dir_path = request_data['dir_path']
search = request_data['search']
search_direction = request_data['search_direction']
search_dir = 0
if search_direction == 'pre':
search_dir = 1
print('type search_dir:', type(search_dir))
# func_lists = []
# func_lists.append(str(func_list).strip())
func_lists = public.safe_comma_string_to_list(func_list)
print(f'func_lists = {func_lists}')
print(func_lists)
dir_path = 'F:\\sesCode'
# buildMap.traverse_all(dir_path+'\\', buildMap.subProject, func_lists, search, "函数调用图.txt",
# model_flag=0, project="ucbp", search_direction=search_dir)
uf20AssetBuild.gene_func_call_map(func_lists, search, search_direction=search_dir)
with open("UF20账户函数调用图.txt", 'r', encoding='utf-8') as file:
content = file.read()
# print(content)
response_data = {
"code": "200",
"message": "成功",
"result": content
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
pass
except Exception as e:
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
print('end')
@app.route('/importResources', methods=['POST'])
def importResources():
try:
# 获取请求数据
request_data = request.get_json()
if not request_data:
return jsonify({
"code": "400",
"message": "func_list notfund",
"data": None
}), 400
# 获取 import_tasks 列表
import_tasks = request_data.get("import_tasks", [])
if not import_tasks:
return jsonify({"error": "import_tasks 不存在或为空"}), 400
print('data:')
print(request_data)
importresource.reset_inof()
for import_task in import_tasks:
if import_task == 'uf20search':
uf20Build.init_func_call_map(True)
elif import_task == 'uft30search':
uft30build.init_func_call_map(True)
elif import_task == 'dts_task_info':
dts_path = config['dts_path']
importresource.import_dts_data(dts_path)
else:
# 更新状态
importresource.update_table_enabled('import_config.json', import_task, True)
# 更新数据库
importresource.import_xml_data(config['uf20_path'], config['uft30_path'])
importresource.update_table_enabled('import_config.json', import_task, False)
importresource.append_info(import_task + '更新成功')
response_data = {
"code": "200",
"message": "成功",
"result": importresource.get_info()
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
except Exception as e:
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
print('end')
@app.route('/updateSysConfig', methods=['POST'])
def updateSysConfig():
try:
# 获取请求数据
request_data = request.get_json()
if not request_data:
return jsonify({
"code": "400",
"message": "func_list notfund",
"data": None
}), 400
print(request_data)
# 获取 路径配置,并更新
uft30_path = request_data['uft30_path']
uf20_path = request_data['uf20_path']
try:
uf20_asset_path = request_data['uf20_asset_path']
except Exception as e:
uf20_asset_path = 'F:\\客户账户管理系统V22\\'
dts_path = request_data['dts_path']
cppHost = request_data['cppHost']
cppPort = request_data['cppPort']
t2Host = request_data['t2Host']
t2Port = request_data['t2Port']
pythonHost = request_data['pythonHost']
pythonPort = request_data['pythonPort']
config['uft30_path'] = uft30_path
config['uf20_path'] = uf20_path
config['uf20_asset_path'] = uf20_asset_path
config['dts_path'] = dts_path
config['cppHost'] = cppHost
config['cppPort'] = cppPort
config['t2Host'] = t2Host
config['t2Port'] = t2Port
config['pythonHost'] = pythonHost
config['pythonPort'] = pythonPort
print(f'update config:\nuft30_path:{uft30_path}\nuf20_path:{uf20_path}\ndts_path:{dts_path}')
print(f'\nuf20_asset_path:{uf20_asset_path}')
print(f'\ncppHost:{cppHost}:{cppPort}\nt2Host:{t2Host}:{t2Port}\npythonHost{pythonHost}:{pythonPort}')
public.save_config(config_file, config)
uft30build.set_project_path(uft30_path)
uf20Build.set_project_path(uf20_path)
uf20AssetBuild.set_project_path(uf20_asset_path)
response_data = {
"code": "200",
"message": "成功",
"result": '更新成功'
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
except Exception as e:
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
print('end')
@app.route('/getSysConfig', methods=['POST'])
def getSysConfig():
try:
# 获取请求数据
request_data = request.get_json()
# 获取 路径配置,并更新
uft30_path = config['uft30_path']
uf20_path = config['uf20_path']
uf20_asset_path = config['uf20_asset_path']
dts_path = config['dts_path']
cppHost = config['cppHost']
cppPort = config['cppPort']
t2Host = config['t2Host']
t2Port = config['t2Port']
pythonHost = config['pythonHost']
pythonPort = config['pythonPort']
response_data = {
"uf20Path": uf20_path,
"uf20AssetPath": uf20_asset_path,
"uft30Path": uft30_path,
"dtsPath": dts_path,
"cppHost": cppHost,
"cppPort": cppPort,
"t2Host": t2Host,
"t2Port": t2Port,
"pythonHost": pythonHost,
"pythonPort": pythonPort
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
except Exception as e:
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
print('end')
@app.route('/ExecMdbSql', methods=['POST'])
def execMdbSql():
try:
# 获取请求数据
print('start')
request_data = request.get_json()
# if not request_data or 'mdbSql' not in request_data:
# return jsonify({
# "code": "400",
# "message": "请求参数错误",
# "data": None
# }), 400
Request = request_data['Request']
sql = Request['mdbSql']
t2Host = Request['t2Host']
t2Port = Request['t2Port']
mdbNodeName = Request['mdbNodeName']
print(sql,t2Host, t2Port, mdbNodeName)
# 简单的SQL注入检查
# if any(keyword in sql.lower() for keyword in ['insert', 'update', 'delete', 'drop', 'alter']):
# return jsonify({
# "code": "403",
# "message": "禁止的操作类型",
# "data": None
# }), 403
start_time = time.time()
results = t2Syn.execMdbSql(t2Host, t2Port, mdbNodeName, sql)
# print('result', results)
# 格式化结果
table_records = [dict(row) for row in results]
elapsed_time = int((time.time() - start_time) * 1000) # 毫秒
# 使用json.dumps确保中文正常序列化
response_data = {
"code": "200",
"message": "成功",
"tableRecords": table_records,
"ErrorNo": 0
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
except Exception as e:
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
print('close')
@app.route('/InitMdbSql', methods=['POST'])
def initMdbSql():
try:
# 获取请求数据
print('start')
request_data = request.get_json()
# if not request_data or 'mdbSql' not in request_data:
# return jsonify({
# "code": "400",
# "message": "请求参数错误",
# "data": None
# }), 400
Request = request_data['Request']
sql = Request['mdbSql']
t2Host = Request['t2Host']
t2Port = Request['t2Port']
mdbNodeName = Request['mdbNodeName']
print(sql,t2Host, t2Port, mdbNodeName)
# 简单的SQL注入检查
# if any(keyword in sql.lower() for keyword in ['insert', 'update', 'delete', 'drop', 'alter']):
# return jsonify({
# "code": "403",
# "message": "禁止的操作类型",
# "data": None
# }), 403
start_time = time.time()
result1 = t2Syn.execMdbSql(t2Host, t2Port, 'usesbid92', sql)
result2 = t2Syn.execMdbSql(t2Host, t2Port, 'usescbp92', sql)
result3 = t2Syn.execMdbSql(t2Host, t2Port, 'uconvert99', sql)
# 格式化结果
table_records = [dict(row) for row in result1]
table_records += [dict(row) for row in result2]
table_records += [dict(row) for row in result3]
print('table_records', table_records)
elapsed_time = int((time.time() - start_time) * 1000) # 毫秒
# 使用json.dumps确保中文正常序列化
response_data = {
"code": "200",
"message": "成功",
"tableRecords": table_records,
"ErrorNo": 0,
"elapsed_time": elapsed_time
}
return app.response_class(
response=json.dumps(response_data, ensure_ascii=False),
mimetype='application/json'
)
except Exception as e:
return jsonify({
"code": "500",
"message": f"服务器错误: {str(e)}",
"data": None
}), 500
finally:
print('close')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000,debug=True)

25
auto_update_vueip.py Normal file
View File

@@ -0,0 +1,25 @@
from utilities.pushVueIp import IPMonitor
import logging
import sys
import ctypes
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0) # 强制隐藏
# 配置日志
logging.basicConfig(
filename='E:\\PythonCode\\hstools\\auto_update_vueip.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def main():
try:
monitor = IPMonitor(ip_storage_file='E:\PythonCode\hstools\last_ip.txt')
changed, success, ip = monitor.check_and_push()
logging.info(f"IP检查结果: 变化={changed}, 成功={success}, IP={ip}")
except Exception as e:
logging.error(f"执行失败: {e}")
finally:
sys.exit(0) # 👈 确保脚本退出
if __name__ == '__main__':
main()

1
client_license.dat Normal file
View File

@@ -0,0 +1 @@
nYCglDuVz3ljvZYyZt+9ml1foWa9S9gAJ0scTSbLZbkSbJE3X3fDa+Swj8FL0iplJXw=

17
config.json Normal file
View File

@@ -0,0 +1,17 @@
{
"dir": "F:/sesCode",
"search": "",
"//": "debug模式默认开启true",
"debug": "true",
"function_no": "1974576",
"uft30_path": "F:\\sesCode\\",
"uf20_path": "D:\\Sources\\经纪业务运营平台V21\\",
"uf20_asset_path": "F:\\客户账户管理系统V22\\",
"dts_path": "E:\\dtsCode\\dts\\",
"cppHost": "10.20.163.101",
"cppPort": "5535",
"t2Host": "10.20.163.101",
"t2Port": "14007",
"pythonHost": "localhost",
"pythonPort": "5000"
}

466
dts_timestamps.json Normal file
View File

@@ -0,0 +1,466 @@
{
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\adviser_contract.sql": 1728874064.1538634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\arp_apply.sql": 1746065645.6089554,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\arp_contract.sql": 1746065645.6089554,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\arp_crquota.sql": 1751801032.6174054,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\arp_crquota_jour.sql": 1751801032.6184065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\asset_risk_acct_list.sql": 1746065645.6109557,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\assure_stock.sql": 1728874064.1538634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\assure_stock_jour.sql": 1728874064.1548634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bad_fine_interest.sql": 1751801032.6184065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bad_fine_interest_jour.sql": 1746065645.6109557,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bond_imp_cash_assure.sql": 1746065645.6119556,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bond_undue_quota.sql": 1746065645.6119556,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bpr_entrust_tri_ext.sql": 1728874064.1578634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_cbpentrust_ext.sql": 1728874064.1588638,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_contract.sql": 1728874064.1598637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_contract_ext.sql": 1728874064.1608622,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_contract_ext_jour.sql": 1728874064.1608622,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_contract_jour.sql": 1728874064.1618633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\business_white.sql": 1718174941.0650125,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\cbp_entrust_bt_inqrsp_ext.sql": 1751801032.6194065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\cbp_entrust_bt_inquiry_ext.sql": 1751801032.6204054,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\client_limit_stock.sql": 1746065645.6139553,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\cm_credit_quota.sql": 1728874064.1618633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\confer_no_log.sql": 1746065645.6139553,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\credit_quotas.sql": 1728874064.1628635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\csdc_acode_acct.sql": 1735615048.44564,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\exchange_rates.sql": 1720156394.999259,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\exch_boardacct_day_data.sql": 1754056893.6730072,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_apply.sql": 1751801032.6204054,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_apply_jour.sql": 1751801032.6214068,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_clarg.sql": 1751801032.6224062,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_contract.sql": 1728874064.163864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_contract_jour.sql": 1728874064.164863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_dictate.sql": 1746065645.6159575,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_out_impawn.sql": 1746065645.6159575,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_preassure.sql": 1728874064.164863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_preprodrate.sql": 1728874064.1658623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\firm_offer_code.sql": 1728874064.1658623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\frozen_detail.sql": 1746065645.6169562,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\fund_account_sleep.sql": 1728874064.166862,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\fund_revert_jour.sql": 1756198102.3743787,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\gm_credit_quota.sql": 1728874064.167863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\inco_unfin_info.sql": 1746065645.6189575,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\inco_unfin_info_ext.sql": 1746065645.6200964,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\irregular_acct.sql": 1728874064.168863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\judifrozenjour.sql": 1746065645.6209571,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\monitor_acct.sql": 1728874064.1698637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\pre_stock_info.sql": 1728874064.1708648,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_busin.sql": 1728874064.1728637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_busin_jour.sql": 1728874064.173867,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_code_register.sql": 1728874064.1748643,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_errinfo.sql": 1728874064.1748643,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_mult_date_info.sql": 1728874064.1758635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_quota.sql": 1728874064.1768627,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_quota_total.sql": 1728874064.1768627,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_undue_pawn.sql": 1728874064.177863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\rsf_contract.sql": 1746065645.6209571,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\secu_busi.sql": 1746065645.621958,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\secu_ofacct_rel.sql": 1728874064.177863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\self_holder.sql": 1728874064.1788647,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\sh_sopt_qryresult.sql": 1751801032.6224062,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\sopt_entrust.sql": 1756198102.3753788,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\sopt_reg.sql": 1728874064.179863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\sopt_reg_jour.sql": 1728874064.180863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_acct_arg.sql": 1746065645.6229568,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_adv_reg.sql": 1746065645.6229568,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_apply.sql": 1746065645.6239564,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_apply_jour.sql": 1746065645.6239564,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_contract.sql": 1746065645.624956,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_contract_jour.sql": 1746065645.624956,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_contract_rate.sql": 1746065645.624956,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_equity.sql": 1746065645.6259563,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_equity_jour.sql": 1746065645.6259563,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_funder.sql": 1746065645.6269572,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_integral_info.sql": 1746065645.6269572,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_register.sql": 1746065645.6269572,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_risk_list.sql": 1746065645.6279562,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_white_list.sql": 1746065645.6279562,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stb_bp.sql": 1735615048.45064,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stkresstkacct.sql": 1718174941.067012,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stktrade_quota.sql": 1714446622.1210282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stktrade_quota_used.sql": 1714446622.1220279,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stock_holder_sleep.sql": 1728874064.1818633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_contract.sql": 1728874064.1828637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_contract_ext.sql": 1728874064.1828637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_contract_ext_jour.sql": 1728874064.183862,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_contract_jour.sql": 1728874064.184863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_sp_acct_contrast.sql": 1746065645.6289575,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\transfer_board.sql": 1751801032.6234064,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uact_client.sql": 1757927408.9328365,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_account_limit_stkcode.sql": 1735615048.4526396,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_blob_file.sql": 1756198102.3773794,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_data_swap.sql": 1756198102.3773794,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_dividend_tax.sql": 1728874064.187863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_entrust.sql": 1735615048.4546402,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_etf_entrust_detail.sql": 1728874064.1898642,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_ipoinfo.sql": 1746065645.6319568,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_ipoinfojour.sql": 1728874064.1918635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_realtime.sql": 1728874064.192863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_acctspcash.sql": 1714446622.125028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_asset_bd_stock.sql": 1746065645.6319568,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_busiarg.sql": 1714446622.1260285,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_contract.sql": 1746065645.6329565,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_ipoinfo.sql": 1746065645.6329565,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_account.sql": 1720156395.0012524,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_fund.sql": 1730379846.6415026,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_fund_jour.sql": 1720156395.0032463,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_stock.sql": 1751801032.6244063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_stock_jour.sql": 1720156395.0052397,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\unfinished.sql": 1754056893.675015,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\upbs_elig_match_rel.sql": 1714446622.1280231,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\upbs_elig_product.sql": 1728874064.194863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\upbs_elig_risk_match.sql": 1728874064.1958637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_bpr_info.sql": 1751801032.6244063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_account.sql": 1720156395.0072334,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_fund.sql": 1720156395.00823,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_fund_jour.sql": 1746065645.6339562,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_stock.sql": 1751801032.6254065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_stock_jour.sql": 1751801032.629406,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_fund_revert_jour.sql": 1714446622.1320288,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_impawn_stock.sql": 1746065645.6359558,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_serial_no_records.sql": 1756198102.3783784,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_shreduction.sql": 1746065645.6369567,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_shstock_detail.sql": 1735615048.4616418,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_sopt_reg.sql": 1751801032.6314092,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_sopt_reg_jour.sql": 1751801032.632407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_stbstock_detail.sql": 1735615048.4626398,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_stbstock_detail_jour.sql": 1728874064.196864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_stock_revert_jour.sql": 1754056893.676006,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_ststock_quota_allocation.sql": 1718174941.0780127,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_ststock_quota_used.sql": 1746065645.6379569,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_szreduction.sql": 1718174941.079011,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_szstock_detail.sql": 1735615048.4646409,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_tpr_transinfo.sql": 1751801032.6334465,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_tpr_transinfo_ext.sql": 1751801032.6344063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_acct_assinfo.sql": 1714446622.1350281,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_block_quota.sql": 1714446622.136028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_farefundacct.sql": 1735615048.46564,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_faregroup.sql": 1714446622.1370282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_faresort.sql": 1714446622.1370282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_farestandard.sql": 1751801032.6344063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_fare_consult.sql": 1714446622.136028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\cbs\\cbs_entrust.sql": 1757927408.9358363,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\cbs\\cbs_realtime.sql": 1757927408.936837,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\cbs\\persecurate.sql": 1728874064.1988628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\crdt_acct_relationship.sql": 1718174941.0800111,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\crdt_client_min_fare.sql": 1728874064.1998632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\crdt_client_svr_fare.sql": 1746065645.6399922,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\crtnentrust.sql": 1714446622.1390235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_assure_scale.sql": 1746065645.6409607,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_busi_control.sql": 1751801032.6374063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_compact_audit.sql": 1735615048.46864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_compact_float.sql": 1714446622.1400285,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_extend.sql": 1746065645.6419618,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_authority_stock.sql": 1714446622.1410282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_bond_exemptricon.sql": 1714446622.1410282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_bond_putback.sql": 1746065645.6429608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_cbp_stock.sql": 1751801032.6374063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_client_ploy.sql": 1746065645.6429608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_client_prefer.sql": 1746065645.643961,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_client_primerate.sql": 1714446622.143028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact.sql": 1757927408.9378364,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact_apply.sql": 1714446622.1440277,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact_jour.sql": 1757927408.939837,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact_real_jour.sql": 1714446622.1440277,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact_repay_order.sql": 1746065645.644961,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_crdt_limit_sell.sql": 1746065645.644961,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_dictate.sql": 1735615048.47064,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_entrust.sql": 1746065645.6459608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_entrust_repay.sql": 1714446622.1460238,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_etf_right.sql": 1746065645.6459608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_ffare_log.sql": 1714446622.1470237,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_fundacct_stkrestrict.sql": 1728874064.201864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_fund_account.sql": 1757927408.9408367,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_ofelecagreement.sql": 1714446622.148028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_out_asset.sql": 1714446622.149028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_out_asset_apply.sql": 1714446622.149028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_out_asset_jour.sql": 1714446622.149028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_pend_fare.sql": 1757927408.9428365,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_pend_fare_jour.sql": 1714446622.1500235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_pre_entrust.sql": 1746065645.6469607,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_realtime.sql": 1746065645.6469607,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_riskacct_list.sql": 1714446622.1510236,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_risk_list.sql": 1714446622.1510236,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_share.sql": 1714446622.152028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_slo_equity.sql": 1746065645.647961,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_slo_sell_balance.sql": 1714446622.152028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_slo_sell_balance_jour.sql": 1714446622.1530235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_split_compact.sql": 1714446622.1530235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stb_ipoaskresult.sql": 1714446622.1530235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stkcode_assure_scale.sql": 1746065645.6489608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stkrestrict.sql": 1734602458.6103697,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stock_holder.sql": 1735615048.4766393,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stock_real.sql": 1746065645.6489608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stock_real_jour.sql": 1746065645.6499612,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_subequity.sql": 1714446622.1560278,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_surplus_stock.sql": 1714446622.1560278,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_surplus_stock_jour.sql": 1714446622.1560278,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_total_compact.sql": 1735615048.4776394,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_total_stk_entrust.sql": 1735615048.4786415,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_transfer_entrust.sql": 1714446622.158028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_uncompact.sql": 1734602458.6143606,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_unfinished.sql": 1730379846.643503,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_unity_video.sql": 1734602458.616362,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\data\\reload_fundacct.sql": 1746065645.6519618,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\ucrt_fund_detail.sql": 1734678980.3455677,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\ucrt_fund_real.sql": 1714446622.160028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\ucrt_fund_real_jour.sql": 1714446622.160028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\uses_fund_detail.sql": 1757927408.9438362,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\uses_fund_real.sql": 1757927408.9458368,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\uses_fund_real_jour.sql": 1754056893.678006,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\acctstk_notice_remind_times.sql": 1746065645.6549623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\afof_entrust.sql": 1735615048.4836404,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\afof_realtime.sql": 1735615048.4846394,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\bond_account_level.sql": 1728874064.2118628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\bond_exemptricon.sql": 1718174941.0860126,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\bond_put_back.sql": 1718174941.0870123,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\bond_risk_arg.sql": 1728874064.2118628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\btoa_speacct.sql": 1728874064.2118628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\business_white_list.sql": 1754056893.6790135,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\cbp_stock.sql": 1751801032.641407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\client_agreement.sql": 1718174941.0890114,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\client_grade.sql": 1728874064.212863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\client_min_fare.sql": 1718174941.0910127,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\client_prefer.sql": 1757927408.946836,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\debt_quota.sql": 1728874064.2138622,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_entrust_detail.sql": 1728874064.2138622,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_right.sql": 1728874064.2148628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_ufund.sql": 1728874064.2148628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_ufund_entrust.sql": 1728874064.2158632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_ustock.sql": 1728874064.2158632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_ustock_entrust.sql": 1735615048.4856403,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\fund_bond_impawn_arg.sql": 1728874064.2168624,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\hkvote_stock.sql": 1728874064.2178628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\impawn_stock.sql": 1728874064.218865,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\limit_sell_stkcode.sql": 1718174941.0940118,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\limit_sell_stock.sql": 1746065645.656962,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\of_client_agreement.sql": 1718174941.0950115,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\realtime.sql": 1746065645.656962,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\repay_detail.sql": 1746065645.6579623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\secu_bond_risk.sql": 1728874064.219864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\secu_unfinished.sql": 1735615048.48864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\sesnight_order.sql": 1756198102.3803778,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\shhk_equity.sql": 1730379846.6455026,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_dlsinfo.sql": 1728874064.221864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_entrust.sql": 1734602458.6183703,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_ipo_ask_result.sql": 1746065645.6579623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_resstock.sql": 1730379846.6455026,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_stdholder.sql": 1720156395.0122159,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stock_firm.sql": 1718174941.0960116,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stock_locking_jour.sql": 1728874064.2238646,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stock_net.sql": 1735615048.4926395,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stock_net_jour.sql": 1735615048.493641,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\szhk_equity.sql": 1728874064.2258632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\unity_video.sql": 1728874064.2258632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_authority_stock.sql": 1746065645.6589687,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_buy_promise.sql": 1728874064.226863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_entrust.sql": 1757927408.9478362,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_extstock_real.sql": 1756198102.382378,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_extstock_real_jour.sql": 1757927408.948836,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_ffare_log.sql": 1728874064.2288628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_fundacct_stkrestrict.sql": 1754056893.6790135,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_fund_account.sql": 1751801032.6424065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_stkrestrict.sql": 1751801032.6444056,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_stock_holder.sql": 1757927408.9508364,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_stock_real.sql": 1757927408.9518366,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_stock_real_jour.sql": 1735615048.50264,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_subequity.sql": 1731308703.4297159,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\usps_client_svrfare.sql": 1728874064.234863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\adviser_code.sql": 1728874064.234863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\adviser_product.sql": 1728874064.2358642,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\afof_agencyno.sql": 1735615048.5036407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\afof_discount.sql": 1728874064.2358642,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\afof_ffare.sql": 1728874064.2368636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\afof_quota.sql": 1728874064.2368636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\assure_package.sql": 1746065645.6619663,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bcommmodel.sql": 1728874064.2378626,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_concratio.sql": 1728874064.238863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_fin_rate.sql": 1728874064.2398643,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_impawn_arg.sql": 1728874064.240864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_rateinf.sql": 1728874064.240864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_trustee_ratio.sql": 1728874064.2418618,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ccspell.sql": 1751801032.6464071,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\chfare2.sql": 1728874064.2418618,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\chfare2seg.sql": 1728874064.2428627,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\commgroup.sql": 1728874064.2428627,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\commmodelseg.sql": 1728874064.2438629,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\crdtstkadfare.sql": 1728874064.2438629,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\crdt_assunderly_arg.sql": 1746065645.662966,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\cstbfare2.sql": 1728874064.244863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\cstbfare2seg.sql": 1728874064.244863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\finexe_assure_code.sql": 1746065645.662966,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\finexe_code.sql": 1728874064.245863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\finexe_prodrate.sql": 1728874064.245863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\fundacctcomm.sql": 1728874064.2468617,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\grade_impawn_rate.sql": 1728874064.2468617,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hcommgroup.sql": 1728874064.247864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hcommmodel.sql": 1728874064.247864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hfare2.sql": 1718174941.110011,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hfare2seg.sql": 1718174941.1110122,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hkvote_list.sql": 1728874064.2488656,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ics_etf_prod_info.sql": 1728874064.2498639,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\income_accttraderrel.sql": 1728874064.2498639,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\income_product.sql": 1746065645.6639657,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\index_component.sql": 1728874064.251863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\issue_mainacoderel.sql": 1728874064.2528634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\issue_main_level.sql": 1728874064.251863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\issue_main_relinfo.sql": 1728874064.2528634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\limit_stock_price.sql": 1728874064.253864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ofcommmodel.sql": 1728874064.2548628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ofgradectrl.sql": 1728874064.2548628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\of_cash_arg.sql": 1751801032.6474068,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\packagetemplet.sql": 1746065645.6649656,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\pledge_stkinfo.sql": 1728874064.2558646,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\pre_vote_code.sql": 1728874064.2558646,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\pre_vote_info.sql": 1728874064.2568676,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\product_basic_info.sql": 1751801032.648407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\product_basic_info_ext.sql": 1751801032.648407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\qrp_ptrate.sql": 1728874064.2568676,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\reits_expand_info.sql": 1751801032.649407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\secu_bond_info.sql": 1746065645.6659658,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\secu_risk.sql": 1728874064.2578635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\sopt_window.sql": 1728874064.2578635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\special_time.sql": 1746065645.6669657,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\srp_fare2.sql": 1746065645.6669657,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\srp_fare2_seg.sql": 1746065645.6679654,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\srp_mar_ratio.sql": 1746065645.6698704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stb_arg.sql": 1728874064.2578635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stb_delist_code.sql": 1728874064.2588632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stb_fare.sql": 1728874064.2588632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stb_qqcode.sql": 1728874064.2598631,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stock_code_match.sql": 1746065645.6708782,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\transfer_mapping.sql": 1735615048.5046394,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucbp_srp_kind.sql": 1746065645.67187,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_acct_assure_code.sql": 1746065645.672869,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_acct_ensure_scale.sql": 1714446622.1610281,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_acct_stk_concentrate.sql": 1735615048.5066392,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_acct_underly_code.sql": 1746065645.6738687,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_assure_code.sql": 1746065645.67487,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_assure_prod_code.sql": 1714446622.1630237,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_assure_ratio.sql": 1728874064.2628634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_assure_scale.sql": 1746065645.67487,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_black_code.sql": 1714446622.1640284,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_blocktrade_risk.sql": 1714446622.1640284,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_busi_blacklist.sql": 1728874064.2638633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_audit.sql": 1746065645.6758685,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_audit_stk.sql": 1714446622.165028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_float.sql": 1714446622.165028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_primerate.sql": 1734602458.6213636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_rate.sql": 1746065645.67687,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_level_rate.sql": 1714446622.1670282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_ploy_template.sql": 1746065645.677871,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_primerate_audit.sql": 1714446622.1670282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_primerate_str.sql": 1714446622.168028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_risk_parameter.sql": 1751801032.6504066,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_stk_concentrate.sql": 1746065645.677871,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_stk_group.sql": 1714446622.169024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_stk_group_concentrate.sql": 1746065645.6788702,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_stk_group_concwhite.sql": 1746065645.6788702,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_sys_config.sql": 1746065645.6798694,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_time_control.sql": 1714446622.171031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_transfer_fare.sql": 1714446622.171031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_underly_code.sql": 1746065645.6798694,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\underly_package.sql": 1746065645.68087,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_account_deploy.sql": 1746065645.68087,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_acct_rule.sql": 1751801032.6514065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_all_branch.sql": 1714446622.1720307,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_all_company.sql": 1728874064.2668638,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_arg.sql": 1714446622.1720307,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_asset_prop_deploy.sql": 1751801032.6514065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_business_flag.sql": 1728874064.2668638,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_csdc_dicttrans.sql": 1734684439.8041148,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_dictionary.sql": 1735615048.5136392,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_dict_entry.sql": 1714446622.173031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_elig_busi_arg.sql": 1714446622.174031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_elig_video_arg.sql": 1728874064.2678633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_error_msg.sql": 1735615048.5146406,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_extern_error.sql": 1714446622.175024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_hs_function.sql": 1714446622.175024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_init_date_model.sql": 1728874064.2688632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_license_info.sql": 1746065645.6838717,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_sysconfig.sql": 1735615048.516641,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_umtconfig.sql": 1751801032.6534069,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\uses_busi_blacklist.sql": 1754056893.6800134,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\uses_sys_config.sql": 1746065645.68487,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_account_config.sql": 1728874064.2698631,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_authority.sql": 1751801032.6544056,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bfare2.sql": 1728874064.270863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bfare2seg.sql": 1714446622.1770313,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bondinvestorinfo.sql": 1714446622.1790242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bond_level.sql": 1746065645.6858704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bond_rate.sql": 1714446622.1780243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_branch_prefix.sql": 1714446622.1790242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_business_status.sql": 1714446622.1790242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_cbpprice.sql": 1714446622.1800246,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_cdr_fare.sql": 1714446622.1800246,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_cfare2.sql": 1728874064.2718637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_cfare2seg.sql": 1714446622.181032,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_coffare2.sql": 1714446622.181032,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_coffare2seg.sql": 1714446622.182031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_debtinterest.sql": 1714446622.182031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_dfare2.sql": 1714446622.182031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_dfare2seg.sql": 1714446622.1830242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_discount_model.sql": 1718174941.1160128,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_entrustway_conv.sql": 1718174941.1160128,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_etf_code.sql": 1714446622.1830242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_etf_component.sql": 1756198102.3833797,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_etf_exchdate.sql": 1714446622.1840243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_exchange_time.sql": 1714446622.1850338,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_exch_arg.sql": 1714446622.1850338,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_exit_stkcode.sql": 1746065645.686872,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_ffare.sql": 1714446622.1860242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_fixed_price_params.sql": 1714446622.1860242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_fjy_stkinfo.sql": 1714446622.1870308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_hkquota.sql": 1728874064.2728636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_income_agency.sql": 1714446622.1870308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_income_saler.sql": 1746065645.68787,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_income_stkcode.sql": 1714446622.1880243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_ipo_seat_contrast.sql": 1714446622.1880243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_login_pbu.sql": 1746065645.6888704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_nsrisk_info.sql": 1714446622.1880243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_ofcode.sql": 1730462256.2088063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_offare2.sql": 1728874064.274863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_offare2seg.sql": 1714446622.189031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_pertrans_bindparam.sql": 1734602458.6243606,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_price.sql": 1746065645.6888704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_promise_info.sql": 1714446622.1900308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_qrp_code.sql": 1728874064.274863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_reserve_account.sql": 1751801032.6544056,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_seats.sql": 1714446622.1910312,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_securate.sql": 1718174941.1170106,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_sopt_code.sql": 1728874064.275863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_sopt_tax.sql": 1728874064.275863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_spe_busin_date.sql": 1730379846.6535032,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_spread_type.sql": 1714446622.1910312,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_srp_code.sql": 1746065645.68987,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_srp_rate.sql": 1746065645.68987,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stbfare2.sql": 1714446622.192024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stbfare2seg.sql": 1714446622.193031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stb_lay_code.sql": 1714446622.192024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stb_stkcode.sql": 1714446622.192024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stkadfare.sql": 1714446622.193031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stkcode.sql": 1746065645.6908696,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stkcode_ext.sql": 1746065645.6908696,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stkmodel.sql": 1714446622.194024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stknotice_info.sql": 1746065645.69187,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stktype.sql": 1714446622.1950314,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_svrfare.sql": 1746065645.6928704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_trader_investor_right.sql": 1714446622.196031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_trade_name.sql": 1714446622.196031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_transfer_fare.sql": 1728874064.277863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_vote_code.sql": 1714446622.1970308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_vote_info.sql": 1714446622.1970308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_vote_list.sql": 1714446622.1970308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_warrant_code.sql": 1714446622.1980333,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_witcode.sql": 1714446622.1980333,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_fund_revert_jour.sql": 1757927408.9338367,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\fund_x_jour.sql": 1756198102.3743787,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\reload_fundacct.sql": 1754056893.675015,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_fpre_clear.sql": 1756198102.376378,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\entrustref.sql": 1756198102.3793797,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\force_entrust.sql": 1756198102.3793797,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\secu_settle_jour.sql": 1756198102.3803778,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\srp_fund_detail.sql": 1756198102.381378
}

BIN
hstool.db Normal file

Binary file not shown.

51
importResources.py Normal file
View File

@@ -0,0 +1,51 @@
from enum import Enum
from import_files import import_dts_info_bytimes, importXmlFromConfig
class SysStatus(Enum):
INIT = "init"
RUNNING = "running"
BUSY = "busy"
ERROR = "error"
STOPPED = "stopped"
class ImportSources:
def __init__(self):
self.status = SysStatus.INIT # 初始化状态
def set_status(self, status):
self.status = status
self.info = 'ready..\n'
def get_info(self):
return self.info
def reset_inof(self):
self.info = 'ready...\n'
def append_info(self, text):
self.info = self.info + text + '\n'
def get_status(self):
return self.status
def update_table_enabled(self,json_file_path, table_name, enable_value):
importXmlFromConfig.update_table_enabled(json_file_path, table_name, enable_value)
def import_dts_data(self, dts_path='E:\\sesCode\dts\\'):
self.set_status(SysStatus.RUNNING)
import_dts_info_bytimes.import_dts_info(dts_path)
self.set_status(SysStatus.STOPPED)
def import_xml_data(self, uf20_path='D:\\Sources\\经纪业务运营平台V21\\', uft30_path='F:\\sesCode\\'):
importXmlFromConfig.import_xml_from_config(uf20_path, uft30_path)
# 示例用法
if __name__ == "__main__":
importSources = ImportSources()
importSources.import_dts_data()
importSources.import_xml_data()

180
import_config.json Normal file
View File

@@ -0,0 +1,180 @@
[
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "sysconfig",
"data_source": "uf20",
"xml_file_path": "公共资源\\sysconfig.xml",
"xml_root": "sysconfig",
"table_create_sql": "CREATE TABLE IF NOT EXISTS sysconfig (item_id TEXT PRIMARY KEY, name TEXT, data_type TEXT, config_type TEXT, item_desc TEXT);",
"table_insert_sql": "INSERT OR REPLACE INTO sysconfig (item_id, name, data_type, config_type, item_desc) VALUES (?, ?, ?, ?, ?);",
"xml_para_name": [
"id",
"name",
"dataType",
"configType",
"desc"
],
"para_name": [
"item_id",
"name",
"data_type",
"config_type",
"item_desc"
],
"xml_childs": [
"items"
],
"xml_children": "sysconfigitem",
"xml_get_type": "0"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "stdfield",
"data_source": "uf20",
"xml_file_path": "公共资源\\stdfields.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS stdfield (name TEXT PRIMARY KEY, cname TEXT, type TEXT, dict TEXT, UNIQUE(name, type));",
"table_insert_sql": "INSERT OR REPLACE INTO stdfield (name, cname, type, dict) VALUES (?, ?, ?, ?);",
"xml_para_name": [
"name",
"cname",
"type",
"dict"
],
"para_name": [
"name",
"cname",
"type",
"dict"
],
"xml_children": "stdfield",
"xml_get_type": "1"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "maindictinfo",
"data_source": "uf20",
"xml_file_path": "公共资源\\dict.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS maindictinfo (dicType TEXT, dicSection TEXT, dicItem TEXT PRIMARY KEY, itemDesc TEXT , dataType TEXT , modifyHistory TEXT);",
"table_insert_sql": "INSERT OR REPLACE INTO maindictinfo (dicType, dicSection, dicItem, itemDesc, dataType, modifyHistory) VALUES (?, ?, ?, ?, ?, ?);",
"xml_para_name": [
"dicType",
"dicSection",
"dicItem",
"itemDesc",
"dataType",
"modifyHistory"
],
"para_name": [
"dicType",
"dicSection",
"dicItem",
"itemDesc",
"dataType",
"modifyHistory"
],
"xml_children": "typename",
"xml_get_type": "1"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "subdictinfo",
"data_source": "uf20",
"xml_file_path": "公共资源\\dict.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS subdictinfo (dicItem TEXT, itemDesc TEXT, dicType TEXT, childItem TEXT , desc TEXT , modifyHistory TEXT, UNIQUE(dicItem, childItem));",
"table_insert_sql": "INSERT OR REPLACE INTO subdictinfo (dicItem, itemDesc, dicType, childItem, desc, modifyHistory) VALUES (?, ?, ?, ?, ?, ?);",
"xml_para_name": [
"dicItem",
"itemDesc",
"dicType",
"childItem",
"desc",
"modifyHistory"
],
"para_name": [
"dicItem",
"itemDesc",
"dicType",
"childItem",
"desc",
"modifyHistory"
],
"xml_children": "itemname",
"xml_get_type": "1"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "uf20_constant",
"data_source": "uf20",
"xml_file_path": "公共资源\\constants.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS uf20_constant (name TEXT, value TEXT, description TEXT, UNIQUE(name, value));",
"table_insert_sql": "INSERT OR REPLACE INTO uf20_constant (name, value, description) VALUES (?, ?, ?);",
"xml_para_name": [
"name",
"value",
"description"
],
"para_name": [
"name",
"value",
"description"
],
"xml_children": "category",
"xml_sub_children": "constant",
"xml_get_type": "2"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "uf20_error",
"data_source": "uf20",
"xml_file_path": "公共资源\\errNumbers.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS uf20_error (code TEXT, constant TEXT, info TEXT, UNIQUE(code, constant));",
"table_insert_sql": "INSERT OR REPLACE INTO uf20_error (code, constant, info) VALUES (?, ?, ?);",
"xml_para_name": [
"code",
"constant",
"info"
],
"para_name": [
"code",
"constant",
"info"
],
"xml_children": "type",
"xml_sub_children": "error_no",
"xml_get_type": "2"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "hq_info",
"data_source": "uft30",
"xml_file_path": "upub\\see_template\\split_core_sdk\\core_sdk\\fronthq\\template\\config\\uft30_biztrans_hqtransfer.xml",
"xml_root": "biztrans",
"table_create_sql": "CREATE TABLE IF NOT EXISTS hq_info2 (srcfunc TEXT, destfunc TEXT, note TEXT, UNIQUE(srcfunc, destfunc));",
"table_insert_sql": "INSERT OR REPLACE INTO hq_info2 (srcfunc, destfunc, note) VALUES (?, ?, ?);",
"xml_para_name": [
"srcfunc",
"destfunc",
"note"
],
"para_name": [
"srcfunc",
"destfunc",
"note"
],
"xml_children": "functions",
"xml_sub_children": "function",
"xml_get_type": "2"
}
]

180
import_config.json.bak Normal file
View File

@@ -0,0 +1,180 @@
[
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "sysconfig",
"xml_file_path": "D:\\Sources\\经纪业务运营平台V21\\公共资源\\sysconfig.xml",
"xml_root": "sysconfig",
"table_create_sql": "CREATE TABLE IF NOT EXISTS sysconfig (item_id TEXT PRIMARY KEY, name TEXT, data_type TEXT, config_type TEXT, item_desc TEXT);",
"table_insert_sql": "INSERT OR REPLACE INTO sysconfig (item_id, name, data_type, config_type, item_desc) VALUES (?, ?, ?, ?, ?);",
"xml_para_name": [
"id",
"name",
"dataType",
"configType",
"desc"
],
"para_name": [
"item_id",
"name",
"data_type",
"config_type",
"item_desc"
],
"xml_childs": [
"items"
],
"xml_children": "sysconfigitem",
"xml_get_type": "0",
"data_source": "uf20"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "stdfield",
"xml_file_path": "D:\\Sources\\经纪业务运营平台V21\\公共资源\\stdfields.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS stdfield (name TEXT PRIMARY KEY, cname TEXT, type TEXT, dict TEXT);",
"table_insert_sql": "INSERT OR REPLACE INTO stdfield (name, cname, type, dict) VALUES (?, ?, ?, ?);",
"xml_para_name": [
"name",
"cname",
"type",
"dict"
],
"para_name": [
"name",
"cname",
"type",
"dict"
],
"xml_children": "stdfield",
"xml_get_type": "1",
"data_source": "uf20"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "maindictinfo",
"xml_file_path": "D:\\Sources\\经纪业务运营平台V21\\公共资源\\dict.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS maindictinfo (dicType TEXT, dicSection TEXT, dicItem TEXT PRIMARY KEY, itemDesc TEXT , dataType TEXT , modifyHistory TEXT);",
"table_insert_sql": "INSERT OR REPLACE INTO maindictinfo (dicType, dicSection, dicItem, itemDesc, dataType, modifyHistory, remark) \nVALUES (?, ?, ?, ?, ?, ?, COALESCE((SELECT remark FROM maindictinfo WHERE dicType=? AND dicSection=? AND dicItem=?), ' '));",
"xml_para_name": [
"dicType",
"dicSection",
"dicItem",
"itemDesc",
"dataType",
"modifyHistory"
],
"para_name": [
"dicType",
"dicSection",
"dicItem",
"itemDesc",
"dataType",
"modifyHistory"
],
"xml_children": "typename",
"xml_get_type": "1",
"data_source": "uf20"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "subdictinfo",
"xml_file_path": "D:\\Sources\\经纪业务运营平台V21\\公共资源\\dict.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS subdictinfo (dicItem TEXT, itemDesc TEXT, dicType TEXT, childItem TEXT , desc TEXT , modifyHistory TEXT, UNIQUE(dicItem, childItem));",
"table_insert_sql": "INSERT OR REPLACE INTO subdictinfo (dicItem, itemDesc, dicType, childItem, desc, modifyHistory) VALUES (?, ?, ?, ?, ?, ?);",
"xml_para_name": [
"dicItem",
"itemDesc",
"dicType",
"childItem",
"desc",
"modifyHistory"
],
"para_name": [
"dicItem",
"itemDesc",
"dicType",
"childItem",
"desc",
"modifyHistory"
],
"xml_children": "itemname",
"xml_get_type": "1",
"data_source": "uf20"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "uf20_constant",
"xml_file_path": "D:\\Sources\\经纪业务运营平台V21\\公共资源\\constants.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS uf20_constant (name TEXT, value TEXT, description TEXT, UNIQUE(name, value));",
"table_insert_sql": "INSERT OR REPLACE INTO uf20_constant (name, value, description) VALUES (?, ?, ?);",
"xml_para_name": [
"name",
"value",
"description"
],
"para_name": [
"name",
"value",
"description"
],
"xml_children": "category",
"xml_sub_children": "constant",
"xml_get_type": "2",
"data_source": "uf20"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "uf20_error",
"xml_file_path": "D:\\Sources\\经纪业务运营平台V21\\公共资源\\errNumbers.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS uf20_error (code TEXT, constant TEXT, info TEXT, UNIQUE(code, constant));",
"table_insert_sql": "INSERT OR REPLACE INTO uf20_error (code, constant, info) VALUES (?, ?, ?);",
"xml_para_name": [
"code",
"constant",
"info"
],
"para_name": [
"code",
"constant",
"info"
],
"xml_children": "type",
"xml_sub_children": "error_no",
"xml_get_type": "2",
"data_source": "uf20"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "hq_info",
"xml_file_path": "F:\\sesCode\\upub\\see_template\\split_core_sdk\\core_sdk\\fronthq\\template\\config\\uft30_biztrans_hqtransfer.xml",
"xml_root": "biztrans",
"table_create_sql": "CREATE TABLE IF NOT EXISTS hq_info (srcfunc TEXT, destfunc TEXT, note TEXT, UNIQUE(srcfunc, destfunc));",
"table_insert_sql": "INSERT OR REPLACE INTO hq_info (srcfunc, destfunc, note) VALUES (?, ?, ?);",
"xml_para_name": [
"srcfunc",
"destfunc",
"note"
],
"para_name": [
"srcfunc",
"destfunc",
"note"
],
"xml_children": "functions",
"xml_sub_children": "function",
"xml_get_type": "2",
"data_source": "uft30"
}
]

0
import_files/__init__.py Normal file
View File

View File

@@ -0,0 +1,459 @@
{
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\adviser_contract.sql": 1728874064.1538634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\arp_apply.sql": 1746065645.6089554,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\arp_contract.sql": 1746065645.6089554,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\arp_crquota.sql": 1751801032.6174054,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\arp_crquota_jour.sql": 1751801032.6184065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\asset_risk_acct_list.sql": 1746065645.6109557,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\assure_stock.sql": 1728874064.1538634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\assure_stock_jour.sql": 1728874064.1548634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bad_fine_interest.sql": 1751801032.6184065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bad_fine_interest_jour.sql": 1746065645.6109557,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bond_imp_cash_assure.sql": 1746065645.6119556,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bond_undue_quota.sql": 1746065645.6119556,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\bpr_entrust_tri_ext.sql": 1728874064.1578634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_cbpentrust_ext.sql": 1728874064.1588638,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_contract.sql": 1728874064.1598637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_contract_ext.sql": 1728874064.1608622,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_contract_ext_jour.sql": 1728874064.1608622,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\brp_contract_jour.sql": 1728874064.1618633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\business_white.sql": 1718174941.0650125,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\cbp_entrust_bt_inqrsp_ext.sql": 1751801032.6194065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\cbp_entrust_bt_inquiry_ext.sql": 1751801032.6204054,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\client_limit_stock.sql": 1746065645.6139553,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\cm_credit_quota.sql": 1728874064.1618633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\confer_no_log.sql": 1746065645.6139553,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\credit_quotas.sql": 1728874064.1628635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\csdc_acode_acct.sql": 1735615048.44564,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\exchange_rates.sql": 1720156394.999259,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\exch_boardacct_day_data.sql": 1728874064.163864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_apply.sql": 1751801032.6204054,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_apply_jour.sql": 1751801032.6214068,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_clarg.sql": 1751801032.6224062,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_contract.sql": 1728874064.163864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_contract_jour.sql": 1728874064.164863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_dictate.sql": 1746065645.6159575,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_out_impawn.sql": 1746065645.6159575,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_preassure.sql": 1728874064.164863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\finexe_preprodrate.sql": 1728874064.1658623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\firm_offer_code.sql": 1728874064.1658623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\frozen_detail.sql": 1746065645.6169562,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\fund_account_sleep.sql": 1728874064.166862,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\fund_revert_jour.sql": 1728874064.167863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\gm_credit_quota.sql": 1728874064.167863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\inco_unfin_info.sql": 1746065645.6189575,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\inco_unfin_info_ext.sql": 1746065645.6200964,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\irregular_acct.sql": 1728874064.168863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\judifrozenjour.sql": 1746065645.6209571,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\monitor_acct.sql": 1728874064.1698637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\pre_stock_info.sql": 1728874064.1708648,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_busin.sql": 1728874064.1728637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_busin_jour.sql": 1728874064.173867,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_code_register.sql": 1728874064.1748643,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_errinfo.sql": 1728874064.1748643,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_mult_date_info.sql": 1728874064.1758635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_quota.sql": 1728874064.1768627,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_quota_total.sql": 1728874064.1768627,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\qrp_undue_pawn.sql": 1728874064.177863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\rsf_contract.sql": 1746065645.6209571,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\secu_busi.sql": 1746065645.621958,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\secu_ofacct_rel.sql": 1728874064.177863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\self_holder.sql": 1728874064.1788647,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\sh_sopt_qryresult.sql": 1751801032.6224062,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\sopt_entrust.sql": 1735615048.44864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\sopt_reg.sql": 1728874064.179863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\sopt_reg_jour.sql": 1728874064.180863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_acct_arg.sql": 1746065645.6229568,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_adv_reg.sql": 1746065645.6229568,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_apply.sql": 1746065645.6239564,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_apply_jour.sql": 1746065645.6239564,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_contract.sql": 1746065645.624956,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_contract_jour.sql": 1746065645.624956,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_contract_rate.sql": 1746065645.624956,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_equity.sql": 1746065645.6259563,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_equity_jour.sql": 1746065645.6259563,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_funder.sql": 1746065645.6269572,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_integral_info.sql": 1746065645.6269572,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_register.sql": 1746065645.6269572,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_risk_list.sql": 1746065645.6279562,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\srp_white_list.sql": 1746065645.6279562,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stb_bp.sql": 1735615048.45064,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stkresstkacct.sql": 1718174941.067012,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stktrade_quota.sql": 1714446622.1210282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stktrade_quota_used.sql": 1714446622.1220279,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\stock_holder_sleep.sql": 1728874064.1818633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_contract.sql": 1728874064.1828637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_contract_ext.sql": 1728874064.1828637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_contract_ext_jour.sql": 1728874064.183862,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_contract_jour.sql": 1728874064.184863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\tpr_sp_acct_contrast.sql": 1746065645.6289575,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\transfer_board.sql": 1751801032.6234064,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uact_client.sql": 1728874064.1868641,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_account_limit_stkcode.sql": 1735615048.4526396,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_blob_file.sql": 1746065645.6309576,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_data_swap.sql": 1746065645.6309576,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_dividend_tax.sql": 1728874064.187863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_entrust.sql": 1735615048.4546402,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_etf_entrust_detail.sql": 1728874064.1898642,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_ipoinfo.sql": 1746065645.6319568,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_ipoinfojour.sql": 1728874064.1918635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucbp_realtime.sql": 1728874064.192863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_acctspcash.sql": 1714446622.125028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_asset_bd_stock.sql": 1746065645.6319568,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_busiarg.sql": 1714446622.1260285,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_contract.sql": 1746065645.6329565,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_ipoinfo.sql": 1746065645.6329565,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_account.sql": 1720156395.0012524,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_fund.sql": 1730379846.6415026,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_fund_jour.sql": 1720156395.0032463,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_stock.sql": 1751801032.6244063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_spcash_stock_jour.sql": 1720156395.0052397,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\unfinished.sql": 1728874064.1938632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\upbs_elig_match_rel.sql": 1714446622.1280231,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\upbs_elig_product.sql": 1728874064.194863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\upbs_elig_risk_match.sql": 1728874064.1958637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_bpr_info.sql": 1751801032.6244063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_account.sql": 1720156395.0072334,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_fund.sql": 1720156395.00823,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_fund_jour.sql": 1746065645.6339562,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_stock.sql": 1751801032.6254065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_cash_stock_jour.sql": 1751801032.629406,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_fund_revert_jour.sql": 1714446622.1320288,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_impawn_stock.sql": 1746065645.6359558,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_serial_no_records.sql": 1751801032.6304066,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_shreduction.sql": 1746065645.6369567,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_shstock_detail.sql": 1735615048.4616418,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_sopt_reg.sql": 1751801032.6314092,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_sopt_reg_jour.sql": 1751801032.632407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_stbstock_detail.sql": 1735615048.4626398,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_stbstock_detail_jour.sql": 1728874064.196864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_stock_revert_jour.sql": 1714446622.1330233,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_ststock_quota_allocation.sql": 1718174941.0780127,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_ststock_quota_used.sql": 1746065645.6379569,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_szreduction.sql": 1718174941.079011,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_szstock_detail.sql": 1735615048.4646409,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_tpr_transinfo.sql": 1751801032.6334465,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\uqms_tpr_transinfo_ext.sql": 1751801032.6344063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_acct_assinfo.sql": 1714446622.1350281,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_block_quota.sql": 1714446622.136028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_farefundacct.sql": 1735615048.46564,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_faregroup.sql": 1714446622.1370282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_faresort.sql": 1714446622.1370282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_farestandard.sql": 1751801032.6344063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\usps_fare_consult.sql": 1714446622.136028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\cbs\\cbs_entrust.sql": 1751801032.6364062,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\cbs\\cbs_realtime.sql": 1728874064.1988628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\cbs\\persecurate.sql": 1728874064.1988628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\crdt_acct_relationship.sql": 1718174941.0800111,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\crdt_client_min_fare.sql": 1728874064.1998632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\crdt_client_svr_fare.sql": 1746065645.6399922,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\crtnentrust.sql": 1714446622.1390235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_assure_scale.sql": 1746065645.6409607,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_busi_control.sql": 1751801032.6374063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_compact_audit.sql": 1735615048.46864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_compact_float.sql": 1714446622.1400285,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_acct_extend.sql": 1746065645.6419618,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_authority_stock.sql": 1714446622.1410282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_bond_exemptricon.sql": 1714446622.1410282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_bond_putback.sql": 1746065645.6429608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_cbp_stock.sql": 1751801032.6374063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_client_ploy.sql": 1746065645.6429608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_client_prefer.sql": 1746065645.643961,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_client_primerate.sql": 1714446622.143028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact.sql": 1728874064.2008636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact_apply.sql": 1714446622.1440277,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact_jour.sql": 1714446622.1440277,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact_real_jour.sql": 1714446622.1440277,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_compact_repay_order.sql": 1746065645.644961,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_crdt_limit_sell.sql": 1746065645.644961,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_dictate.sql": 1735615048.47064,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_entrust.sql": 1746065645.6459608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_entrust_repay.sql": 1714446622.1460238,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_etf_right.sql": 1746065645.6459608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_ffare_log.sql": 1714446622.1470237,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_fundacct_stkrestrict.sql": 1728874064.201864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_fund_account.sql": 1751801032.6384063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_ofelecagreement.sql": 1714446622.148028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_out_asset.sql": 1714446622.149028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_out_asset_apply.sql": 1714446622.149028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_out_asset_jour.sql": 1714446622.149028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_pend_fare.sql": 1714446622.1500235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_pend_fare_jour.sql": 1714446622.1500235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_pre_entrust.sql": 1746065645.6469607,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_realtime.sql": 1746065645.6469607,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_riskacct_list.sql": 1714446622.1510236,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_risk_list.sql": 1714446622.1510236,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_share.sql": 1714446622.152028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_slo_equity.sql": 1746065645.647961,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_slo_sell_balance.sql": 1714446622.152028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_slo_sell_balance_jour.sql": 1714446622.1530235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_split_compact.sql": 1714446622.1530235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stb_ipoaskresult.sql": 1714446622.1530235,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stkcode_assure_scale.sql": 1746065645.6489608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stkrestrict.sql": 1734602458.6103697,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stock_holder.sql": 1735615048.4766393,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stock_real.sql": 1746065645.6489608,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_stock_real_jour.sql": 1746065645.6499612,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_subequity.sql": 1714446622.1560278,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_surplus_stock.sql": 1714446622.1560278,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_surplus_stock_jour.sql": 1714446622.1560278,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_total_compact.sql": 1735615048.4776394,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_total_stk_entrust.sql": 1735615048.4786415,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_transfer_entrust.sql": 1714446622.158028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_uncompact.sql": 1734602458.6143606,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_unfinished.sql": 1730379846.643503,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\crdt\\ucrt_unity_video.sql": 1734602458.616362,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\data\\reload_fundacct.sql": 1746065645.6519618,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\ucrt_fund_detail.sql": 1734678980.3455677,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\ucrt_fund_real.sql": 1714446622.160028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\ucrt_fund_real_jour.sql": 1714446622.160028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\uses_fund_detail.sql": 1751801032.6394062,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\uses_fund_real.sql": 1751801032.6394062,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\fund\\uses_fund_real_jour.sql": 1751801032.6404064,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\acctstk_notice_remind_times.sql": 1746065645.6549623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\afof_entrust.sql": 1735615048.4836404,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\afof_realtime.sql": 1735615048.4846394,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\bond_account_level.sql": 1728874064.2118628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\bond_exemptricon.sql": 1718174941.0860126,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\bond_put_back.sql": 1718174941.0870123,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\bond_risk_arg.sql": 1728874064.2118628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\btoa_speacct.sql": 1728874064.2118628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\business_white_list.sql": 1746065645.6559966,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\cbp_stock.sql": 1751801032.641407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\client_agreement.sql": 1718174941.0890114,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\client_grade.sql": 1728874064.212863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\client_min_fare.sql": 1718174941.0910127,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\client_prefer.sql": 1730371405.3109217,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\debt_quota.sql": 1728874064.2138622,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_entrust_detail.sql": 1728874064.2138622,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_right.sql": 1728874064.2148628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_ufund.sql": 1728874064.2148628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_ufund_entrust.sql": 1728874064.2158632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_ustock.sql": 1728874064.2158632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\etf_ustock_entrust.sql": 1735615048.4856403,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\fund_bond_impawn_arg.sql": 1728874064.2168624,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\hkvote_stock.sql": 1728874064.2178628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\impawn_stock.sql": 1728874064.218865,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\limit_sell_stkcode.sql": 1718174941.0940118,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\limit_sell_stock.sql": 1746065645.656962,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\of_client_agreement.sql": 1718174941.0950115,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\realtime.sql": 1746065645.656962,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\repay_detail.sql": 1746065645.6579623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\secu_bond_risk.sql": 1728874064.219864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\secu_unfinished.sql": 1735615048.48864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\sesnight_order.sql": 1751801032.6424065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\shhk_equity.sql": 1730379846.6455026,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_dlsinfo.sql": 1728874064.221864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_entrust.sql": 1734602458.6183703,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_ipo_ask_result.sql": 1746065645.6579623,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_resstock.sql": 1730379846.6455026,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stb_stdholder.sql": 1720156395.0122159,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stock_firm.sql": 1718174941.0960116,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stock_locking_jour.sql": 1728874064.2238646,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stock_net.sql": 1735615048.4926395,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\stock_net_jour.sql": 1735615048.493641,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\szhk_equity.sql": 1728874064.2258632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\unity_video.sql": 1728874064.2258632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_authority_stock.sql": 1746065645.6589687,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_buy_promise.sql": 1728874064.226863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_entrust.sql": 1746065645.6589687,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_extstock_real.sql": 1746065645.6600447,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_extstock_real_jour.sql": 1746065645.6609666,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_ffare_log.sql": 1728874064.2288628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_fundacct_stkrestrict.sql": 1751801032.6434064,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_fund_account.sql": 1751801032.6424065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_stkrestrict.sql": 1751801032.6444056,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_stock_holder.sql": 1751801032.645411,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_stock_real.sql": 1746065645.6619663,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_stock_real_jour.sql": 1735615048.50264,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\uses_subequity.sql": 1731308703.4297159,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\secu\\usps_client_svrfare.sql": 1728874064.234863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\adviser_code.sql": 1728874064.234863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\adviser_product.sql": 1728874064.2358642,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\afof_agencyno.sql": 1735615048.5036407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\afof_discount.sql": 1728874064.2358642,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\afof_ffare.sql": 1728874064.2368636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\afof_quota.sql": 1728874064.2368636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\assure_package.sql": 1746065645.6619663,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bcommmodel.sql": 1728874064.2378626,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_concratio.sql": 1728874064.238863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_fin_rate.sql": 1728874064.2398643,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_impawn_arg.sql": 1728874064.240864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_rateinf.sql": 1728874064.240864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\bond_trustee_ratio.sql": 1728874064.2418618,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ccspell.sql": 1751801032.6464071,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\chfare2.sql": 1728874064.2418618,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\chfare2seg.sql": 1728874064.2428627,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\commgroup.sql": 1728874064.2428627,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\commmodelseg.sql": 1728874064.2438629,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\crdtstkadfare.sql": 1728874064.2438629,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\crdt_assunderly_arg.sql": 1746065645.662966,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\cstbfare2.sql": 1728874064.244863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\cstbfare2seg.sql": 1728874064.244863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\finexe_assure_code.sql": 1746065645.662966,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\finexe_code.sql": 1728874064.245863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\finexe_prodrate.sql": 1728874064.245863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\fundacctcomm.sql": 1728874064.2468617,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\grade_impawn_rate.sql": 1728874064.2468617,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hcommgroup.sql": 1728874064.247864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hcommmodel.sql": 1728874064.247864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hfare2.sql": 1718174941.110011,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hfare2seg.sql": 1718174941.1110122,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\hkvote_list.sql": 1728874064.2488656,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ics_etf_prod_info.sql": 1728874064.2498639,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\income_accttraderrel.sql": 1728874064.2498639,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\income_product.sql": 1746065645.6639657,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\index_component.sql": 1728874064.251863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\issue_mainacoderel.sql": 1728874064.2528634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\issue_main_level.sql": 1728874064.251863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\issue_main_relinfo.sql": 1728874064.2528634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\limit_stock_price.sql": 1728874064.253864,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ofcommmodel.sql": 1728874064.2548628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ofgradectrl.sql": 1728874064.2548628,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\of_cash_arg.sql": 1751801032.6474068,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\packagetemplet.sql": 1746065645.6649656,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\pledge_stkinfo.sql": 1728874064.2558646,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\pre_vote_code.sql": 1728874064.2558646,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\pre_vote_info.sql": 1728874064.2568676,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\product_basic_info.sql": 1751801032.648407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\product_basic_info_ext.sql": 1751801032.648407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\qrp_ptrate.sql": 1728874064.2568676,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\reits_expand_info.sql": 1751801032.649407,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\secu_bond_info.sql": 1746065645.6659658,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\secu_risk.sql": 1728874064.2578635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\sopt_window.sql": 1728874064.2578635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\special_time.sql": 1746065645.6669657,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\srp_fare2.sql": 1746065645.6669657,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\srp_fare2_seg.sql": 1746065645.6679654,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\srp_mar_ratio.sql": 1746065645.6698704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stb_arg.sql": 1728874064.2578635,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stb_delist_code.sql": 1728874064.2588632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stb_fare.sql": 1728874064.2588632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stb_qqcode.sql": 1728874064.2598631,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\stock_code_match.sql": 1746065645.6708782,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\transfer_mapping.sql": 1735615048.5046394,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucbp_srp_kind.sql": 1746065645.67187,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_acct_assure_code.sql": 1746065645.672869,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_acct_ensure_scale.sql": 1714446622.1610281,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_acct_stk_concentrate.sql": 1735615048.5066392,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_acct_underly_code.sql": 1746065645.6738687,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_assure_code.sql": 1746065645.67487,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_assure_prod_code.sql": 1714446622.1630237,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_assure_ratio.sql": 1728874064.2628634,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_assure_scale.sql": 1746065645.67487,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_black_code.sql": 1714446622.1640284,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_blocktrade_risk.sql": 1714446622.1640284,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_busi_blacklist.sql": 1728874064.2638633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_audit.sql": 1746065645.6758685,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_audit_stk.sql": 1714446622.165028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_float.sql": 1714446622.165028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_primerate.sql": 1734602458.6213636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_compact_rate.sql": 1746065645.67687,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_level_rate.sql": 1714446622.1670282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_ploy_template.sql": 1746065645.677871,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_primerate_audit.sql": 1714446622.1670282,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_primerate_str.sql": 1714446622.168028,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_risk_parameter.sql": 1751801032.6504066,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_stk_concentrate.sql": 1746065645.677871,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_stk_group.sql": 1714446622.169024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_stk_group_concentrate.sql": 1746065645.6788702,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_stk_group_concwhite.sql": 1746065645.6788702,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_sys_config.sql": 1746065645.6798694,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_time_control.sql": 1714446622.171031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_transfer_fare.sql": 1714446622.171031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\ucrt_underly_code.sql": 1746065645.6798694,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\underly_package.sql": 1746065645.68087,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_account_deploy.sql": 1746065645.68087,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_acct_rule.sql": 1751801032.6514065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_all_branch.sql": 1714446622.1720307,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_all_company.sql": 1728874064.2668638,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_arg.sql": 1714446622.1720307,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_asset_prop_deploy.sql": 1751801032.6514065,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_business_flag.sql": 1728874064.2668638,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_csdc_dicttrans.sql": 1734684439.8041148,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_dictionary.sql": 1735615048.5136392,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_dict_entry.sql": 1714446622.173031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_elig_busi_arg.sql": 1714446622.174031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_elig_video_arg.sql": 1728874064.2678633,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_error_msg.sql": 1735615048.5146406,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_extern_error.sql": 1714446622.175024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_hs_function.sql": 1714446622.175024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_init_date_model.sql": 1728874064.2688632,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_license_info.sql": 1746065645.6838717,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_sysconfig.sql": 1735615048.516641,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\upbs_umtconfig.sql": 1751801032.6534069,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\uses_busi_blacklist.sql": 1728874064.2698631,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\uses_sys_config.sql": 1746065645.68487,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_account_config.sql": 1728874064.2698631,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_authority.sql": 1751801032.6544056,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bfare2.sql": 1728874064.270863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bfare2seg.sql": 1714446622.1770313,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bondinvestorinfo.sql": 1714446622.1790242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bond_level.sql": 1746065645.6858704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_bond_rate.sql": 1714446622.1780243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_branch_prefix.sql": 1714446622.1790242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_business_status.sql": 1714446622.1790242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_cbpprice.sql": 1714446622.1800246,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_cdr_fare.sql": 1714446622.1800246,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_cfare2.sql": 1728874064.2718637,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_cfare2seg.sql": 1714446622.181032,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_coffare2.sql": 1714446622.181032,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_coffare2seg.sql": 1714446622.182031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_debtinterest.sql": 1714446622.182031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_dfare2.sql": 1714446622.182031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_dfare2seg.sql": 1714446622.1830242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_discount_model.sql": 1718174941.1160128,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_entrustway_conv.sql": 1718174941.1160128,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_etf_code.sql": 1714446622.1830242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_etf_component.sql": 1728874064.2728636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_etf_exchdate.sql": 1714446622.1840243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_exchange_time.sql": 1714446622.1850338,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_exch_arg.sql": 1714446622.1850338,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_exit_stkcode.sql": 1746065645.686872,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_ffare.sql": 1714446622.1860242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_fixed_price_params.sql": 1714446622.1860242,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_fjy_stkinfo.sql": 1714446622.1870308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_hkquota.sql": 1728874064.2728636,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_income_agency.sql": 1714446622.1870308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_income_saler.sql": 1746065645.68787,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_income_stkcode.sql": 1714446622.1880243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_ipo_seat_contrast.sql": 1714446622.1880243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_login_pbu.sql": 1746065645.6888704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_nsrisk_info.sql": 1714446622.1880243,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_ofcode.sql": 1730462256.2088063,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_offare2.sql": 1728874064.274863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_offare2seg.sql": 1714446622.189031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_pertrans_bindparam.sql": 1734602458.6243606,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_price.sql": 1746065645.6888704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_promise_info.sql": 1714446622.1900308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_qrp_code.sql": 1728874064.274863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_reserve_account.sql": 1751801032.6544056,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_seats.sql": 1714446622.1910312,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_securate.sql": 1718174941.1170106,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_sopt_code.sql": 1728874064.275863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_sopt_tax.sql": 1728874064.275863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_spe_busin_date.sql": 1730379846.6535032,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_spread_type.sql": 1714446622.1910312,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_srp_code.sql": 1746065645.68987,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_srp_rate.sql": 1746065645.68987,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stbfare2.sql": 1714446622.192024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stbfare2seg.sql": 1714446622.193031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stb_lay_code.sql": 1714446622.192024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stb_stkcode.sql": 1714446622.192024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stkadfare.sql": 1714446622.193031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stkcode.sql": 1746065645.6908696,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stkcode_ext.sql": 1746065645.6908696,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stkmodel.sql": 1714446622.194024,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stknotice_info.sql": 1746065645.69187,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_stktype.sql": 1714446622.1950314,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_svrfare.sql": 1746065645.6928704,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_trader_investor_right.sql": 1714446622.196031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_trade_name.sql": 1714446622.196031,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_transfer_fare.sql": 1728874064.277863,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_vote_code.sql": 1714446622.1970308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_vote_info.sql": 1714446622.1970308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_vote_list.sql": 1714446622.1970308,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_warrant_code.sql": 1714446622.1980333,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\user\\usps_witcode.sql": 1714446622.1980333,
"E:\\dtsCode\\dts\\DevCodes\\broker-dcp\\dcp-resources\\src\\main\\resources\\Uf20ToUft\\asset\\ucrt_fund_revert_jour.sql": 1752492566.2406774
}

View File

@@ -0,0 +1,335 @@
import sqlite3
import xml.etree.ElementTree as ET
from dataclasses import dataclass, field
from typing import List, Tuple, Optional, Dict, Any
import re
import chardet
import json
import os
@dataclass
class TableConfig:
db_name: str # 数据库文件名
enabled: bool # 是否启用该配置
table_name: str
data_source: str # 数据来源 uft30 uf20 dts
xml_file_path: str
xml_root: str
table_create_sql: str
table_insert_sql: str
xml_para_name: List[str] = field(default_factory=list)
para_name: List[str] = field(default_factory=list)
xml_childs: List[str] = field(default_factory=list)
xml_children: str = ""
xml_sub_children: str = ""
xml_get_type: str = '0' # 0:元素文本, 1:属性值, 2:子元素的属性
data: List[Tuple] = field(default_factory=list)
class XMLtoSQLiteImporter:
def __init__(self):
self.conn_cache = {} # 数据库连接缓存
def get_db_connection(self, db_name: str) -> sqlite3.Connection:
"""获取数据库连接(带缓存)"""
if db_name not in self.conn_cache:
# 确保数据库目录存在
db_dir = os.path.dirname(db_name)
if db_dir and not os.path.exists(db_dir):
os.makedirs(db_dir)
# 创建新的数据库连接
self.conn_cache[db_name] = sqlite3.connect(db_name)
self.conn_cache[db_name].execute("PRAGMA journal_mode = WAL;")
return self.conn_cache[db_name]
def close_db_connections(self):
"""关闭所有数据库连接"""
for conn in self.conn_cache.values():
conn.close()
self.conn_cache = {}
def create_table(self, conn: sqlite3.Connection, config: TableConfig):
"""创建数据库表"""
with conn:
conn.execute(config.table_create_sql)
print(f"已创建表: {config.table_name}")
def insert_data(self, conn: sqlite3.Connection, config: TableConfig):
"""插入数据到数据库"""
if not config.data:
print(f"警告: 表 {config.table_name} 无数据可导入")
return
with conn:
conn.executemany(config.table_insert_sql, config.data)
print(f"成功导入 {len(config.data)} 条记录到表 {config.table_name}")
def get_element_text(self, element, tag: str) -> str:
"""获取子元素文本内容"""
child = element.find(tag)
return child.text.strip() if child is not None and child.text else ""
def get_child_node(self, root, path: List[str]) -> Optional[ET.Element]:
"""递归获取嵌套XML节点"""
node = root
for tag in path:
node = node.find(tag)
if node is None:
print(f"警告: 找不到XML节点: {tag}")
return None
return node
def convert_xml_encoding(self, file_path: str) -> str:
"""检测XML文件编码并转换为UTF-8字符串"""
# 检查文件是否存在
if not os.path.exists(file_path):
raise FileNotFoundError(f"XML文件未找到: {file_path}")
# 以二进制模式读取文件
with open(file_path, 'rb') as f:
raw_data = f.read()
# 检测文件编码
result = chardet.detect(raw_data)
encoding = result['encoding'] if result['encoding'] else 'utf-8'
# 尝试解码
try:
content = raw_data.decode(encoding)
except UnicodeDecodeError:
# 如果检测的编码无效,尝试常见的中文编码
try:
content = raw_data.decode('gbk')
except:
# 最终兜底方案
content = raw_data.decode('utf-8', errors='ignore')
# 替换XML声明中的编码为UTF-8
xml_declaration = re.search(r'<\?xml.*?\?>', content, re.DOTALL)
if xml_declaration:
# 替换编码属性为UTF-8
decl = xml_declaration.group(0)
decl = re.sub(r'encoding\s*=\s*["\'][^"\']*["\']', 'encoding="UTF-8"', decl)
content = decl + content[xml_declaration.end():]
else:
# 如果没有声明添加UTF-8声明
content = '<?xml version="1.0" encoding="UTF-8"?>' + content
return content
def parse_xml(self, config: TableConfig, uf20_path='D:\\Sources\\经纪业务运营平台V21\\', uft30_path='F:\\sesCode\\') -> bool:
"""解析XML文件并提取数据"""
try:
# 使用编码转换函数处理XML文件
xml_file_path = config.xml_file_path
print('xmlfilepath11', xml_file_path)
print('data_source:', config.data_source)
if config.data_source == 'uf20':
xml_file_path = uf20_path + xml_file_path
elif config.data_source == 'uft30':
xml_file_path = uft30_path + xml_file_path
print('xmlfilepath', xml_file_path)
xml_content = self.convert_xml_encoding(xml_file_path)
# 解析处理后的XML内容
root = ET.fromstring(xml_content)
# 检查根节点是否正确
if root.tag != config.xml_root:
print(f"错误: XML根节点不匹配! 期望: {config.xml_root}, 实际: {root.tag}")
return False
# 获取起始节点
start_node = root
if config.xml_childs:
start_node = self.get_child_node(root, config.xml_childs)
if start_node is None:
print(f"错误: 找不到XML路径: {config.xml_childs}")
return False
# 模式0: 读取子元素的文本内容
if config.xml_get_type == '0':
for node in start_node.findall(config.xml_children):
values = []
for param in config.xml_para_name:
values.append(self.get_element_text(node, param))
config.data.append(tuple(values))
# 模式1: 读取元素的属性值
elif config.xml_get_type == '1':
for node in start_node.findall(config.xml_children):
values = []
for param in config.xml_para_name:
# 使用get方法获取属性值没有则返回空字符串
values.append(node.get(param, "").strip())
config.data.append(tuple(values))
# 模式2: 多层嵌套结构 (parent -> children -> sub_children)
elif config.xml_get_type == '2':
if not config.xml_sub_children:
print("错误: 模式2需要设置xml_sub_children参数")
return False
for parent_node in start_node.findall(config.xml_children):
for node in parent_node.findall(config.xml_sub_children):
values = []
for param in config.xml_para_name:
# 使用get方法获取属性值
values.append(node.get(param, "").strip())
config.data.append(tuple(values))
print(f"从XML解析出 {len(config.data)} 条记录")
return True
except Exception as e:
print(f"处理XML时出错({config.xml_file_path}): {str(e)}")
import traceback
traceback.print_exc()
return False
def import_config(self, config: TableConfig, uf20_path='D:\\Sources\\经纪业务运营平台V21\\', uft30_path='F:\\sesCode\\') -> bool:
"""执行单个配置的导入流程"""
if not config.enabled:
print(f"跳过: {config.table_name} (配置已禁用)")
return False
try:
# 获取数据库连接
conn = self.get_db_connection(config.db_name)
# 创建表
self.create_table(conn, config)
# 解析XML
if not self.parse_xml(config, uf20_path, uft30_path):
return False
# 插入数据
self.insert_data(conn, config)
return True
except sqlite3.Error as e:
print(f"数据库错误({config.table_name}): {str(e)}")
return False
def load_configs(config_file: str) -> List[TableConfig]:
"""从JSON文件加载配置"""
if not os.path.exists(config_file):
raise FileNotFoundError(f"配置文件未找到: {config_file}")
with open(config_file, 'r', encoding='utf-8') as f:
config_data = json.load(f)
configs = []
for item in config_data:
# 设置默认值
if 'db_name' not in item:
item['db_name'] = "default.db"
if 'enabled' not in item:
item['enabled'] = True
# 创建配置对象
config = TableConfig(
db_name=item['db_name'],
enabled=item['enabled'],
table_name=item['table_name'],
xml_file_path=item['xml_file_path'],
xml_root=item['xml_root'],
table_create_sql=item['table_create_sql'],
table_insert_sql=item['table_insert_sql'],
xml_para_name=item.get('xml_para_name', []),
para_name=item.get('para_name', []),
xml_childs=item.get('xml_childs', []),
xml_children=item.get('xml_children', ''),
xml_sub_children=item.get('xml_sub_children', ''),
xml_get_type=item.get('xml_get_type', '0'),
data_source=item.get('data_source', '')
)
# 确保列名和参数名数量一致
if config.xml_para_name and config.para_name:
if len(config.xml_para_name) != len(config.para_name):
print(f"警告: 表 {config.table_name} 的 xml_para_name 和 para_name 长度不一致")
configs.append(config)
print(f"已加载 {len(configs)} 个配置")
return configs
import json
def update_table_enabled(json_file_path, table_name, enable_value):
"""
更新 JSON 配置文件中指定 table_name 的 enabled 状态
:param json_file_path: JSON 文件路径
:param table_name: 要修改的表名
:param enable_value: 要设置的 enabled 值 (True/False)
:return: True 表示成功找到并修改False 表示未找到目标表
"""
try:
# 1. 读取 JSON 文件
with open(json_file_path, 'r', encoding='utf-8') as f:
config_data = json.load(f)
# 2. 查找目标配置项并更新 enabled
found = False
for item in config_data:
if item.get("table_name") == table_name:
item["enabled"] = enable_value
found = True
break
if not found:
print(f"未找到 table_name 为 '{table_name}' 的配置项")
return False
# 3. 写回文件
with open(json_file_path, 'w', encoding='utf-8') as f:
json.dump(config_data, f, ensure_ascii=False, indent=4)
print(f"成功将 {table_name} 的 enabled 设置为 {enable_value}")
return True
except Exception as e:
print(f"操作失败:{e}")
return False
def import_xml_from_config(uf20_path='D:\\Sources\\经纪业务运营平台V21\\', uft30_path='F:\\sesCode\\'):
# 配置文件路径
CONFIG_FILE = "import_config.json"
# 创建导入器
importer = XMLtoSQLiteImporter()
try:
# 加载配置
configs = load_configs(CONFIG_FILE)
# 遍历所有配置并导入
for config in configs:
if config.enabled == False:
continue
print(f"\n== 开始导入表: {config.table_name} (数据库: {config.db_name}) ==")
success = importer.import_config(config, uf20_path, uft30_path)
status = "成功" if success else "失败"
print(f"== 表 {config.table_name} 导入{status} ==")
# 重置数据准备下一次导入
config.data = []
except Exception as e:
print(f"导入过程中发生错误: {str(e)}")
import traceback
traceback.print_exc()
finally:
# 关闭所有数据库连接
importer.close_db_connections()
if __name__ == "__main__":
import_xml_from_config()

View File

@@ -0,0 +1,104 @@
[
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "sysconfig",
"data_source": "uf20",
"xml_file_path": "公共资源\\sysconfig.xml",
"xml_root": "sysconfig",
"table_create_sql": "CREATE TABLE IF NOT EXISTS sysconfig (item_id TEXT PRIMARY KEY, name TEXT, data_type TEXT, config_type TEXT, item_desc TEXT);",
"table_insert_sql": "INSERT OR REPLACE INTO sysconfig (item_id, name, data_type, config_type, item_desc) VALUES (?, ?, ?, ?, ?);",
"xml_para_name": ["id", "name", "dataType", "configType", "desc"],
"para_name": ["item_id", "name", "data_type", "config_type", "item_desc"],
"xml_childs": ["items"],
"xml_children": "sysconfigitem",
"xml_get_type": "0"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "stdfield",
"data_source": "uf20",
"xml_file_path": "公共资源\\stdfields.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS stdfield (name TEXT PRIMARY KEY, cname TEXT, type TEXT, dict TEXT, UNIQUE(name, type));",
"table_insert_sql": "INSERT OR REPLACE INTO stdfield (name, cname, type, dict) VALUES (?, ?, ?, ?);",
"xml_para_name": ["name", "cname", "type", "dict"],
"para_name": ["name", "cname", "type", "dict"],
"xml_children": "stdfield",
"xml_get_type": "1"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "maindictinfo",
"data_source": "uf20",
"xml_file_path": "公共资源\\dict.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS maindictinfo (dicType TEXT, dicSection TEXT, dicItem TEXT PRIMARY KEY, itemDesc TEXT , dataType TEXT , modifyHistory TEXT);",
"table_insert_sql": "INSERT OR REPLACE INTO maindictinfo (dicType, dicSection, dicItem, itemDesc, dataType, modifyHistory) VALUES (?, ?, ?, ?, ?, ?);",
"xml_para_name": ["dicType", "dicSection", "dicItem", "itemDesc", "dataType", "modifyHistory"],
"para_name": ["dicType", "dicSection", "dicItem", "itemDesc", "dataType", "modifyHistory"],
"xml_children": "typename",
"xml_get_type": "1"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "subdictinfo",
"data_source": "uf20",
"xml_file_path": "公共资源\\dict.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS subdictinfo (dicItem TEXT, itemDesc TEXT, dicType TEXT, childItem TEXT , desc TEXT , modifyHistory TEXT, UNIQUE(dicItem, childItem));",
"table_insert_sql": "INSERT OR REPLACE INTO subdictinfo (dicItem, itemDesc, dicType, childItem, desc, modifyHistory) VALUES (?, ?, ?, ?, ?, ?);",
"xml_para_name": ["dicItem", "itemDesc", "dicType", "childItem", "desc", "modifyHistory"],
"para_name": ["dicItem", "itemDesc", "dicType", "childItem", "desc", "modifyHistory"],
"xml_children": "itemname",
"xml_get_type": "1"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "uf20_constant",
"data_source": "uf20",
"xml_file_path": "公共资源\\constants.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS uf20_constant (name TEXT, value TEXT, description TEXT, UNIQUE(name, value));",
"table_insert_sql": "INSERT OR REPLACE INTO uf20_constant (name, value, description) VALUES (?, ?, ?);",
"xml_para_name": ["name", "value", "description"],
"para_name": ["name", "value", "description"],
"xml_children": "category",
"xml_sub_children": "constant",
"xml_get_type": "2"
},
{
"db_name": "hstool.db",
"enabled": false,
"table_name": "uf20_error",
"data_source": "uf20",
"xml_file_path": "公共资源\\errNumbers.xml",
"xml_root": "hsdoc",
"table_create_sql": "CREATE TABLE IF NOT EXISTS uf20_error (code TEXT, constant TEXT, info TEXT, UNIQUE(code, constant));",
"table_insert_sql": "INSERT OR REPLACE INTO uf20_error (code, constant, info) VALUES (?, ?, ?);",
"xml_para_name": ["code", "constant", "info"],
"para_name": ["code", "constant", "info"],
"xml_children": "type",
"xml_sub_children": "error_no",
"xml_get_type": "2"
},
{
"db_name": "hstool.db",
"enabled": true,
"table_name": "hq_info",
"data_source": "uft30",
"xml_file_path": "upub\\see_template\\split_core_sdk\\core_sdk\\fronthq\\template\\config\\uft30_biztrans_hqtransfer.xml",
"xml_root": "biztrans",
"table_create_sql": "CREATE TABLE IF NOT EXISTS hq_info2 (srcfunc TEXT, destfunc TEXT, note TEXT, UNIQUE(srcfunc, destfunc));",
"table_insert_sql": "INSERT OR REPLACE INTO hq_info2 (srcfunc, destfunc, note) VALUES (?, ?, ?);",
"xml_para_name": ["srcfunc", "destfunc", "note"],
"para_name": ["srcfunc", "destfunc", "note"],
"xml_children": "functions",
"xml_sub_children": "function",
"xml_get_type": "2"
}
]

View File

@@ -0,0 +1,206 @@
import os
import glob
from collections import defaultdict
import sqlite3
from sqlfluff.api import fix
from datetime import datetime
DB_NAME = '../hstool.db'
# 美化sql语句 使用sqlfluff太耗时了 整个流程估计要七八分钟左右
def format_with_sqlfluff(sql_code, dialect='oracle'):
return fix(sql_code, dialect=dialect)
def extract_sql_task_info(file_path):
# 初始化结果字典
result = {
'taskName': None,
'srcTable': None,
'targetTable': None,
'targetTableUniqueIndex': None,
'querySql': None
}
# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as file:
lines = file.readlines()
# 用于标记是否进入begin-end块
in_block = False
# 处理每行内容
for i, line in enumerate(lines):
# 去除行尾注释和空白
clean_line = line.split('--')[0].strip() # 去除行尾注释
clean_line = clean_line.split('/*')[0].strip() # 去除块注释开头
clean_line = clean_line.strip() # 去除前后空白
# 跳过空行
if not clean_line:
continue
# 检测是否进入[begin]-[end]块
if clean_line.lower() == '[begin]':
in_block = True
continue
if clean_line.lower() == '[end]':
in_block = False
continue
# 只在[begin]-[end]块内处理内容
if not in_block:
continue
# 处理任务信息
if clean_line.startswith('taskName:'):
result['taskName'] = clean_line.split(':', 1)[1].strip()
elif clean_line.startswith('srcTable:'):
result['srcTable'] = clean_line.split(':', 1)[1].strip()
elif clean_line.startswith('targetTable:'):
result['targetTable'] = clean_line.split(':', 1)[1].strip()
elif clean_line.startswith('targetTableUniqueIndex:'):
result['targetTableUniqueIndex'] = clean_line.split(':', 1)[1].strip()
# 处理查询SQL
elif clean_line.startswith('[querySqlBegin]'):
# SQL在下一行
if i + 1 < len(lines):
# 直接取下一行原内容(不过多处理)
querySql = lines[i + 1].strip()
# 格式化sql语句
formatted_sql = format_with_sqlfluff(querySql)
# print('格式化后的sql', formatted_sql)
result['querySql'] = formatted_sql
return result
def process_directory(directory='.'):
"""递归处理目录下所有SQL文件返回包含提取信息的字典"""
results = {
'files': [], # 所有文件信息
'by_task_name': {}, # 按任务名称组织的任务信息
'stats': {
'total_files': 0,
'processed_files': 0,
'files_with_sql': 0
}
}
# 递归查找所有SQL文件
for root, _, files in os.walk(directory):
for file in files:
if file.lower().endswith('.sql'):
file_path = os.path.join(root, file)
relative_path = os.path.relpath(file_path, directory)
results['stats']['total_files'] += 1
try:
file_info = extract_sql_task_info(file_path)
# 如果有有效数据才加入结果
if any(file_info.values()):
results['files'].append({
'file_path': relative_path, # 使用相对路径
'info': file_info
})
results['stats']['processed_files'] += 1
# 记录包含SQL查询的文件
if file_info['querySql']:
results['stats']['files_with_sql'] += 1
# 按任务名称组织结果(任务名称不为空时才添加)
if file_info['taskName']:
results['by_task_name'][file_info['taskName']] = file_info
except Exception as e:
print(f"处理文件 {relative_path} 时出错: {e}")
return results
def create_database(db_path=DB_NAME):
"""创建SQLite数据库和表结构"""
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS dts_task_info (
task_name TEXT PRIMARY KEY NOT NULL,
src_table TEXT,
target_table TEXT,
target_table_unique_index TEXT,
query_sql TEXT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
def insert_into_sqlite(task_info, db_path=DB_NAME):
"""
将任务信息导入SQLite数据库
:param task_info: extract_sql_task_info函数返回的字典
:param db_path: SQLite数据库路径
"""
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
try:
cursor.execute('''
INSERT OR REPLACE INTO dts_task_info (
task_name,
src_table,
target_table,
target_table_unique_index,
query_sql
) VALUES (?, ?, ?, ?, ?)
''', (
task_info['taskName'],
task_info['srcTable'],
task_info['targetTable'],
task_info['targetTableUniqueIndex'],
task_info['querySql']
))
conn.commit()
print(f"✅ 成功导入任务信息: {task_info['taskName']}")
except sqlite3.Error as e:
print(f"❌ 导入失败: {task_info['taskName']}, 错误: {e}")
finally:
conn.close()
# 修改后的示例用法
if __name__ == "__main__":
# 处理当前目录下所有SQL文件
directory_path = r'E:\dtsCode\dts\DevCodes\broker-dcp\dcp-resources\src\main\resources\Uf20ToUft'
all_results = process_directory(directory_path)
# 创建数据库
create_database()
# 打印并导入每个任务的信息
for file_info in all_results['files']:
task_info = file_info['info']
task_name = task_info['taskName']
# 打印任务信息
print(f"\n=== 任务: {task_name} ===")
print(f"源表: {task_info['srcTable']}")
print(f"目标表: {task_info['targetTable']}")
print(f"唯一索引: {task_info['targetTableUniqueIndex']}")
print(f"查询SQL:\n{task_info['querySql']}")
# 导入到数据库
if task_name: # 确保任务名称不为空
insert_into_sqlite(task_info)
else:
print(f"⚠️ 跳过未命名任务: {file_info['file_name']}")
# 打印统计信息
print(f"\n统计信息:")
print(f"共找到 {all_results['stats']['total_files']} 个SQL文件")
print(f"成功处理 {all_results['stats']['processed_files']} 个文件")
print(f"其中 {all_results['stats']['files_with_sql']} 个文件包含SQL查询")
print(f"成功导入 {len([f for f in all_results['files'] if f['info']['taskName']])} 个任务信息")

View File

@@ -0,0 +1,278 @@
import os
import glob
import json
from collections import defaultdict
import sqlite3
from sqlfluff.api import fix
from datetime import datetime
DB_NAME = './hstool.db'
TIMESTAMP_FILE = 'dts_timestamps.json' # 时间戳记录文件
# 美化sql语句 使用sqlfluff太耗时了 整个流程估计要七八分钟左右,后续只更新文件变动的dts语句
def format_with_sqlfluff(sql_code, dialect='oracle'):
return fix(sql_code, dialect=dialect)
def extract_sql_task_info(file_path):
# 初始化结果字典
result = {
'taskName': None,
'srcTable': None,
'targetTable': None,
'targetTableUniqueIndex': None,
'querySql': None
}
# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as file:
lines = file.readlines()
# 用于标记是否进入begin-end块
in_block = False
# 处理每行内容
for i, line in enumerate(lines):
# 去除行尾注释和空白
clean_line = line.split('--')[0].strip() # 去除行尾注释
clean_line = clean_line.split('/*')[0].strip() # 去除块注释开头
clean_line = clean_line.strip() # 去除前后空白
# 跳过空行
if not clean_line:
continue
# 检测是否进入[begin]-[end]块
if clean_line.lower() == '[begin]':
in_block = True
continue
if clean_line.lower() == '[end]':
in_block = False
continue
# 只在[begin]-[end]块内处理内容
if not in_block:
continue
# 处理任务信息
if clean_line.startswith('taskName:'):
result['taskName'] = clean_line.split(':', 1)[1].strip()
elif clean_line.startswith('srcTable:'):
result['srcTable'] = clean_line.split(':', 1)[1].strip()
elif clean_line.startswith('targetTable:'):
result['targetTable'] = clean_line.split(':', 1)[1].strip()
elif clean_line.startswith('targetTableUniqueIndex:'):
result['targetTableUniqueIndex'] = clean_line.split(':', 1)[1].strip()
# 处理查询SQL
elif clean_line.startswith('[querySqlBegin]'):
# SQL在下一行
if i + 1 < len(lines):
# 直接取下一行原内容(不过多处理)
querySql = lines[i + 1].strip()
# 格式化sql语句
if querySql: # 只有非空时才格式化
try:
formatted_sql = format_with_sqlfluff(querySql)
result['querySql'] = formatted_sql
except Exception as e:
print(f"⚠️ SQL格式化失败: {str(e)}保留原始SQL")
result['querySql'] = querySql
else:
result['querySql'] = None
return result
def load_timestamps():
"""加载时间戳记录"""
if os.path.exists(TIMESTAMP_FILE):
try:
with open(TIMESTAMP_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
except (json.JSONDecodeError, IOError) as e:
print(f"⚠️ 时间戳文件加载失败: {str(e)},将重新创建")
return {}
def save_timestamps(timestamps):
"""保存时间戳记录"""
try:
with open(TIMESTAMP_FILE, 'w', encoding='utf-8') as f:
json.dump(timestamps, f, indent=2)
print(f"📝 已更新时间戳记录: {TIMESTAMP_FILE}")
except IOError as e:
print(f"❌ 时间戳文件保存失败: {str(e)}")
def process_directory(directory='.'):
"""递归处理目录下所有SQL文件返回包含提取信息的字典"""
results = {
'files': [], # 所有文件信息
'by_task_name': {}, # 按任务名称组织的任务信息
'stats': {
'total_files': 0,
'changed_files': 0,
'processed_files': 0,
'files_with_sql': 0,
'new_files': 0
}
}
# 加载时间戳记录
timestamps = load_timestamps()
new_timestamps = timestamps.copy() # 用于记录新的时间戳
any_changes = False # 标记是否有变化
# 递归查找所有SQL文件
for root, _, files in os.walk(directory):
for file in files:
if file.lower().endswith('.sql'):
file_path = os.path.join(root, file)
abs_path = os.path.abspath(file_path) # 使用绝对路径作为key
results['stats']['total_files'] += 1
# 获取文件最后修改时间
current_mtime = os.path.getmtime(file_path)
# 检查文件是否发生变化
file_changed = False
if abs_path in timestamps:
if timestamps[abs_path] != current_mtime:
file_changed = True
results['stats']['changed_files'] += 1
print(f"文件修改: {abs_path}")
# print(f"🔄 文件修改: {abs_path}")
else:
file_changed = True
results['stats']['new_files'] += 1
print(f"新文件: {abs_path}")
# print(f"🆕 新文件: {abs_path}")
if file_changed:
# 更新当前时间戳
new_timestamps[abs_path] = current_mtime
any_changes = True
try:
file_info = extract_sql_task_info(file_path)
# 如果有有效数据才加入结果
if any(file_info.values()):
results['files'].append({
'file_path': abs_path, # 使用绝对路径
'info': file_info
})
results['stats']['processed_files'] += 1
# 记录包含SQL查询的文件
if file_info['querySql']:
results['stats']['files_with_sql'] += 1
# 按任务名称组织结果(任务名称不为空时才添加)
if file_info['taskName']:
results['by_task_name'][file_info['taskName']] = file_info
except Exception as e:
print(f"❌ 处理文件时出错: {abs_path} - {str(e)}")
# 如果有文件变化,保存时间戳记录
if any_changes:
save_timestamps(new_timestamps)
return results
def create_database(db_path=DB_NAME):
"""创建SQLite数据库和表结构"""
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS dts_task_info (
task_name TEXT PRIMARY KEY NOT NULL,
src_table TEXT,
target_table TEXT,
target_table_unique_index TEXT,
query_sql TEXT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
def insert_into_sqlite(task_info, db_path=DB_NAME):
"""
将任务信息导入SQLite数据库
:param task_info: extract_sql_task_info函数返回的字典
:param db_path: SQLite数据库路径
"""
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
try:
cursor.execute('''
INSERT OR REPLACE INTO dts_task_info (
task_name,
src_table,
target_table,
target_table_unique_index,
query_sql
) VALUES (?, ?, ?, ?, ?)
''', (
task_info['taskName'],
task_info['srcTable'],
task_info['targetTable'],
task_info['targetTableUniqueIndex'],
task_info['querySql']
))
conn.commit()
print(f"✅ 成功导入/更新: {task_info['taskName']}")
except sqlite3.Error as e:
print(f"❌ 导入失败: {task_info['taskName']} - {str(e)}")
finally:
conn.close()
def import_dts_info(dts_path='E:\\sesCode\dts\\'):
# 处理当前目录下所有SQL文件
directory_path = dts_path + 'DevCodes\\broker-dcp\\dcp-resources\\src\main\\resources\\Uf20ToUft'
all_results = process_directory(directory_path)
# 创建数据库
create_database()
# 打印并导入每个任务的信息
for file_info in all_results['files']:
task_info = file_info['info']
task_name = task_info['taskName']
# 打印任务信息
if task_name:
print(f"\n=== 任务: {task_name} ===")
else:
print(f"\n=== 未命名任务 ===")
# print(f"文件路径: {file_info['file_path']}")
# print(f"源表: {task_info['srcTable']}")
# print(f"目标表: {task_info['targetTable']}")
# print(f"唯一索引: {task_info['targetTableUniqueIndex']}")
# print(f"查询SQL:\n{task_info['querySql']}")
# 导入到数据库
if task_name: # 确保任务名称不为空
insert_into_sqlite(task_info)
else:
print(f"⚠️ 跳过未命名任务: {file_info['file_path']}")
# 打印统计信息
print(f"\n统计信息:")
print(f"扫描文件总数: {all_results['stats']['total_files']}")
print(f"处理文件数: {all_results['stats']['processed_files']}")
print(f" - 新文件: {all_results['stats']['new_files']}")
print(f" - 修改文件: {all_results['stats']['changed_files']}")
print(f"包含SQL查询的文件: {all_results['stats']['files_with_sql']}")
print(f"成功导入任务数: {len([f for f in all_results['files'] if f['info']['taskName']])}")
# 修改后的示例用法
if __name__ == "__main__":
import_dts_info()

335
public.py Normal file
View File

@@ -0,0 +1,335 @@
import re
import json
# 提取代码中函数名称
import re
import os
import xml.etree.ElementTree as ET
def debug_print(*args, sep=' ', end='\n', file=None, flush=False):
data = read_json_file('config.json')
try:
debug = data['debug']
except Exception:
debug = 'true'
if debug == 'true':
print(*args, sep=sep, end=end, file=file, flush=flush)
# 提取文件后缀
def extract_file_extension(file_path):
# 正则表达式匹配文件扩展名,即最后一个`.`之后的内容
match = re.search(r'\.([^.]+)$', file_path)
if match:
return match.group(1)
else:
return None
# file_path = r"E:\sesCode_行情\upub\dev_codes\uftbusiness\sysargpub\LS_SYSARGPUB_UMTCONFIG_GET.uftservice"
# print("提取的文件后缀:", extract_file_extension(file_path))
# 提取文件名称
def extract_filename(path):
"""
从路径中提取不带后缀的文件名
:param path: Windows文件路径
:return: 不带后缀的文件名
"""
# 获取路径中的文件名(带后缀)
filename_with_ext = os.path.basename(path)
# 分割文件名和后缀
filename, _ = os.path.splitext(filename_with_ext)
return filename
# 提取文件中的函数名称和功能号
def extract_name_functionNo(xml_str):
# 正则表达式模式
pattern = r'chineseName="([^"]+)".*objectId="([^"]+)"'
# 使用findall方法提取匹配项
matches = re.findall(pattern, xml_str)
if matches:
chinese_name, object_id = matches[0]
return matches[0]
# print(f"chineseName: {chinese_name}")
# print(f"objectId: {object_id}")
else:
# print("没有找到匹配的值")
return None
#xml_str = '<business:Function xmlns:business="http://www.hundsun.com/ares/studio/uft/business/1.0.0" chineseName="AF_融资融券公用_个人集中度限额获取" objectId="3968540">'
# xml_str = '<business:Service xmlns:business="http://www.hundsun.com/ares/studio/uft/business/1.0.0" chineseName="LS_证券行情_行情缓存更新" description="用于行情服务器转UDP更新闭式标志、价格等信息" objectId="970398" sysStatus="系统就绪" id="e088d972-eed4-45a5-aabc-86b2c569986b">'
# chinese_name, object_id = extract_name_functionNo(xml_str)
# print(f"chineseName: {chinese_name}")
# print(f"objectId: {object_id}")
# 读取文件第二行内容
def read_second_line(file_path):
"""
读取指定文件的第二行内容并返回。
参数:
file_path (str): 文件的路径。
返回:
str: 第二行的内容如果没有第二行则返回None。
"""
try:
with open(file_path, 'r', encoding='utf-8') as file:
# 跳过第一行
next(file)
# 读取第二行
second_line = next(file, None)
return second_line.strip() if second_line else None
except FileNotFoundError:
print(f"文件 {file_path} 未找到。")
return None
except Exception as e:
print(f"读取文件时发生错误: {e}")
return None
# 读取文件第五行内容
def read_five_line(file_path):
"""
读取指定文件的第二行内容并返回。
参数:
file_path (str): 文件的路径。
返回:
str: 第二行的内容如果没有第二行则返回None。
"""
try:
with open(file_path, 'r', encoding='utf-8') as file:
# 跳过第一行
next(file)
next(file)
next(file)
next(file)
# 读取第五行
second_line = next(file, None)
return second_line.strip() if second_line else None
except FileNotFoundError:
print(f"文件 {file_path} 未找到。")
return None
except Exception as e:
print(f"读取文件时发生错误: {e}")
return None
# 提取文件中的函数名称和功能号
def uf20_extract_name_functionNo(xml_str):
# 正则表达式模式
# pattern = r'objectId="([^"]+)".*englishName="([^"]+)"'
# 20250714 fix 修复 englishName为空时提取失败问题
pattern = r'objectId="([^"]*)"[^>]*englishName="([^"]*)"'
# 使用findall方法提取匹配项
matches = re.findall(pattern, xml_str)
if matches:
chinese_name, object_id = matches[0]
return matches[0]
# print(f"chineseName: {chinese_name}")
# print(f"objectId: {object_id}")
else:
# print("没有找到匹配的值")
return None
# 20250807 add 增加判断函数名是否合法
def extract_and_check_prefix(input_str):
# 找到第一个左方括号的位置
bracket_index = input_str.find('[')
if bracket_index != -1:
# 提取第一个 [ 之前的内容
prefix = input_str[:bracket_index]
# 检查是否为 <M>
# 20250823 fix 修复内存<I>等标记无法识别问题(内存与UF20伪代码不一致导致) 检查是否为 <M> <I>或者<IM>
is_m_prefix = prefix == "&lt;M&gt;" or prefix == '' or prefix == "<I>" or prefix == "<IM>" or prefix == "<MI>" or prefix == "<M>"
return prefix, is_m_prefix
else:
# 如果没有 [ ,整个字符串作为前缀
return input_str, input_str == " &lt;M&gt;"
# text = "[LS_外部接口(证券交易)_资金余额更新][][serial_no=@serial_no, enable_balance = @enable_balance, entrust_buy_balance_t = @entrust_buy_balance_t, business_frozen_balance_t = @business_frozen_balance_t][node_no = @partition_no, timeout = @time_out]"
def match_func_name(text):
# 正则表达式匹配第一个中括号内的内容
pattern = r'\[(.*?)\]'
text = text.strip()
if text.startswith("//") or text.startswith("<histories"):
return "None"
# 使用re模块的search函数查找第一个匹配项
match = re.search(pattern, text)
if match:
# 20250825 add 增加判断函数名是否合法
prefix, is_m = extract_and_check_prefix(text)
if is_m == False:
return "None"
content = match.group(1) # group(1)获取第一个括号内的内容
# if content == 'AF_系统公用_动态sql执行':
# debug_print(text)
# debug_print(content)
return content
else:
return "None"
# print(match_func_name(text))
# 判断字符串是否在文件中
def check_string_in_file(file_path, target_string):
try:
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
if target_string in content:
return True
else:
return False
except FileNotFoundError:
print(f"The file {file_path} does not exist.")
return False
except Exception as e:
print(f"An error occurred: {e}")
return False
def load_config(file_path):
"""读取JSON配置文件"""
try:
with open(file_path, 'r', encoding='utf-8') as file:
return json.load(file)
except FileNotFoundError:
print(f"错误:文件 {file_path} 不存在")
return None
except json.JSONDecodeError:
print(f"错误:文件 {file_path} 不是有效的JSON格式")
return None
def save_config(file_path, config_data):
"""保存配置到JSON文件"""
try:
with open(file_path, 'w', encoding='utf-8') as file:
json.dump(config_data, file, indent=4, ensure_ascii=False)
print(f"配置已成功保存到 {file_path}")
except Exception as e:
print(f"保存文件时出错:{e}")
'''
# 使用示例
if __name__ == "__main__":
config_file = "config.json" # JSON文件路径
# 读取配置
config = load_config(config_file)
if config:
print("当前配置内容:")
print(json.dumps(config, indent=4, ensure_ascii=False))
# 修改配置示例将debug改为true
config["debug"] = "true"
# 保存修改后的配置
save_config(config_file, config)
'''
# 加载json配置
def read_json_file(file_path):
try:
with open(file_path, 'r', encoding='utf-8') as file:
data = json.load(file)
return data
except FileNotFoundError:
print(f"File not found: {file_path}")
return None
except json.JSONDecodeError:
print(f"Failed to decode JSON from file: {file_path}")
return None
except Exception as e:
print(f"An error occurred: {e}")
return None
# 修改json配置
def modify_json_config(file_path, dir = '', func = ''):
try:
# 读取 JSON 文件
with open(file_path, 'r', encoding='utf-8') as file:
config = json.load(file)
# 修改配置
if dir != '':
config['dir']= dir
if func != '':
config['function_no'] = func
# 写回修改后的配置
with open(file_path, 'w', encoding='utf-8') as file:
json.dump(config, file, indent=4)
print("Configuration updated successfully.")
except FileNotFoundError:
print(f"File not found: {file_path}")
except json.JSONDecodeError:
print(f"Failed to decode JSON from file: {file_path}")
except Exception as e:
print(f"An error occurred: {e}")
# 20250825 读取UF20的AS的moudel.xml文件内容个性化需求可以用于搜索涉及so
def read_module_xml(file_path):
try:
# 解析XML文件
tree = ET.parse(file_path)
root = tree.getroot()
# 查找info元素
info_element = root.find('info')
if info_element is not None:
# 获取ename和database属性
ename = info_element.get('ename', 'a')
database = info_element.get('database', 'a')
print(f"ename: {ename}")
print(f"database: {database}")
return ename, database
else:
print("未找到info元素")
except ET.ParseError as e:
print(f"XML解析错误: {e}")
except FileNotFoundError:
print(f"文件未找到: {file_path}")
except Exception as e:
print(f"发生错误: {e}")
def read_ls_module_xml(file_path):
try:
# 解析XML文件
tree = ET.parse(file_path)
root = tree.getroot()
# 查找info元素
info_element = root.find('info')
if info_element is not None:
# 获取ename和database属性
ename = info_element.get('ename', '')
print(f"ename: {ename}")
return ename
else:
print("未找到info元素")
except ET.ParseError as e:
print(f"XML解析错误: {e}")
except FileNotFoundError:
print(f"文件未找到: {file_path}")
except Exception as e:
print(f"发生错误: {e}")
def safe_comma_string_to_list(input_str):
"""安全处理逗号分隔字符串包括空字符串和None值"""
if input_str is None:
return []
return [item.strip() for item in input_str.split(';') if item.strip()]

16
readme.md Normal file
View File

@@ -0,0 +1,16 @@
### 使用方法
1.Python版本Python 3.10.0以上
2.pip install -r requirements.txt安装包
3.python app.py运行
### python虚拟环境
1.创建虚拟环境
python -m venv .venv
2.启用虚拟环境
source .venv/bin/activate

2
requirements.txt Normal file
View File

@@ -0,0 +1,2 @@
Flask==3.0.2
flask-cors==6.0.1

56
requirements.txt.bak Normal file
View File

@@ -0,0 +1,56 @@
Flask==3.0.2
flask-cors==6.0.1
pandas==2.3.2
altgraph==0.17.4
blinker==1.9.0
cabarchive==0.2.4
certifi==2025.10.5
chardet==5.2.0
charset-normalizer==3.4.4
click==8.2.1
colorama==0.4.6
cx_Freeze==8.4.0
cx_Logging==3.2.1
diff_cover==9.6.0
et_xmlfile==2.0.0
exceptiongroup==1.3.0
filelock==3.19.1
Flask==3.0.2
flask-cors==6.0.1
idna==3.11
iniconfig==2.1.0
itsdangerous==2.2.0
Jinja2==3.1.6
lief==0.16.6
MarkupSafe==3.0.2
numpy==2.2.6
openpyxl==3.2.0b1
packaging==25.0
pandas==2.3.2
pathspec==0.12.1
pefile==2023.2.7
platformdirs==4.4.0
pluggy==1.6.0
Pygments==2.19.2
pyinstaller==6.16.0
pyinstaller-hooks-contrib==2025.8
pytest==8.4.1
python-dateutil==2.9.0.post0
pytz==2025.2
pywin32-ctypes==0.2.3
PyYAML==6.0.2
regex==2025.8.29
requests==2.32.5
retrying==1.4.2
six==1.17.0
sqlfluff==3.4.2
striprtf==0.0.29
tblib==3.1.0
toml==0.10.2
tomli==2.2.1
tqdm==4.67.1
typing_extensions==4.15.0
tzdata==2025.2
urllib3==2.5.0
Werkzeug==3.1.3

3
run_py_hidden.vbs Normal file
View File

@@ -0,0 +1,3 @@
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd /c F:\sescode_review\toolset\hstools\py-hstools\venv\Scripts\pythonw.exe -X utf8 F:\sescode_review\toolset\hstools\py-hstools\app.py >> app.log 2>&1", 0, False
Set WshShell = Nothing

12
sql/init_date.sql Normal file
View File

@@ -0,0 +1,12 @@
delete from upbs_arg;
delete from usps_exch_arg;
insert into upbs_arg (BRANCH_NO, CHECK_ID, COUNTER_TYPE, INIT_DATE, SYS_STATUS, SYS_NAME, TRANSACTION_NO) values (0, ' ', ' ', {init_date}, '1', '初始化', 0);
insert into usps_exch_arg (EXCHANGE_STATUS, EXCHANGE_TYPE, INIT_DATE, MONEY_TYPE, SEAT_SOURCE, WITHDRAW, TRANSACTION_NO, SEAT_PREFIX_LEN) values ('1', '2', {init_date}, '0', '0', '1', 0, 0);
insert into usps_exch_arg (EXCHANGE_STATUS, EXCHANGE_TYPE, INIT_DATE, MONEY_TYPE, SEAT_SOURCE, WITHDRAW, TRANSACTION_NO, SEAT_PREFIX_LEN) values ('1', '1', {init_date}, '0', '1', '1', 0, 0);
insert into usps_exch_arg (EXCHANGE_STATUS, EXCHANGE_TYPE, INIT_DATE, MONEY_TYPE, SEAT_SOURCE, WITHDRAW, TRANSACTION_NO, SEAT_PREFIX_LEN) values ('1', 'G', {init_date}, '0', '0', '1', 0, 0);
insert into usps_exch_arg (EXCHANGE_STATUS, EXCHANGE_TYPE, INIT_DATE, MONEY_TYPE, SEAT_SOURCE, WITHDRAW, TRANSACTION_NO, SEAT_PREFIX_LEN) values ('1', 'S', {init_date}, '0', '0', '1', 0, 0);
insert into usps_exch_arg (EXCHANGE_STATUS, EXCHANGE_TYPE, INIT_DATE, MONEY_TYPE, SEAT_SOURCE, WITHDRAW, TRANSACTION_NO, SEAT_PREFIX_LEN) values ('1', '3', {init_date}, '0', '0', '1', 0, 0);
insert into usps_exch_arg (EXCHANGE_STATUS, EXCHANGE_TYPE, INIT_DATE, MONEY_TYPE, SEAT_SOURCE, WITHDRAW, TRANSACTION_NO, SEAT_PREFIX_LEN) values ('1', '9', {init_date}, '0', '1', '1', 0, 0);
insert into usps_exch_arg (EXCHANGE_STATUS, EXCHANGE_TYPE, INIT_DATE, MONEY_TYPE, SEAT_SOURCE, WITHDRAW, TRANSACTION_NO, SEAT_PREFIX_LEN) values ('1', 'D', {init_date}, '0', '0', '1', 0, 0);
insert into usps_exch_arg (EXCHANGE_STATUS, EXCHANGE_TYPE, INIT_DATE, MONEY_TYPE, SEAT_SOURCE, WITHDRAW, TRANSACTION_NO, SEAT_PREFIX_LEN) values ('1', 'A', {init_date}, '0', '0', '1', 0, 0);
insert into usps_exch_arg (EXCHANGE_STATUS, EXCHANGE_TYPE, INIT_DATE, MONEY_TYPE, SEAT_SOURCE, WITHDRAW, TRANSACTION_NO, SEAT_PREFIX_LEN) values ('1', 'R', {init_date}, '0', '0', '1', 0, 0);

30
t2sdk.ini Normal file
View File

@@ -0,0 +1,30 @@
[t2sdk]
;<3B><><EFBFBD>֤<EFBFBD>ļ<EFBFBD>
license_file=client_license.dat
;servers=192.168.39.82:9434
servers=10.20.163.102:14666
login_name=
init_recv_buf_size=102400
init_send_buf_size=102400
send_queue_size=100000
errormsg=errormsg.ini
sendcount=10
senddir=/home/hundsun/scanfile/test/
;lang=1033
[proxy]
proxy_type=
ip=127.0.0.1
port=
user_name=guest
password=888888
[safe]
safe_level=none
client_id=123456
comm_pwd=888888
cert_file=xxx.pem
cert_pwd=xxxxxxxx
;safe_level=ssl
;client_id=123456
;comm_pwd=888888
;cert_file=ufxclient.pfx
;cert_pwd=ufxclient

0
t2sdk/__init__.py Normal file
View File

0
t2sdk/cest.py Normal file
View File

1
t2sdk/client_license.dat Normal file
View File

@@ -0,0 +1 @@
yNIOaDT0jJZ2UXTBD45DExCndFsgThyb//ZDl2L9mkd603SwXFuRgwFgFg==

BIN
t2sdk/license.dat Normal file

Binary file not shown.

69
t2sdk/pyCallBack.py Normal file
View File

@@ -0,0 +1,69 @@
# coding=utf-8
from importlib import reload # Python 3 推荐方式
import traceback
import sys
reload(sys)
sys.path.append(r"F:\sescode_review\toolset\hstools\py-hstools\cest")
import py_t2sdk
def PrintUnpack(lpUnpack):
iDataSetCount = lpUnpack.GetDatasetCount()
index = 0
print('count '+str(iDataSetCount))
while index < iDataSetCount :
lpUnpack.SetCurrentDatasetByIndex(index)
iRowCount = lpUnpack.GetRowCount()
RowIndex = 0
while RowIndex < iRowCount:
iColCount = lpUnpack.GetColCount()
iColIndex = 0
while iColIndex < iColCount:
ColType = lpUnpack.GetColType(iColIndex)
if ColType == 'S':
print(lpUnpack.GetColName(iColIndex) + ':' + lpUnpack.GetStrByIndex(iColIndex))
elif ColType == 'I':
print(lpUnpack.GetColName(iColIndex) + ':' + str(lpUnpack.GetIntByIndex(iColIndex)))
elif ColType == 'C':
print(lpUnpack.GetColName(iColIndex) + ':' + lpUnpack.GetCharByIndex(iColIndex))
elif ((ColType == 'D') | (ColType == 'F')):
print(lpUnpack.GetColName(iColIndex) + ':' + str(lpUnpack.GetDoubleByIndex(iColIndex)))
iColIndex += 1
lpUnpack.Next()
RowIndex += 1
index += 1
class pyCallBack:
def __init__(self):
print('init')
def OnRegister(self):
print('OnRegister')
def OnClose(self):
print('OnClose')
def OnReceivedBiz(self):
print('OnReceivedBiz')
def OnReceivedBizEx(self):
print('OnReceivedBizEx')
def OnReceivedBizMsg(self,hSend,sBuff,iLenght):
try:
print('OnReceivedBizMsg')
lpBizMsg = py_t2sdk.pyIBizMessage()
iRet = lpBizMsg.SetBuff(sBuff,iLenght)
iRet = lpBizMsg.GetErrorNo()
print(iRet)
if iRet == 0:
buf,len = lpBizMsg.GetContent()
LoginUnPack = py_t2sdk.pyIF2UnPacker()
LoginUnPack.Open(buf,len)
PrintUnpack(LoginUnPack)
LoginUnPack.Release()
else:
print(iRet)
print(lpBizMsg.GetErrorInfo())
lpBizMsg.Release()
except:
traceback.print_exc()
finally:
print('pyCallBack finally')

BIN
t2sdk/t2sdk.dll Normal file

Binary file not shown.

30
t2sdk/t2sdk.ini Normal file
View File

@@ -0,0 +1,30 @@
[t2sdk]
;<3B><><EFBFBD>֤<EFBFBD>ļ<EFBFBD>
license_file=client_license.dat
;servers=192.168.39.82:9434
servers=10.20.163.102:14666
login_name=
init_recv_buf_size=102400
init_send_buf_size=102400
send_queue_size=100000
errormsg=errormsg.ini
sendcount=10
senddir=/home/hundsun/scanfile/test/
;lang=1033
[proxy]
proxy_type=
ip=127.0.0.1
port=
user_name=guest
password=888888
[safe]
safe_level=none
client_id=123456
comm_pwd=888888
cert_file=xxx.pem
cert_pwd=xxxxxxxx
;safe_level=ssl
;client_id=123456
;comm_pwd=888888
;cert_file=ufxclient.pfx
;cert_pwd=ufxclient

BIN
t2sdk/t2sdk.lib Normal file

Binary file not shown.

200
t2sdk/t2sdk_demo_syn.py Normal file
View File

@@ -0,0 +1,200 @@
# coding=utf-8
from importlib import reload # Python 3 推荐方式
from datetime import datetime
from array import array
import time
import threading
import traceback
import sys
reload(sys)
# 添加.pyd文件所在的目录路径可以是绝对路径或相对路径
sys.path.append(r"F:\sescode_review\toolset\hstools\py-hstools\t2sdk")
import py_t2sdk
# 打包
def GetT2Pack(mdbsql):
pLoginPack = py_t2sdk.pyIF2Packer()
pLoginPack.BeginPack()
if mdbsql.endswith('.sql'):
with open('.\sql\\' + mdbsql, "r", encoding="utf-8") as file:
content = file.read() # 读取整个文件内容到字符串
# print(content)
# 获取当天日期格式YYYYMMDD
today = datetime.now().strftime("%Y%m%d") # 例如20250903
# 替换占位符
sql_final = content.format(init_date=today) # 替换 {init_date}
else:
sql_final = mdbsql
print('len:', len(sql_final))
# 添加包体
pLoginPack.AddField('sql', 'S', len(sql_final)*1.5, 0)
if 'show tables' not in sql_final:
pLoginPack.AddField('general', 'S')
pLoginPack.AddStr(sql_final)
if 'show' not in sql_final:
pLoginPack.AddStr(" ")
pLoginPack.EndPack()
return pLoginPack
def GetT2Msg(lpPack, t2FunctionNo, t2SystemNo):
pyMsg = py_t2sdk.pyIBizMessage()
pyMsg.SetFunction(t2FunctionNo)
pyMsg.SetSystemNo(t2SystemNo)
pyMsg.SetPacketType(0)
pyMsg.SetContent(lpPack.GetPackBuf(),lpPack.GetPackLen())
return pyMsg
def PrintUnpack(lpUnpack):
iDataSetCount = lpUnpack.GetDatasetCount()
index = 0
print('count ', iDataSetCount)
print('开始解包')
while index < iDataSetCount:
lpUnpack.SetCurrentDatasetByIndex(index)
iRowCount = lpUnpack.GetRowCount()
print('iRowCount:', iRowCount)
RowIndex = 0
while RowIndex < iRowCount:
iColCount = lpUnpack.GetColCount()
print('iColCount', iColCount)
iColIndex = 0
while iColIndex < iColCount:
ColType = lpUnpack.GetColType(iColIndex)
print('coltype', ColType)
if ColType == 'S':
print(lpUnpack.GetColName(iColIndex) + ':' + lpUnpack.GetStrByIndex(iColIndex))
elif ColType == 'I':
print(lpUnpack.GetColName(iColIndex) + ':' + str(lpUnpack.GetIntByIndex(iColIndex)))
elif ColType == 'C':
print(lpUnpack.GetColName(iColIndex) + ':' + lpUnpack.GetCharByIndex(iColIndex))
elif ((ColType == 'D') | (ColType == 'F')):
print(lpUnpack.GetColName(iColIndex) + ':' + str(lpUnpack.GetDoubleByIndex(iColIndex)))
iColIndex += 1
lpUnpack.Next()
RowIndex += 1
index += 1
print('结束解包')
# 将返回结果集转换字典数组
def UnpackToMapArr(lpUnpack):
iDataSetCount = lpUnpack.GetDatasetCount()
index = 0
print('count ', iDataSetCount)
print('开始解包')
result = []
while index < iDataSetCount:
lpUnpack.SetCurrentDatasetByIndex(index)
iRowCount = lpUnpack.GetRowCount()
print('iRowCount:', iRowCount)
RowIndex = 0
while RowIndex < iRowCount:
iColCount = lpUnpack.GetColCount()
# print('iColCount', iColCount)
iColIndex = 0
arr = {}
while iColIndex < iColCount:
ColType = lpUnpack.GetColType(iColIndex)
# print('coltype', ColType)
if ColType == 'S':
# print(lpUnpack.GetColName(iColIndex) + ':' + lpUnpack.GetStrByIndex(iColIndex))
arr[lpUnpack.GetColName(iColIndex)] = lpUnpack.GetStrByIndex(iColIndex)
elif ColType == 'I':
# print(lpUnpack.GetColName(iColIndex) + ':' + str(lpUnpack.GetIntByIndex(iColIndex)))
arr[lpUnpack.GetColName(iColIndex)] = str(lpUnpack.GetIntByIndex(iColIndex))
elif ColType == 'C':
# print(lpUnpack.GetColName(iColIndex) + ':' + lpUnpack.GetCharByIndex(iColIndex))
arr[lpUnpack.GetColName(iColIndex)] = lpUnpack.GetCharByIndex(iColIndex)
elif ((ColType == 'D') | (ColType == 'F')):
# print(lpUnpack.GetColName(iColIndex) + ':' + str(lpUnpack.GetDoubleByIndex(iColIndex)))
arr[lpUnpack.GetColName(iColIndex)] = str(lpUnpack.GetDoubleByIndex(iColIndex))
iColIndex += 1
result.append(arr)
lpUnpack.Next()
RowIndex += 1
index += 1
# print('结束解包')
return result
def execMdbSql(t2Host,t2Port,mdbNodeName,mdbSql):
py_t2sdk.PyT2sdkInitialize()
# 初始化配置
config = py_t2sdk.pyCConfigInterface()
config.Load('t2sdk.ini')
# 重新设置t2地址
config.SetString('t2sdk','servers', t2Host + ":" + t2Port)
connect = py_t2sdk.pyConnectionInterface(config)
pCallBack = py_t2sdk.pyCallbackInterface('pyCallBack', 'pyCallBack')
pCallBack.InitInstance()
ret = connect.Create2BizMsg(pCallBack)
result = []
if 'cbp' in mdbNodeName:
t2FunctionNo = 508901
else:
t2FunctionNo = 508902
last_two = mdbNodeName[-2:] # 提取最后两位字符
t2SystemNo = int(last_two) # 转换为整数
if ret != 0:
print('creat faild!!')
exit()
ret = connect.Connect(3000)
if ret != 0:
print('connect faild:')
ErrMsg = connect.GetErrorMsg(ret)
print(ErrMsg)
exit()
print('YES')
try:
# 设置pack包体
pLoginPack = GetT2Pack(mdbSql)
# 设置功能号,系统号等
pMsg = GetT2Msg(pLoginPack, t2FunctionNo, t2SystemNo)
pLoginPack.FreeMem()
pLoginPack.Release()
ret = connect.SendBizMsg(pMsg)
time.sleep(1)
pMsg.Release()
iRetAns, pyMsgAns = connect.RecvBizMsg(ret, 6000)
if iRetAns == 0:
if pyMsgAns.GetErrorNo() == 0:
buf, len = pyMsgAns.GetContent()
LoginUnPack = py_t2sdk.pyIF2UnPacker()
LoginUnPack.Open(buf, len)
# PrintUnpack(LoginUnPack)
result = UnpackToMapArr(LoginUnPack)
LoginUnPack.Release()
else:
# print(pyMsgAns.GetErrorNo())
# print(pyMsgAns.GetErrorInfo())
res = {}
res['error_no'] = pyMsgAns.GetErrorNo()
res['error_info'] = mdbNodeName + ':' + pyMsgAns.GetErrorInfo()
result.append(res)
else:
# print(iRetAns)
# print(connect.GetErrorMsg(iRetAns))
res = {}
res['error_no'] = iRetAns
res['error_info'] = mdbNodeName + ':' + connect.GetErrorMsg(iRetAns)
result.append(res)
pyMsgAns.Release()
except:
traceback.print_exc()
finally:
print('finally')
return result
py_t2sdk.PyT2sdkFinalize()
if __name__ == '__main__':
# py_t2sdk.PyT2sdkInitialize()
result = execMdbSql('10.20.163.101', '14007','usesbid92', "init_date.sql")
print(result)
# raw_input("Press Enter")
# py_t2sdk.PyT2sdkFinalize()

View File

@@ -0,0 +1,603 @@
# @time :2025/10/16 12:52
# @File :uf20_asset_buildMap_class.py.py
# Description :
# Author :hundsun
import os
import public
import re
import json
from datetime import datetime
from collections import defaultdict
# 定义一个类用用来生成函数调用关系
class UF20AssetBuildMap:
def __init__(self, projectPath='F:\\客户账户管理系统V22\\',
subProject=["业务逻辑", "原子"],
uftatom="\\dev_codes\\uftatom",
uftbusiness="\\dev_codes\\uftbusiness",
extend_name=['service_design', 'function_design', 'aservice_design', 'afunction_design',
'procedure_design'],
model_flag=1):
self.projectPath = projectPath # 工程目录地址
self.subProject = subProject
self.uftatom = uftatom
self.uftbusiness = uftbusiness
self.search_direction = 0 # 搜索方向默认为0 0 正向搜索 1反向搜索
self.model_flag = model_flag # 查询模式 0:默认 只显示搜到关键字的函数调用信息 1显示全部调用路径
self.extend = extend_name # 遍历的文件后缀名称
# find_function, find_txt, gene_file, model_flag, project='uses'
self.find_function = []
self.find_txt = ''
self.gene_file = 'UF20账户函数调用图.txt'
self.project = 'uses'
# 定义全局变量,用来保存函数信息
# 核心数据结构
# key:name value:self.FunctionInfo
self.function_map = {}
# 定义变量保存id和Chinese_name
# key:id value:name
self.id_name = {}
self.debug = 0
self.soname = set()
def set_project(self, project):
self.project = project
def set_project_path(self, projectPath):
self.projectPath = projectPath
def set_search_direction(self, search_direction):
# 获取当前时间并格式化
# current_time = datetime.now().strftime("%Y%m%d_%H%M%S") # 格式化为年月日_时分秒
self.search_direction = search_direction
# if search_direction == 0:
# self.set_gene_file(f'{self.find_function[0]}-函数调用图_{current_time}.txt')
# else:
# self.set_gene_file(f'{self.find_function[0]}-函数被调用图_{current_time}.txt')
def set_find_function(self, find_function):
self.find_function = find_function
def set_find_txt(self, find_txt):
self.find_txt = find_txt
def set_gene_file(self, gene_file):
self.gene_file = gene_file
# 用来存储函数信息
class FunctionInfo:
def __init__(self, name, id, path, pre_ids=None, next_ids=None):
self.name = name
self.id = id
self.path = path
self.pre_ids = pre_ids if pre_ids is not None else [] # 确保默认为空列表
self.next_ids = next_ids if next_ids is not None else [] # 确保默认为空列表
# 1.0 保存单个函数的信息,生成全图函数信息时使用
# 遍历目录,将函数对应中文名称,功能号,函数路径,提取出来;
# 先以"key":"value"形式保存到functions_map 和 id_name 里面
# 同时将其 记录到 sub_project + ".txt" 文件中 比如umgr.txt upbu.txt
def traverse_directory(self, dir_path, sub_project, functions_map, id_name):
# 获取当前目录下的所有文件和目录
if os.path.exists(dir_path):
entries = os.scandir(dir_path)
for entry in entries:
# 拼接完整的文件或目录路径
full_path = os.path.join(dir_path, entry.name)
if entry.is_file():
file_ext = public.extract_file_extension(full_path)
file_name_withoutExt = public.extract_filename(full_path)
if file_ext in self.extend:
# print(full_path)
# 读取第二行内容
temp_text = public.read_five_line(full_path)
# print(temp_text)
# 提取名称功能号
matches = public.uf20_extract_name_functionNo(temp_text)
if matches is None:
continue
chinese_name = file_name_withoutExt
object_id = matches[0]
english_name = matches[1]
if chinese_name is None:
continue
# print(f"chineseName: {chinese_name}")
# print(f"objectId: {object_id}")
if object_id not in id_name:
id_name[object_id] = chinese_name
# 确保name的唯一性
if chinese_name in functions_map:
# print(full_path)
# print(temp_text)
# print(f"Function name '{chinese_name}' is not unique.")
pass
# raise ValueError(f"Function name '{chinese_name}' is not unique.")
else:
new_func = self.FunctionInfo(chinese_name, object_id, full_path)
functions_map[chinese_name] = new_func
if self.debug == 1:
file_name = sub_project + ".txt"
with open(file_name, 'a', encoding='utf-8') as file:
file.write(f"\"function_id\":\"{object_id}\",")
file.write(f"\"chinese_name\":\"{chinese_name}\",")
file.write(f"\"full_path\":\"{full_path}\"\n")
# print(new_func)
elif entry.is_dir():
# 如果是目录,则递归调用本函数
self.traverse_directory(full_path, sub_project, functions_map, id_name)
# 1.1 遍历所有函数字典然后合并函数字典信息
def traverse_all(self):
projectPath = self.projectPath
subProject = self.subProject
LS_id_name = {}
LS_func_map = {}
self.traverse_directory(projectPath + subProject[0], subProject[0], LS_func_map, LS_id_name)
AS_id_name = {}
AS_func_map = {}
self.traverse_directory(projectPath + subProject[1], subProject[1], AS_func_map, AS_id_name)
LS_func_map.update(AS_func_map)
LS_id_name.update(AS_id_name)
self.function_map = LS_func_map
self.id_name = LS_id_name
# 工具函数
# 将函数信息 字典内容 保存到txt中 file_name = "函数拓扑关系图.txt"
def save_map_totxt(self, func_map, file_name='函数拓扑关系图.txt'):
for name in func_map:
func = func_map[name]
with open(file_name, 'a', encoding='utf-8') as file:
file.write(f"\"function_id\":\"{func.id}\",")
file.write(f"\"chinese_name\":\"{func.name}\",")
file.write(f"\"full_path\":\"{func.path}\",")
file.write(f"\"pre_ids\":\"{func.pre_ids}\",")
file.write(f"\"next_ids\":\"{func.next_ids}\"\n")
# 2.扫描函数字典 根据函数信息 生成函数关系图,拓扑图
def scanl_func(self):
gene_file = self.gene_file
func_map = self.function_map
# 开始遍历功能号,逐行扫描文件内容 添加父子函数id 先搞uses的暂不支持跨模块查找
for c_name in func_map:
# print(c_name)
c_func = func_map[c_name]
c_id = c_func.id
full_path = c_func.path
# 使用with语句确保文件正确关闭
with open(full_path, 'r', encoding='utf-8') as file:
# 逐行读取文件
for line in file:
# 提取函数名称
sub_func_name = public.match_func_name(line)
# 过滤掉不存在的函数
if sub_func_name == "None" or sub_func_name == "":
continue
if sub_func_name not in func_map:
continue
# 提取函数对应的功能号
sub_func = func_map[sub_func_name]
fub_func_id = sub_func.id
if fub_func_id not in c_func.next_ids:
c_func.next_ids.append(fub_func_id)
# 添加完子节点后,再反过来添加父节点
if c_id not in sub_func.pre_ids:
sub_func.pre_ids.append(c_id)
with open('UF20账户函数关系图.txt', 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# 建图完毕将其保存到test.txt文件中
self.save_map_totxt(func_map, "UF20账户函数关系图.txt")
# 使用 'w' 模式打开文件,这会清空文件内容
with open(gene_file, 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# 生成函数调用图
# self.geneAllFucn2(find_function, func_map, id_name, "", gene_file, find_txt, model_flag, 0)
# if self.debug:
# print('生成完成')
# 3.生成函数调用或者被调用图
# 直接for循环遍历 扫描生成函数调用图 或者被调用图
def geneAllFucn2(self, find_function, tab='', call_path="\t\t【Start", callDeep=0):
# 增加层数限制,避免无限递归
if callDeep >= 15:
return
func_map = self.function_map
id_name = self.id_name
projectPath = self.projectPath
subProject = self.subProject
# find_function = self.find_function
find_txt = self.find_txt
gene_file = self.gene_file
model_flag = self.model_flag
project = self.project
file_name = self.gene_file
count = 0
# call_path = "\t\t【Start"
find_flag = 0
for func_id in find_function:
if func_id not in id_name:
print(f"Not this function_id:{func_id}")
else:
index = find_function.index(func_id)
# 函数名称提取出来
func_name = id_name[func_id]
if '融资融券' in func_name:
continue
func_path = func_map[func_name].path
if find_txt != "":
with open(file_name, 'r', encoding='utf-8') as file1:
if public.check_string_in_file(func_path, find_txt):
find_flag = 1
with open(file_name, 'a', encoding='utf-8') as file:
if find_flag == 1:
file.write(tab + func_id + ":" + func_name + "\t\t" + find_txt + call_path + "->" + str(
func_id) + "\n")
elif model_flag == 1:
if (self.search_direction == 1 and 'LS' in func_name) or call_path == "\t\t【Start":
file.write(tab + func_id + ":" + func_name + "\n")
elif self.search_direction == 0:
file.write(tab + func_id + ":" + func_name + "\n")
find_flag = 0
# 提取 next_ids 此处可以设置函数调用图或者函数被调用图
next_ids = func_map[func_name].next_ids
pre_ids = func_map[func_name].pre_ids
if self.search_direction == 1:
# 如果标志为1 代表搜索反向调用图
next_ids = pre_ids
if len(next_ids) > 0:
# fix 20250708 dg 防止无限递归调用
if next_ids == find_function:
return
self.geneAllFucn2(next_ids, '\t' + tab, call_path + "->" + str(func_id), callDeep + 1)
def update_func_map(self):
# 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
self.traverse_all()
# 2.扫描函数字典 生成函数关系拓扑图
self.scanl_func()
def loadInfoFromTxt(self):
# 读取并处理文件
with open('UF20账户函数关系图.txt', 'r', encoding='utf-8') as file:
for line in file:
line = line.strip()
if not line:
continue
# 使用正则表达式解析键值对
data = {}
pattern = r'"([^"]+)":"(.*?)"(?=,|$)'
matches = re.findall(pattern, line)
for key, value in matches:
# 处理列表类型的字段pre_ids/next_ids
if key in ['pre_ids', 'next_ids']:
# 将字符串列表转换为实际列表
value = value.replace("'", '"') # 替换单引号为双引号
try:
data[key] = json.loads(value)
except json.JSONDecodeError:
data[key] = []
else:
data[key] = value
# 确保所有必要字段都存在
required_fields = ['function_id', 'chinese_name', 'full_path']
if all(field in data for field in required_fields):
# 创建FunctionInfo对象
func_info = self.FunctionInfo(
name=data['chinese_name'],
id=data['function_id'],
path=data['full_path'],
pre_ids=data.get('pre_ids', []),
next_ids=data.get('next_ids', [])
)
# 更新function_map
self.function_map[func_info.name] = func_info
# 更新id_name
self.id_name[func_info.id] = func_info.name
def init_func_call_map(self, forceUpdate=False):
# self.set_project(project)
# self.set_find_function(find_function)
# self.set_find_txt(find_txt)
# self.set_search_direction(search_direction)
# if find_txt:
# # 查询模式 0: 只显示搜到关键字的函数调用信息 1显示全部调用路径
# self.model_flag = 0
# if gene_file:
# self.set_gene_file(gene_file)
# build.set_gene_file('函数调用图2-1.txt')
if os.path.exists('UF20账户函数关系图.txt') and forceUpdate == False:
# 从文件中加载配置
self.loadInfoFromTxt()
else:
# 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
self.traverse_all()
# 2.扫描函数字典 生成函数关系拓扑图
self.scanl_func()
self.merge_func_info()
def gene_func_call_map(self, find_function, find_txt, search_direction=0, project='uses', gene_file=''):
self.set_project(project)
self.set_find_function(find_function)
self.set_find_txt(find_txt)
self.set_search_direction(search_direction)
print('find_txt:[', find_txt, ']')
if find_txt == ' ' or find_txt == None or find_txt == '':
# 查询模式 0: 只显示搜到关键字的函数调用信息 1显示全部调用路径
self.set_find_txt("")
self.model_flag = 1
else:
self.model_flag = 0
print('model_flag', self.model_flag)
if gene_file:
self.set_gene_file(gene_file)
# 每次生成调用图之前,先清空文件
with open(self.gene_file, 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# build.set_gene_file('函数调用图2-1.txt')
# # 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
# self.traverse_all()
# # 2.扫描函数字典 生成函数关系拓扑图
# self.scanl_func()
# 3.根据函数关系拓扑图 生成函数调用图/被调用图
self.geneAllFucn2(find_function)
print('生成完成')
if self.debug:
print('生成完成')
# 20250825 add 新增个性化功能生成被调用关系中AS或者LS对应的SO
def gene_func_call_map_so(self, find_function, find_txt, search_direction=1, project='uses', gene_file=''):
self.set_project(project)
self.set_find_function(find_function)
self.set_find_txt(find_txt)
self.set_search_direction(search_direction)
print('find_txt:[', find_txt, ']')
if find_txt == ' ' or find_txt == None or find_txt == '':
# 查询模式 0: 只显示搜到关键字的函数调用信息 1显示全部调用路径
self.set_find_txt("")
self.model_flag = 1
else:
self.model_flag = 0
print('model_flag', self.model_flag)
if gene_file:
self.set_gene_file(gene_file)
# 每次生成调用图之前,先清空文件
with open(self.gene_file, 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# build.set_gene_file('函数调用图2-1.txt')
# # 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
# self.traverse_all()
# # 2.扫描函数字典 生成函数关系拓扑图
# self.scanl_func()
# 3.根据函数关系拓扑图 生成函数调用图/被调用图
self.geneAllFucn_so(find_function)
print('生成完成')
if self.debug:
print('生成完成')
# 20250825 add 新增个性化功能根据搜索AS或者LS对应的so
# 直接for循环遍历 扫描生成函数调用图 或者被调用图
def geneAllFucn_so(self, find_function, tab='', call_path="\t\t【Start", callDeep=0):
# 增加层数限制,避免无限递归
if callDeep >= 15:
return
func_map = self.function_map
id_name = self.id_name
projectPath = self.projectPath
subProject = self.subProject
# find_function = self.find_function
find_txt = self.find_txt
gene_file = self.gene_file
model_flag = self.model_flag
project = self.project
file_name = self.gene_file
count = 0
# call_path = "\t\t【Start"
find_flag = 0
for func_id in find_function:
if func_id not in id_name:
print(f"Not this function_id:{func_id}")
else:
index = find_function.index(func_id)
# 函数名称提取出来
func_name = id_name[func_id]
if '融资融券' in func_name:
continue
func_path = func_map[func_name].path
if find_txt != "":
with open(file_name, 'r', encoding='utf-8') as file1:
if public.check_string_in_file(func_path, find_txt):
find_flag = 1
# print('222', func_name)
with open(file_name, 'a', encoding='utf-8') as file:
# 2.判断是否存在AS
print('222', func_name)
if 'AS_' in func_name:
# 获取对应的moudel.xml路径
# 2.1先获取函数对应信息
func_info = self.function_map[func_name]
func_path = func_info.path
service_pos = func_path.rfind("服务")
if service_pos != -1:
# 2.2 提取对应路径信息
extracted_path = func_path[:service_pos]
print(extracted_path)
# 2.3 读取moudel.xml文件
ename, database = public.read_module_xml(extracted_path + 'module.xml')
print(ename, database)
if 'DB' in database:
# AS模块中有DB需要保存so然后continue
# 2.4 拼接so名称
asname = 'libs_as_' + ename + 'flow.10.so'
print('asname', asname)
# 2.5 使用set保存so名称
self.soname.add(asname)
return
else:
print("路径中未找到 '服务' 目录")
elif 'LS_' in func_name:
# 获取对应的moudel.xml路径
# 2.1先获取函数对应信息
func_info = self.function_map[func_name]
func_path = func_info.path
service_pos = func_path.rfind("服务")
if service_pos != -1:
# 2.2 提取对应路径信息
extracted_path = func_path[:service_pos]
print(extracted_path)
# 2.3 读取moudel.xml文件
lsename = public.read_ls_module_xml(extracted_path + 'module.xml')
print('lsinfo:', lsename)
# 2.4 拼接so名称
lsname = 'libs_ls_' + lsename + 'flow.10.so'
print('lsname', lsname)
# 2.5 使用set保存so名称
self.soname.add(lsname)
else:
print("路径中未找到 '服务' 目录")
if find_flag == 1:
file.write(tab + func_id + ":" + func_name + "\t\t" + find_txt + call_path + "->" + str(
func_id) + "\n")
elif model_flag == 1:
if (self.search_direction == 1 and 'LS' in func_name) or call_path == "\t\t【Start":
file.write(tab + func_id + ":" + func_name + "\n")
elif self.search_direction == 0:
file.write(tab + func_id + ":" + func_name + "\n")
find_flag = 0
# 提取 next_ids 此处可以设置函数调用图或者函数被调用图
next_ids = func_map[func_name].next_ids
pre_ids = func_map[func_name].pre_ids
if self.search_direction == 1:
# 如果标志为1 代表搜索反向调用图
next_ids = pre_ids
if len(next_ids) > 0:
# fix 20250708 dg 防止无限递归调用
if next_ids == find_function:
return
self.geneAllFucn_so(next_ids, '\t' + tab, call_path + "->" + str(func_id), callDeep + 1)
# 20251017 add 添加函数用来合并账户平台调用函数的pre_id和next_id解决部分函数反向调用无法穿透问题
# 解决AS -> LS 穿透问题
def merge_func_info(self):
# 更新function_map
# self.function_map[func_info.name] = func_info
# 1. 按 id 收集所有的 pre_ids 和 next_ids
id_to_combined = defaultdict(lambda: {"pre_ids": set(), "next_ids": set()})
double_func_set = set()
single_func_set = set()
for func in self.function_map.values():
if ',' in func.id:
double_func_set.add(func.id)
for id in func.id.split(','):
single_func_set.add(id)
for func in self.function_map.values():
# 将function_id相同的调用关系合并
# 需要考虑 AS228309 LS228309,221004 这种情况,将调用关系进行合并
# 思路:
# 1.扫描代码中的功能号,提取存在,的功能号名称保存到double_set中
# 遍历function_map,提取func.id
# 2.将提取后的功能号保存到single_set中
# 3.合并这几个功能号的调用关系
id_to_combined[func.id]["pre_ids"].update(func.pre_ids)
id_to_combined[func.id]["next_ids"].update(func.next_ids)
# a.根据多功能号函数合并
if func.id in double_func_set:
id_to_combined[func.id]["pre_ids"].update(func.pre_ids)
id_to_combined[func.id]["next_ids"].update(func.next_ids)
for id in func.id.split(','):
for m_func in self.function_map.values():
if m_func.id == id:
id_to_combined[func.id]["pre_ids"].update(m_func.pre_ids)
id_to_combined[func.id]["next_ids"].update(m_func.next_ids)
# b.根据单个功能号找其它功能号,然后合并
if func.id in single_func_set:
id_to_combined[func.id]["pre_ids"].update(func.pre_ids)
id_to_combined[func.id]["next_ids"].update(func.next_ids)
for double_id in double_func_set:
# 先找多功能号函数,并合并
if func.id in double_id:
for m_func in self.function_map.values():
if m_func.id == double_id:
# 合并多功能号函数
id_to_combined[func.id]["pre_ids"].update(m_func.pre_ids)
id_to_combined[func.id]["next_ids"].update(m_func.next_ids)
# 合并子功能号函数
for id in double_id.split(','):
if id == func.id:
continue
for m_func2 in self.function_map.values():
if m_func2.id == id:
id_to_combined[func.id]["pre_ids"].update(m_func2.pre_ids)
id_to_combined[func.id]["next_ids"].update(m_func2.next_ids)
# 2. 更新每一个 FunctionInfo 对象的 pre_ids 和 next_ids
for key in self.function_map:
if '同步平台调用' in key:
# print(key)
func = self.function_map[key]
combined = id_to_combined.get(func.id, {"pre_ids": [], "next_ids": []})
# 转回 list 并排序(可选)
func.pre_ids = list(combined["pre_ids"])
func.next_ids = list(combined["next_ids"])
# 遍历所有目录
def main():
build = UF20AssetBuildMap()
print('start')
build.init_func_call_map()
print('初始化完成')
# 测试生成函数
build.gene_func_call_map(['228309'], ' ', search_direction=0)
# build.gene_func_call_map_so(['2106807'], ' ')
# print(build.soname)
# with open('soinfo', 'a', encoding='utf-8') as file:
# file.write('\n' + build.find_function[0] + '\t')
# for sn in build.soname:
# file.write(sn + ' ')
# print('end')
if __name__ == '__main__':
# 1.记录每个文件自己的信息,功能号,中英文名称
# 2.生成函数关系拓扑图
# 3.根据生成的函数关系图,来进行搜索之类的操作
main()

519
uf20_buildMap_class.py Normal file
View File

@@ -0,0 +1,519 @@
import os
import public
import re
import json
from datetime import datetime
# 定义一个类用用来生成函数调用关系
class UF20BuildMap:
def __init__(self, projectPath='D:\\Sources\\经纪业务运营平台V21\\',
subProject=["业务逻辑", "原子"],
uftatom="\\dev_codes\\uftatom",
uftbusiness="\\dev_codes\\uftbusiness",
extend_name=['service_design', 'function_design', 'aservice_design', 'afunction_design', 'procedure_design'],
model_flag=1):
self.projectPath = projectPath # 工程目录地址
self.subProject = subProject
self.uftatom = uftatom
self.uftbusiness = uftbusiness
self.search_direction = 0 # 搜索方向默认为0 0 正向搜索 1反向搜索
self.model_flag = model_flag # 查询模式 0:默认 只显示搜到关键字的函数调用信息 1显示全部调用路径
self.extend = extend_name # 遍历的文件后缀名称
# find_function, find_txt, gene_file, model_flag, project='uses'
self.find_function = []
self.find_txt = ''
self.gene_file = 'UF20函数调用图.txt'
self.project = 'uses'
# 定义全局变量,用来保存函数信息
# 核心数据结构
# key:name value:self.FunctionInfo
self.function_map = {}
# 定义变量保存id和Chinese_name
# key:id value:name
self.id_name = {}
self.debug = 0
self.soname = set()
def set_project(self, project):
self.project = project
def set_project_path(self, projectPath):
self.projectPath = projectPath
def set_search_direction(self, search_direction):
# 获取当前时间并格式化
# current_time = datetime.now().strftime("%Y%m%d_%H%M%S") # 格式化为年月日_时分秒
self.search_direction = search_direction
# if search_direction == 0:
# self.set_gene_file(f'{self.find_function[0]}-函数调用图_{current_time}.txt')
# else:
# self.set_gene_file(f'{self.find_function[0]}-函数被调用图_{current_time}.txt')
def set_find_function(self, find_function):
self.find_function = find_function
def set_find_txt(self, find_txt):
self.find_txt = find_txt
def set_gene_file(self, gene_file):
self.gene_file = gene_file
# 用来存储函数信息
class FunctionInfo:
def __init__(self, name, id, path, pre_ids=None, next_ids=None):
self.name = name
self.id = id
self.path = path
self.pre_ids = pre_ids if pre_ids is not None else [] # 确保默认为空列表
self.next_ids = next_ids if next_ids is not None else [] # 确保默认为空列表
# 1.0 保存单个函数的信息,生成全图函数信息时使用
# 遍历目录,将函数对应中文名称,功能号,函数路径,提取出来;
# 先以"key":"value"形式保存到functions_map 和 id_name 里面
# 同时将其 记录到 sub_project + ".txt" 文件中 比如umgr.txt upbu.txt
def traverse_directory(self, dir_path, sub_project, functions_map, id_name):
# 获取当前目录下的所有文件和目录
if os.path.exists(dir_path):
entries = os.scandir(dir_path)
for entry in entries:
# 拼接完整的文件或目录路径
full_path = os.path.join(dir_path, entry.name)
if entry.is_file():
file_ext = public.extract_file_extension(full_path)
file_name_withoutExt = public.extract_filename(full_path)
if file_ext in self.extend:
# print(full_path)
# 读取第二行内容
temp_text = public.read_five_line(full_path)
# print(temp_text)
# 提取名称功能号
matches = public.uf20_extract_name_functionNo(temp_text)
if matches is None:
continue
chinese_name = file_name_withoutExt
object_id = matches[0]
english_name = matches[1]
if chinese_name is None:
continue
# print(f"chineseName: {chinese_name}")
# print(f"objectId: {object_id}")
if object_id not in id_name:
id_name[object_id] = chinese_name
# 确保name的唯一性
if chinese_name in functions_map:
# print(full_path)
# print(temp_text)
# print(f"Function name '{chinese_name}' is not unique.")
pass
# raise ValueError(f"Function name '{chinese_name}' is not unique.")
else:
new_func = self.FunctionInfo(chinese_name, object_id, full_path)
functions_map[chinese_name] = new_func
if self.debug == 1:
file_name = sub_project + ".txt"
with open(file_name, 'a', encoding='utf-8') as file:
file.write(f"\"function_id\":\"{object_id}\",")
file.write(f"\"chinese_name\":\"{chinese_name}\",")
file.write(f"\"full_path\":\"{full_path}\"\n")
# print(new_func)
elif entry.is_dir():
# 如果是目录,则递归调用本函数
self.traverse_directory(full_path, sub_project, functions_map, id_name)
# 1.1 遍历所有函数字典然后合并函数字典信息
def traverse_all(self):
projectPath = self.projectPath
subProject = self.subProject
LS_id_name = {}
LS_func_map = {}
self.traverse_directory(projectPath + subProject[0], subProject[0], LS_func_map, LS_id_name)
AS_id_name = {}
AS_func_map = {}
self.traverse_directory(projectPath + subProject[1], subProject[1], AS_func_map, AS_id_name)
LS_func_map.update(AS_func_map)
LS_id_name.update(AS_id_name)
self.function_map = LS_func_map
self.id_name = LS_id_name
# 工具函数
# 将函数信息 字典内容 保存到txt中 file_name = "函数拓扑关系图.txt"
def save_map_totxt(self, func_map, file_name='函数拓扑关系图.txt'):
for name in func_map:
func = func_map[name]
with open(file_name, 'a', encoding='utf-8') as file:
file.write(f"\"function_id\":\"{func.id}\",")
file.write(f"\"chinese_name\":\"{func.name}\",")
file.write(f"\"full_path\":\"{func.path}\",")
file.write(f"\"pre_ids\":\"{func.pre_ids}\",")
file.write(f"\"next_ids\":\"{func.next_ids}\"\n")
# 2.扫描函数字典 根据函数信息 生成函数关系图,拓扑图
def scanl_func(self):
gene_file = self.gene_file
func_map = self.function_map
# 开始遍历功能号,逐行扫描文件内容 添加父子函数id 先搞uses的暂不支持跨模块查找
for c_name in func_map:
# print(c_name)
c_func = func_map[c_name]
c_id = c_func.id
full_path = c_func.path
# 使用with语句确保文件正确关闭
with open(full_path, 'r', encoding='utf-8') as file:
# 逐行读取文件
for line in file:
# 提取函数名称
sub_func_name = public.match_func_name(line)
# 过滤掉不存在的函数
if sub_func_name == "None" or sub_func_name == "":
continue
if sub_func_name not in func_map:
continue
# 提取函数对应的功能号
sub_func = func_map[sub_func_name]
fub_func_id = sub_func.id
if fub_func_id not in c_func.next_ids:
c_func.next_ids.append(fub_func_id)
# 添加完子节点后,再反过来添加父节点
if c_id not in sub_func.pre_ids:
sub_func.pre_ids.append(c_id)
with open('UF20函数关系图.txt', 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# 建图完毕将其保存到test.txt文件中
self.save_map_totxt(func_map, "UF20函数关系图.txt")
# 使用 'w' 模式打开文件,这会清空文件内容
with open(gene_file, 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# 生成函数调用图
# self.geneAllFucn2(find_function, func_map, id_name, "", gene_file, find_txt, model_flag, 0)
# if self.debug:
# print('生成完成')
# 3.生成函数调用或者被调用图
# 直接for循环遍历 扫描生成函数调用图 或者被调用图
def geneAllFucn2(self,find_function, tab='', call_path="\t\t【Start", callDeep=0):
# 增加层数限制,避免无限递归
if callDeep >= 15:
return
func_map = self.function_map
id_name = self.id_name
projectPath = self.projectPath
subProject = self.subProject
# find_function = self.find_function
find_txt = self.find_txt
gene_file = self.gene_file
model_flag = self.model_flag
project = self.project
file_name = self.gene_file
count = 0
# call_path = "\t\t【Start"
find_flag = 0
for func_id in find_function:
if func_id not in id_name:
print(f"Not this function_id:{func_id}")
else:
index = find_function.index(func_id)
# 函数名称提取出来
func_name = id_name[func_id]
if '融资融券' in func_name:
continue
func_path = func_map[func_name].path
if find_txt != "":
with open(file_name, 'r', encoding='utf-8') as file1:
if public.check_string_in_file(func_path, find_txt):
find_flag = 1
with open(file_name, 'a', encoding='utf-8') as file:
if find_flag == 1:
file.write(tab + func_id + ":" + func_name + "\t\t" + find_txt + call_path + "->" + str(
func_id) + "\n")
elif model_flag == 1:
if (self.search_direction == 1 and 'LS' in func_name) or call_path == "\t\t【Start":
file.write(tab + func_id + ":" + func_name + "\n")
elif self.search_direction == 0:
file.write(tab + func_id + ":" + func_name + "\n")
find_flag = 0
# 提取 next_ids 此处可以设置函数调用图或者函数被调用图
next_ids = func_map[func_name].next_ids
pre_ids = func_map[func_name].pre_ids
if self.search_direction == 1:
# 如果标志为1 代表搜索反向调用图
next_ids = pre_ids
if len(next_ids) > 0:
# fix 20250708 dg 防止无限递归调用
if next_ids == find_function:
return
self.geneAllFucn2(next_ids, '\t' + tab, call_path + "->" + str(func_id), callDeep + 1)
def update_func_map(self):
# 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
self.traverse_all()
# 2.扫描函数字典 生成函数关系拓扑图
self.scanl_func()
def loadInfoFromTxt(self):
# 读取并处理文件
with open('UF20函数关系图.txt', 'r', encoding='utf-8') as file:
for line in file:
line = line.strip()
if not line:
continue
# 使用正则表达式解析键值对
data = {}
pattern = r'"([^"]+)":"(.*?)"(?=,|$)'
matches = re.findall(pattern, line)
for key, value in matches:
# 处理列表类型的字段pre_ids/next_ids
if key in ['pre_ids', 'next_ids']:
# 将字符串列表转换为实际列表
value = value.replace("'", '"') # 替换单引号为双引号
try:
data[key] = json.loads(value)
except json.JSONDecodeError:
data[key] = []
else:
data[key] = value
# 确保所有必要字段都存在
required_fields = ['function_id', 'chinese_name', 'full_path']
if all(field in data for field in required_fields):
# 创建FunctionInfo对象
func_info = self.FunctionInfo(
name=data['chinese_name'],
id=data['function_id'],
path=data['full_path'],
pre_ids=data.get('pre_ids', []),
next_ids=data.get('next_ids', [])
)
# 更新function_map
self.function_map[func_info.name] = func_info
# 更新id_name
self.id_name[func_info.id] = func_info.name
def init_func_call_map(self, forceUpdate=False):
# self.set_project(project)
# self.set_find_function(find_function)
# self.set_find_txt(find_txt)
# self.set_search_direction(search_direction)
# if find_txt:
# # 查询模式 0: 只显示搜到关键字的函数调用信息 1显示全部调用路径
# self.model_flag = 0
# if gene_file:
# self.set_gene_file(gene_file)
# build.set_gene_file('函数调用图2-1.txt')
if os.path.exists('UF20函数关系图.txt') and forceUpdate == False:
# 从文件中加载配置
self.loadInfoFromTxt()
else:
# 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
self.traverse_all()
# 2.扫描函数字典 生成函数关系拓扑图
self.scanl_func()
def gene_func_call_map(self, find_function, find_txt, search_direction=0, project='uses', gene_file=''):
self.set_project(project)
self.set_find_function(find_function)
self.set_find_txt(find_txt)
self.set_search_direction(search_direction)
print('find_txt:[', find_txt, ']')
if find_txt == ' ' or find_txt == None or find_txt == '':
# 查询模式 0: 只显示搜到关键字的函数调用信息 1显示全部调用路径
self.set_find_txt("")
self.model_flag = 1
else:
self.model_flag = 0
print('model_flag', self.model_flag)
if gene_file:
self.set_gene_file(gene_file)
# 每次生成调用图之前,先清空文件
with open(self.gene_file, 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# build.set_gene_file('函数调用图2-1.txt')
# # 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
# self.traverse_all()
# # 2.扫描函数字典 生成函数关系拓扑图
# self.scanl_func()
# 3.根据函数关系拓扑图 生成函数调用图/被调用图
self.geneAllFucn2(find_function)
print('生成完成')
if self.debug:
print('生成完成')
# 20250825 add 新增个性化功能生成被调用关系中AS或者LS对应的SO
def gene_func_call_map_so(self, find_function, find_txt, search_direction=1, project='uses', gene_file=''):
self.set_project(project)
self.set_find_function(find_function)
self.set_find_txt(find_txt)
self.set_search_direction(search_direction)
print('find_txt:[', find_txt, ']')
if find_txt == ' ' or find_txt == None or find_txt == '':
# 查询模式 0: 只显示搜到关键字的函数调用信息 1显示全部调用路径
self.set_find_txt("")
self.model_flag = 1
else:
self.model_flag = 0
print('model_flag', self.model_flag)
if gene_file:
self.set_gene_file(gene_file)
# 每次生成调用图之前,先清空文件
with open(self.gene_file, 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# build.set_gene_file('函数调用图2-1.txt')
# # 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
# self.traverse_all()
# # 2.扫描函数字典 生成函数关系拓扑图
# self.scanl_func()
# 3.根据函数关系拓扑图 生成函数调用图/被调用图
self.geneAllFucn_so(find_function)
print('生成完成')
if self.debug:
print('生成完成')
# 20250825 add 新增个性化功能根据搜索AS或者LS对应的so
# 直接for循环遍历 扫描生成函数调用图 或者被调用图
def geneAllFucn_so(self, find_function, tab='', call_path="\t\t【Start", callDeep=0):
# 增加层数限制,避免无限递归
if callDeep >= 15:
return
func_map = self.function_map
id_name = self.id_name
projectPath = self.projectPath
subProject = self.subProject
# find_function = self.find_function
find_txt = self.find_txt
gene_file = self.gene_file
model_flag = self.model_flag
project = self.project
file_name = self.gene_file
count = 0
# call_path = "\t\t【Start"
find_flag = 0
for func_id in find_function:
if func_id not in id_name:
print(f"Not this function_id:{func_id}")
else:
index = find_function.index(func_id)
# 函数名称提取出来
func_name = id_name[func_id]
if '融资融券' in func_name:
continue
func_path = func_map[func_name].path
if find_txt != "":
with open(file_name, 'r', encoding='utf-8') as file1:
if public.check_string_in_file(func_path, find_txt):
find_flag = 1
# print('222', func_name)
with open(file_name, 'a', encoding='utf-8') as file:
# 2.判断是否存在AS
print('222', func_name)
if 'AS_' in func_name:
# 获取对应的moudel.xml路径
# 2.1先获取函数对应信息
func_info = self.function_map[func_name]
func_path = func_info.path
service_pos = func_path.rfind("服务")
if service_pos != -1:
# 2.2 提取对应路径信息
extracted_path = func_path[:service_pos]
print(extracted_path)
# 2.3 读取moudel.xml文件
ename, database = public.read_module_xml(extracted_path + 'module.xml')
print(ename, database)
if 'DB' in database:
# AS模块中有DB需要保存so然后continue
# 2.4 拼接so名称
asname = 'libs_as_' + ename + 'flow.10.so'
print('asname', asname)
# 2.5 使用set保存so名称
self.soname.add(asname)
return
else:
print("路径中未找到 '服务' 目录")
elif 'LS_' in func_name:
# 获取对应的moudel.xml路径
# 2.1先获取函数对应信息
func_info = self.function_map[func_name]
func_path = func_info.path
service_pos = func_path.rfind("服务")
if service_pos != -1:
# 2.2 提取对应路径信息
extracted_path = func_path[:service_pos]
print(extracted_path)
# 2.3 读取moudel.xml文件
lsename = public.read_ls_module_xml(extracted_path + 'module.xml')
print('lsinfo:', lsename)
# 2.4 拼接so名称
lsname = 'libs_ls_' + lsename + 'flow.10.so'
print('lsname', lsname)
# 2.5 使用set保存so名称
self.soname.add(lsname)
else:
print("路径中未找到 '服务' 目录")
if find_flag == 1:
file.write(tab + func_id + ":" + func_name + "\t\t" + find_txt + call_path + "->" + str(
func_id) + "\n")
elif model_flag == 1:
if (self.search_direction == 1 and 'LS' in func_name) or call_path == "\t\t【Start":
file.write(tab + func_id + ":" + func_name + "\n")
elif self.search_direction == 0:
file.write(tab + func_id + ":" + func_name + "\n")
find_flag = 0
# 提取 next_ids 此处可以设置函数调用图或者函数被调用图
next_ids = func_map[func_name].next_ids
pre_ids = func_map[func_name].pre_ids
if self.search_direction == 1:
# 如果标志为1 代表搜索反向调用图
next_ids = pre_ids
if len(next_ids) > 0:
# fix 20250708 dg 防止无限递归调用
if next_ids == find_function:
return
self.geneAllFucn_so(next_ids, '\t' + tab, call_path + "->" + str(func_id), callDeep + 1)
# 遍历所有目录
def main():
build = UF20BuildMap()
print('start')
build.init_func_call_map()
print('初始化完成')
build.gene_func_call_map_so(['2106807'], ' ')
print(build.soname)
with open('soinfo', 'a', encoding='utf-8') as file:
file.write('\n' + build.find_function[0] + '\t')
for sn in build.soname:
file.write(sn + ' ')
print('end')
if __name__ == '__main__':
# 1.记录每个文件自己的信息,功能号,中英文名称
# 2.生成函数关系拓扑图
# 3.根据生成的函数关系图,来进行搜索之类的操作
main()

416
uf30_buildMap_class.py Normal file
View File

@@ -0,0 +1,416 @@
import os
import public
import re
import json
from datetime import datetime
from collections import defaultdict
# 定义一个类用用来生成函数调用关系
class BuildMap:
def __init__(self, projectPath='F:\\sesCode\\',
# subProject=["upub", "uconvert", "umgr", "uqms", "ucbp", "uses", "ucrt"],
subProject=["umgr","uses", "ucrt", "ucbp", "uconvert", "uqms", "upub"],
uftatom="\\dev_codes\\uftatom",
uftbusiness="\\dev_codes\\uftbusiness",
extend_name=['uftservice', 'uftfunction', 'uftatomfunction', 'uftatomservice', 'extinterface'],
model_flag=1):
self.projectPath = projectPath # 工程目录地址
self.subProject = subProject
self.uftatom = uftatom
self.uftbusiness = uftbusiness
self.search_direction = 0 # 搜索方向默认为0 0 正向搜索 1反向搜索
self.model_flag = model_flag # 查询模式 0:默认 只显示搜到关键字的函数调用信息 1显示全部调用路径
self.extend = extend_name # 遍历的文件后缀名称
# find_function, find_txt, gene_file, model_flag, project='uses'
self.find_function = []
self.find_txt = ''
self.gene_file = 'UF30函数调用图.txt'
self.project = 'uses'
# 定义全局变量,用来保存函数信息
# 核心数据结构
# key:name value:self.FunctionInfo
self.function_map = {}
# 定义变量保存id和Chinese_name
# key:id value:name
self.id_name = {}
self.debug = 0
def set_project(self, project):
self.project = project
def set_project_path(self, projectPath):
self.projectPath = projectPath
def set_search_direction(self, search_direction):
# 获取当前时间并格式化
# current_time = datetime.now().strftime("%Y%m%d_%H%M%S") # 格式化为年月日_时分秒
self.search_direction = search_direction
# if search_direction == 0:
# self.set_gene_file(f'{self.find_function[0]}-函数调用图_{current_time}.txt')
# else:
# self.set_gene_file(f'{self.find_function[0]}-函数被调用图_{current_time}.txt')
def set_find_function(self, find_function):
self.find_function = find_function
def set_find_txt(self, find_txt):
self.find_txt = find_txt
def set_gene_file(self, gene_file):
self.gene_file = gene_file
# 用来存储函数信息
class FunctionInfo:
def __init__(self, name, id, path, pre_ids=None, next_ids=None):
self.name = name
self.id = id
self.path = path
self.pre_ids = pre_ids if pre_ids is not None else [] # 确保默认为空列表
self.next_ids = next_ids if next_ids is not None else [] # 确保默认为空列表
# 1.0 保存单个函数的信息,生成全图函数信息时使用
# 遍历目录,将函数对应中文名称,功能号,函数路径,提取出来;
# 先以"key":"value"形式保存到functions_map 和 id_name 里面
# 同时将其 记录到 sub_project + ".txt" 文件中 比如umgr.txt upbu.txt
def traverse_directory(self, dir_path, sub_project, functions_map, id_name):
# 获取当前目录下的所有文件和目录
# print('fir_path:', dir_path)
if os.path.exists(dir_path):
entries = os.scandir(dir_path)
for entry in entries:
# 拼接完整的文件或目录路径
full_path = os.path.join(dir_path, entry.name)
if entry.is_file():
file_ext = public.extract_file_extension(full_path)
if file_ext in self.extend:
# print(full_path)
# 读取第二行内容
temp_text = public.read_second_line(full_path)
# print(temp_text)
# 提取名称功能号
matches = public.extract_name_functionNo(temp_text)
if matches is None:
continue
chinese_name = matches[0]
object_id = matches[1]
if chinese_name is None:
continue
# print(f"chineseName: {chinese_name}")
# print(f"objectId: {object_id}")
if object_id not in id_name:
id_name[object_id] = chinese_name
# 确保name的唯一性
if chinese_name in functions_map:
# print(full_path)
# print(temp_text)
# print(f"Function name '{chinese_name}' is not unique.")
pass
# raise ValueError(f"Function name '{chinese_name}' is not unique.")
else:
new_func = self.FunctionInfo(chinese_name, object_id, full_path)
functions_map[chinese_name] = new_func
if self.debug == 1:
file_name = sub_project + ".txt"
with open(file_name, 'a', encoding='utf-8') as file:
file.write(f"\"function_id\":\"{object_id}\",")
file.write(f"\"chinese_name\":\"{chinese_name}\",")
file.write(f"\"full_path\":\"{full_path}\"\n")
# print(new_func)
elif entry.is_dir():
# 如果是目录,则递归调用本函数
self.traverse_directory(full_path, sub_project, functions_map, id_name)
# 1.1 遍历所有函数字典然后合并函数字典信息
def traverse_all(self):
projectPath = self.projectPath
subProject = self.subProject
find_function = self.find_function
find_txt = self.find_txt
gene_file = self.gene_file
model_flag = self.model_flag
project = self.project
if find_txt == '' or find_txt == None:
model_flag = 1
# 20250823 fix 优化生成函数关系图写法使用for循环扫描每个代码库
for model in subProject:
id_name = {}
func_map = {}
self.traverse_directory(projectPath + model, model, func_map, id_name)
self.function_map.update(func_map)
self.id_name.update(id_name)
# 再使用inner覆盖一下
inner_id_name = {}
inner_func_map = {}
if 'uses' in self.subProject:
# 再使用inner覆盖一下
self.traverse_directory(projectPath + 'uses' + '\\dev_codes\\uftbusiness\\inner', 'uses',
inner_func_map, inner_id_name)
if 'ucrt' in self.subProject:
innercrt_id_name = {}
innercrt_func_map = {}
self.traverse_directory(projectPath + 'ucrt' + '\\dev_codes\\uftbusiness\\inner', 'ucrt',
inner_func_map,
inner_id_name)
self.function_map.update(inner_func_map)
self.id_name.update(inner_id_name)
# 工具函数
# 将函数信息 字典内容 保存到txt中 file_name = "函数拓扑关系图.txt"
def save_map_totxt(self, func_map, file_name='函数拓扑关系图.txt'):
for name in func_map:
func = func_map[name]
with open(file_name, 'a', encoding='utf-8') as file:
file.write(f"\"function_id\":\"{func.id}\",")
file.write(f"\"chinese_name\":\"{func.name}\",")
file.write(f"\"full_path\":\"{func.path}\",")
file.write(f"\"pre_ids\":\"{func.pre_ids}\",")
file.write(f"\"next_ids\":\"{func.next_ids}\"\n")
# 2.扫描函数字典 根据函数信息 生成函数关系图,拓扑图
def scanl_func(self):
gene_file = self.gene_file
func_map = self.function_map
# 开始遍历功能号,逐行扫描文件内容 添加父子函数id 先搞uses的暂不支持跨模块查找
for c_name in func_map:
# print(c_name)
c_func = func_map[c_name]
c_id = c_func.id
full_path = c_func.path
if not os.path.exists(full_path):
print('full_path notexists:', full_path)
continue
# 使用with语句确保文件正确关闭
with open(full_path, 'r', encoding='utf-8') as file:
# 逐行读取文件
for line in file:
# 提取函数名称
sub_func_name = public.match_func_name(line)
# 过滤掉不存在的函数
if sub_func_name == "None" or sub_func_name == "":
continue
if sub_func_name not in func_map:
continue
# 提取函数对应的功能号
sub_func = func_map[sub_func_name]
fub_func_id = sub_func.id
if fub_func_id not in c_func.next_ids:
c_func.next_ids.append(fub_func_id)
# 添加完子节点后,再反过来添加父节点
if c_id not in sub_func.pre_ids:
sub_func.pre_ids.append(c_id)
with open('UF30函数关系图.txt', 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# 建图完毕将其保存到test.txt文件中
self.save_map_totxt(func_map, "UF30函数关系图.txt")
# 使用 'w' 模式打开文件,这会清空文件内容
with open(gene_file, 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# 生成函数调用图
# self.geneAllFucn2(find_function, func_map, id_name, "", gene_file, find_txt, model_flag, 0)
# if self.debug:
# print('生成完成')
# 3.生成函数调用或者被调用图
# 直接for循环遍历 扫描生成函数调用图 或者被调用图
def geneAllFucn2(self,find_function, tab='', call_path="\t\t【Start"):
func_map = self.function_map
id_name = self.id_name
projectPath = self.projectPath
subProject = self.subProject
# find_function = self.find_function
find_txt = self.find_txt
gene_file = self.gene_file
model_flag = self.model_flag
# print('model_flag', model_flag)
project = self.project
file_name = self.gene_file
count = 0
# call_path = "\t\t【Start"
find_flag = 0
for func_id in find_function:
if func_id not in id_name:
print(f"Not this function_id:{func_id}")
else:
index = find_function.index(func_id)
# 函数名称提取出来
func_name = id_name[func_id]
if '融资融券' in func_name:
continue
func_path = func_map[func_name].path
if find_txt != "":
with open(file_name, 'r', encoding='utf-8') as file1:
if public.check_string_in_file(func_path, find_txt):
find_flag = 1
with open(file_name, 'a', encoding='utf-8') as file:
if find_flag == 1:
file.write(tab + func_id + ":" + func_name + "\t\t" + find_txt + call_path + "->" + str(
func_id) + "\n")
elif model_flag == 1:
if (self.search_direction == 1 and 'LS' in func_name and '内部远程调用' not in func_name) or call_path == "\t\t【Start":
file.write(tab + func_id + ":" + func_name + "\n")
elif self.search_direction == 0:
file.write(tab + func_id + ":" + func_name + "\n")
find_flag = 0
# 提取 next_ids 此处可以设置函数调用图或者函数被调用图
next_ids = func_map[func_name].next_ids
pre_ids = func_map[func_name].pre_ids
if self.search_direction == 1:
# 如果标志为1 代表搜索反向调用图
next_ids = pre_ids
if len(next_ids) > 0:
self.geneAllFucn2(next_ids, '\t' + tab, call_path + "->" + str(func_id))
def loadInfoFromTxt(self):
# 读取并处理文件
with open('UF30函数关系图.txt', 'r', encoding='utf-8') as file:
for line in file:
line = line.strip()
if not line:
continue
# 使用正则表达式解析键值对
data = {}
pattern = r'"([^"]+)":"(.*?)"(?=,|$)'
matches = re.findall(pattern, line)
for key, value in matches:
# 处理列表类型的字段pre_ids/next_ids
if key in ['pre_ids', 'next_ids']:
# 将字符串列表转换为实际列表
value = value.replace("'", '"') # 替换单引号为双引号
try:
data[key] = json.loads(value)
except json.JSONDecodeError:
data[key] = []
else:
data[key] = value
# 确保所有必要字段都存在
required_fields = ['function_id', 'chinese_name', 'full_path']
if all(field in data for field in required_fields):
# 创建FunctionInfo对象
func_info = self.FunctionInfo(
name=data['chinese_name'],
id=data['function_id'],
path=data['full_path'],
pre_ids=data.get('pre_ids', []),
next_ids=data.get('next_ids', [])
)
# 更新function_map
self.function_map[func_info.name] = func_info
# 更新id_name
self.id_name[func_info.id] = func_info.name
def update_func_map(self):
# 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
self.traverse_all()
# 2.扫描函数字典 生成函数关系拓扑图
self.scanl_func()
# 初始化函数关系图到字典中
def init_func_call_map(self, forceUpdate=False):
# self.set_project(project)
# self.set_find_function(find_function)
# self.set_find_txt(find_txt)
# self.set_search_direction(search_direction)
# if find_txt:
# # 查询模式 0: 只显示搜到关键字的函数调用信息 1显示全部调用路径
# self.model_flag = 0
# if gene_file:
# self.set_gene_file(gene_file)
# build.set_gene_file('函数调用图2-1.txt')
if os.path.exists('UF30函数关系图.txt') and forceUpdate == False:
# 从文件中加载配置
self.loadInfoFromTxt()
else:
# print('111')
# 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
self.traverse_all()
# print('222')
# 2.扫描函数字典 生成函数关系拓扑图
self.scanl_func()
# 20250712 add 合并远程调用的和外部接口的 函数字典信息 pre_id和next_id解决部分函数反向调用无法穿透问题
self.merge_func_info()
def gene_func_call_map(self, find_function, find_txt, search_direction=0, project='uses', gene_file=''):
self.set_project(project)
self.set_find_function(find_function)
self.set_find_txt(find_txt)
self.set_search_direction(search_direction)
print('find_txt', find_txt)
if find_txt == ' ' or find_txt == None or find_txt == '':
# 查询模式 0: 只显示搜到关键字的函数调用信息 1显示全部调用路径
self.set_find_txt("")
self.model_flag = 1
else:
self.model_flag = 0
if gene_file:
self.set_gene_file(gene_file)
# 每次生成调用图之前,先清空文件
with open(self.gene_file, 'w', encoding='utf-8') as file:
pass # 文件内容被清空pass语句在这里不执行任何操作
# build.set_gene_file('函数调用图2-1.txt')
# # 1.遍历所有文件 生成每个库的函数字典 然后合并数据字典
# self.traverse_all()
# # 2.扫描函数字典 生成函数关系拓扑图
# self.scanl_func()
# 3.根据函数关系拓扑图 生成函数调用图/被调用图
self.geneAllFucn2(find_function)
# print('生成完成')
if self.debug:
print('生成完成')
# 20250712 add 添加函数用来合并远程调用函数的pre_id和next_id解决部分函数反向调用无法穿透问题
def merge_func_info(self):
# 更新function_map
# self.function_map[func_info.name] = func_info
# 1. 按 id 收集所有的 pre_ids 和 next_ids
id_to_combined = defaultdict(lambda: {"pre_ids": set(), "next_ids": set()})
for func in self.function_map.values():
id_to_combined[func.id]["pre_ids"].update(func.pre_ids)
id_to_combined[func.id]["next_ids"].update(func.next_ids)
# 2. 更新每一个 FunctionInfo 对象的 pre_ids 和 next_ids
for key in self.function_map:
if '远程调用' in key or '外部接口' in key:
func = self.function_map[key]
combined = id_to_combined.get(func.id, {"pre_ids": [], "next_ids": []})
# 转回 list 并排序(可选)
func.pre_ids = list(combined["pre_ids"])
func.next_ids = list(combined["next_ids"])
# 遍历所有目录
def main():
build = BuildMap()
build.init_func_call_map()
build.gene_func_call_map(['332648'], 'trade_handling_instr', search_direction=0, project='ucbp', gene_file='')
if __name__ == '__main__':
# 1.记录每个文件自己的信息,功能号,中英文名称
# 2.生成函数关系拓扑图
# 3.根据生成的函数关系图,来进行搜索之类的操作
main()

2
update_vueip.bat Normal file
View File

@@ -0,0 +1,2 @@
@echo off
E:\PythonCode\venv\Scripts\pythonw.exe E:\PythonCode\hstools\auto_update_vueip.py

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="GBK"?>
<!--ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-->
<TEST_PACK>
<Test>
<sub block="1" livetime="5000" pri="8" pack_ver="32" id="960001" interface_flag="" note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ί<EFBFBD><CEAF>״̬">
<route system="" sub_system="" branch="" esb_name="" esb_no="0" neighbor="" plugin=""/>
<inparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ί<EFBFBD><CEAF>״̬"/>
<outparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ί<EFBFBD><CEAF>״̬"/>
<err_outparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ί<EFBFBD><CEAF>״̬">
<out name="error_no" value="" type="I"/>
<out name="error_info" value="" type="S" width="1000"/>
<out name="error_pathinfo" value="" type="S" width="500"/>
</err_outparams>
</sub>
<sub block="1" livetime="5000" pri="8" pack_ver="32" id="960002" interface_flag="" note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ί<EFBFBD><CEAF>״̬">
<route system="" sub_system="" branch="" esb_name="" esb_no="0" neighbor="" plugin=""/>
<inparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ί<EFBFBD><CEAF>״̬">
<in name="function_no" value="" type="I"/>
<in name="exchange_type" value="" type="S" width="4"/>
</inparams>
<outparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ί<EFBFBD><CEAF>״̬"/>
<err_outparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ί<EFBFBD><CEAF>״̬">
<out name="error_no" value="" type="I"/>
<out name="error_info" value="" type="S" width="1000"/>
<out name="error_pathinfo" value="" type="S" width="500"/>
</err_outparams>
</sub>
<sub block="1" livetime="5000" pri="8" pack_ver="32" id="960003" interface_flag="" note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ڴ潻<DAB4>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ">
<route system="" sub_system="" branch="" esb_name="" esb_no="0" neighbor="" plugin=""/>
<inparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ڴ潻<DAB4>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ"/>
<outparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ڴ潻<DAB4>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ"/>
<err_outparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ڴ潻<DAB4>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ">
<out name="error_no" value="" type="I"/>
<out name="error_info" value="" type="S" width="1000"/>
<out name="error_pathinfo" value="" type="S" width="500"/>
</err_outparams>
</sub>
<sub block="1" livetime="5000" pri="8" pack_ver="32" id="960004" interface_flag="" note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ڵ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>">
<route system="" sub_system="" branch="" esb_name="" esb_no="0" neighbor="" plugin=""/>
<inparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ڵ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>">
<in name="partition_no" value="" type="I"/>
<in name="umt_node_status" value="" type="I"/>
</inparams>
<outparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ڵ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>"/>
<err_outparams note="LS_ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>ڵ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>">
<out name="error_no" value="" type="I"/>
<out name="error_info" value="" type="S" width="1000"/>
<out name="error_pathinfo" value="" type="S" width="500"/>
</err_outparams>
</sub>
</Test>
</TEST_PACK>

20
utilities/970016.xml Normal file
View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="GBK"?>
<TEST_PACK>
<Test>
<sub block="1" livetime="5000" pri="8" pack_ver="32" id="970016" interface_flag="" note="LS_֤ȯ<D6A4><C8AF><EFBFBD><EFBFBD>_<EFBFBD>Ϻ<EFBFBD>LOFҵ<46><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>">
<route system="" sub_system="" branch="" esb_name="" esb_no="0" neighbor="" plugin="" />
<inparams note="LS_֤ȯ<D6A4><C8AF><EFBFBD><EFBFBD>_<EFBFBD>Ϻ<EFBFBD>LOFҵ<46><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>">
<in name="main_stockcode" value="508000" type="S" width="8" />
<in name="lof_type" value="3" type="C" />
<in name="en_business_status" value="1000001 " type="S" width="32" />
<in name="business_data" value="[]" type="R" />
</inparams>
<outparams note="LS_֤ȯ<D6A4><C8AF><EFBFBD><EFBFBD>_<EFBFBD>Ϻ<EFBFBD>LOFҵ<46><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" />
<err_outparams note="LS_֤ȯ<D6A4><C8AF><EFBFBD><EFBFBD>_<EFBFBD>Ϻ<EFBFBD>LOFҵ<46><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>">
<out name="error_no" value="" type="I" />
<out name="error_info" value="" type="S" width="1000" />
<out name="error_pathinfo" value="" type="S" width="500" />
</err_outparams>
</sub>
</Test>
</TEST_PACK>

File diff suppressed because it is too large Load Diff

0
utilities/__init__.py Normal file
View File

96
utilities/cest_xml.py Normal file
View File

@@ -0,0 +1,96 @@
# @time :2025/9/3 20:49
# @File :cest_xml.py
# Description :
# Author :drygrass
from flask import Flask, request, jsonify
from flask_cors import CORS
import xml.etree.ElementTree as ET
from io import StringIO
app = Flask(__name__)
CORS(app)
@app.route('/api/parse-xml', methods=['POST'])
def parse_xml():
"""
解析上传的XML数据动态提取<inparams>下所有<in>元素的属性
"""
try:
xml_content = request.data.decode('gbk')
root = ET.fromstring(xml_content)
# 核心:使用 findall 查找所有<in>元素,数量未知
in_elements = root.findall('.//inparams/in')
in_params = []
# 遍历所有找到的<in>元素
for in_element in in_elements:
name = in_element.get('name')
value = in_element.get('value')
param_type = in_element.get('type')
width = in_element.get('width', '')
in_params.append({
'name': name,
'value': value,
'type': param_type,
'width': width
})
return jsonify({
'success': True,
'data': in_params, # 这是一个包含所有<in>元素信息的列表
'originalXml': xml_content
})
except ET.ParseError as e:
return jsonify({
'success': False,
'message': f'XML解析失败: {str(e)}。请检查XML格式是否正确如标签是否闭合、特殊字符是否转义等[1,2](@ref)。'
}), 400
except Exception as e:
return jsonify({
'success': False,
'message': f'服务器错误: {str(e)}'
}), 500
@app.route('/api/save-xml', methods=['POST'])
def save_xml():
"""
保存修改后的参数值到XML并返回完整XML内容
"""
try:
data = request.json
original_xml = data['originalXml']
modified_params = data['modifiedParams']
root = ET.fromstring(original_xml)
in_elements = root.findall('.//inparams/in')
# 根据name属性匹配并更新value
for in_element in in_elements:
name = in_element.get('name')
for modified_param in modified_params:
if modified_param['name'] == name:
in_element.set('value', modified_param['value'])
break # 找到并更新后跳出内层循环
modified_xml = ET.tostring(root, encoding='gbk').decode('gbk')
return jsonify({
'success': True,
'modifiedXml': modified_xml,
'message': '保存成功'
})
except Exception as e:
return jsonify({
'success': False,
'message': f'保存失败: {str(e)}'
}), 500
if __name__ == '__main__':
app.run(debug=True, port=5000)

1
utilities/last_ip.txt Normal file
View File

@@ -0,0 +1 @@
172.24.65.138

181
utilities/pushVueIp.py Normal file
View File

@@ -0,0 +1,181 @@
import subprocess
import re
import requests
import json
import time
import os
from retrying import retry
import ctypes
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0) # 强制隐藏
class IPMonitor:
"""
IP监控与推送服务
功能:
1. 自动检测hundsun.com局域网的IP变化
2. IP变化时自动推送到指定服务器
3. 支持失败重试和超时设置
"""
def __init__(
self,
server_url="http://10.20.163.101:5535/ldp?Pretty=1&PluginName=ldp_db_listen_plugin&FuncName=SetVueConfig",
fixed_port="5173",
ip_storage_file="last_ip.txt",
request_timeout=5
):
"""
初始化监控器
:param server_url: 推送目标URL
:param fixed_port: 固定端口号
:param ip_storage_file: IP存储文件路径
:param request_timeout: 请求超时时间(秒)
"""
self.server_url = server_url
self.fixed_port = fixed_port
self.ip_storage_file = ip_storage_file
self.request_timeout = request_timeout
def get_hundsun_ip(self):
"""获取hundsun.com局域网的当前IP"""
try:
result = subprocess.run(
['ipconfig', '/all'],
capture_output=True,
text=True,
check=True
)
# pattern = r'hundsun\.com.*?IPv4 地址[^\d]*(\d+\.\d+\.\d+\.\d+)'
# 修改后的正确模式匹配127.24开头的IP
pattern = r'hundsun\.com.*?IPv4 地址[^\d]*(172\.24\.\d+\.\d+)'
match = re.search(pattern, result.stdout, re.DOTALL)
return match.group(1) if match else None
except Exception as e:
# print(f"[IPMonitor] 获取IP失败: {e}")
return None
def get_handsome_ip(self):
"""获取hs.handsome.com.cn局域网的当前IP"""
try:
result = subprocess.run(
['ipconfig', '/all'],
capture_output=True,
text=True,
check=True
)
# 修改模式以匹配hs.handsome.com.cn后缀和IPv4地址
pattern = r'hs\.handsome\.com\.cn.*?IPv4 地址[^\d]*(10\.\d+\.\d+\.\d+)'
match = re.search(pattern, result.stdout, re.DOTALL)
return match.group(1) if match else None
except Exception as e:
# print(f"[IPMonitor] 获取IP失败: {e}")
return None
@retry(stop_max_attempt_number=3, wait_fixed=2000)
def _send_ip(self, ip_address):
"""内部方法发送IP到服务器自动重试"""
headers = {'Content-Type': 'application/json'}
data = {
"Request": {
"vueHost": ip_address,
"vuePort": self.fixed_port
}
}
try:
response = requests.post(
self.server_url,
headers=headers,
data=json.dumps(data),
timeout=self.request_timeout
)
if not response.ok:
raise Exception(f"服务器返回 {response.status_code}: {response.text}")
return True
except requests.exceptions.RequestException as e:
raise Exception(f"网络请求失败: {e}")
def push_current_ip(self):
"""
强制推送当前IP到服务器
:return: (success, ip) 元组
"""
current_ip = self.get_hundsun_ip()
if not current_ip:
return (False, None)
try:
if self._send_ip(current_ip):
self._save_ip(current_ip)
return (True, current_ip)
except Exception as e:
# print(f"[IPMonitor] 推送失败: {e}")
pass
return (False, current_ip)
def check_and_push(self):
"""
检查IP变化并自动推送
:return: (changed, success, ip) 元组
"""
current_ip = self.get_hundsun_ip()
if current_ip == None:
current_ip = self.get_handsome_ip()
last_ip = self._load_ip()
if not current_ip:
return (False, False, None)
if current_ip != last_ip:
try:
if self._send_ip(current_ip):
self._save_ip(current_ip)
return (True, True, current_ip)
return (True, False, current_ip)
except Exception as e:
# print(f"[IPMonitor] 推送失败: {e}")
return (True, False, current_ip)
return (False, True, current_ip)
def _save_ip(self, ip):
"""内部方法保存IP到文件"""
try:
with open(self.ip_storage_file, 'w') as f:
f.write(ip)
except Exception as e:
# print(f"[IPMonitor] 保存IP失败: {e}")
pass
def _load_ip(self):
"""内部方法从文件加载IP"""
if not os.path.exists(self.ip_storage_file):
return None
try:
with open(self.ip_storage_file, 'r') as f:
return f.read().strip()
except Exception as e:
# print(f"[IPMonitor] 读取IP失败: {e}")
return None
# 示例使用方式
if __name__ == "__main__":
# 初始化监控器(可自定义参数)
monitor = IPMonitor()
# 示例1单次检查并推送
# changed, success, ip = monitor.check_and_push()
# print(f"\n检查结果: 变化={changed}, 成功={success}, IP={ip}")
# 示例2强制推送当前IP
# success, ip = monitor.push_current_ip()
# print(f"强制推送结果: 成功={success}, IP={ip}")
# 示例3定时任务集成
import schedule
def job():
monitor.check_and_push()
schedule.every(5).minutes.do(job)
while True:
schedule.run_pending()
time.sleep(1)