Commit 9a482a16 by 赵宇

fix

parent 27cf791b
......@@ -87,13 +87,13 @@ def creat_app(config_name):
app.url_map.converters['re'] = RegexConverter
# 注册蓝图,推迟导入,防止循环嵌套
from apps.index import api_attract # 招商驾驶舱
from apps.view_index import api_attract # 招商驾驶舱
# from apps.user_pc import api_user
from apps.atlas import api_atlas
from apps.radar import api_radar
from apps.attract_map import api_map
# from apps.view_360 import api_portraits
from apps.choose_address import api_address
from apps.view_atlas import api_atlas
from apps.view_radar import api_radar
from apps.view_map import api_map
from apps.view_360company import api_portraits
from apps.view_choose import api_address
# from apps.manage import api_power
# from apps.inves_manage import api_manage
# from apps.view_mobile import api_mobile
......@@ -103,8 +103,8 @@ def creat_app(config_name):
app.register_blueprint(api_atlas, url_prefix='/api/atlas') # 产业招商图谱
app.register_blueprint(api_map, url_prefix='/api/map') # 产业招商地图
app.register_blueprint(api_attract, url_prefix='/api/attract_map/industry') # 招商驾驶舱
# app.register_blueprint(api_portraits, url_prefix="/api/portraits/industry")
app.register_blueprint(api_attract, url_prefix='/api/attract/industry') # 招商驾驶舱
app.register_blueprint(api_portraits, url_prefix="/api/360company")
app.register_blueprint(api_address, url_prefix="/api/address")
# app.register_blueprint(api_power, url_prefix="/api/power")
# app.register_blueprint(api_manage, url_prefix="/api/manage")
......
from flask import Blueprint
# 创建蓝图对象
api_atlas = Blueprint("api_atlas", __name__)
from . import view
\ No newline at end of file
from flask import current_app, request, jsonify
from apps.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)
......@@ -1402,7 +1402,7 @@ def down_manage_item():
df.loc[i] = [item.company_name, item.name, item.industry, item.invest, item.stage, item.section,
item.link, status_list[int(status)], item.invest_introduce, item.question]
# df.to_excel(old_path + filename, index=None)
# df.to_excel(old_path + filename, view_index=None)
writer = pd.ExcelWriter(old_path + filename, engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
......
......@@ -89,7 +89,7 @@ class Enterprise(db.Model):
c_type = db.Column(db.Integer, index=True, doc='行业类id', comment='行业类id') # 行业类id
f_name = db.Column(db.String(255), doc='父行业类名', comment='父行业类名') # 父行业类名
f_type = db.Column(db.Integer, index=True, doc='父行业类id', comment='父行业类id') # 父行业类id
# __table_args__ = (Index('index(zone,status)', 'resource_zone', 'resource_status'), {'comment': '压测资源表'}) # 添加索引和表注释
# __table_args__ = (Index('view_index(zone,status)', 'resource_zone', 'resource_status'), {'comment': '压测资源表'}) # 添加索引和表注释
__table_args__ = ({'comment': '全国企业表'}) # 添加表注释
......@@ -640,7 +640,7 @@ class Induzone(db.Model):
# charge = db.Column(db.String(255)) # 机构负责人
# charge_phone = db.Column(db.String(255)) # 负责人电话
# function = db.Column(db.Text) # 部门职能
# name = db.Column(db.String(255), nullable=False, index=True) # 政府机构单位名称
# name = db.Column(db.String(255), nullable=False, view_index=True) # 政府机构单位名称
# # followed 我的下级,管制谁,followers 我的上级,谁管制我
# followed = db.relationship('Government', secondary=followers, primaryjoin=(followers.c.follower_id == id),
# secondaryjoin=(followers.c.followed_id == id),
......@@ -955,8 +955,16 @@ class CompanyIndustryPoint(db.Model):
f_type = db.Column(db.Integer, doc='类型,对应产业导航nid', comment='类型,对应产业导航nid') # 类型,对应产业导航nid
# 360企业画像--下拉框内容数据表(企业类型,资质,上市状态,融资轮次)
class Property(db.Model):
__tablename_ = "property"
__table_args__ = ({'comment': '360企业画像--下拉框内容数据表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='主键id', comment='主键id')
name = db.Column(db.String(32), doc='字段名', comment='字段名') # 字段名
nid = db.Column(db.Integer, doc='字段id', comment='字段id') # 字段id
sid = db.Column(db.Integer, doc='字段类型id', comment='字段类型id') # 字段类型id 1企业类型,2企业资质,3上市状态,4融资轮次
statu = db.Column(db.Integer, doc='状态:1启动,2禁用', comment='状态:1启动,2禁用') # 状态 1启动,2禁用
......@@ -1034,15 +1042,7 @@ class CompanyIndustryPoint(db.Model):
#
#
#
# # 企业属性导航ty(企业类型,资质,上市状态,融资轮次)
# class Propertyty(db.Model):
# __tablename_ = "propertyty"
#
# id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# name = db.Column(db.String(32)) # 字段名
# nid = db.Column(db.Integer) # 字段id
# sid = db.Column(db.Integer) # 字段类型id 1企业类型,2企业资质,3上市状态,4融资轮次
# statu = db.Column(db.Integer) # 状态 1启动,2禁用
#
#
# # 企业属性导航全部(企业类型,资质,上市状态,融资轮次)
......@@ -1058,7 +1058,7 @@ class CompanyIndustryPoint(db.Model):
#
# # 招商资源管理字典(行业选择,项目阶段)
# class Attract(db.Model):
# __tablename_ = "attract_map"
# __tablename_ = "view_map"
#
# id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# name = db.Column(db.String(32)) # 字段名
......@@ -1170,7 +1170,7 @@ class CompanyIndustryPoint(db.Model):
# user = db.Column(db.Integer) # 园区创建人id
# uperson = db.Column(db.String(255)) # 园区上报人
# up_unit = db.Column(db.String(255)) # 园区上报机构
# status = db.Column(db.Enum("审核通过", "审核驳回", "正在审核", "未上报"), default="未上报", index=True) # 园区上报状态
# status = db.Column(db.Enum("审核通过", "审核驳回", "正在审核", "未上报"), default="未上报", view_index=True) # 园区上报状态
#
# name = db.Column(db.String(255)) # 园区姓名
# level = db.Column(db.String(255)) # 园区级别
......
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.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('/radar/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('/radar/IdusTopTen', methods=['POST'])
# @login_required
def topt():
'''雷达监测页企业top10'''
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") # 企业产品
select = req_dict.get("select") # 1--上市 2--专利数量 3--500强
# 校验参数完整性
# if not all([area]):
if not all([inid]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
# if inid:
# enterprise = Enterprise.query.filter_by(c_type=int(inid))
# else:
# enterprise = Enterprise.query.filter_by()
# 默认为第一个产业相关,煤层气开发储运利用,产业集群不联动
enterprise = Enterprise.query.filter_by(c_type=inid)
# 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)))
# company = company.filter_by(product_all=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:
# print(company[0].takingn)
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=[])
# 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:
# print(company[0].takingn)
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)
# if company:
# for i in company:
# print(i.num_patent)
# sums = float(company[0].num_patent if company[0].num_patent else 1)
# print(sums)
# data = [
# {"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=[])
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('/radar/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('/radar/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,
# "high_new": "高新企业" if i.high_new == "1" else "",
# "tbe": "" if i.tbe == "1" else "",
# "fianacing": "融资企业" if i.fianacing == "1" else "",
# "quoted_company": "上市企业" if i.quoted_company == "1" else "",
# "dengl": "瞪羚企业" if i.dengl == "1" else "",
# "unicorn": "独角兽企业" if i.unicorn == "1" else "",
# "isfive": "500强企业" if i.isfive == "1" else "",
"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('/attract_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="数据库查询错误")
......@@ -2,8 +2,8 @@ from py2neo import Graph
def conn_neo4j():
# graph = Graph("http://localhost:7474", username="neo4j", password="123456") # 本地neo4j
graph = Graph("http://localhost:7476", username="neo4j", password="123456") # 上传到50服务器前需更改
graph = Graph("http://localhost:7474", username="neo4j", password="123456") # 本地neo4j
# graph = Graph("http://localhost:7476", username="neo4j", password="123456") # 上传到50服务器前需更改
# graph = Graph("http://39.100.39.50:7476/", username="neo4j", password="123456") # 测试50服务器上的neo4j时使用
return graph
......
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_360 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)
typy = property.filter_by(sid=1, statu=1).all()
qualificat = property.filter_by(sid=2, statu=1).all()
quoted = property.filter_by(sid=3, statu=1).all()
financ = property.filter_by(sid=4, statu=1).all()
# options: [{ value: "选项1", label: "无数据" },{ value: "选项2", label: "3333" }],
data = {"entype": [{"label": i.name, "value": i.nid} for i in typy],
"qualificat": [{"label": i.name, "value": i.nid} for i in qualificat],
"quoted": [{"label": i.name, "value": i.nid} for i in quoted],
"financ": [{"label": i.name, "value": i.nid} for i in 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(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_mobile = Blueprint("api_mobile",__name__)
api_mobile = Blueprint("api_mobile", __name__)
from . import view_atlas
from . import view_user
......@@ -10,4 +10,4 @@ from . import mobile_360
from . import mobile_collect
from . import mobile_item
from . import mobile_choose
from . import mobile_homepage
\ No newline at end of file
from . import mobile_homepage
......@@ -110,7 +110,7 @@ def enterprise():
# 全国企业列表
@api_mobile.route('/attract_map/enterprise', methods=['POST'])
@api_mobile.route('/view_map/enterprise', methods=['POST'])
# @login_required
def att_enterprise():
'''
......@@ -475,7 +475,7 @@ def garden():
# 雷达监测页企业数量趋势统计
@api_mobile.route('/radar/tendency', methods=['POST'])
@api_mobile.route('/view_radar/tendency', methods=['POST'])
@login_required
def tendency():
'''雷达监测页企业数量统计'''
......
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