From 9fc6da3b01c23868257c847bebad10a1f5a0c75c Mon Sep 17 00:00:00 2001 From: P3ngSaM <61768364+P3ngSaM@users.noreply.github.com> Date: Wed, 29 Jun 2022 11:02:15 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=A0=87=E7=AD=BE=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DBHelper/MongoHelper.py | 28 +++++++- Modules/Indicators/IndicatorRoutes.py | 46 ------------- .../{IndicatorImpl.py => Tags/TagsImpl.py} | 49 +++++++++++-- .../{IndicatorObj.py => Tags/TagsObj.py} | 8 ++- Modules/Indicators/Tags/TagsRoutes.py | 68 +++++++++++++++++++ Modules/Indicators/Tags/__init__.py | 0 app.py | 4 +- 7 files changed, 146 insertions(+), 57 deletions(-) delete mode 100644 Modules/Indicators/IndicatorRoutes.py rename Modules/Indicators/{IndicatorImpl.py => Tags/TagsImpl.py} (53%) rename Modules/Indicators/{IndicatorObj.py => Tags/TagsObj.py} (92%) create mode 100644 Modules/Indicators/Tags/TagsRoutes.py create mode 100644 Modules/Indicators/Tags/__init__.py diff --git a/DBHelper/MongoHelper.py b/DBHelper/MongoHelper.py index 153663d..4749113 100644 --- a/DBHelper/MongoHelper.py +++ b/DBHelper/MongoHelper.py @@ -191,7 +191,7 @@ class MongoHelper: def update_single_data(self, param1, param2, param3, param4): """ - 插入单条数据 + 更新单条数据 param1: str 数据库 param2: str 数据表 param3: dict 查询条件 @@ -202,6 +202,32 @@ class MongoHelper: collection = self.client[param1][param2] collection.update_one(param3, {"$set": param4}) + def update_single_data_by_pull(self, param1, param2, param3, param4): + """ + 更新单条数据 + param1: str 数据库 + param2: str 数据表 + param3: dict 查询条件 + param4: dict 更新或新插入的数据 + return: + None + """ + collection = self.client[param1][param2] + collection.update_one(param3, {"$pull": param4}) + + def update_single_data_by_add(self, param1, param2, param3, param4): + """ + 更新单条数据 + param1: str 数据库 + param2: str 数据表 + param3: dict 查询条件 + param4: dict 更新或新插入的数据 + return: + None + """ + collection = self.client[param1][param2] + collection.update_one(param3, {"$addToSet": param4}) + def delete_single_data(self, param1, param2, param3): """ 根据查询条件删除一条文档 diff --git a/Modules/Indicators/IndicatorRoutes.py b/Modules/Indicators/IndicatorRoutes.py deleted file mode 100644 index 8b7d95c..0000000 --- a/Modules/Indicators/IndicatorRoutes.py +++ /dev/null @@ -1,46 +0,0 @@ -from flask import Blueprint, request - -from Modules.Indicators.IndicatorImpl import IndicatorImpl -from Utils.ErrorUtil import APIReturnError -from Utils.RouteUtil import RouteParamsCheck - -indicator_route = Blueprint('indicator', __name__) - - -@indicator_route.route('/search_tags', methods=['GET']) -def search_tags_route(): - """查询标签""" - try: - RouteParamsCheck(request.args, ["tag_name", "page_no", "page_size"]).required() - tag_name = request.args["tag_name"] - page_no = request.args["page_no"] - page_size = request.args["page_size"] - impl = IndicatorImpl() - result = impl.search_tags(tag_name=tag_name, page_no=page_no, page_size=page_size) - return {"info": "标签搜索", "result": result}, 200 - - except APIReturnError as e: - return {"info": e.__str__()}, e.status_code - - -@indicator_route.route('/new_tags', methods=['GET']) -def new_tags_route(): - """新增标签""" - try: - RouteParamsCheck(request.args, ["tag_name"]).required() - tag_name = request.args["tag_name"] - impl = IndicatorImpl() - result = impl.new_tags(tag_name=tag_name) - return {"info": "新增标签", "result": result}, 200 - - except APIReturnError as e: - return {"info": e.__str__()}, e.status_code - - -@indicator_route.route('/new_indicator', methods=['POST']) -def new_indicator_route(): - """构建指标""" - try: - RouteParamsCheck(request.args, ["tag_name"]).required() - except APIReturnError as e: - return {"inof": e.__str__()}, e.status_code diff --git a/Modules/Indicators/IndicatorImpl.py b/Modules/Indicators/Tags/TagsImpl.py similarity index 53% rename from Modules/Indicators/IndicatorImpl.py rename to Modules/Indicators/Tags/TagsImpl.py index 9354888..07e726a 100644 --- a/Modules/Indicators/IndicatorImpl.py +++ b/Modules/Indicators/Tags/TagsImpl.py @@ -1,9 +1,11 @@ +import time + from DBHelper.MongoHelperInstance import DB_TEST -from Modules.Indicators.IndicatorObj import TagObj +from Modules.Indicators.Tags.TagsObj import TagObj from Utils.CommonUtil import CommonUtils -class IndicatorImpl(object): +class TagsImpl(object): @staticmethod def make_new_cid(): @@ -28,12 +30,12 @@ class IndicatorImpl(object): {'标签名称': {"$regex": kwargs['tag_name']}} ) - records = DB_TEST.find_all_data_with_single_sort( + records = DB_TEST.find_data_by_page_with_sort( '模型数据', '标签数据', {'标签名称': {"$regex": kwargs['tag_name']}}, - ['标签名称'], - {'标签名称': -1}, + ['标签名称', '创建日期'], + {'创建日期': -1}, kwargs['page_size'], kwargs['page_no'] ) @@ -51,6 +53,8 @@ class IndicatorImpl(object): obj = TagObj() obj.tag_id = self.make_new_cid() obj.tag_field = filed + obj.associate_func = list() + obj.create_date = time.strftime('%Y-%m-%d', time.localtime()) DB_TEST.upsert_single_data( '模型数据', '标签数据', @@ -58,3 +62,38 @@ class IndicatorImpl(object): obj.fields_toggle() ) return '新增成功' + + @staticmethod + def cancel_associate_func(**kwargs): + """取消关联函数""" + tag_id = kwargs['tag_id'] + func_id = kwargs['func_id'] + + DB_TEST.update_single_data_by_pull( + '模型数据', + '标签数据', + {'标签ID': tag_id}, + {"关联函数": {"函数ID": func_id}} + ) + + return '取消关联成功' + + @staticmethod + def associate_func(**kwargs): + """关联函数""" + tag_id = kwargs['tag_id'] + func_id = kwargs['func_id'] + func_name = kwargs['func_name'] + + obj = TagObj.AssociateFunc() + obj.func_id = func_id + obj.func_name = func_name + + DB_TEST.update_single_data_by_add( + '模型数据', + '标签数据', + {'标签ID': tag_id}, + {"关联函数": obj.fields_toggle()} + ) + + return '关联成功' diff --git a/Modules/Indicators/IndicatorObj.py b/Modules/Indicators/Tags/TagsObj.py similarity index 92% rename from Modules/Indicators/IndicatorObj.py rename to Modules/Indicators/Tags/TagsObj.py index 07f37a5..b8b3e55 100644 --- a/Modules/Indicators/IndicatorObj.py +++ b/Modules/Indicators/Tags/TagsObj.py @@ -1,5 +1,5 @@ from Utils.ObjUtil import SpecObject -from Utils.ValidateUtil import ValidateAttr +from Utils.ValidateUtil import ValidateAttr, Validate class IndexObj(SpecObject): @@ -76,13 +76,15 @@ class TagObj(SpecObject): "func_id": "函数ID", "func_name": "函数名称" } - + tag_id = ValidateAttr(field='tag_id', type=str) tag_field = ValidateAttr(field='tag_field', type=str) associate_func = ValidateAttr(field='associate_func', instance_list=AssociateFunc) + create_date = ValidateAttr(field='create_date', func=Validate.date_format) fields_map = { "tag_id": "标签ID", "tag_field": "标签名称", - "associate_func": "关联函数" + "associate_func": "关联函数", + "create_date": "创建日期" } diff --git a/Modules/Indicators/Tags/TagsRoutes.py b/Modules/Indicators/Tags/TagsRoutes.py new file mode 100644 index 0000000..70c0539 --- /dev/null +++ b/Modules/Indicators/Tags/TagsRoutes.py @@ -0,0 +1,68 @@ +from flask import Blueprint, request + +from Modules.Indicators.Tags.TagsImpl import TagsImpl +from Utils.ErrorUtil import APIReturnError +from Utils.RouteUtil import RouteParamsCheck + +tags_route = Blueprint('tags', __name__) + + +@tags_route.route('/search_tags', methods=['GET']) +def search_tags_route(): + """查询标签""" + try: + RouteParamsCheck(request.args, ["tag_name", "page_no", "page_size"]).required() + tag_name = request.args["tag_name"] + page_no = request.args["page_no"] + page_size = request.args["page_size"] + impl = TagsImpl() + result = impl.search_tags(tag_name=tag_name, page_no=page_no, page_size=page_size) + return {"info": "标签搜索", "result": result}, 200 + + except APIReturnError as e: + return {"info": e.__str__()}, e.status_code + + +@tags_route.route('/new_tags', methods=['GET']) +def new_tags_route(): + """新增标签""" + try: + RouteParamsCheck(request.args, ["tag_name"]).required() + tag_name = request.args["tag_name"] + impl = TagsImpl() + result = impl.new_tags(tag_name=tag_name) + return {"info": "新增标签", "result": result}, 200 + + except APIReturnError as e: + return {"info": e.__str__()}, e.status_code + + +@tags_route.route('/cancel_associate_func', methods=['GET']) +def cancel_associate_func_route(): + """取消关联函数""" + try: + RouteParamsCheck(request.args, ["tag_id", "func_id"]).required() + tag_id = request.args['tag_id'] + func_id = request.args['func_id'] + impl = TagsImpl() + result = impl.cancel_associate_func(tag_id=tag_id, func_id=func_id) + return {"info": "关联函数", "result": result}, 200 + + except APIReturnError as e: + return {"info": e.__str__()}, e.status_code + + +@tags_route.route('/associate_func', methods=['GET']) +def associate_func_route(): + """关联函数""" + try: + RouteParamsCheck(request.args, ["tag_id", "func_id", "func_name"]).required() + tag_id = request.args['tag_id'] + func_id = request.args['func_id'] + func_name = request.args['func_name'] + impl = TagsImpl() + result = impl.associate_func(tag_id=tag_id, func_id=func_id, func_name=func_name) + return {"info": "关联函数", "result": result}, 200 + + except APIReturnError as e: + return {"info": e.__str__()}, e.status_code \ No newline at end of file diff --git a/Modules/Indicators/Tags/__init__.py b/Modules/Indicators/Tags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app.py b/app.py index 62a2df4..cd2440e 100644 --- a/app.py +++ b/app.py @@ -2,7 +2,7 @@ from flask import Flask from flask_cors import * from Modules.Functions.FinIndex.FinIndexRoutes import finance_route -from Modules.Indicators.IndicatorRoutes import indicator_route +from Modules.Indicators.Tags.TagsRoutes import tags_route app = Flask(__name__) CORS(app, supports_credentials=True) @@ -10,7 +10,7 @@ app.config['JSON_SORT_KEYS'] = False app.register_blueprint(finance_route, url_prefix='/rating/functions/finance') -app.register_blueprint(indicator_route, url_prefix='/rating/indicator') +app.register_blueprint(tags_route, url_prefix='/rating/indicator/tags') @app.route('/admin/version')