Merge branch 'wsc' into ps

This commit is contained in:
王思川 2022-05-29 23:33:48 +08:00
commit fcfca097af
11 changed files with 275 additions and 22 deletions

View File

@ -1,3 +1,4 @@
import random
import time
@ -5,4 +6,14 @@ class CommonUtils(object):
@staticmethod
def get_current_time():
"""获取当前时间"""
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
@staticmethod
def random_code(length):
"""生成随机编码"""
choices = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
code = ''
for i in range(length):
code += random.choice(choices)
return code

View File

@ -3,7 +3,7 @@ import xlrd
from DBHelper.MongoHelperInstance import DB_GUA
from Modules.Company.CompanyObject import BasicBusinessInfo, FinancialData, CustomerInfo, RegionalDistribution, \
IndustryDistribution, GuaranteedBalanceDistribution
from Modules.Company.CompanyUtils import CommonUtils, ExcelSheetParser
from Modules.Company.CompanyUtils import CompanyUtils, ExcelSheetParser
from Utils.ObjUtil import SpecObject
@ -13,7 +13,7 @@ class BasicBusinessInfoImpl(object):
def parse_excel_and_create_company(file):
"""解析excel模板数据 创建公司信息"""
new_cid = CommonUtils.make_new_cid()
new_cid = CompanyUtils.make_new_cid()
work_book = xlrd.open_workbook(file_contents=file.read())
basic_business_info = BasicBusinessInfo()

View File

@ -4,24 +4,15 @@ import random
from datetime import datetime, timedelta
from DBHelper.MongoHelperInstance import DB_GUA
from Modules.Common.CommonUtils import CommonUtils
class CommonUtils(object):
class CompanyUtils(object):
# 生成新的企业ID如果该ID存在则重新生成
@staticmethod
def make_new_cid():
def random_cid(num):
"""随机企业ID"""
choices = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
salt = ''
for i in range(num):
salt += random.choice(choices)
return salt
new_cid = random_cid(8)
new_cid = CommonUtils.random_code(8)
case = DB_GUA.find_single_column(
"管理端",
"企业数据",
@ -29,7 +20,7 @@ class CommonUtils(object):
"企业ID"
) is not None
while case:
new_cid = random_cid(8)
new_cid = CommonUtils.random_code(8)
return new_cid

0
Modules/ETL/__init__.py Normal file
View File

View File

View File

@ -0,0 +1,68 @@
from DBHelper.MongoHelperInstance import DB_GUA
from Modules.Rating.RatingObjects import RatingRecord
from Modules.Rating.RatingUtils import RatingUtils
class RatingRecordImpl(object):
@staticmethod
def before_create(**kwargs):
"""新建评级前检查"""
cid = kwargs["cid"]
RatingUtils.check_cid_legal(kwargs["cid"])
rid = RatingUtils.in_progress_rating(cid)
if rid:
item = DB_GUA.find_single_data(
"评级数据",
"评级记录",
{"评级ID": rid},
["企业名称", "报告期"]
)
return_data = dict()
return_data["企业名称"] = item["企业名称"]
return_data["报告期"] = item["报告期"]
else:
items = DB_GUA.find_all_data_with_single_sort(
"企业数据",
"财务数据",
{"企业ID": cid},
["企业名称", "报告期"],
{"报告期": -1}
)
return_data = dict()
return_data["企业名称"] = items[0]["企业名称"]
return_data["报告期"] = [item["报告期"] for item in items]
return return_data
@staticmethod
def create(**kwargs):
"""新建评级"""
cid = kwargs["cid"]
report_date = kwargs["report_date"]
rid = RatingUtils.in_progress_rating(cid)
assert not rid, "已有正在进行的评级"
business_info = DB_GUA.find_single_data(
"企业数据",
"工商信息",
{"企业ID": cid},
["企业名称", "所在省份", "所在城市"]
)
rating_record = RatingRecord()
rating_record.rid = RatingUtils.make_new_rid()
rating_record.report_date = report_date
rating_record.status = "进行"
rating_record.cid = cid
rating_record.company_name = business_info["企业名称"]
rating_record.province_and_city = business_info["所在省份"] + business_info["所在城市"]
DB_GUA.insert_single_data(
"评级数据",
"评级记录",
rating_record.fields_toggle()
)

View File

@ -0,0 +1,30 @@
from Utils.ObjUtil import SpecObject
from Utils.ValidateUtil import ValidateAttr, Validate
class RatingRecord(SpecObject):
"""评级记录"""
rid = ValidateAttr(field="rid", type=str)
report_date = ValidateAttr(field="report_date", func=Validate.date_format)
status = ValidateAttr(field="status", in_list=["完成", "进行"])
cid = ValidateAttr(field="cid", type=str)
company_name = ValidateAttr(field="company_name", type=str)
rating_date = ValidateAttr(field="rating_date", func=Validate.date_format)
credit_rating = ValidateAttr(field="credit_rating", type=str)
credit_score = ValidateAttr(field="credit_score", type=float)
rating_report = ValidateAttr(field="rating_report", type=str)
province_and_city = ValidateAttr(field="province_and_city", type=str)
fields_map = {
"rid": "评级ID",
"report_date": "报告期",
"status": "评级状态",
"cid": "企业ID",
"company_name": "企业名称",
"rating_date": "评级日期",
"credit_rating": "信用级别",
"credit_score": "信用分数",
"rating_report": "评级报告",
"province_and_city": "所在省市"
}

View File

@ -0,0 +1,87 @@
from flask import Blueprint, request
from Modules.AdminUser.UserAuthUtils import verify_token
from Modules.Rating.RatingImpl import RatingRecordImpl
from Utils.ErrorUtil import AttrCheckError
from Utils.RouteUtil import RouteParamsCheck
rating_route = Blueprint('rating', __name__)
@rating_route.route('/before_create', methods=['GET'])
@verify_token
def before_create_routes(**kwargs):
"""评级选择"""
RouteParamsCheck(
req=request.args,
params=['cid']
).required()
cid = request.args['cid']
try:
impl = RatingRecordImpl()
result = impl.before_create(cid=cid)
return {"info": "评级选择", "result": result}
except AssertionError as e:
return {"info": e.__str__()}, 200
@rating_route.route('/create', methods=['GET'])
@verify_token
def create_routes(**kwargs):
"""新建评级"""
RouteParamsCheck(
req=request.args,
params=['cid', 'report_date']
).required()
cid = request.args['cid']
report_date = request.args['report_date']
try:
impl = RatingRecordImpl()
impl.create(cid=cid, report_date=report_date)
return {"info": "新建评级成功"}
except AssertionError as e:
return {"info": e.__str__()}, 200
except AttrCheckError as e:
return {"info": e.__str__()}, 202
@rating_route.route('/financial_analysis', methods=['GET'])
@verify_token
def financial_analysis_routes(**kwargs):
"""财务分析"""
@rating_route.route('/risk_analysis', methods=['GET'])
@verify_token
def risk_analysis_route(**kwargs):
"""风险分析"""
@rating_route.route('/score_and_rank', methods=['GET'])
@verify_token
def score_and_rank_route(**kwargs):
"""得分级别"""
@rating_route.route('/rank_report', methods=['GET'])
@verify_token
def rank_report_route(**kwargs):
"""评级报告"""
@rating_route.route('/submit', methods=['GET'])
@verify_token
def submit_route(**kwargs):
"""确认提交"""
@rating_route.route('/delete', methods=['GET'])
@verify_token
def delete_route(**kwargs):
"""删除评级(进行中)"""

View File

@ -0,0 +1,61 @@
from DBHelper.MongoHelperInstance import DB_GUA
from Modules.Common.CommonUtils import CommonUtils
class RatingUtils(object):
@staticmethod
def make_new_rid():
"""新建评级ID"""
new_rid = CommonUtils.random_code(8)
case = DB_GUA.find_single_column(
"评级数据",
"评级记录",
{"评级ID": new_rid},
"评级ID"
) is not None
while case:
new_rid = CommonUtils.random_code(8)
return new_rid
@staticmethod
def in_progress_rating(cid):
"""查找进行中的评级"""
in_progress_rid = DB_GUA.find_single_column(
"评级数据",
"评级记录",
{"企业ID": cid, "评级状态": "进行"},
"评级ID"
)
return in_progress_rid
@staticmethod
def trans_report_date_to_rank_year(report_date):
"""报告期转换为评级年度"""
def main(_date):
items = _date.split("-")
year = items[0]
month = items[1]
if month == "12":
rank_year = "{}".format(int(year)+1)
else:
rank_year = "{}".format(year)
return rank_year
if type(report_date) == str:
return main(report_date)
elif type(report_date) == list:
rank_years = [main(item) for item in report_date]
rank_years = sorted(set(rank_years), key=rank_years.index)
return rank_years
@staticmethod
def check_cid_legal(cid):
_cid = DB_GUA.find_single_column(
"企业数据",
"工商信息",
{"企业ID": cid},
"企业ID"
)
assert _cid, "错误的企业ID"

View File

@ -1,21 +1,24 @@
from Utils.ErrorUtil import APIReturnError
class RouteUtil(object):
class RouteParamsCheck(object):
"""路由工具"""
@staticmethod
def require_params_check(req_body, req_params):
def __init__(self, req, params):
self.req = req
self.params = params
def required(self):
"""必需参数检查"""
if not isinstance(req_body, dict):
if not isinstance(self.req, dict):
raise Exception
if not isinstance(req_params, list):
if not isinstance(self.params, list):
raise Exception
params_in_req_body = list(req_body.keys())
for param in req_params:
params_in_req_body = list(self.req.keys())
for param in self.params:
if param not in params_in_req_body:
error_info = "缺失必需参数: {}".format(param)
raise APIReturnError(error_info=error_info, status_code=200)

2
app.py
View File

@ -3,6 +3,7 @@ from flask_cors import *
from Modules.AdminUser.UserRoutes import user_route
from Modules.Company.CompanyRoutes import company_route
from Modules.Rating.RatingRoutes import rating_route
app = Flask(__name__)
CORS(app, supports_credentials=True)
@ -11,6 +12,7 @@ app.config['JSON_SORT_KEYS'] = False
app.register_blueprint(user_route, url_prefix='/admin/user')
app.register_blueprint(company_route, url_prefix='/admin/company')
app.register_blueprint(rating_route, url_prefix='/admin/rating')
@app.route('/admin/version')