Commit 904b82da by 赵宇

fix

parent ac661929
...@@ -89,7 +89,7 @@ def creat_app(config_name): ...@@ -89,7 +89,7 @@ def creat_app(config_name):
# 注册蓝图,推迟导入,防止循环嵌套 # 注册蓝图,推迟导入,防止循环嵌套
from apps.view_attract import api_attract # 招商驾驶舱 from apps.view_attract import api_attract # 招商驾驶舱
# from apps.user_pc import api_user # from apps.user_pc import api_user
# from apps.atlas import api_atlas from apps.atlas import api_atlas
# from apps.radar import api_radar # from apps.radar import api_radar
# from apps.attract import api_att # from apps.attract import api_att
# from apps.view_360 import api_portraits # from apps.view_360 import api_portraits
...@@ -100,7 +100,7 @@ def creat_app(config_name): ...@@ -100,7 +100,7 @@ def creat_app(config_name):
# app.register_blueprint(api_user, url_prefix='/api/user') # app.register_blueprint(api_user, url_prefix='/api/user')
# app.register_blueprint(api_radar, url_prefix='/api/radar') # app.register_blueprint(api_radar, url_prefix='/api/radar')
# app.register_blueprint(api_atlas, url_prefix='/api/atlas') app.register_blueprint(api_atlas, url_prefix='/api/atlas')
# app.register_blueprint(api_att, url_prefix='/api/att') # app.register_blueprint(api_att, url_prefix='/api/att')
# #
app.register_blueprint(api_attract, url_prefix='/api/attract/industry') app.register_blueprint(api_attract, url_prefix='/api/attract/industry')
......
...@@ -7,10 +7,10 @@ from apps.utils.neo4j_conn import conn_neo4j,neo4j_dict ...@@ -7,10 +7,10 @@ from apps.utils.neo4j_conn import conn_neo4j,neo4j_dict
from apps import redis_store from apps import redis_store
import json import json
graph = conn_neo4j() graph = conn_neo4j()
'''行业名转换ptp字典两个 neo4j_dict line 164/177''' '''行业名转换ptp字典两个 neo4j_dict line 164/177'''
def deleteDuplicate(li): def deleteDuplicate(li):
''' '''
列表[字典]去重 列表[字典]去重
...@@ -22,95 +22,27 @@ def deleteDuplicate(li): ...@@ -22,95 +22,27 @@ def deleteDuplicate(li):
return li return li
def find_up(inid, name_query, relation, district): def find_up_thr(name_query, relation):
if relation == "中游行业": if relation == "中游行业":
relation_c = "下位产品" relation_c = "下位产品"
else: else:
relation_c = relation relation_c = relation
sql = "match (n) -[r:`{}`]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(relation_c, name_query)
res = graph.run(sql).data()
cnums = Company.query.filter_by(stream="{}".format(relation[:2]), c_type=inid).count()
data = {"clickable": False,
"node": "{}".format(relation[:2]),
"level": 1,
"subNodeList": [],
"count": cnums
}
past = list()
for it in res:
productName = it["m.name"]
if productName in past:
continue
past.append(productName)
if district:
erjicount = Company.query.filter_by(province="山西省", city="太原市", district=district).filter(
Company.product_all.like("%{}%".format(productName))).count()
else:
erjicount = Company.query.filter_by(province="山西省", city="太原市").filter(
Company.product_all.like("%{}%".format(productName))).count()
node = {"clickable": True,
"node": "{}".format(productName),
"level": 2,
"count": erjicount,
"subNodeList": []
}
sql_02 = "match (n) -[r]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(productName)
result = graph.run(sql_02).data()
for item in result:
productName = item["m.name"]
if district:
count = Company.query.filter_by(province="山西省", city="太原市", district=district).filter(
Company.product_all.like("%{}%".format(productName))).count()
else:
count = Company.query.filter_by(province="山西省", city="太原市").filter(
Company.product_all.like("%{}%".format(productName))).count()
# erjicount += count
node["subNodeList"].append({"clickable": True,
"node": "{}".format(productName),
"level": 3,
"count": count,
"subNodeList": []
})
# node["count"] = erjicount # 累计值
data["subNodeList"].append(node)
return data
def find_up_thr(inid, name_query, relation, district):
if relation == "中游行业":
relation_c = "下位产品"
else:
relation_c = relation
cnums = Company.query.filter_by(stream="{}".format(relation[:2]), c_type=inid).count() # 上中下游企业数目
# 零级,上中下三游 # 零级,上中下三游
data = {"clickable": False, data = {
"node": "{}".format(relation[:2]), "node": "{}".format(relation[:2]),
"level": 1, "level": 1,
"subNodeList": [], "subNodeList": [],
"count": cnums
} }
sql_01 = "match (n) -[r:`{}`]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(relation_c, name_query) 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_zero = graph.run(sql_01).data()
res_one = list(set([i["m.name"] for i in list(res_zero)])) # 不重复的一级节点 res_one = list(set([i["m.name"] for i in list(res_zero)])) # 不重复的一级节点
for it in res_one: # 一级节点 for it in res_one: # 一级节点
pname_one = it pname_one = it
# 获取当前子节点数量
if district:
erjicount = Company.query.filter_by(c_type=inid, province="山西省", city="太原市", district=district).filter(
Company.product_all.like("%{}%".format(pname_one))).count()
else:
erjicount = Company.query.filter_by(c_type=inid, province="山西省", city="太原市").filter(
Company.product_all.like("%{}%".format(pname_one))).count()
# 一级 # 一级
node_one = {"clickable": True, node_one = {
"node": "{}".format(pname_one), "node": "{}".format(pname_one),
"level": 2, "level": 2,
"count": erjicount,
"subNodeList": [] "subNodeList": []
} }
sql_02 = "match (n) -[r]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(pname_one) sql_02 = "match (n) -[r]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(pname_one)
...@@ -118,18 +50,10 @@ def find_up_thr(inid, name_query, relation, district): ...@@ -118,18 +50,10 @@ def find_up_thr(inid, name_query, relation, district):
result = list(set([i["m.name"] for i in list(result)])) # 不重复的二级节点 result = list(set([i["m.name"] for i in list(result)])) # 不重复的二级节点
for item in result: for item in result:
pname_two = item pname_two = item
# 二级子节点数量
if district:
count2 = Company.query.filter_by(c_type=inid, province="山西省", city="太原市", district=district).filter(
Company.product_all.like("%{}%".format(pname_two))).count()
else:
count2 = Company.query.filter_by(c_type=inid, province="山西省", city="太原市").filter(
Company.product_all.like("%{}%".format(pname_two))).count()
# 二级 # 二级
node_two = {"clickable": True, node_two = {
"node": "{}".format(pname_two), "node": "{}".format(pname_two),
"level": 3, "level": 3,
"count": count2,
"subNodeList": [] "subNodeList": []
} }
sql_03 = "match (n) -[r]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(pname_two) sql_03 = "match (n) -[r]->(m) WHERE n.name='{}' return n.name,r.type,m.name".format(pname_two)
...@@ -137,24 +61,15 @@ def find_up_thr(inid, name_query, relation, district): ...@@ -137,24 +61,15 @@ def find_up_thr(inid, name_query, relation, district):
result3 = list(set([i["m.name"] for i in list(result3)])) # 不重复的三级节点 result3 = list(set([i["m.name"] for i in list(result3)])) # 不重复的三级节点
for itm in result3: for itm in result3:
pname_thr = itm pname_thr = itm
# 二级子节点数量
if district:
count3 = Company.query.filter_by(c_type=inid, province="山西省", city="太原市", district=district).filter(
Company.product_all.like("%{}%".format(pname_thr))).count()
else:
count3 = Company.query.filter_by(c_type=inid, province="山西省", city="太原市").filter(
Company.product_all.like("%{}%".format(pname_thr))).count()
# 三级 # 三级
node_thr = {"clickable": True, node_thr = {
"node": "{}".format(pname_thr), "node": "{}".format(pname_thr),
"level": 4, "level": 4,
"count": count3,
"subNodeList": [] "subNodeList": []
} }
node_two["subNodeList"].append(node_thr) node_two["subNodeList"].append(node_thr)
node_one["subNodeList"].append(node_two) node_one["subNodeList"].append(node_two)
data["subNodeList"].append(node_one) data["subNodeList"].append(node_one)
return data return data
...@@ -175,10 +90,10 @@ def industry_chain(): ...@@ -175,10 +90,10 @@ def industry_chain():
return jsonify(code=RET.PARAMERR, msg="参数不完整") return jsonify(code=RET.PARAMERR, msg="参数不完整")
try: try:
name_query = "ty" + str(inid) + str(district) # name_query = "jc" + str(inid) + str(district)
if redis_store.get(name_query) is not None: # if redis_store.get(name_query) is not None:
data = json.loads(redis_store.get(name_query)) # data = json.loads(redis_store.get(name_query))
return jsonify(code=RET.OK, msg="获取成功", data=data) # return jsonify(code=RET.OK, msg="获取成功", data=data)
# 行业使用名 # 行业使用名
industryName = Industry.query.filter_by(nid=inid).first().oname industryName = Industry.query.filter_by(nid=inid).first().oname
...@@ -188,176 +103,15 @@ def industry_chain(): ...@@ -188,176 +103,15 @@ def industry_chain():
# print(industryName) # print(industryName)
result = { result = {
"industryChain": industryName, "industryChain": industryName,
"nodeList": [find_up_thr(inid, industryName, "上游行业", district), "nodeList": [find_up_thr(industryName, "上游行业"),
find_up_thr(inid, industryName, "中游行业", district), find_up_thr(industryName, "中游行业"),
find_up_thr(inid, industryName, "下游行业", district)] find_up_thr(industryName, "下游行业")]
} }
# redis缓存 # redis缓存
redis_store.set(name_query, json.dumps(result)) # redis_store.set(name_query, json.dumps(result))
redis_store.expire(name_query, 30 * 24 * 3600) # redis_store.expire(name_query, 30 * 24 * 3600)
print("redis") # 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/nevigate", methods=["POST"])
# @login_required
def indu_nevigate():
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id,不为0
cate = req_dict.get("cate") # 行业等级,(高端设备等五个为"1",子行业为"2")
# print(inid, cate)
if cate != "1":
return jsonify(code=RET.DATAERR, msg="参数异常")
try:
indu = Industry.query.filter_by(nid=inid, statu=1).first()
if not indu:
return jsonify(code=RET.DATAERR, msg="参数异常")
name = indu.name # 显示名
# childs = Industry.query.filter_by(fid=indu.nid, statu=1).all()
childs = Industry.query.filter_by(fid=indu.nid).all() # 全部展示
nodes = []
links = []
for child in childs:
count = Company.query.filter_by(c_type=child.nid).count() # 当前行业在数据中的频
if count==0:
continue
nodes.append(
{"id": child.nid, "name": "{}".format(child.name + "({})".format(count)), "count": count,
"nodeShape": 0, "color": "#43a2f1", "cate": "2"})
links.append({"from": '{}'.format(indu.nid), "to": '{}'.format(child.nid), "text": ''})
# id += 1
count = Company.query.filter_by(f_type=indu.nid).count()
nodes.append({"id": "{}".format(indu.nid), "name": "{}".format(name), "count": count, "cate": "1"})
result = {'nodes': deleteDuplicate(nodes), 'links': deleteDuplicate(links), "rootId": '1'}
except Exception as e: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据异常") return jsonify(code=RET.DBERR, msg="数据异常")
return jsonify(code=RET.OK, msg="获取成功", data=result) return jsonify(code=RET.OK, msg="获取成功", data=result)
\ No newline at end of file
# 点击二级导航的行业产业链原点()
@api_atlas.route('/ej/zero', methods=['POST'])
# @login_required
def zero():
req_dict = request.get_json()
inid = req_dict.get("inid") # 行业id
cate = req_dict.get("cate") # 行业等级,(高端设备等五个为"1",子行业为"2")
if cate != "2":
return jsonify(code=RET.DATAERR, msg="参数错误")
center = Industry.query.filter_by(nid=inid).first()
pname = center.oname # 获取可查询真名
ptp = neo4j_dict()
product = pname
if pname in ptp:
product = ptp[pname]
sql = "match (n) -[r:`下游行业`]->(m) WHERE n.name='{}' return id(n) as id,n.name as name UNION " \
"match (n) -[r:`上游行业`]->(m) WHERE n.name='{}' return id(n) as id,n.name as name UNION " \
"match (n) -[r:`下位产品`]->(m) WHERE n.name='{}' return id(n) as id,n.name as name ".format(product,
product,
product)
res = graph.run(sql).data()
try:
result = {
"rootId": '{}'.format(res[0]["id"]),
"nodes": [{"id": "{}".format(res[0]["id"]), "name": "{}↓".format(product)}],
"links": [] # {"from": '1', "to": '{}'.format(res[0]["id"]), "text": ''}
}
except:
result = {
"rootId": '{}'.format(res[0]["id"]),
"nodes": [{"id": "{}".format(res[0]["id"]), "name": "{}↓".format(product)}],
"links": [] # {"from": '1', "to": '{}'.format(res[0]["id"]), "text": ''}
}
return jsonify(code=RET.OK, msg="获取成功", data=result)
def haveNext(name):
'''
判断是否有下一级子节点
:param name: name of node
:return:
'''
sql = "match (n)-[r]->(m) WHERE n.name='{}' return r.type limit 1".format(name)
res = graph.run(sql).data()
if len(res) >= 1:
return True
else:
return False
def find_next(name, _id):
'''
查找下一级节点
:param name:
:param _id: 出发节点id
:return:
'''
result = {'nodes': [], 'links': []}
sql = "match (n) -[r:`下游行业`]->(m) WHERE n.name='{}' return id(n),id(m),n.name,r.type,m.name UNION " \
"match (n) -[r:`上游行业`]->(m) WHERE n.name='{}' return id(n),id(m),n.name,r.type,m.name UNION " \
"match (n) -[r:`下位产品`]->(m) WHERE n.name='{}' return id(n),id(m),n.name,r.type,m.name ".format(name, name,
name)
res = graph.run(sql).data()
# print("查询结果:", res)
for i in res:
if haveNext(i["m.name"]):
result["nodes"].append({"id": "{}".format(i["id(m)"]), "name": "{}↓".format(i["m.name"])})
result["links"].append(
{"from": "{}".format(_id), "to": "{}".format(i["id(m)"]), "text": "{}".format(i["r.type"])})
else:
result["nodes"].append({"id": "{}".format(i["id(m)"]), "name": "{}".format(i["m.name"])})
result["links"].append(
{"from": "{}".format(_id), "to": "{}".format(i["id(m)"]), "text": "{}".format(i["r.type"])})
# for i in res:
# if haveNext(i["m.name"]):
# result["antity"].append({'name': '{}'.format(i["m.name"]), 'name_query': '{}'.format(
# i["m.name"])})
# result["relation"].append(
# {'source': '{}'.format(i["n.name"]), 'target': '{}↓'.format(i["m.name"]),
# 'name': '{}'.format(i["r.type"])})
# else:
# result["antity"].append({'name': '{}'.format(i["m.name"]), 'name_query': '{}'.format(
# i["m.name"])})
# result["relation"].append(
# {'source': '{}'.format(i["n.name"]), 'target': '{}'.format(i["m.name"]),
# 'name': '{}'.format(i["r.type"])})
# return result
return result
# 点击二级导航下行业产业链气泡出现下一级
@api_atlas.route('/ej/next', methods=['POST'])
# @login_required
def next():
req_dict = request.get_json()
name = req_dict.get("name") # 获取节点名称(不带下箭头)
# name_query = req_dict.get("name_query") # 获取查询节点名称
_id = req_dict.get("id") # 节点id
# 校验参数完整性
if not all([name]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
result = find_next(name, _id)
final_result = dict()
# 列表字典去重
nodes = deleteDuplicate(result["nodes"])
links = deleteDuplicate(result["links"])
final_result["nodes"] = nodes
final_result["links"] = links
return jsonify(code=RET.OK, msg="获取成功", data=final_result)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据异常", data={})
...@@ -180,6 +180,72 @@ class Company(db.Model): ...@@ -180,6 +180,72 @@ class Company(db.Model):
__table_args__ = ({'comment': '晋城企业表'}) # 添加表注释 __table_args__ = ({'comment': '晋城企业表'}) # 添加表注释
# 晋城企业行政许可
class CompanyAdminPermission(db.Model):
__tablename_ = "company_admin_permission"
__table_args__ = ({'comment': '晋城企业行政许可数据表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='晋城企业行政许可主键id', comment='晋城企业行政许可主键id') # 企业
company_id = db.Column(db.Integer, doc='晋城企业id', comment='晋城企业id')
number = db.Column(db.String(32), doc='晋城企业行政许可编号', comment='晋城企业行政许可编号')
name = db.Column(db.String(32), doc='晋城企业行政许可证名称', comment='晋城企业行政许可证名称')
time = db.Column(db.String(32), doc='许可证名称', comment='许可证名称')
effective_data = db.Column(db.String(32), doc='有效日期', comment='有效日期')
Licensing_authority = db.Column(db.String(32), doc='许可机关', comment='许可机关')
content = db.Column(db.String(32), doc='许可内容', comment='许可内容')
source = db.Column(db.String(32), doc='来源', comment='来源')
# 晋城企业税务信用
class CompanyTaxCredit(db.Model):
__tablename_ = "company_tax_credit"
__table_args__ = ({'comment': '晋城企业税务信用数据表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='晋城企业税务信用主键id', comment='晋城企业税务信用主键id') # 企业
company_id = db.Column(db.Integer, doc='晋城企业id', comment='晋城企业id')
evaluation_annual = db.Column(db.String(32), doc='评价年度', comment='评价年度')
identify_number = db.Column(db.String(32), doc='纳税人识别号', comment='纳税人识别号')
level = db.Column(db.String(32), doc='纳税信用等级', comment='纳税信用等级')
evaluate = db.Column(db.String(32), doc='单位评价', comment='单位评价')
# 晋城企业进出口信用
class CompanyImportExport(db.Model):
__tablename_ = "company_import_export"
__table_args__ = ({'comment': '晋城企业进出口信用数据表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='晋城企业进出口信用主键id', comment='晋城企业进出口信用主键id') # 企业
company_id = db.Column(db.Integer, doc='晋城企业id', comment='晋城企业id')
register_customs = db.Column(db.String(32), doc='注册海关', comment='注册海关')
business_category = db.Column(db.String(32), doc='经营类别', comment='经营类别')
register_date = db.Column(db.String(32), doc='注册日期', comment='注册日期')
# 晋城企业供应商
class CompanySupplier(db.Model):
__tablename_ = "company_supplier"
__table_args__ = ({'comment': '晋城企业供应商数据表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='晋城企业供应商主键id', comment='晋城企业供应商主键id') # 企业
company_id = db.Column(db.Integer, doc='晋城企业id', comment='晋城企业id')
supplier_name = db.Column(db.String(32), doc='客户名字', comment='客户名字')
buy_rate = db.Column(db.String(32), doc='采购占比', comment='采购占比')
buy_money = db.Column(db.String(32), doc='采购金额', comment='采购金额')
open_time = db.Column(db.String(32), doc='公开时间', comment='公开时间')
data_source = db.Column(db.String(32), doc='数据来源', comment='数据来源')
relation = db.Column(db.String(32), doc='关联关系', comment='关联关系')
# 晋城企业客户
class CompanyCustomer(db.Model):
__tablename_ = "company_customer"
__table_args__ = ({'comment': '晋城企业客户数据表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='晋城企业客户主键id', comment='晋城企业客户主键id') # 企业
company_id = db.Column(db.Integer, doc='晋城企业id', comment='晋城企业id')
customer_name = db.Column(db.String(32), doc='客户', comment='客户')
sales_rate = db.Column(db.String(32), doc='销售占比', comment='销售占比')
sales_money = db.Column(db.String(32), doc='销售金额', comment='销售金额')
open_time = db.Column(db.String(32), doc='公开时间', comment='公开时间')
data_source = db.Column(db.String(32), doc='数据来源', comment='数据来源')
relation = db.Column(db.String(32), doc='关联关系', comment='关联关系')
# 产业导航目录 # 产业导航目录
class Industry(db.Model): class Industry(db.Model):
__tablename_ = "industry" __tablename_ = "industry"
......
...@@ -4,7 +4,7 @@ from itsdangerous import TimedJSONWebSignatureSerializer as Serializer ...@@ -4,7 +4,7 @@ from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from itsdangerous import SignatureExpired, BadSignature from itsdangerous import SignatureExpired, BadSignature
from flask import request, jsonify, current_app from flask import request, jsonify, current_app
from config import Config from config import Config
from apps.models import User, Bstage # from apps.models import User, Bstage
import functools import functools
# from flask_httpauth import HTTPBasicAuth # from flask_httpauth import HTTPBasicAuth
# #
......
...@@ -2,45 +2,11 @@ from py2neo import Graph ...@@ -2,45 +2,11 @@ from py2neo import Graph
def conn_neo4j(): def conn_neo4j():
graph = Graph("http://localhost:7474", username="neo4j", password="century-english-almanac-havana-golf-9040") # graph = Graph("http://localhost:7474", username="neo4j", password="century-english-almanac-havana-golf-9040")
# graph = Graph("http://localhost:7474", username="neo4j", password="123456") graph = Graph("http://localhost:7474", username="neo4j", password="123456")
return graph return graph
# 'match (n) -[r:`下位产品`]->(m) WHERE n.name=\\'网络安全\\' return n.name,r.type,m.name'
# s = "match (n) -[r:`下位产品`]->(m) WHERE n.name='轨道交通' return n.name,r.type,m.name"
# #
# graph = conn_neo4j()
# res = graph.run(s).data()
# print(res)
def neo4j_dict(): def neo4j_dict():
ptp = {"轨道交通": "轨道交通", ptp = {"煤层气开采储运利用": "煤层气开采储运利用"}
"新能源汽车": "新能源汽车",
"智能煤机": "智能煤机",
"数控机床及机器人": "工业机器人",
"通用航空": "通用航空",
"智能电网": "智能电网",
"氢能": "氢能",
"碳基新材料": "碳基新材料",
"特种金属新材料": "特种金属材料",
"化工新材料": "新型化工材料",
"生物基新材料": "生物基新材料",
"信息技术应用创新": "信息创新技术",
"网络安全": "网络安全",
"云计算": "云计算",
"大数据及人工智能": "大数据及人工智能",
"物联网": "物联网",
"康养产业": "康养服务",
"生物制药": "生物医药",
"现代物流": "现代物流",
"现代金融": "现代金融",
"半导体及光电子": "新一代半导体",
"节能环保": "节能环保装备"
}
return ptp return ptp
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