Commit b5277418 by 赵宇

fix

parent 9a482a16
from flask import Blueprint
# 创建蓝图对象
api_portraits = Blueprint("api_portraits", __name__)
from . import view
'''360企业画像'''
import os
import json
from elasticsearch import Elasticsearch
from flask import request, jsonify, current_app
from apps.models import *
from apps.view_360company import api_portraits
from apps.util import login_required, verify_token
from apps.utils.response_code import RET
from apps import redis_store
def body_qualificat(s, j):
body = {
"query": {
"bool": {
"must": {"match": {"{}": "{}".format(s, j)}}
}
}
}
return body
def body_type(s):
body = {
"query": {
"bool": {
"must": {"match": {"entypeid": "{}".format(s)}}
}
}
}
return body
def create_body(page, page_size, args_query, args_term):
body = {
"query": {
"bool": {
"filter": {
"range": {
"build_date": {
}
}
},
"must": [
{"multi_match": {
"query": "{}".format(args_query["query"]),
"type": "best_fields",
"fields": [
"product^1.0",
"company_name^1.0",
"industry^1.0"
],
"tie_breaker": 0.3
}
},
]
}
},
"from": page,
"size": page_size,
"sort": [],
"aggs": {},
"_source": [
# 'all_info',
'industry', 'build_date', 'register_money_nums', 'product',
'company_name', "mysql_id"
],
"highlight": {
"fields": {
"product": {"type": "plain"},
"company_name": {"type": "plain"},
"industry": {"type": "plain"}
}
}
}
for k, v in args_term.items():
body["query"]["bool"]["must"].append({"term": {"{}".format(k): "{}".format(v)}})
return body
# 360企业画像两个静态表(如果前端页面进行删除,此接口也一并删除)
@api_portraits.route("/table", methods=["GET"])
def table():
try:
name_query = "static_360"
if redis_store.get(name_query) is not None:
data = json.loads(redis_store.get(name_query))
return jsonify(code=RET.OK, msg="获取成功", data=data)
company = Enterprise.query.filter_by()
grdz = company.filter_by(entypeid=1).count()
gfyx = company.filter_by(entypeid=2).count()
hhqy = company.filter_by(entypeid=3).count()
jtsy = company.filter_by(entypeid=4).count()
gyqy = company.filter_by(entypeid=5).count()
yxzr = company.filter_by(entypeid=6).count()
wstz = company.filter_by(entypeid=7).count()
new_dic = [grdz, yxzr, gfyx, jtsy, hhqy, gyqy, wstz]
gxjs = company.filter_by(high_new="1").count()
kjzx = company.filter_by(tbe="1").count()
ssqy = company.filter_by(quoted_company="1").count()
djs = company.filter_by(unicorn="1").count()
dlqy = company.filter_by(dengl="1").count()
quality_list = [gxjs, kjzx, ssqy, djs, dlqy]
data = {
"type": new_dic,
"quality": quality_list
}
# redis缓存
redis_store.set(name_query, json.dumps(data))
redis_store.expire(name_query, 30 * 24 * 3600)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.OK, msg="数据库错误")
return jsonify(code=RET.OK, msg="查询成功", data=data)
# 360企业画像两个静态表(参数数据)(如果前端页面进行删除,此接口也一并删除)
@api_portraits.route("/doubleTable", methods=["POST"])
def double_table():
# 获取参数
req_dict = request.get_json()
area = req_dict.get("area") # 省市区参数
province = ""
city = ""
district = ""
if area[0]:
province = area[0]
if area[1]:
city = area[1]
if area[2]:
district = area[2]
if not all([area]):
return jsonify(code=RET.NODATA, msg="参数缺失")
try:
name_query = "static_360" + province + city + district
if redis_store.get(name_query) is not None:
data = json.loads(redis_store.get(name_query))
return jsonify(code=RET.OK, msg="获取成功", data=data)
company = Enterprise.query.filter_by()
if province:
company = company.filter_by(province=province)
if city:
company = company.filter_by(city=city)
if district:
company = company.filter_by(district=district)
grdz = company.filter_by(entypeid=1).count()
gfyx = company.filter_by(entypeid=2).count()
hhqy = company.filter_by(entypeid=3).count()
jtsy = company.filter_by(entypeid=4).count()
gyqy = company.filter_by(entypeid=5).count()
yxzr = company.filter_by(entypeid=6).count()
wstz = company.filter_by(entypeid=7).count()
new_dic = [grdz, yxzr, gfyx, jtsy, hhqy, gyqy, wstz]
gxjs = company.filter_by(high_new="1").count()
kjzx = company.filter_by(tbe="1").count()
ssqy = company.filter_by(quoted_company="1").count()
djs = company.filter_by(unicorn="1").count()
dlqy = company.filter_by(dengl="1").count()
quality_list = [gxjs, kjzx, ssqy, djs, dlqy]
data = {
"type": new_dic,
"quality": quality_list
}
# redis缓存
redis_store.set(name_query, json.dumps(data))
redis_store.expire(name_query, 29 * 24 * 3600)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.OK, msg="数据库错误")
return jsonify(code=RET.OK, msg="查询成功", data=data)
def openDists():
upload_path = os.path.dirname(os.path.dirname(__file__)) + "/utils/json/city.json"
with open(upload_path, encoding="utf-8") as f:
data = json.load(f)
return data
# 地域层级数据分级获取
@api_portraits.route('/getRegion', methods=['GET'])
def getRegion():
try:
data = openDists()
if len(data) > 0:
return jsonify(code=200, msg="查找成功", data=data)
else:
return jsonify(code=201, msg="暂时没有数据")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="查找错误")
@api_portraits.route('/field', methods=['GET'])
# @login_required
def field():
'''
全国企业条件选择导航获取:
所属行业/企业资质/注册资本/上市状态/成立时间/融资轮次/企业状态/企业规模/企业类型
:return:
'''
try:
property = Property.query.filter_by(statu=1)
# 所属行业
com_qualificat = property.filter_by(sid=2, statu=1).all()
# 上市状态
com_quoted = property.filter_by(sid=3, statu=1).all()
# 成立年限
com_builddatetime = property.filter_by(sid=5, statu=1).all()
# 融资轮次
com_financ = property.filter_by(sid=4, statu=1).all()
# 企业状态
# 企业规模
# 企业类型
com_typy = property.filter_by(sid=1, statu=1).all()
# options: [{ value: "选项1", label: "无数据" },{ value: "选项2", label: "3333" }],
data = {"entype": [{"label": i.name, "value": i.nid} for i in com_typy],
"qualificat": [{"label": i.name, "value": i.nid} for i in com_qualificat],
"quoted": [{"label": i.name, "value": i.nid} for i in com_quoted],
"financ": [{"label": i.name, "value": i.nid} for i in com_financ],
"buildate": [{"label": "1-3年", "value": 1}, {"label": "3-5年", "value": 2},
{"label": "5-8年", "value": 3}, {"label": "8-10年", "value": 4},
{"label": "10-15年", "value": 5}, {"label": "15年以上", "value": 6}],
"capital": [{"label": "100万以内", "value": 1}, {"label": "100万-500万", "value": 2},
{"label": "500万-1000万", "value": 3}, {"label": "1000万-5000万", "value": 4},
{"label": "1000万-1亿", "value": 5}, {"label": "1亿以上", "value": 6}]
}
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
return jsonify(code=RET.OK, msg="获取成功", options=data)
# 搜索接口
@api_portraits.route("/search", methods=["POST"])
@login_required
def search():
# 获取用户信息
token = request.headers["token"]
user = verify_token(token)
user_id = user.id
# user_id = 5
# 参数获取
req_dict = request.get_json()
company = req_dict.get("company") # 搜索企业名称
entypeid = req_dict.get("entypeid") # 企业类型
qualificat = req_dict.get("qualificat") # 资质
capital_id = req_dict.get("capital_id") # 资本
public_id = req_dict.get("public_id") # 上市状态
area = req_dict.get("area") # 地区条件获取
if area == []:
area = ["", "", ""]
province = area[0]
city = area[1]
district = area[2]
yearid = req_dict.get("yearid") # 成立时间
financ_id = req_dict.get("financ_id") # 融资轮次
page = req_dict.get("page") # 页码
per_page = int(req_dict.get("per_page")) # 每页大小
# 页数
if not page:
page = 1
page = int(page)
page = (page - 1) * per_page
args_query = dict() # 查询字段
args_term = dict() # 条件字典
args_query["query"] = "公司"
# 搜索框
if company:
args_query["query"] = company
# 添加搜索历史
try:
user = User.query.get(user_id)
b = []
if user.searchlist:
for j in user.searchlist:
b.append(j.history)
if company in b:
user.searchlist.remove(user.searchlist[b.index(company)])
if len(b) > 5:
user.searchlist.remove(user.searchlist[0])
search = SearchList(history=company)
db.session.add(search)
user.searchlist.append(search)
db.session.commit()
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 公司类型
if entypeid:
args_term['entypeid'] = entypeid
# 注册资本
if capital_id:
args_term['capital_id'] = capital_id
# 上市状态
if public_id:
args_term['public_id'] = public_id
# 省
if province:
args_term['province'] = province
# 市
if city:
args_term['city'] = city
# 区
if district:
args_term['district'] = district
# 公司资质
if qualificat:
if qualificat == 1:
args_term['high_new'] = 1
if qualificat == 2:
args_term['tbe'] = 1
if qualificat == 3:
args_term['quoted_company'] = 1
if qualificat == 4:
args_term['isfive'] = 1
if qualificat == 5:
args_term['unicorn'] = 1
if qualificat == 6:
args_term['dengl'] = 1
# 成立时间
if yearid:
args_term['yearid'] = yearid
# 融资轮次
if financ_id:
args_term['financ_id'] = financ_id
body = create_body(page, per_page, args_query, args_term)
if not company:
del body["query"]["bool"]["must"][0]
try:
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
# data = es.search(view_index="ty_360", body=body)
data = es.search(index="ty_enterprise", body=body)
data_list = []
# 数据的列表添加进去
for i in data["hits"]['hits']:
if company:
# 判断高亮,然后添加
data_list.append({
"company": i["highlight"]["company_name"][0] if "company_name" in i["highlight"] else i["_source"][
"company_name"],
"product": i["highlight"]["product"][0] if "product" in i["highlight"] else i["_source"]["product"],
"industry": i["highlight"]["industry"][0] if "industry" in i["highlight"] else i["_source"][
"industry"],
"money": "{}万元".format(i["_source"]["register_money_nums"]),
"createtime": i["_source"]["build_date"],
"id": i["_source"]["mysql_id"],
"choice": 2
})
else:
data_list.append({
"company": i["_source"]["company_name"],
"product": i["_source"]["product"],
"industry": i["_source"]["industry"],
"money": "{}万元".format(i["_source"]["register_money_nums"]),
"createtime": i["_source"]["build_date"],
"id": i["_source"]["mysql_id"],
"choice": 2,
})
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="es数据库错误")
data = {
"data": data_list
}
return jsonify(code=RET.OK, msg="查找成功", data=data)
# 搜索历史接口
@api_portraits.route("/searchList", methods=["GET"])
@login_required
def search_list():
token = request.headers["token"]
user = verify_token(token)
user_id = user.id
# user_id = 119
try:
user = User.query.get(user_id)
history = [(i.history, i.id) for i in user.searchlist]
# print(history)
# print(sorted(history, key=lambda x: x[1], reverse=True))
# data = {
# "search": [i.history for i in user.searchlist]
# }
data = {"search": [i[0] for i in sorted(history, key=lambda x: x[1], reverse=True)]}
return jsonify(code=RET.OK, msg="查询成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 全国企业信息详情
@api_portraits.route('/detail', methods=['POST'])
@login_required
def enter_detail():
'''
企业信息详情
:return:
'''
# 获取用户id
token = request.headers["token"]
user = verify_token(token)
user_id = user.id # 用户id
req_dict = request.get_json()
_id = req_dict.get("id") # 企业id
# 校验参数完整性
if not all([_id]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
company = Enterprise.query.get(_id)
user = User.query.get(user_id) # 获取关注列表
if user:
enters_ids = [coms.id for coms in user.enterprise]
else:
enters_ids = []
if company:
data = {"id": company.id,
"company_name": company.company_name,
"telephone": company.telephone if company.telephone else "-",
"web_site": company.web_site if company.web_site else "-",
"email": company.email if company.email else "-",
"address": company.address if company.address else "-",
"jwd": {"lng": company.lng if company.lng else "-",
"lat": company.lat if company.lat else "-"},
"company_info": company.company_info if company.company_info else "-",
"isfive": "500强企业" if company.isfive == "1" else "", # 500强
"quoted_company": "上市企业" if company.quoted_company == "1" else "", # 上市企业
"high_new": "高新技术企业" if company.high_new == "1" else "",
"tbe": "科技型中小企业" if company.tbe == "1" else "", # 科技型中小企业
"unicorn": "独角兽企业" if company.unicorn == "1" else "", # 独角兽企业
"dengl": "瞪羚企业" if company.dengl == "1" else "", # 瞪羚企业
"legal": company.legal if company.legal else "-",
"status": company.status if company.status else "-",
"build_date": str(company.build_date)[:10] if company.build_date else "-",
"capital": company.capital if company.capital else "-",
"social_code": company.social_code if company.social_code else "-",
"taking": company.takingn if company.takingn else "-",
"bao": company.bao_num if company.bao_num else "-",
"entype": company.entype if company.entype else "-",
"industry": company.company_industry if company.company_industry else "-",
"scope": company.business_scope if company.business_scope else "-",
"collect": "1" if company.id in enters_ids else "2", # 关注状态码1关注,2未关注
"choice": "2" # 1太原企业,2全国企业
}
else:
return jsonify(code=RET.NODATA, msg="查无数据")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
return jsonify(code=RET.OK, msg="获取成功", data=data)
from flask import Blueprint
# 创建蓝图对象
api_atlas = Blueprint("api_atlas", __name__)
from . import view
from flask import current_app, request, jsonify
from apps.view_atlas import api_atlas
from apps.util import login_required
from apps.utils.response_code import RET
from apps.models import *
from apps.utils.neo4j_conn import conn_neo4j, neo4j_dict
from apps import redis_store
import json
graph = conn_neo4j()
'''行业名转换ptp字典两个 neo4j_dict line 164/177'''
def deleteDuplicate(li):
'''列表[字典]去重'''
temp_list = list(set([str(i) for i in li]))
li = [eval(i) for i in temp_list]
return li
def find_up_thr(name_query, relation):
if relation == "中游行业":
relation_c = "下位产品"
else:
relation_c = relation
# 零级,上中下三游
data = {
"node": "{}".format(relation[:2]),
"level": 1,
"subNodeList": [],
}
sql_01 = "match (n) -[r:`{}`]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(relation_c, name_query)
res_zero = graph.run(sql_01).data()
res_one = list(set([i["m.name"] for i in list(res_zero)])) # 不重复的一级节点
for it in res_one: # 一级节点
pname_one = it
# 一级
node_one = {
"node": "{}".format(pname_one),
"level": 2,
"subNodeList": []
}
sql_02 = "match (n) -[r]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(pname_one)
result = graph.run(sql_02).data()
result = list(set([i["m.name"] for i in list(result)])) # 不重复的二级节点
for item in result:
pname_two = item
# 二级
node_two = {
"node": "{}".format(pname_two),
"level": 3,
"subNodeList": []
}
sql_03 = "match (n) -[r]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(pname_two)
result3 = graph.run(sql_03).data()
result3 = list(set([i["m.name"] for i in list(result3)])) # 不重复的三级节点
for itm in result3:
pname_thr = itm
# 三级
node_thr = {
"node": "{}".format(pname_thr),
"level": 4,
"subNodeList": []
}
node_two["subNodeList"].append(node_thr)
node_one["subNodeList"].append(node_two)
data["subNodeList"].append(node_one)
return data
# 获取产业集群名称
@api_atlas.route('/industry/cluster', methods=['GET'])
def get_cluster():
try:
cluster_obj = Industry.query.filter_by(fid=0).all()
data = {
"cluster": [
{"id": i.nid, 'industry_level': 1, 'name': i.name,
"subNodeList": [{'id': j.nid, 'industry_level': 2, "name": j.name} for j in
Industry.query.filter_by(fid=i.nid)]} for i in
cluster_obj]
}
return jsonify(code=RET.OK, msg='产业集群名称获取成功!', data=data)
except Exception as e:
current_app.logger.error(e)
# 行业产品公司数量(链图,根据地理位置)
@api_atlas.route('/industry/chain', methods=['POST'])
# @login_required
def industry_chain():
'''
行业id->行业链标题-》上中下游-》查询数值
:return:
'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 二级行业id(二级行业显示链图)
# district = req_dict.get("district") # 区县
# 校验参数完整性
if not all([inid]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
# name_query = "jc" + str(inid) + str(district)
# if redis_store.get(name_query) is not None:
# data = json.loads(redis_store.get(name_query))
# return jsonify(code=RET.OK, msg="获取成功", data=data)
# 行业使用名
industryName = Industry.query.filter_by(nid=inid).first().oname
ptp = neo4j_dict()
if industryName in ptp:
industryName = ptp[industryName]
# print(industryName)
result = {
"industryChain": industryName,
"nodeList": [find_up_thr(industryName, "上游行业"),
find_up_thr(industryName, "中游行业"),
find_up_thr(industryName, "下游行业")]
}
# redis缓存
# redis_store.set(name_query, json.dumps(result))
# redis_store.expire(name_query, 30 * 24 * 3600)
# print("redis")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据异常")
return jsonify(code=RET.OK, msg="获取成功", data=result)
# 点击产业联动显示企业
@api_atlas.route('/industry/enterprise', methods=['POST'])
# @login_required
def industry_enterprise():
'''骨干企业数据'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
industry_level = req_dict.get("industry_level") # 行业等级,(父行个为"1",子行业为"2")
product = req_dict.get("product")
page = req_dict.get("page") # 分页页码
perpage = req_dict.get("perpage") # 分页大小
# sorts = req_dict.get("sorts") # 排序 sorts "1"按时间降序 ,“2”按热度降序
# 校验参数完整性
if not all([industry_level, page, perpage]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
if industry_level == 1:
company = Company.query.filter_by(f_type=inid, city="晋城市")
else:
company = Company.query.filter_by(c_type=inid, city="晋城市")
if product:
company = Company.query.filter(Company.product_all.like("%{}%".format(product)))
size = company.count()
companys = company.order_by(Company.hots.desc()).paginate(page, perpage).items # 企业热度倒序
df = [{"id": i.id,
"company_name": i.company_name,
"district": i.district,
"build_date": (i.build_date).strftime("%Y-%m-%d %H:%M:%S"),
"legal": i.legal,
"capital_nums": i.capital_nums,
"entype": i.entype,
"address": i.address,
"telephone": i.telephone,
"high_new": '高新技术企业' if i.high_new == '1' else '',
"tbe": '科技型中小企业' if i.tbe == '1' else '',
"quoted_company": '上市企业' if i.quoted_company == '1' else '',
"zjtg": '精专特新企业' if i.zjtg == '1' else '',
"unicorn": '独角兽企业' if i.unicorn == '1' else '',
"dengl": '瞪羚企业' if i.dengl == '1' else '',
"isfive": '五百强企业' if i.isfive == '1' else '',
"scale": '规模以上企业' if i.scale == '1' else ''
} for i in companys]
data = {"size": size, "df": df}
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
return jsonify(code=RET.OK, msg="获取成功", data=data)
# 点击产业创新资源联动显示 innovation resource
@api_atlas.route('/innovate/resource', methods=['POST'])
def industry_resource():
'''创新资源机构列表'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
industry_level = req_dict.get("industry_level") # 行业等级,(父行业高端设备等五个为"1",子行业为"2")
select_flag = req_dict.get("select_flag") # 机构类型id. 高等院校1,科研机构2,创新平台3,产业服务平台4
page = req_dict.get("page") # 分页页码
perpage = req_dict.get("perpage") # 分页大小
# 校验参数完整性
if not all([inid, industry_level, select_flag, page, perpage]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
name = Industry.query.filter_by(nid=inid).first().oname
if select_flag == 1: # 高等院校
try:
if industry_level == 1:
college = College.query.filter(College.navigator.like("%{}%".format(name)))
else:
college = College.query.filter(College.navigat.like("%{}%".format(name)))
size = college.count()
college = college.paginate(page, perpage).items
data = {"df": [{"id": i.id,
"name": i.name,
"admin": i.admin,
"buildate": i.buildate,
"charge": i.charge,
"cate": i.category,
"nature": i.nature,
"ccode": i.ccode,
"address": i.address,
} for i in college],
"size": size}
return jsonify(code=RET.OK, msg="查询成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DATAERR, msg="参数错误")
elif select_flag == 2: # 科研机构
if industry_level == 1:
scientific = Scientific.query.filter(Scientific.navigator.like("%{}%".format(name)))
else:
scientific = Scientific.query.filter(Scientific.navigat.like("%{}%".format(name)))
size = scientific.count()
scientific = scientific.paginate(page, perpage).items
data = {"df": [{"id": i.id,
"name": i.name,
"admin": i.admin,
"telephone": i.telephone,
"fax": i.fax,
"postcode": i.postcode,
"address": i.address} for i in scientific],
"size": size}
return jsonify(code=RET.OK, msg="查询成功", data=data)
elif select_flag == 3: # 创新平台3
if industry_level == 1:
lab = Lab.query.filter(Lab.navigator.like("%{}%".format(name)))
else:
lab = Lab.query.filter(Lab.navigat.like("%{}%".format(name)))
size = lab.count()
lab = lab.paginate(page, perpage).items
data = {"df": [{"id": i.id,
"name": i.name,
"admin": i.admin,
"cate": i.cate,
"fax": i.fax,
"postcode": i.postcode,
"address": i.address} for i in lab],
"size": size}
return jsonify(code=RET.OK, msg="查询成功", data=data)
else:
return jsonify(code=RET.PARAMERR, msg="参数错误")
def get_data(name, industry_level, select_flag, page, perpage):
try:
if select_flag in [1, 2]: # 当选择行政区/园区时
if select_flag == 1 and industry_level == 1: # 当选择的是父产业的行政区时
induzone = Induzone.query.filter(Induzone.cate.like('行政区'), Induzone.navigator.like("%{}%".format(name)))
elif select_flag == 1 and industry_level == 2: # 当选择的是子产业的行政区时
induzone = Induzone.query.filter(Induzone.cate.like('行政区'), Induzone.navigat.like("%{}%".format(name)))
elif select_flag == 2 and industry_level == 1: # 当选择的是父产业的园区时
induzone = Induzone.query.filter(Induzone.cate.like('产业园区'), Induzone.navigator.like("%{}%".format(name)))
elif select_flag == 2 and industry_level == 2: # 当选择的是父产业的园区时
induzone = Induzone.query.filter(Induzone.cate.like('产业园区'), Induzone.navigat.like("%{}%".format(name)))
size = induzone.count() # 分页总数
induzone = induzone.paginate(page, perpage).items
if select_flag == 1:
# 封装行政区数据
admin_data = {"admin_data": [{
"id": i.id,
"image": i.image,
# "region": i.region,
"region": i.district,
"cate": i.cate, # 园区类型
"area": i.area,
"address": i.address,
"cluster": i.cluster} for i in induzone],
"size": size}
return admin_data
if select_flag == 2:
# 封装园区数据
garden_data = {"garden": [{"id": i.id,
"name": i.name, # 园区名称
"region": i.region, # 所属地区
"phone": i.phone, # 联系电话
"level": i.level, # 园区级别
"cate": i.cate, # 园区类型
"address": i.address, } for i in induzone], # 园区地址
"size": size}
return garden_data
if select_flag == 3: # 当选择载体土地时
if industry_level == 1: # 当选择的是父产业时
land = ZaitiLand.query.filter(ZaitiLand.navigator.like("%{}%".format(name)))
else:
land = ZaitiLand.query.filter(ZaitiLand.navigat.like("%{}%".format(name)))
size = land.count() # 分页总数
land = land.paginate(page, perpage).items
# 封装土地数据
land_data = {"land_data": [{
"id": i.id,
"name": i.name,
"num": i.num,
"nature": i.nature,
"acreage": i.acreage,
"industry_type": i.industry_type,
"telephone": i.telephone
} for i in land], "size": size}
return land_data
if select_flag == 4: # 当选择载体楼宇时
if industry_level == 1: # 当选择的是父产业时
build = ZaitiBuild.query.filter(ZaitiBuild.navigator.like("%{}%".format(name)))
else:
build = ZaitiBuild.query.filter(ZaitiBuild.navigat.like("%{}%".format(name)))
size = build.count() # 分页总数
build = build.paginate(page, perpage).items
# 封装楼宇数据
build_data = {
"build_data": [{
"id": i.id,
"name": i.name,
"acreage": i.acreage,
"buide_type": i.buide_type,
"industry_type": i.industry_type,
"telephone": i.telephone,
"addr": i.addr,
} for i in build], "size": size
}
return build_data
if select_flag == 5: # 当选择载体厂房时
if industry_level == 1: # 当选择的是父产业时
factory = ZaitiFactory.query.filter(ZaitiFactory.navigator.like("%{}%".format(name)))
else:
factory = ZaitiFactory.query.filter(ZaitiFactory.navigat.like("%{}%".format(name)))
size = factory.count() # 分页总数
factory = factory.paginate(page, perpage).items
# 封装楼宇数据
factory_data = {
"factory_data": [{
"id": i.id,
"name": i.name,
"acreage": i.acreage,
"factory_type": i.factory_type,
"industry_type": i.industry_type,
"telephone": i.telephone,
"addr": i.addr,
} for i in factory], "size": size
}
return factory_data
except Exception as e:
print(e)
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# 产业载体
@api_atlas.route('/carrier/zaiti', methods=['POST'])
def industry_zaiti():
'''产业载体数据'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
industry_level = req_dict.get("industry_level") # 行业等级,(父行业高端设备等五个为"1",子行业为"2")
select_flag = req_dict.get("select_flag") # 1为行政区,2为园区,3为产业载体,4为土地,5为楼宇,6为厂房
page = req_dict.get("page") # 分页页码
perpage = req_dict.get("perpage") # 分页大小
# 校验参数完整性
if not all([page, perpage]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
# if inid:
name = Industry.query.filter_by(nid=inid).first().oname # 获取导航对应的真名
try:
data = get_data(name, industry_level, select_flag, page, perpage)
return jsonify(code=RET.OK, msg="数据查询成功", data=data)
except Exception as e:
current_app.logger.error(e)
# 产业政策
@api_atlas.route('/industry/indus_policy', methods=['POST'])
def industry_policy():
"""产业政策数据"""
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
industry_level = req_dict.get("industry_level") # 行业等级,(父行业高端设备等五个为"1",子行业为"2")
page = req_dict.get("page") # 分页页码
perpage = req_dict.get("perpage") # 分页大小
# 校验参数完整性
if not all([page, perpage]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
indu_policy = ''
size = ''
name = Industry.query.filter_by(nid=inid).first().oname # 获取导航对应的真名
if industry_level == 1:
indu_policy = InduPolicy.query.filter(InduPolicy.navigator.like("%{}%".format(name)))
size = indu_policy.count() # 分页总数
indu_policy = indu_policy.paginate(page, perpage).items
if industry_level == 2:
indu_policy = InduPolicy.query.filter(InduPolicy.navigat.like("%{}%".format(name)))
size = indu_policy.count() # 分页总数
indu_policy = indu_policy.paginate(page, perpage).items
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# 封装政策数据
policy_data = {
"policy_data": [{
"id": i.id,
"name": i.name,
"org": i.org,
"pubdate": (i.pubdate).strftime("%Y-%m-%d %H:%M:%S")
} for i in indu_policy],
"size": size
}
return jsonify(code=RET.OK, msg="政策数据查询成功", data=policy_data)
# 产业政策详情信息-复用招商驾驶舱政策详情接口
# 骨干企业详情信息
# 创新资源-高等院校详情
@api_atlas.route('/innovate/college_detail', methods=['POST'])
def get_college_detail():
req_dict = request.get_json()
college_id = req_dict.get('id')
try:
college = College.query.filter_by(id=college_id).first()
# 封装院校数据
data = {
"name": college.name, # 校名
"charge": college.charge, # 主管部门
"buildate": college.buildate, # 创办时间
"nature": college.nature, # 办学性质
"clas": college.clas, # 学校类别
"address": college.address, # 校址
"introduct": college.introduct, # 简介
"ccode": college.ccode, # 学校代码
"feature": college.feature, # 学校特色
"research": college.research, # 研究方向
"major": college.major,
"faculty": college.faculty,
"lng": college.lng, # 经度
"lat": college.lat # 纬度
}
return jsonify(code=RET.OK, msg='院校详情查询成功!', data=data)
except Exception as e:
current_app.logger.error(e)
# 创新资源-科研机构详情
@api_atlas.route('/innovate/scientific_detail', methods=['POST'])
def get_scientific_detail():
req_dict = request.get_json()
scientific_id = req_dict.get('id')
try:
scientific = Scientific.query.filter_by(id=scientific_id).first()
# 封装科研机构数据
data = {
"name": scientific.name, # 名称
"admin": scientific.admin, # 行政区
"telephone": scientific.telephone, # 联系电话
"fax": scientific.fax, # 传真
"postcode": scientific.postcode, # 邮编
"address": scientific.address, # 地址
"introduct": scientific.introduct, # 简介
"lng": scientific.lng, # 经度
"lat": scientific.lat # 纬度
}
return jsonify(code=RET.OK, msg='科研机构详情查询成功!', data=data)
except Exception as e:
current_app.logger.error(e)
# 创新资源-创新平台详情
@api_atlas.route('/innovate/Lab_detail', methods=['POST'])
def get_lab_detail():
req_dict = request.get_json()
lab_id = req_dict.get('id')
try:
lab = Lab.query.filter_by(id=lab_id).first()
# 封装创新平台数据
data = {
"name": lab.name, # 名称
"address": lab.address, # 地址
"introduct": lab.introduct, # 简介
"lng": lab.lng, # 经度
"lat": lab.lat # 纬度
}
return jsonify(code=RET.OK, msg='创新平台详情查询成功!', data=data)
except Exception as e:
current_app.logger.error(e)
# 产业载体-各类型详情信息
@api_atlas.route('/carrier/zaiti_detail', methods=['POST'])
def get_zaiti_detail_data():
req_dict = request.get_json()
id = req_dict.get('id')
cate_id = req_dict.get('cate_id') # 1为行政区,2为园区,3为土地,4为楼宇,5为厂房
print(cate_id)
if cate_id in [1, 2]:
try:
induzone = Induzone.query.filter_by(id=id).first()
data = {
"district": induzone.district,
"cate": induzone.cate,
"area": induzone.area,
"address": induzone.address,
"cluster": induzone.cluster,
"name": induzone.name, # 名称
# "district": induzone.district, # 所属地区
"phone": induzone.phone, # 电话
"email": induzone.email,
# "address": induzone.address, # 园区地址
"industry_position": induzone.industry_position, # 产业定位
# "cate": induzone.cate, # 园区类型
"gdp": induzone.gdp, # GDP
"represent": induzone.represent, # 代表企业
"introduct": induzone.introduct, # 简介
"level": induzone.level, # 等级
"charge": induzone.charge, # 园区负责人
"site": induzone.site, # 园区所在地
"industry_type": induzone.industry_type, # 产业类型
# "area": induzone.area, # 面积
"out_power": induzone.out_power, # 产出强度(万元/亩)
"invest_power": induzone.invest_power, # 亩均投资强度(万元/亩)
"value_product": induzone.value_product, # 亩均年产值(万元/亩)
"tax": induzone.tax, # 亩均年税收(万元/亩)
"indu_land": induzone.indu_land, # 工业土地均价(万元/亩)
"comm_land": induzone.comm_land, # 商办土地均价(万元/亩)
"highmag": induzone.highmag, # 高层管理人员(元/月)
"middlemag": induzone.middlemag, # 中级管理人员(元/月)
"worker": induzone.worker, # 普通员工(元/月)
"trans_facility": induzone.trans_facility, # 交通配套
"goods_trans": induzone.goods_trans, # 货物运输
"live_facility": induzone.live_facility, # 园区生活配套
"market": induzone.market, # 百货商场
"hotel_bus": induzone.hotel_bus, # 酒店商务
"medical": induzone.medical, # 医疗机构
"education": induzone.education, # 教育教育
}
return jsonify(code=RET.OK, msg='详情数据查询成功!', data=data)
except Exception as e:
current_app.logger.error(e)
if cate_id == 3:
try:
land = ZaitiLand.query.filter_by(id=id).first()
data = {
"num": land.num, # 编号
"name": land.name, # 地块名称
"addr": land.addr, # 地址
"nature": land.nature, # 土地性质
"acreage": land.acreage, # 面积
"target": land.target, # 规划指标
"age_limit": land.age_limit, # 出让年限
"industry_type": land.industry_type, # 产业类型
"telephone": land.telephone # 电话
}
return jsonify(code=RET.OK, msg='土地详情查询成功!', data=data)
except Exception as e:
current_app.logger.error(e)
if cate_id == 4:
try:
build = ZaitiBuild.query.filter_by(id=id).first()
data = {
"name": build.name, # 楼宇名称
"addr": build.addr, # 地址
"acreage": build.acreage, # 面积
"buide_type": build.buide_type, # 楼宇类型
"industry_type": build.industry_type, # 产业类型
"rate": build.rate, # 出租率
"telephone": build.telephone # 电话
}
return jsonify(code=RET.OK, msg='楼宇详情查询成功!', data=data)
except Exception as e:
current_app.logger.error(e)
if cate_id == 5:
try:
factory = ZaitiFactory.query.filter_by(id=id).first()
data = {
"name": factory.name, # 厂房名称
"addr": factory.addr, # 地址
"acreage": factory.acreage, # 面积
"structure": factory.structure, # 简介
"height": factory.height, # 高度
"bearing": factory.bearing, # 承重
"new_level": factory.new_level, # 新旧程度
"other": factory.other, # 其他
"industry_type": factory.industry_type, # 产业类型
"factory_type": factory.factory_type, # 厂房类型
"telephone": factory.telephone, # 电话
}
return jsonify(code=RET.OK, msg='厂房详情查询成功!', data=data)
except Exception as e:
current_app.logger.error(e)
from flask import Blueprint
api_address = Blueprint("api_address", __name__)
from . import view
from sqlalchemy import func, desc, or_
from flask import current_app, request, jsonify
from apps.models import Induzone, Industry, CompanyIndustryPoint
from apps.utils.response_code import RET
from apps.view_choose import api_address
# 选址评估,选择建议
@api_address.route("/ChooseAddress", methods=["POST"])
def advice():
req_dict = request.get_json()
industry_id = req_dict.get("industry_id") # 所属行业选择 nid(必填)
product = req_dict.get("product") # 主营产品 "药" (必填)
budget = req_dict.get('budget') # 落地投资预算 "22" # 大于 (必填)
preference = req_dict.get("preference") # 选址偏好 [f,f,t,f,f,f]
revenue = req_dict.get("revenue") # 去年营收 "2" (非必填)
tax = req_dict.get("tax") # 去年税收 "1" (非必填)
address = req_dict.get("address") # 意向选址 (非必填)
page = req_dict.get("page")
perpage = req_dict.get("perpage")
# print(address)
if not all([industry_id, product, budget, preference]):
return jsonify(code=RET.DATAERR, msg="数据不全")
try:
indu = Industry.query.filter_by(nid=industry_id).first()
if not indu:
return jsonify(code=RET.DATAERR, msg="参数错误")
# 获取产业名称
industry_name = indu.oname
# 根据产业名称查询园区
zone = Induzone.query.filter(or_(Induzone.navigat.like("%{}%".format(industry_name)),
Induzone.navigator.like("%{}%".format(industry_name))))
# 根据投资预算过滤
if budget:
zone = zone.filter(Induzone.invest_power < budget)
if address: # 如果有选址
zone = zone.filter(or_(Induzone.region == address, Induzone.development_zone == address))
if tax: # 如果有税收
zone = zone.filter(Induzone.tax < tax)
if preference[0] == "true": # 如果有政府扶持力度 --- 政策数的打分
zone = zone.order_by(Induzone.policy_point.desc())
if preference[1] == "true": # 产业聚集度 --- 产业的打分
zone = zone.outerjoin(CompanyIndustryPoint, Induzone.name == CompanyIndustryPoint.district).filter(
CompanyIndustryPoint.f_type == industry_id).order_by(CompanyIndustryPoint.point.desc()).all()
if preference[2] == "true": # 园区配套服务 ----园区的学校,商业街,宾馆打分
zone = zone.order_by(Induzone.mall_point.desc(), Induzone.hotel_point.desc(), Induzone.school_point.desc())
if preference[3] == "true": # 生活配套服务
zone = zone.order_by(Induzone.live_point.desc())
if preference[4] == "true": # 交通 -----交通打分
zone = zone.order_by(Induzone.traffic_point.desc())
size = zone.count()
result = zone.paginate(page, perpage).items
# print(result)
data = {"data": [{"id": i.id,
"name": i.name, # 园区名称
"level": i.level, # 园区级别
"type": i.industry_type, # 园区类别
"charge": i.charge if i.charge else "-", # 园区负责人
"phone": i.phone if i.phone else "-", # 园区电话
"address": i.address, # 园区地址
"jwd": {"lng": i.lng, "lat": i.lat}} for i in result], "size": size}
if not result:
# 在第一条建议显示
data = [{"name": "没有找到合适的园区!"}]
return jsonify(code=RET.OK, msg="选址成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 获取筛选条件的行业
@api_address.route("/DownList", methods=["GET"])
def downlist(): # 一级二级行业分类
try:
industry = Industry.query.filter_by(statu=1).all()
data = [{
"name": i.name,
"id": i.nid,
} for i in industry]
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
return jsonify(code=RET.OK, msg="查找成功", data=data)
from flask import Blueprint
# 招商驾驶舱
api_attract = Blueprint("api_attract", __name__)
from . import view # 招商驾驶舱数据
import json
import os
import sys
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkvod.request.v20170321.GetPlayInfoRequest import GetPlayInfoRequest
from flask import request, jsonify, session, current_app
from sqlalchemy import func, desc, or_
from apps.models import *
from apps.view_index import api_attract
from apps.utils.response_code import RET
from apps import db, constants, redis_store
# 获取左上角经济指标数据
def get_jjzb(district):
'''经济指标数据'''
# years = [2021] # 指定数据的年份,与数据库中数据对齐
try:
if not district or district == '晋城市':
datas = City.query.filter_by(area='晋城市').first()
else:
datas = City.query.filter_by(area=district).first()
df_dic = {"GDP": '%.2f亿元' % (datas.GDP / 10000) if datas.GDP else "-亿元", # 地区生产总值
"addscale": '%.2f' % datas.addscale + "%" if datas.addscale else "-%", # 规上工业增加值增速
"investment": '%.2f亿元' % (datas.investment / 10000) if datas.investment else "-亿元", # 固定资产投资
"retail": '%.2f亿元' % (datas.retail / 10000) if datas.retail else "-亿元", # 社会消费品零售额
"in_out": '%.2f亿元' % (datas.in_out / 10000) if datas.in_out else "-亿元", # 进出口总额
"public": '%.2f亿元' % (datas.public / 10000) if datas.public else "-亿元", # 一般公共预算支出
"people_out": '%.2f元' % datas.people_out if datas.people_out else "-元", # 居民人均可支配收入
"people_per": '%.2f' % datas.people_per if datas.people_per else "-"} # 居民消费价格指数
# print(df_dic)
# return jsonify(code=RET.OK, msg="查找成功", data=df)
return df_dic
# return df
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
@api_attract.route("/view_index", methods=["GET"])
def index():
return '德旭,你好!'
# 左上角企业数量各资质统计、左上角获取经济指标数据、产业机构分布饼状图数据统计
@api_attract.route("/menu", methods=["POST"])
def menu():
'''左上角企业数量各资质统计、左上角获取经济指标数据、产业机构分布饼状图数据统计'''
req_dict = request.get_json()
district = req_dict.get("district") # 区县或者开发区名称
# 区县名称转换字典
district_dict = {
'沁水县': '沁水县',
'高平市': '高平市',
'陵川县': '陵川县',
'阳城县': '阳城县',
'泽州县': '泽州县',
'城区': '城区',
'晋城经济技术开发区': '晋城经济技术开发区'
}
if not district or district == '晋城市':
try:
company = Company.query.filter_by(city="晋城市")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
else:
try:
# company = Company.query.filter(Company.induzone == district_dict[district], Company.city == "晋城市")
company = Company.query.filter(Company.district == district_dict[district], Company.city == "晋城市")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 1. 左上角企业数量各资质统计
try:
# 晋城市
t_c5 = company.filter_by(isfive="1").count() # 500强
ssqy = company.filter_by(quoted_company="1").count() # 上市
if district != "晋城市":
gmys = Company.query.filter(Company.induzone == district_dict[district]).filter_by(
scale="1").count() # 规模(2-5) 622
else:
gmys = Company.query.filter_by(scale="1").count()
zjtx = company.filter_by(zjtg="1").count() # 专精特新
gxjs = company.filter_by(high_new="1").count() # 高新
kjzx = company.filter_by(tbe="1").count() # 科技型中小企业
dengl = company.filter_by(dengl="1").count() # 瞪羚
dujs = company.filter_by(unicorn="1").count() # 独角兽
table_dic = {"t_c5": t_c5, # 500强企业
"ssqy": ssqy, # 上市企业
"gmys": gmys, # 规模以上企业
"zjtx": zjtx, # 专精特新企业
"gxjs": gxjs, # 高新技术企业
"kjzx": kjzx, # 科技型中小企业
"dengl": dengl, # 瞪羚企业
"dujs": dujs} # 独角兽企业
# 2. 左上角获取经济指标数据
jjzb_data = get_jjzb(district)
# 3. 产业结构分布饼状图数据统计
count_all = company.count()
if count_all == 0:
count_all = 1
count_mcq = company.filter_by(f_type=1).count() # 煤层气
count_gjd = company.filter_by(f_type=3).count() # 光机电
count_mtmhg = company.filter_by(f_type=4).count() # 煤炭煤化工
count_gtzz = company.filter_by(f_type=2).count() # 钢铁铸造
count_qyly = company.filter_by(f_type=5).count() # 全域旅游和康养
# count_xdfu = company.filter_by(f_type=6).count() # 现代服务业
# count_qt = count_all - count_mcq - count_gjd - count_mtmhg - count_gtzz - count_qyly - count_xdfu
count_qt = count_all - count_mcq - count_gjd - count_mtmhg - count_gtzz - count_qyly
mcq = int(count_mcq / count_all * 100)
gjd = int(count_gjd / count_all * 100)
mtmhg = int(count_mtmhg / count_all * 100)
gtzz = int(count_gtzz / count_all * 100)
qyly = int(count_qyly / count_all * 100)
# xdfu = int(count_xdfu / count_all * 100)
# qt = 100 - mcq - gjd - mtmhg - gtzz - qyly - xdfu
qt = 100 - mcq - gjd - mtmhg - gtzz - qyly
# 产业结构分布
industry = [
{"per": mtmhg, "name": "煤炭煤化工", "count": count_mtmhg},
{"per": mcq, "name": "煤层气", "count": count_mcq}, # {百分比,value}
{"per": gjd, "name": "光机电", "count": count_gjd},
{"per": gtzz, "name": "钢铁铸造", "count": count_gtzz},
{"per": qyly, "name": "全域旅游和康养", "count": count_qyly},
{"per": qt, "name": "其他", "count": count_qt},
]
# TODO 4.五大千亿级产业集群
data = {
"jjzb_dic": jjzb_data, # 左上角经济指标数据
"table_dic": table_dic, # 左上角企业数据统计
"industry_dic": industry # 产业结构分布饼状图数据
}
return jsonify(code=RET.OK, msg="查找成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 招商引资作战图、项目数量/金额分布图
@api_attract.route("/project", methods=["POST"])
def project():
req_dict = request.get_json()
district = req_dict.get("district") # 区县或者开发区名称
try:
project_map = []
industry_money = []
industry_nums = []
list1 = ["晋城市", "沁水县", "高平市", "陵川县", "阳城县", "泽州县", "城区", "晋城经济技术开发区"]
# 晋城市,点击区县之前默认数据
if not district or district == '晋城市':
for i in list1:
# 1.招商引资作战图数据
ss = Examine.query.filter_by(district=i).first()
project_map.append({"name": i,
"nums1": "{}亿元".format(ss.sign_finnish),
"add1": ss.sign_grade,
"nums2": "{}亿元".format(ss.start_finish),
"add2": ss.start_grade,
"nums3": "{}亿元".format(ss.invest_finish),
"add3": ss.invest_grade
})
# 产业数量/金额分布图数据
# types_list = []
# industry_dic = {}
project_list = NewProject.query.filter_by(district="晋城市").all()
i = 0
for project in project_list:
i += 1
if i > 6:
pass
else:
industry_money.append({"name": project.type,
"value": project.money})
industry_nums.append({"name": project.type,
"value": project.number})
# 点击区县后的联动数据
else:
# 1.招商引资作战图数据
ss = Examine.query.filter_by(district=district).first()
project_map.append({"name": district,
"nums1": "{}亿元".format(ss.sign_finnish),
"add1": ss.sign_grade,
"nums2": "{}亿元".format(ss.start_finish),
"add2": ss.start_grade,
"nums3": "{}亿元".format(ss.invest_finish),
"add3": ss.invest_grade
})
# 产业数量/金额分布图数据
i = 0
project_list = NewProject.query.filter_by(district=district).all()
for project in project_list:
i += 1
if i > 6:
pass
else:
industry_money.append({"name": project.type,
"value": project.money})
industry_nums.append({"name": project.type,
"value": project.number})
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
data = {
"project_map": project_map, # 招商引资作战图
"industry_nums": industry_nums, # 已签约项目数量产业分布图
"industry_money": industry_money, # 已签约项目投资金额产业分布图
}
return jsonify(code=RET.OK, msg="获取成功", data=data)
# 政策和重点项目
@api_attract.route("/propol", methods=["POST"])
def propol():
req_dict = request.get_json()
district = req_dict.get("district") # 县区
try:
if not district or district == "晋城市":
# name_query = "project-propol"
# if redis_store.get(name_query) is not None:
# data = json.loads(redis_store.get(name_query))
# return jsonify(code=RET.OK, msg="获取成功", data=data)
project = Project.query.all()
policy = InduPolicy.query.filter_by(district="晋城市").order_by(InduPolicy.pubdate.desc())
data_policy = [{"name": i.name, "id": i.id, "distict": "太原市"} for i in policy.all()]
data_project = [{"name": i.name, "id": i.id} for i in project]
data = {
"project": data_project,
"policy": data_policy,
}
# redis缓存
# redis_store.set(name_query, json.dumps(data))
# redis_store.expire(name_query, 1 * 24 * 3600)
else: # 区县、开发区
project = Project.query.filter_by(district=district)
policy = InduPolicy.query.filter_by(district=district).order_by(InduPolicy.pubdate.desc())
data_policy = [{"name": i.name, "id": i.id, "distict": district} for i in policy.all()]
data_project = [{"name": i.name, "id": i.id} for i in project.all()]
data = {
"project": data_project, # 重点项目
"policy": data_policy, # 政策
}
return jsonify(code=RET.OK, msg="查询成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DATAERR, msg="数据库错误")
# 获取区县的详情
@api_attract.route("/getInfo", methods=["POST"])
def get_info():
req_dic = request.get_json()
district = req_dic.get("district") # 地区
if not district:
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
city = City.query.filter_by(area=district).first()
info = city.info
detail_dic = {
"detail_data": info
}
return jsonify(code=RET.OK, msg="查询成功", data=detail_dic)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 获取区县视频url
@api_attract.route("/video", methods=["POST"])
def attract_video():
req_dic = request.get_json()
district = req_dic.get("district")
if not district:
return jsonify(code=RET.PARAMERR, msg="参数不全")
# district_dict = {'晋城市': '晋城市',
# '沁水市': '沁水市',
# '高平市': '高平市',
# '陵川市': '陵川市',
# '阳城市': '阳城市',
# '泽州市': '泽州市',
# '城区': '城区'
# }
try:
video = Video.query.filter_by(district=district).first()
except Exception as e:
current_app.logger.error(e)
if video:
url = video.video_id1
if url:
return jsonify(code=RET.OK, msg="查询成功", data={"url": url})
else:
return jsonify(code=RET.DATAERR, msg="区县名称有误,没有相关视频")
return jsonify(code=RET.NODATA, msg="暂无视频", data={"url": ""})
# 获取重点项目的详情,详情页
@api_attract.route("/keyProject", methods=["POST"])
def keyproject():
req_dic = request.get_json()
id = req_dic.get("id")
if not id:
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
project = Project.query.get(id)
data = {
"name": project.name, # 工程名
"district": project.district, # 区县名称
"type": project.type, # 工程类型
"money": project.money, # 项目投资金额
"background": project.background, # 项目背景
"content": project.content, # 项目的具体内容
"way": project.way, # 拟引资方式及内容
"company": project.company, # 招商单位
"contact": project.contact, # 联系方式
"email": project.email # 电子邮箱
}
return jsonify(code=RET.OK, msg="查找成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 政策详情
@api_attract.route("/policyDetails", methods=["POST"])
def policy_details():
req_dic = request.get_json()
_id = req_dic.get("id")
if not _id:
return jsonify(code=RET.PARAMERR, msg="参数不全")
try:
_id1 = int(_id) + 1
_id2 = int(_id) - 1
if _id2 < 1:
_id2 = ''
policy_len = InduPolicy.query.count()
if _id1 > policy_len:
_id1 = ''
policy = InduPolicy.query.get(_id)
policy1 = InduPolicy.query.get(str(_id1))
policy2 = InduPolicy.query.get(str(_id2))
if policy:
data = {"name": policy.name, # 政策名
"file": policy.file if policy.file else "-", # 本地文件位置
"category": policy.category if policy.category else "-", # 政策类型
"org": policy.org if policy.org else "-", # 政策发布机构
"industry": policy.industry if policy.industry else "-", # 行业名称
"district": policy.district if policy.district else "-", # 政策发布地区
"pubdate": str(policy.pubdate)[0:10] if policy.pubdate else "-", # 发布时间
"url": policy.url if policy.pubdate else "-", # 外链接
"post_num": policy.post_num if policy.post_num else "", # 发文字号
"last": [policy2.name, _id1] if policy2 else "",
"next": [policy1.name, _id2] if policy1 else ""}
return jsonify(code=RET.OK, msg="查找成功", data=data)
else:
return jsonify(code=RET.OK, msg="查找成功,无数据", data='')
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 列表展示左上角企业
@api_attract.route("/showListb", methods=["POST"])
def showListb():
req_dic = request.get_json()
type = req_dic.get("type") # 12345678 (500强-上市-规模-专精特新-高新-科技中小-瞪羚-独角兽)
district = req_dic.get("district")
page = req_dic.get("page")
per_page = req_dic.get("per_page")
if not all([type, district]):
return jsonify(code=RET.PARAMERR, msg="参数错误")
if not page:
page = 1
try:
# 企业
if district == "晋城市":
company = Company.query.filter_by(city="晋城市")
else:
company = Company.query.filter_by(city="晋城市", district=district)
size = company.count()
if type == 1:
company = company.filter_by(isfive=1)
size = company.count()
if type == 2:
company = company.filter_by(quoted_company=1)
size = company.count()
if type == 3:
if district == "晋城市":
company = Company.query.filter_by(scale="1")
else:
company = Company.query.filter_by(district=district, scale="1")
size = company.count()
if type == 4:
company = company.filter_by(zjtg=1)
size = company.count()
if type == 5:
company = company.filter_by(high_new=1)
size = company.count()
if type == 6:
company = company.filter_by(tbe=1)
size = company.count()
if type == 7:
company = company.filter_by(dengl=1)
size = company.count()
if type == 8:
company = company.filter_by(unicorn=1)
size = company.count()
company = company.paginate(page, per_page=int(per_page)).items
data = [{
"id": i.id,
"name": i.company_name,
"industry": i.company_industry if i.company_industry else "-",
"product": i.product if i.product else "-",
"build_date": "-",
"capital": i.capital if i.capital else "-",
"isfive": "500强企业" if i.isfive == "1" else "",
"quoted_company": i.public_sector if i.public_sector != "空" else "",
"scale": "规模以上企业" if i.scale == "1" else "",
"zjtg": "专精特新企业" if i.zjtg == "1" else "",
"high_new": "高新技术企业" if i.high_new == "1" else "",
"tbe": "科技型中小企业" if i.tbe == "1" else "",
"dengl": "瞪羚企业" if i.dengl == "1" else "",
"unicorn": "独角兽企业" if i.unicorn == "1" else "",
} for i in company]
data = {"data_list": data, "size": size}
return jsonify(code=RET.OK, msg="查找成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 企业信息详情(招商驾驶舱左上角各类企业详情)
@api_attract.route('/companyDetail', methods=['POST'])
def enterprise_detail():
'''
企业信息详情
:return:
'''
req_dict = request.get_json()
id = req_dict.get("id") # 企业id
# 校验参数完整性
if not all([id]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
company = Company.query.get(id)
# 工商状况-查询行政许可数据
data_info1 = CompanyAdminPermission.query.filter_by(company_id=id).all()
# 工商状况-查询税务信用数据
data_info2 = CompanyTaxCredit.query.filter_by(company_id=id).all()
# 工商状况-查询进出口信用数据
data_info3 = CompanyImportExport.query.filter_by(company_id=id).all()
# 工商状况-查询供应商数据信息
data_info4 = CompanySupplier.query.filter_by(company_id=id).all()
# 工商状况-查询客户数据信息
data_info5 = CompanyCustomer.query.filter_by(company_id=id).all()
# 企业风险-查询股权出质数据信息
data_info6 = CompanyStock.query.filter_by(company_id=id).all()
# 企业风险-查询股权质押数据信息
data_info7 = CompanyPledge.query.filter_by(company_id=id).all()
# 企业风险-查询担保信息数据信息
data_info8 = CompanyDanbao.query.filter_by(company_id=id).all()
# 知识产权-查询专利信息数据信息
data_info9 = CompanyPatent.query.filter_by(company_id=id).all()
# 供应链图谱数据
# 供应链地图
supplier = CompanySupplier.query.filter_by(company_id=id).all()
if company:
data = {"select1_info": {"id": company.id,
"company_name": company.company_name, # 企业名
"telephone": company.telephone if company.telephone else "-", # 电话
"web_site": company.web_site if company.web_site else "-", # 网址
"email": company.email if company.email else "-", # 邮箱
"address": company.address if company.address else "-", # 地址
"jwd": {"lng": company.lng if company.lng else "-", # 经度
"lat": company.lat if company.lat else "-"}, # 维度
"company_info": company.company_info if company.company_info else "-", # 企业信息
"business_scope": company.business_scope if company.business_scope else "-",
# 经营范围
"high_new": "高新技术企业" if company.high_new else "-", # 高新技术企业
"legal": company.legal if company.legal else "-", # 法定代表人
"status": company.status if company.status else "-", # 状态
"build_date": str(company.build_date)[:10] if company.build_date else "-", # 创建时间
"capital": company.capital if company.capital else "-", # 注册资本
"social_code": company.social_code if company.social_code else "-", # 统一社会信用代码
# "taking": company.takingn if company.takingn else "-", # 营收 (万元)
"bao": company.bao_num if company.bao_num else "-", # 参保人数
"entype": company.entype if company.entype else "-", # 企业类型
"industry": company.company_industry if company.company_industry else "-", # 所属行业
"scope": company.business_scope if company.business_scope else "-", # 企业经营范围
# "collect": "1",
# "choice": "3"
"tax_code": company.tax_code if company.tax_code else "-",
"register_code": company.register_code if company.register_code else "-",
},
# 经营状况数据封装
"select2_info": {
"select2_info_name": '经营状况数据',
"label1": [{
"label1_name": '行政许可',
"number": data.number,
"name": data.name,
"time": (data.time).strftime("%Y-%m-%d %H:%M:%S"),
"effective_data": (data.effective_data).strftime("%Y-%m-%d %H:%M:%S"),
"Licensing_authority": data.Licensing_authority,
"content": data.content,
"source": data.source} for data in data_info1 if data_info1],
"label2": [{
"label2_name": '税务信用',
"evaluation_annual": data.evaluation_annual,
"identify_number": data.identify_number,
"level": data.level,
"evaluate": data.evaluate} for data in data_info2 if data_info2],
"label3": [{
"label3_name": '进出口信用',
"register_customs": data.register_customs,
"business_category": data.business_category,
"register_date": (data.register_date).strftime("%Y-%m-%d %H:%M:%S")} for data in data_info3 if data_info3],
"label4": [{
"label4_name": '供应商',
"supplier_name": data.supplier_name,
"buy_rate": data.buy_rate,
"buy_money": data.buy_money,
"open_time": (data.open_time).strftime("%Y-%m-%d %H:%M:%S"),
"data_source": data.data_source,
"relation": data.relation} for data in data_info4 if data_info4],
"label5": [{
"label5_name": '客户',
"customer_name": data.customer_name,
"sales_rate": data.sales_rate,
"sales_money": data.sales_money,
"open_time": (data.open_time).strftime("%Y-%m-%d %H:%M:%S"),
"data_source": data.data_source,
"relation": data.relation} for data in data_info5 if data_info5]
},
# 企业风险数据封装
"select3_info": {
"select3_info_name":'企业风险数据',
"label1": [{
"label1_name": '股权出质',
"num": data.num,
"person": data.person,
"from_company": data.from_company,
"pledgee": data.pledgee,
"amount": data.amount,
"datatime": (data.datatime).strftime("%Y-%m-%d %H:%M:%S"),
"status": data.status
} for data in data_info6 if data_info6],
"label2": [{
"label2_name": '股权质押',
"person1": data.person1,
"jion_company": data.jion_company,
"person2": data.person2,
"number": data.number,
"amount": data.amount,
"status": data.status,
"datatime": (data.datatime).strftime("%Y-%m-%d %H:%M:%S")
} for data in data_info7 if data_info7],
"label3": [{
"label3_name": '担保信息',
"person1": data.person1,
"person2": data.person2,
"method": data.method,
"amount": data.amount,
"datatime": (data.datatime).strftime("%Y-%m-%d %H:%M:%S")
} for data in data_info8 if data_info8]
},
# 知识产权数据封装
"select4_info": {
"select4_info_name":'专利信息',
"label": [{
"label_name": '专利信息',
"name": data.name,
"type": data.type,
"status": data.status,
"num": data.num,
"day": (data.day).strftime("%Y-%m-%d %H:%M:%S"),
"open_num": data.open_num,
"datatime": (data.datatime).strftime("%Y-%m-%d %H:%M:%S"),
"person": data.person
} for data in data_info9 if data_info9]
},
# 供应链图谱数据封装
"select5_info": {
},
# 供应链地图封装
"select6_info": {
"company_data": {"company_name": company.company_name,
"company_lat": company.lat,
"company_lng": company.lng,
"supplier": [{"supplier_name": i.supplier_name, 'lat': i.lat, 'lng': i.lng}
for i in supplier]}
}
}
else:
return jsonify(code=RET.NODATA, msg="查无数据")
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
print(exc_type, fname, exc_tb.tb_lineno)
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
return jsonify(code=RET.OK, msg="获取成功", data=data)
# # 删除缓存
# @api_attract.route("/deleteX", methods=["GET"])
# def deleteX():
# redis_store.delete("project-propol")
# return jsonify(code=RET.OK, msg="删除成功")
#
#
# # 删除缓存
# @api_attract.route("/vis", methods=["GET"])
# def vis():
# redis_store.delete("project-propol")
# return jsonify(code=RET.OK, msg={"remote_addr": request.remote_addr,
# "X-Real-Ip": request.headers.get("X-Real-Ip"),
# "X-Forwarded-For": request.headers.get("X-Forwarded-For"),
# "HOST": request.headers.get("Host"),
# "X-Forwarded-Proto": request.headers.get("X-Forwarded-Proto"),
# })
from flask import Blueprint
# 创建蓝图对象
api_map = Blueprint("api_map", __name__)
from . import view
'''招商地图页'''
from flask import g, current_app, request, jsonify, session
from apps.view_map import api_map
from apps.util import login_required, verify_token
from apps.utils.response_code import RET
from apps.models import *
from apps.utils.neo4j_conn import conn_neo4j, neo4j_dict
import json
import requests
from apps import db, constants, redis_store
'''本页接口使用全国企业库enterprise'''
graph = conn_neo4j()
# 颜色计数
def jishu(num):
if num >= 0 and num <= 50:
return "#72D4F1"
if num > 50 and num <= 100:
return "#00BAF6"
if num > 100 and num <= 200:
return "#4F9FFF"
if num > 200 and num <= 500:
return "#4265F6"
if num > 500 and num <= 1000:
return "#0052d6"
if num > 1000:
return "#0245AE"
# 招商地图下的色块图(同右侧得数量分布饼图)
@api_map.route('/AttractMap', methods=['POST'])
# @login_required
def attract_map():
'''招商地图'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
province = req_dict.get("province")
city = req_dict.get("city")
district = req_dict.get("district")
product = req_dict.get("product") # 产业产品选择
try:
enterprise = Enterprise.query.filter_by(c_type=inid)
if product:
enterprise = enterprise.filter(Enterprise.product_all.like("%{}%".format(product)))
# print(enterprise)
df = list()
if not province: # 全国,省数据
provinces = Enterprise.query.with_entities(Enterprise.province).distinct().all()
provinces = [i[0] for i in provinces if i[0]] # 拿到省份的无重复值
for pro in provinces:
num = enterprise.filter_by(province=pro).count()
province_data = Enterprise.query.filter_by(province=pro).first()
df.append({"name": pro,
"value": num,
"color": jishu(num),
"jwd": {"lng": province_data.p_lng, "lat": province_data.p_lat}})
return jsonify(code=RET.OK, msg="获取成功", data=df)
if province and not city: # 省-》市数据
cities = Enterprise.query.filter_by(province=province).with_entities(Enterprise.city).distinct().all()
cities = [i[0] for i in cities if i[0]] # 拿到城市的无重复值
for cit in cities:
num = enterprise.filter_by(province=province, city=cit).count()
city_data = Enterprise.query.filter_by(province=province, city=cit).first()
df.append({"name": cit,
"value": num,
"color": jishu(num),
"jwd": {"lng": city_data.c_lng, "lat": city_data.c_lat}})
return jsonify(code=RET.OK, msg="获取成功", data=df)
if province and city and not district: # 市-》区数据
districts = Enterprise.query.filter_by(province=province, city=city).with_entities(
Enterprise.district).distinct().all()
districts = [i[0] for i in districts if i[0]] # 拿到区县的无重复值
for dis in districts:
num = enterprise.filter_by(province=province, city=city, district=dis).count()
district_data = Enterprise.query.filter_by(province=province, city=city, district=dis).first()
df.append({"name": dis,
"value": num,
"color": jishu(num),
"jwd": {"lng": district_data.d_lng, "lat": district_data.d_lat}})
return jsonify(code=RET.OK, msg="获取成功", data=df)
if province and city and district: # 区数据
num = enterprise.filter_by(province=province, city=city, district=district).count()
district_data = Enterprise.query.filter_by(province=province, city=city, district=district).first()
print(district_data)
if district_data:
df.append({"name": district,
"value": num,
"color": "",
"jwd": {"lng": district_data.d_lng, "lat": district_data.d_lat}})
return jsonify(code=RET.OK, msg="获取成功", data=df)
else:
return jsonify(code=RET.OK, msg="无满足条件数据", data=df)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# 为右侧全国地图企业数据
@api_map.route('/EnterpriseTop5', methods=['POST'])
# @login_required
def attract_cnums():
'''招商地图'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
province = req_dict.get("province")
city = req_dict.get("city")
district = req_dict.get("district")
product = req_dict.get("product") # 产业产品选择
try:
enterprise = Enterprise.query.filter_by(c_type=inid)
if product:
enterprise = enterprise.filter(Enterprise.product_all.like("%{}%".format(product)))
# print(enterprise)
df = list()
if not province: # 全国,省数据
provinces = Enterprise.query.with_entities(Enterprise.province).distinct().all()
provinces = [i[0] for i in provinces if i[0]] # 拿到省份的无重复值
for pro in provinces:
num = enterprise.filter_by(province=pro).count()
df.append({"name": pro, "value": num})
df = sorted(df, key=lambda x: x["value"], reverse=True)
return jsonify(code=RET.OK, msg="获取成功", data=df[:5])
if province and not city: # 省-》市数据
cities = Enterprise.query.filter_by(province=province).with_entities(Enterprise.city).distinct().all()
cities = [i[0] for i in cities if i[0]] # 拿到城市的无重复值
for cit in cities:
num = enterprise.filter_by(province=province, city=cit).count()
df.append({"name": cit, "value": num})
df = sorted(df, key=lambda x: x["value"], reverse=True)
return jsonify(code=RET.OK, msg="获取成功", data=df[:5])
if province and city and not district: # 市-》区数据
districts = Enterprise.query.filter_by(province=province, city=city).with_entities(
Enterprise.district).distinct().all()
districts = [i[0] for i in districts if i[0]] # 拿到区县的无重复值
for dis in districts:
num = enterprise.filter_by(province=province, city=city, district=dis).count()
df.append({"name": dis, "value": num})
df = sorted(df, key=lambda x: x["value"], reverse=True)
return jsonify(code=RET.OK, msg="获取成功", data=df[:5])
if province and city and district: # 区数据
num = enterprise.filter_by(province=province, city=city, district=district).count()
df.append({"name": district, "value": num})
df = sorted(df, key=lambda x: x["value"], reverse=True)
return jsonify(code=RET.OK, msg="获取成功", data=df[:5])
return jsonify(code=RET.DATAERR, msg="地区参数错误")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# 全国企业列表
@api_map.route('/AttractEnterprise', methods=['POST'])
# @login_required
def enterprise():
'''
太原市企业列表
:return:
'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
page = req_dict.get("page") # 分页页码
perpage = req_dict.get("perpage") # 分页大小
province = req_dict.get("province")
city = req_dict.get("city")
district = req_dict.get("district")
product = req_dict.get("product") # 产业产品选择
if not all([page, perpage]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
if inid: # 子行业分类
enterprise = Enterprise.query.filter_by(c_type=inid)
else:
enterprise = Enterprise.query.filter_by()
# 区域选择
if province:
enterprise = enterprise.filter_by(province=province)
if city:
enterprise = enterprise.filter_by(city=city)
if district:
enterprise = enterprise.filter_by(district=district)
if product:
enterprise = enterprise.filter(Enterprise.product_all.like("%{}%".format(product)))
size = enterprise.count()
enterprise = enterprise.order_by(Enterprise.hots.desc()).paginate(page, perpage).items # 企业热度倒序
df = [{"id": i.id,
"company_name": i.company_name,
"hots": i.hots} for i in enterprise]
data = {"size": size, "df": df}
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
return jsonify(code=RET.OK, msg="获取成功", data=data)
# 招商地图下的散点图(至区后)
@api_map.route('/AttractSdmap', methods=['POST'])
# @login_required
def attract_sdmap():
'''招商地图'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
province = req_dict.get("province")
city = req_dict.get("city")
district = req_dict.get("district")
product = req_dict.get("product") # 产业产品选择
# 校验参数完整性
if not all([district]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
if inid:
enterprise = Enterprise.query.filter_by(c_type=inid)
else:
enterprise = Enterprise.query.filter_by()
if district:
enterprise = enterprise.filter_by(province=province, city=city, district=district)
if product:
enterprise = enterprise.filter(Enterprise.product_all.like("%{}%".format(product)))
enterprise = enterprise.all()
data = []
if enterprise:
for com in enterprise:
data.append({"id": com.id,
"name": com.company_name,
"jwd": {"lng": com.lng, # 企业地址出的经纬度
"lat": com.lat}
}) # 上下中游
else:
return jsonify(code=RET.OK, msg="获取失败,无数据", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
return jsonify(code=RET.OK, msg="获取成功", data=data)
\ No newline at end of file
from flask import Blueprint
# 创建蓝图对象
api_radar = Blueprint("api_radar", __name__)
from . import view
'''招商雷达'''
import json
import requests
import math
from flask import current_app, request, jsonify
from apps.view_radar import api_radar
from apps.models import *
from sqlalchemy import extract, or_, and_
from sqlalchemy.sql import func
from apps.util import login_required
from apps.utils.response_code import RET
from datetime import datetime
import datetime
from apps import db, constants, redis_store
from apps.utils.neo4j_conn import conn_neo4j
'''
1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated
解决办法:删除ONLY_FULL_GROUP_BY
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
/*
修改my.ini:
sql_mode=NO_ENGINE_SUBSTITUTION
*/
SELECT @@GLOBAL.SQL_mode;
SET @@GLOBAL.sql_mode=
'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SET @@GLOBAL.sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";
'''
graph = conn_neo4j()
# 产业分析-趋势预判
@api_radar.route('/IdusTendency', methods=['POST'])
# @login_required
def tendency():
'''雷达监测页企业数量统计'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
select_time = req_dict.get("select_time") # 选择2, 1年度,2季度,3月度
select_method = req_dict.get("select_method") # 选择3, 1新增量,2累积量
# 校验参数完整性
# if not all([area, sone, select_time, select_method]):
# return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
# name_query = "tendency" + str(inid) + str("".join(area)) + str(product) + str(sone) + str(select_time) + str(select_method)
# if redis_store.get(name_query) is not None:
# data = json.loads(redis_store.get(name_query))
# return jsonify(code=RET.OK, msg="获取成功", data=data)
if inid:
enterprise = Enterprise.query.filter_by(c_type=inid)
else:
enterprise = Enterprise.query.filter_by()
yearn = 2021 # 现在年份 固定成21
scope = [i for i in range(1980, yearn)] # 年份范围
months = [(1, 3), (4, 6), (7, 9), (10, 12)] # 季度
company_num_data = list()
register_capital_data = list()
company_num_name = ''
register_capital_name = ''
if select_method == 1: # 新增量
if select_time == 1: # 年度,1980-2020
company_num_name = '新增量年度企业个数'
register_capital_name = '新增量年度注册资本'
for year in scope:
result = enterprise.filter(extract("year", Enterprise.build_date) == year)
# 企业个数
nums = result.count()
company_num_data.append({"label": year, "value": nums})
# 注册资本
cnums = result.with_entities(func.sum(Enterprise.capital_nums)).scalar()
register_capital_data.append({"label": year, "value": round(cnums, 2) if cnums else 0})
elif select_time == 2: # 2020年季度(修改为5年季度)
company_num_name = '新增量季度企业个数'
register_capital_name = '新增量季度注册资本'
for yea in range(2016, 2021):
for jd in range(len(months)):
result = enterprise.filter(and_(extract("year", Enterprise.build_date) == yea,
extract("month", Enterprise.build_date).between(months[jd][0],
months[jd][1])))
# 企业个数
nums = result.count()
company_num_data.append({"label": str(yea) + "-" + str(jd + 1), "value": nums})
# 注册资本
cnums = result.with_entities(func.sum(Enterprise.capital_nums)).scalar()
register_capital_data.append(
{"label": str(yea) + "-" + str(jd + 1), "value": round(cnums, 2) if cnums else 0})
elif select_time == 3: # 2020年月度(改为3年月度)
company_num_name = '新增量月度企业个数'
register_capital_name = '新增量月度注册资本'
for yea in range(2018, 2021):
for m in range(2, 14, 2):
result = enterprise.filter(and_(extract("year", Enterprise.build_date) == yea,
extract("month", Enterprise.build_date) == m))
# 企业个数
nums = result.count()
# data[m] = nums
company_num_data.append({"label": str(yea) + "-" + str(m).rjust(2, "0"), "value": nums})
# 注册资本
cnums = result.with_entities(func.sum(Enterprise.capital_nums)).scalar()
# data[m] = round(cnums, 2) if cnums else 0
register_capital_data.append({"label": str(yea) + "-" + str(m).rjust(2, "0"),
"value": round(cnums, 2) if cnums else 0})
elif select_method == 2: # 累积量
if select_time == 1: # 年度,1980-2020
company_num_name = '累积量年度企业个数'
register_capital_name = '累积量年度注册资本'
for year in scope:
result = enterprise.filter(extract("year", Enterprise.build_date) <= year)
# 企业个数
nums = result.count()
# data[year] = nums
company_num_data.append({"label": year, "value": nums})
# 注册资本
cnums = result.with_entities(func.sum(Enterprise.capital_nums)).scalar()
# data[year] = round(cnums, 2) if cnums else 0
register_capital_data.append({"label": year, "value": round(cnums, 2) if cnums else 0})
elif select_time == 2: # 2020年季度
company_num_name = '累积量季度企业个数'
register_capital_name = '累积量季度注册资本'
for yea in range(2016, 2021):
for jd in range(len(months)):
result = enterprise.filter(and_(extract("year", Enterprise.build_date) == yea,
extract("month", Enterprise.build_date) <= months[jd][1]))
# 企业个数
nums = result.count()
# data[(jd + 1)] = nums
company_num_data.append({"label": str(yea) + "-" + str(jd + 1), "value": nums})
# 注册资本
cnums = result.with_entities(func.sum(Enterprise.capital_nums)).scalar()
# data[(jd + 1)] = round(cnums, 2) if cnums else 0
register_capital_data.append(
{"label": str(yea) + "-" + str(jd + 1), "value": round(cnums, 2) if cnums else 0})
elif select_time == 3: # 2020年月度
company_num_name = '累积量月度企业个数'
register_capital_name = '累积量月度注册资本'
for yea in range(2018, 2021):
for m in range(2, 14, 2):
result = enterprise.filter(and_(extract("year", Enterprise.build_date) == yea,
extract("month", Enterprise.build_date) <= m))
# 企业个数
nums = result.count()
# data[m] = nums
company_num_data.append({"label": str(yea) + "-" + str(m).rjust(2, "0"), "value": nums})
# 注册资本
cnums = result.with_entities(func.sum(Enterprise.capital_nums)).scalar()
register_capital_data.append({"label": str(yea) + "-" + str(m).rjust(2, "0"),
"value": round(cnums, 2) if cnums else 0})
else:
return jsonify(code=RET.DATAERR, msg="参数错误")
# redis缓存
# redis_store.setex(name_query, 30 * 24 * 3600, json.dumps(data))
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# data_dic = {
# "company_num": company_num_data.insert(0, company_num_name),
# "register_capital": register_capital_data.insert(0, register_capital_name),
# }
data_dic = {
"company_num": company_num_data,
"company_num_name": company_num_name,
"register_capital": register_capital_data,
"register_capital_name": register_capital_name,
}
return jsonify(code=RET.OK, msg="获取成功", data=data_dic)
# 产业分析-top10榜单数据接口
@api_radar.route('/IdusTopTen', methods=['POST'])
# @login_required
def topt():
'''雷达监测页企业top10'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
product = req_dict.get("product") # 企业产品
select = req_dict.get("select") # 1--上市 2--专利数量 3--500强
# 校验参数完整性
if not all([inid]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
enterprise = Enterprise.query.filter_by(c_type=inid)
if product:
# 有可能会变成模糊查询
enterprise = enterprise.filter(Enterprise.product_all.like("%{}%".format(product)))
if select == 1: # 上市
company = enterprise.filter_by(quoted_company=1).group_by(Enterprise.company_name,
Enterprise.takingn).order_by(
Enterprise.takingn.desc()).limit(10).all()
print(company)
if company:
sums = float(company[0].takingn if company[0].takingn else 1)
data = [
{
"id": item.id,
"company_name": item.company_name,
"sum_money": str(int((float(item.takingn) if item.takingn else 0) / 10)) + '万元',
"h_sum": str((int(float(item.takingn) if item.takingn else 0) / sums) * 100)[:5] + "%"
} for item in company]
return jsonify(code=RET.OK, msg="获取成功", data=data)
else:
return jsonify(code=RET.OK, msg="获取成功", data=[])
elif select == 2: # 专利数量
company = enterprise.group_by(Enterprise.company_name, Enterprise.num_patent).order_by(
Enterprise.num_patent.desc()).limit(10).all()
if company:
sums = float(company[0].num_patent if company[0].num_patent else 1)
print(sums)
data = [
{
"id": item.id,
"company_name": item.company_name,
"sum_money": str(int(int(item.num_patent if item.num_patent else 0) / 10)) + '个',
"h_sum": str((int(float(item.num_patent if item.num_patent else 0)) / sums) * 100)[
:5] + "%"
} for item in company
]
return jsonify(code=RET.OK, msg="获取成功", data=data)
else:
return jsonify(code=RET.OK, msg="获取成功", data=[])
elif select == 3: # 500强
company = enterprise.filter_by(isfive=1).group_by(Enterprise.company_name, Enterprise.takingn).order_by(
Enterprise.takingn.desc()).limit(10).all()
if company:
sums = float(company[0].takingn if company[0].takingn else 1)
data = [
{
"id": item.id,
"company_name": item.company_name,
"sum_money": str(int((float(item.takingn) if item.takingn else 0) / 10)) + '万元',
"h_sum": str((int(float(item.takingn) if item.takingn else 0) / sums) * 100)[:5] + "%"
} for item in company]
return jsonify(code=RET.OK, msg="获取成功", data=data)
else:
return jsonify(code=RET.OK, msg="获取成功", data=[])
else:
return jsonify(code=RET.DATAERR, msg="参数错误", data=[])
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# 产业评估-优势薄弱缺失三环节
@api_radar.route('/ThreeLink', methods=['POST'])
# @login_required
def prolink():
'''雷达监测页企业属性分布统计'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
# area = req_dict.get("area") # [省,市,区]
# province = area[0]
# city = area[1]
# district = area[2]
link_type = req_dict.get("link_type") # 缺失环节1,薄弱环节2,优势环节3
page = req_dict.get("page") # page
perpage = req_dict.get("perpage") # perpage
# 校验参数完整性
if not all([inid, page, perpage]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
edata = EvaluationNodeData.query.filter_by(c_type=inid)
edata = edata.filter_by(province="山西省", city="晋城市")
edata = edata.all()
if edata:
num = [math.ceil(i.score) if i.score else 0 for i in edata]
num.sort()
num = [i for i in num if i > 0]
cent = num[int(len(num) * 0.5)]
deletion = len([item for item in edata if item.score == 0]) # 缺失环节
bedness = len([item for item in edata if item.score > 0 and item.score <= cent]) # 薄弱环节
goodness = len([item for item in edata if item.score > cent]) # 优势环节
res = {
"deletion": deletion,
"goodness": goodness,
"bedness": bedness
}
if link_type == 1: # "缺失环节":
result_bylink = [item.product for item in edata if item.score == 0]
elif link_type == 2: # "薄弱环节":
result_bylink = [item.product for item in edata if item.score > 0 and item.score <= cent]
elif link_type == 3: # "优势环节":
result_bylink = [item.product for item in edata if item.score > cent]
else:
return jsonify(code=RET.DATAERR, msg="参数错误")
df = result_bylink[(page - 1) * perpage:page * perpage]
data = {"df": df, "size": res}
return jsonify(code=RET.OK, msg="获取成功", data=data)
else:
data = []
return jsonify(code=RET.NODATA, msg="暂无数据", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# 产业评估-根据具体环节的细分产业获取相关企业
@api_radar.route('/GetLinkEnterprise', methods=['POST'])
# @login_required
def recommond():
'''
产品描述及企业推荐
:return:
'''
req_dict = request.get_json()
name = req_dict.get("name") # 产品名
page = req_dict.get("page")
perpage = req_dict.get("perpage")
# select = req_dict.get("select") # 企业地址选择
# 校验参数完整性
if not all([name]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
enterprise = Enterprise.query.filter(Enterprise.product_all.like("%{}%".format(name)))
size = enterprise.count()
enterprise = enterprise.order_by(Enterprise.c_type, Enterprise.hots.desc()).paginate(page,
perpage).items # # 企业热度倒序
ent_data = []
for com in enterprise:
ent_data.append({"id": com.id,
"company_name": com.company_name,
"city": com.city,
"district": com.district,
"build_date": str(com.build_date)[:10] if com.build_date else "-", # 时间
"legal": com.legal,
"capital_nums": com.capital_nums,
"entype": com.entype,
"high_new": "高新企业" if com.high_new == "1" else "",
"tbe": "" if com.tbe == "1" else "",
"fianacing": "融资企业" if com.fianacing == "1" else "",
"quoted_company": "上市企业" if com.quoted_company == "1" else "",
"dengl": "瞪羚企业" if com.dengl == "1" else "",
"unicorn": "独角兽企业" if com.unicorn == "1" else "",
"isfive": "500强企业" if com.isfive == "1" else "",
"address": com.address,
"telephone": com.telephone
})
data = {"ent_data": ent_data, "size": size}
return jsonify(code=RET.OK, msg="查询成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# 优质企业-各资质企业数量
@api_radar.route('/GoodEnterpriseNum', methods=['POST'])
# @login_required
def radar_enums():
'''雷达监测页企业数量统计'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
# 校验参数完整性
if not all([inid]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
# name_query = "radar" + str(inid) + str("".join(area)) + str(product)
# if redis_store.get(name_query) is not None:
# data = json.loads(redis_store.get(name_query))
# return jsonify(code=RET.OK, msg="获取成功", data=data)
enterprise = Enterprise.query.filter_by(c_type=inid)
num_isfive = enterprise.filter_by(isfive="1").count() # 500强企业
nums_quoted = enterprise.filter_by(quoted_company="1").count() # 上市企业
nums_financ = enterprise.filter_by(fianacing="1").count() # 有融资小企业
nums_hignew = enterprise.filter_by(high_new="1").count() # 高新技术企业
nums_tbe = enterprise.filter_by(tbe="1").count() # 科技型中小企业
nums_dengl = enterprise.filter_by(dengl="1").count() # 瞪羚企业
nums_unicorn = enterprise.filter_by(unicorn="1").count() # 独角兽企业
data = {
"num_isfive": num_isfive,
"nums_dengl": nums_dengl, "nums_hignew": nums_hignew, "nums_tbe": nums_tbe,
"nums_quoted": nums_quoted,
"nums_financ": nums_financ, "nums_unicorn": nums_unicorn, # "info": info
}
# redis缓存
# redis_store.setex(name_query, 30 * 24 * 3600, json.dumps(data))
# redis_store.set(name_query, json.dumps(data))
# redis_store.expire(name_query, 30 * 24 * 3600)
# print("redis")
return jsonify(code=RET.OK, msg="获取成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# 优质企业-具体资质企业列表查询
@api_radar.route("/ZizhiEnterList", methods=["POST"])
def newList():
'''查看企业列表——外加详情'''
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
select = req_dict.get("select") # 企业列表选择 1234567 500强-上市-融资-高新-科技型中小企业--瞪羚-独角兽
page = req_dict.get("page")
perpage = req_dict.get("perpage")
if not all([inid, select, page, perpage]):
return jsonify(code=RET.PARAMERR, msg="参数错误")
try:
enterprise = Enterprise.query.filter_by(c_type=inid)
remind = ''
if select == 1:
remind = "500强企业"
enterprise = enterprise.filter_by(isfive="1")
elif select == 2: # 上市
remind = "上市企业"
enterprise = enterprise.filter_by(quoted_company="1")
elif select == 3: # 融资
remind = "融资企业"
enterprise = enterprise.filter_by(fianacing="1")
elif select == 4: # 高新
remind = "高新技术企业"
enterprise = enterprise.filter_by(high_new="1")
elif select == 5: # 科技型中小企业
remind = "科技型中小企业"
enterprise = enterprise.filter_by(tbe="1")
elif select == 6: # 瞪羚
remind = "瞪羚企业"
enterprise = enterprise.filter_by(dengl="1")
elif select == 7: # 独角兽
remind = "独角兽企业"
enterprise = enterprise.filter_by(unicorn="1")
size = enterprise.count()
enters = enterprise.paginate(page, perpage).items
enter = [{
"id": i.id,
"company_name": i.company_name,
"city": i.city,
"district": i.district,
"build_date": str(i.build_date)[:10] if i.build_date else "-", # 时间
"legal": i.legal,
"capital_nums": i.capital_nums,
"entype": i.entype,
"zizhi": remind,
"address": i.address,
"telephone": i.telephone
} for i in enters]
data = {"remind": remind, "enter": enter, "size": size}
return jsonify(code=RET.OK, msg="查找成功", data=data)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# # 产品描述及推荐
# @api_radar.route('/randerSelect', methods=['GET'])
# # @login_required
# def rander_select():
# data = [{"label": "太原", "value": "太原"}, {"label": "其它", "value": "其它"}]
# return jsonify(code=RET.OK, msg="查询成功", data=data)
# # 创建body
# def create_body(args_query, args_term):
# body = {
# "query": {
# "bool": {
# "must": [{"multi_match": {"query": "{}".format(args_query["query"]), # match_phrase来实现完全匹配查询。
# "type": "phrase",
# "fields": [
# "product"
# ],
# "slop": 0,
# }
# },
# ]
# }
# },
# "from": 0,
# "size": 10,
# "sort": [],
# "aggs": {},
# "_source": ['company_name'],
#
# }
#
# for k, v in args_term.items():
# body["query"]["bool"]["must"].append({"term": {"{}".format(k): "{}".format(v)}})
#
# return body
#
#
# # 通过节点判断优势薄弱和缺失,1优势、2薄弱、3缺失
# def get_waa(pname_two, inid, area):
# province = area[0]
# city = area[1]
# district = area[2]
#
# try:
# edata = EvaluationNodeData.query.filter_by(c_type=inid)
# if not province:
# edata = edata.filter(EvaluationNodeData.province.is_(None)).filter(
# EvaluationNodeData.city.is_(None)).filter(EvaluationNodeData.district.is_(None))
# if province and not city:
# edata = edata.filter_by(province=province).filter(EvaluationNodeData.city.is_(None)).filter(
# EvaluationNodeData.district.is_(None))
# if province and city and not district:
# edata = edata.filter_by(province=province, city=city).filter(EvaluationNodeData.district.is_(None))
# if province and city and district:
# edata = edata.filter_by(province=province, city=city, district=district)
# edata = edata.all()
#
# if edata:
# num = [math.ceil(i.score) if i.score else 0 for i in edata]
# num.sort()
# num = [i for i in num if i > 0]
# cent = num[int(len(num) * 0.5)]
# youshi = [item.product for item in edata if item.score > cent] # 优势
# queshi = [item.product for item in edata if item.score == 0] # 缺失
# weak = [item.product for item in edata if item.score > 0 and item.score <= cent] # 薄弱
# else:
# youshi = [] # 优势
# queshi = [] # 缺失
# weak = [] # 薄弱
# if pname_two in youshi:
# return 1
# if pname_two in weak:
# return 2
# if pname_two in queshi:
# return 3
# except Exception as e:
# current_app.logger.error(e)
# return 2
#
#
# # 通过es全匹配查询三级
# def find_thr_by_es(inid, name_query, relation, area):
# if relation == "中游行业":
# relation_c = "下位产品"
# else:
# relation_c = relation
#
# args_term = dict() # 省市区条件
# if area[0]:
# args_term['province'] = area[0]
# if area[1]:
# args_term['city'] = area[1]
# if area[2]:
# args_term['district'] = area[2]
# args_term['c_type'] = inid # 指定二级企业分类
# url = "http://127.0.0.1:9200/ty_cur/_search"
#
# sql_01 = "match (n) -[r:`{}`]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(relation_c, name_query)
# res_zero = graph.run(sql_01).data()
# res_one = list(set([i["m.name"] for i in list(res_zero)])) # 不重复的一级节点
# data = {"clickable": False,
# "node": "{}".format(relation[:2]),
# "level": 1,
# "subNodeList": [],
# # "count": cnums
# }
#
# for it in res_one:
# pname_one = it
#
# # es全匹配查询企业数量
# args_query = dict() # 产品
# args_query["query"] = pname_one
# body = create_body(args_query, args_term)
# result_es = json.loads(requests.post(url=url, json=body).text)
# erjicount = int(result_es["hits"]["total"])
#
# node_one = {"clickable": True,
# "node": "{}".format(pname_one),
# "level": 2,
# "count": erjicount,
# "subNodeList": []
# }
# sql_02 = "match (n) -[r]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(pname_one)
# result = graph.run(sql_02).data()
# result = list(set([i["m.name"] for i in list(result)])) # 不重复的二级节点
# for item in result:
# pname_two = item
# # es全匹配查询企业数量
# args_query = dict() # 产品
# args_query["query"] = pname_two
# body = create_body(args_query, args_term)
# result_es = json.loads(requests.post(url=url, json=body).text)
# count2 = int(result_es["hits"]["total"])
# # 二级节点
# node_two = {"clickable": True,
# "node": "{}".format(pname_two),
# "level": 3,
# "count": count2,
# "subNodeList": [],
# "waa": get_waa(pname_two, inid, area) # 1优势、2薄弱、3缺失
# }
# sql_03 = "match (n) -[r]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(pname_two)
# result3 = graph.run(sql_03).data()
# result3 = list(set([i["m.name"] for i in list(result3)])) # 不重复的三级节点
# for itm in result3:
# pname_thr = itm
# args_query = dict() # 产品
# args_query["query"] = pname_thr
# body = create_body(args_query, args_term)
# result_es = json.loads(requests.post(url=url, json=body).text)
# count3 = int(result_es["hits"]["total"])
# # 三级
# node_thr = {"clickable": True,
# "node": "{}".format(pname_thr),
# "level": 4,
# "count": count3,
# "subNodeList": []
# }
# node_two["subNodeList"].append(node_thr)
# node_one["subNodeList"].append(node_two)
# data["subNodeList"].append(node_one)
#
# return data
#
#
# # 行业产品公司数量(链图)
# @api_radar.route('/map/chain', methods=['POST'])
# # @login_required
# def attract_chain():
# '''行业id->行业链标题-》上中下游-》查询数值'''
# req_dict = request.get_json()
# inid = req_dict.get("inid") # 二级行业id(二级行业显示链图)
# area = req_dict.get("area") # ["","",""] 省市区
#
# # 校验参数完整性
# if not all([inid]):
# return jsonify(code=RET.PARAMERR, msg="参数不完整")
#
# try:
# name_query = "radar" + str(inid) + str("".join(area))
# if redis_store.get(name_query) is not None:
# data = json.loads(redis_store.get(name_query))
# return jsonify(code=RET.OK, msg="获取成功", data=data)
#
# # 行业使用名
# industryName = Industry.query.filter_by(nid=inid).first().oname
# ptp = {"轨道交通": "轨道交通装备",
# "新能源汽车": "新能源汽车整车制造",
# "智能煤机": "智能煤机",
# "数控机床及机器人": "数控机床及机器人",
#
# "通用航空": "通用航空",
# "智能电网": "智能电网",
# "氢能": "氢能",
# "碳基新材料": "碳基新材料",
#
# "金属新材料": "金属新材料",
# "煤化工新材料": "煤化工新材料",
# "生物基新材料": "生物基新材料",
# "信息技术应用创新": "信息创新技术",
#
# "网络安全": "网络安全",
# "云计算": "云计算产业",
# "大数据及人工智能": "大数据及人工智能",
# "物联网": "物联网",
#
# "康养产业": "康养产业",
# "生物制药": "生物制药",
# "现代物流": "现代物流",
# "现代金融": "现代金融",
#
# "半导体及光电子": "半导体",
# "节能环保": "节能环保"
# }
# if industryName in ptp:
# industryName = ptp[industryName]
# result = {
# "industryChain": industryName,
# "nodeList": [find_thr_by_es(inid, industryName, "上游行业", area),
# find_thr_by_es(inid, industryName, "中游行业", area),
# find_thr_by_es(inid, industryName, "下游行业", area)]
# }
# # redis缓存
# redis_store.set(name_query, json.dumps(result))
# redis_store.expire(name_query, 30 * 24 * 3600)
# print("redis")
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.DBERR, msg="数据异常")
#
# return jsonify(code=RET.OK, msg="获取成功", data=result)
#
#
# # 雷达监测页企业属性分布统计
# @api_radar.route('/radar/distribute', methods=['POST'])
# # @login_required
# def distribute():
# '''雷达监测页企业属性分布统计'''
# req_dict = request.get_json()
# inid = req_dict.get("inid") # 行业id
# area = req_dict.get("area") # [省,市,区]
# province = area[0]
# city = area[1]
# district = area[2]
# product = req_dict.get("product") # 企业产品
#
# # 校验参数完整性
# if not all([area]):
# return jsonify(code=RET.PARAMERR, msg="参数不完整")
#
# try:
# if inid:
# enterprise = Enterprise.query.filter_by(c_type=inid)
# else:
# enterprise = Enterprise.query.filter_by()
#
# if province:
# enterprise = enterprise.filter_by(province=province)
# if city:
# enterprise = enterprise.filter_by(city=city)
# if district:
# enterprise = enterprise.filter_by(district=district)
#
# if product:
# # 有可能会变成模糊查询
# enterprise = enterprise.filter(Enterprise.product_all.like("%{}%".format(product)))
#
# # 企业类型
#
# types = enterprise.with_entities(Enterprise.entype).distinct().all()
# types = [item[0] for item in types if item[0]]
# data_1 = list()
# for i in types:
# c_num = enterprise.filter_by(entype=i).count()
# data_1.append({"name": i, "value": c_num})
# # data_1 = {k: round(v / sum(data_1.values()), 2) for k, v in data_1.items()}
#
# # 币种,不能为空
# types = enterprise.with_entities(Enterprise.money_type).distinct().all()
# types = [item[0] for item in types if item[0]]
# data_2 = list()
# for i in types:
# c_num = enterprise.filter_by(money_type=i).count()
# data_2.append({"name": i, "value": c_num})
# # data_2 = {k: round(v / sum(data_2.values()), 2) for k, v in data_2.items()}
# # data_2 = {'人民币': 0.02, "None": 0.97, '美元': 0.01} # 正式数据不能为空,None不能以变量出现
#
# # 成立时间分布yearid
# types = enterprise.with_entities(Enterprise.yearid).distinct().all()
# types = [item[0] for item in types if item[0]]
# data_3 = list()
# dic_year = {1: "1-3年", 2: "3-5年", 3: "5-8年", 4: "8-10年", 5: "10-15年", 6: "15年以上"}
# for i in types:
# if i in dic_year:
# c_num = enterprise.filter_by(yearid=i).count()
# data_3.append({"name": dic_year[i], "value": c_num})
# # data_3 = {k: round(v / sum(data_3.values()), 2) for k, v in data_3.items()}
#
# # 注册资本大小分布
# types = enterprise.with_entities(Enterprise.capital_id).distinct().all()
# types = [item[0] for item in types if item[0]]
# data_4 = list()
# dic_capital = {1: "100万以内", 2: "100-500万", 3: "500-1000万", 4: "1000-5000万", 5: "5000万-1亿", 6: "1亿以上"}
# for i in types:
# if i in dic_capital:
# c_num = enterprise.filter_by(capital_id=i).count()
# data_4.append({"name": dic_capital[i], "value": c_num})
# # data_4 = {k: round(v / sum(data_4.values()), 2) for k, v in data_4.items()}
#
# # 上市板块
# plates = enterprise.with_entities(Enterprise.public_sector).distinct().all()
# # types = [item[0] for item in types if item[0]]
# data_5 = list()
# for i in plates:
# if i[0] == "空" or i[0] is None:
# continue
# c_num = enterprise.filter_by(public_sector=i[0]).count()
# data_5.append({"name": i[0], "value": c_num})
# # data_5 = {k: round(v / sum(data_5.values()), 2) for k, v in data_5.items()}
#
# # 融资轮次分布(按融资轮次)
# rounds = enterprise.with_entities(Enterprise.fianacing_rounds).distinct().all()
# data_6 = list()
# for i in rounds:
# if i[0] == "空" or i[0] is None:
# continue
# c_num = enterprise.filter_by(fianacing_rounds=i[0]).count()
# data_6.append({"name": i[0], "value": c_num})
# # data_6 = {k: round(v / sum(data_6.values()), 2) for k, v in data_6.items()}
#
# data = {"entype": data_1, # 企业类型
# "currency": data_2, # 币种
# "time_distribute": data_3, # 成立时间分布
# "capital": data_4, # 注册资本分部
# "sector": data_5, # 上市板块
# "rounds": data_6} # 融资轮次
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.DBERR, msg="数据库查询错误")
#
# return jsonify(code=RET.OK, msg="获取成功", data=data)
#
#
# # 雷达评估页行业地区分数评估
# @api_radar.route('/radar/evaluation', methods=['POST'])
# # @login_required
# def evaluation():
# '''雷达监测页企业属性分布统计'''
# req_dict = request.get_json()
# inid = req_dict.get("inid") # 二级行业id
# area = req_dict.get("area") # [省,市,区]
# province = area[0]
# city = area[1]
# district = area[2]
#
# # 校验参数完整性
# if not all([inid, area]):
# return jsonify(code=RET.PARAMERR, msg="参数不完整")
#
# try:
# edata = EvaluationData.query.filter_by(c_type=inid)
# if province and not city:
# edata = edata.filter_by(province=province).filter(EvaluationData.city.is_(None))
# if province and city and not district:
# edata = edata.filter_by(province=province, city=city).filter(EvaluationData.district.is_(None))
# if province and city and district:
# edata = edata.filter_by(province=province, city=city, district=district)
# edata = edata.first()
# if edata:
# data = {"development": edata.development, # 发育度
# "contribute": edata.contribute, # 贡献度
# "innovate": edata.innovate, # 创新力
# "growup": edata.growup, # 成长性
# "capital": edata.capital, # 资本力
# "general": edata.general} # 综合分
# return jsonify(code=RET.OK, msg="获取成功", data=data)
# else:
# data = {"development": 0,
# "contribute": 0,
# "innovate": 0,
# "growup": 0,
# "capital": 0,
# "general": 0}
# return jsonify(code=RET.NODATA, msg="无数据", data=data)
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.DBERR, msg="数据库查询错误")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment