Merge branch 'wsc' into ps
This commit is contained in:
commit
fcfca097af
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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,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
|
||||
|
||||
|
||||
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
2
app.py
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue