Merge branch 'wsc' into ps
This commit is contained in:
commit
fcfca097af
|
@ -1,3 +1,4 @@
|
||||||
|
import random
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,4 +6,14 @@ class CommonUtils(object):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_current_time():
|
def get_current_time():
|
||||||
|
"""获取当前时间"""
|
||||||
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
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
|
||||||
|
|
|
@ -3,7 +3,7 @@ import xlrd
|
||||||
from DBHelper.MongoHelperInstance import DB_GUA
|
from DBHelper.MongoHelperInstance import DB_GUA
|
||||||
from Modules.Company.CompanyObject import BasicBusinessInfo, FinancialData, CustomerInfo, RegionalDistribution, \
|
from Modules.Company.CompanyObject import BasicBusinessInfo, FinancialData, CustomerInfo, RegionalDistribution, \
|
||||||
IndustryDistribution, GuaranteedBalanceDistribution
|
IndustryDistribution, GuaranteedBalanceDistribution
|
||||||
from Modules.Company.CompanyUtils import CommonUtils, ExcelSheetParser
|
from Modules.Company.CompanyUtils import CompanyUtils, ExcelSheetParser
|
||||||
from Utils.ObjUtil import SpecObject
|
from Utils.ObjUtil import SpecObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ class BasicBusinessInfoImpl(object):
|
||||||
def parse_excel_and_create_company(file):
|
def parse_excel_and_create_company(file):
|
||||||
"""解析excel模板数据 创建公司信息"""
|
"""解析excel模板数据 创建公司信息"""
|
||||||
|
|
||||||
new_cid = CommonUtils.make_new_cid()
|
new_cid = CompanyUtils.make_new_cid()
|
||||||
work_book = xlrd.open_workbook(file_contents=file.read())
|
work_book = xlrd.open_workbook(file_contents=file.read())
|
||||||
|
|
||||||
basic_business_info = BasicBusinessInfo()
|
basic_business_info = BasicBusinessInfo()
|
||||||
|
|
|
@ -4,24 +4,15 @@ import random
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from DBHelper.MongoHelperInstance import DB_GUA
|
from DBHelper.MongoHelperInstance import DB_GUA
|
||||||
|
from Modules.Common.CommonUtils import CommonUtils
|
||||||
|
|
||||||
|
|
||||||
class CommonUtils(object):
|
class CompanyUtils(object):
|
||||||
|
|
||||||
# 生成新的企业ID,如果该ID存在,则重新生成
|
# 生成新的企业ID,如果该ID存在,则重新生成
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def make_new_cid():
|
def make_new_cid():
|
||||||
|
new_cid = CommonUtils.random_code(8)
|
||||||
def random_cid(num):
|
|
||||||
"""随机企业ID"""
|
|
||||||
choices = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
|
||||||
salt = ''
|
|
||||||
for i in range(num):
|
|
||||||
salt += random.choice(choices)
|
|
||||||
return salt
|
|
||||||
|
|
||||||
new_cid = random_cid(8)
|
|
||||||
|
|
||||||
case = DB_GUA.find_single_column(
|
case = DB_GUA.find_single_column(
|
||||||
"管理端",
|
"管理端",
|
||||||
"企业数据",
|
"企业数据",
|
||||||
|
@ -29,7 +20,7 @@ class CommonUtils(object):
|
||||||
"企业ID"
|
"企业ID"
|
||||||
) is not None
|
) is not None
|
||||||
while case:
|
while case:
|
||||||
new_cid = random_cid(8)
|
new_cid = CommonUtils.random_code(8)
|
||||||
return new_cid
|
return new_cid
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
)
|
|
@ -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": "所在省市"
|
||||||
|
}
|
|
@ -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):
|
||||||
|
"""删除评级(进行中)"""
|
|
@ -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"
|
|
@ -1,21 +1,24 @@
|
||||||
from Utils.ErrorUtil import APIReturnError
|
from Utils.ErrorUtil import APIReturnError
|
||||||
|
|
||||||
|
|
||||||
class RouteUtil(object):
|
class RouteParamsCheck(object):
|
||||||
"""路由工具"""
|
"""路由工具"""
|
||||||
|
|
||||||
@staticmethod
|
def __init__(self, req, params):
|
||||||
def require_params_check(req_body, 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
|
raise Exception
|
||||||
|
|
||||||
if not isinstance(req_params, list):
|
if not isinstance(self.params, list):
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
params_in_req_body = list(req_body.keys())
|
params_in_req_body = list(self.req.keys())
|
||||||
for param in req_params:
|
for param in self.params:
|
||||||
if param not in params_in_req_body:
|
if param not in params_in_req_body:
|
||||||
error_info = "缺失必需参数: {}".format(param)
|
error_info = "缺失必需参数: {}".format(param)
|
||||||
raise APIReturnError(error_info=error_info, status_code=200)
|
raise APIReturnError(error_info=error_info, status_code=200)
|
||||||
|
|
2
app.py
2
app.py
|
@ -3,6 +3,7 @@ from flask_cors import *
|
||||||
|
|
||||||
from Modules.AdminUser.UserRoutes import user_route
|
from Modules.AdminUser.UserRoutes import user_route
|
||||||
from Modules.Company.CompanyRoutes import company_route
|
from Modules.Company.CompanyRoutes import company_route
|
||||||
|
from Modules.Rating.RatingRoutes import rating_route
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
CORS(app, supports_credentials=True)
|
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(user_route, url_prefix='/admin/user')
|
||||||
app.register_blueprint(company_route, url_prefix='/admin/company')
|
app.register_blueprint(company_route, url_prefix='/admin/company')
|
||||||
|
app.register_blueprint(rating_route, url_prefix='/admin/rating')
|
||||||
|
|
||||||
|
|
||||||
@app.route('/admin/version')
|
@app.route('/admin/version')
|
||||||
|
|
Loading…
Reference in New Issue