Commit 85eb2121 by dong

fix20221205

parent 6401bb38
......@@ -947,11 +947,11 @@ class User(BaseModel, db.Model):
# dddingid = db.Column(db.String(128)) # 钉钉dingid
# 用户关注行业(图谱)
# industry = db.relationship("Industry", secondary="user_industry", backref=db.backref('bindustry'))
industry = db.relationship("Industry", secondary="user_industry", backref=db.backref('bindustry'))
# 用户关注太原企业
# company = db.relationship("Company", secondary="user_company", backref=db.backref("bcompany"))
company = db.relationship("Company", secondary="user_company", backref=db.backref("bcompany"))
# 用户关注全国企业
# enterprise = db.relationship("Enterprise", secondary="user_enterprise", backref=db.backref("benterprise"))
enterprise = db.relationship("Enterprise", secondary="user_enterprise", backref=db.backref("benterprise"))
@property
def password(self):
......@@ -983,6 +983,33 @@ class User(BaseModel, db.Model):
return token
# 后台管理用户
class Bstage(BaseModel, db.Model):
__tablename__ = "bstage"
# 基本信息
id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 用户编号
name = db.Column(db.String(32), unique=True) # 用户名
password_hash = db.Column(db.String(128)) # 加密的密码
# 角色(职级配置)
role = db.Column(db.Integer) # 1超级管理员,2 系统运维员
@property
def password(self):
# 设置为只写的方式
# return self.password_hash
raise AttributeError('这个属性只能设置,不能读取')
@password.setter
def password(self, value):
self.password_hash = generate_password_hash(value)
def check_password(self, password):
'''检验密码的正确性,传入参数为用户登录时填写的密码'''
return check_password_hash(self.password_hash, password)
# 角色(职位,职级)
class Role(BaseModel, db.Model):
__tablename__ = "role"
......@@ -1293,18 +1320,270 @@ class MoneyArrive(db.Model):
upload_time = db.Column(db.String(30), comment='上传日期')
upload_unit = db.Column(db.String(30), comment='上传部门')
upload_people = db.Column(db.String(30), comment='上传人')
district_name = db.Column(db.String(30), comment='区县名称')
arrive_money = db.Column(db.Float, comment='固定资产投资项目资金到位额(')
"""以下为202212月改版后需求"""
# 招商图谱-产业链收藏
class IndustryCollect(db.Model):
__tablename_ = "industry_collect"
__table_args__ = ({'comment': '招商图谱-产业链收藏'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
industry_id = db.Column(db.Integer, comment='产业id')
user_id = db.Column(db.Integer, comment='用户id')
collect_time = db.Column(db.String(30), comment='收藏时间')
industry_name = db.Column(db.String(30), comment='收藏的产业名称')
# 用户关注行业,多-多
class UserIndustry(BaseModel, db.Model):
__tablename__ = "user_industry"
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), primary_key=True)
industry_id = db.Column(db.Integer, db.ForeignKey("industry.id"), primary_key=True)
# #用户关注公司,多-多
class UserCompany(BaseModel, db.Model):
__tablename__ = "user_company"
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), primary_key=True)
company_id = db.Column(db.Integer, db.ForeignKey("company.id"), primary_key=True)
# #用户关注公司,多-多
class UserEnterprise(BaseModel, db.Model):
__tablename__ = "user_enterprise"
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), primary_key=True)
enterprise_id = db.Column(db.Integer, db.ForeignKey("enterprise.id"), primary_key=True)
# 载体资源库-数据填报-楼宇详情表
class CarrierBuild(db.Model):
__tablename_ = "carrier_build"
__table_args__ = ({'comment': '载体资源库-楼宇详情表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
district_name = db.Column(db.String(50), comment='区域名称')
build_name = db.Column(db.String(50), comment='楼宇名称')
industry_name = db.Column(db.String(255), comment='产业名称')
industry_type = db.Column(db.String(20), comment='产业类型')
total_area = db.Column(db.String(20), comment='总面积(㎡)')
# total_area_id = db.Column(db.Integer,
# comment='总面积范围id(1:0-500㎡;2:500-1000㎡;3:1000-2000㎡;4:2000-5000㎡;5:5000-10000㎡)')
cover_land_area = db.Column(db.String(20), comment='占地面积(㎡)')
# cover_land_area_id = db.Column(db.Integer,
# comment='占地面积范围id(1:0-500㎡;2:500-1000㎡;3:1000-2000㎡;4:2000-5000㎡;5:5000-10000㎡)')
build_type = db.Column(db.String(20), comment='楼宇类型')
# build_type_id = db.Column(db.Integer, comment='楼宇类型id(1:商铺;2:写字楼)')
rent_rate = db.Column(db.String(20), comment='出租率')
# rent_rate_id = db.Column(db.Integer, comment='出租率id(1:0-50%;2:50-80%;3:80-90%;4:90-100%;)')
layer_num = db.Column(db.Integer, comment='总层数(层,填写整数)')
detail_address = db.Column(db.String(50), comment='详细地址')
lng = db.Column(db.String(50), comment='经度')
lat = db.Column(db.String(50), comment='维度')
construction_time = db.Column(db.String(20), default='', comment='建设时间(例如:2022年)')
upload_time = db.Column(db.DateTime, default='', comment='数据上传时间')
# 权限相关
upload_people = db.Column(db.String(20), comment='数据上传人')
upload_people_id = db.Column(db.String(20), comment='数据上传人用户id')
upload_people_role_id = db.Column(db.String(20), comment='数据上传人权限id')
upload_people_belong = db.Column(db.String(100), comment='数据上传人所属区县、机构、部门')
fix_time = db.Column(db.DateTime, default='', comment='数据修改时间')
fix_people = db.Column(db.String(20), comment='数据修改人')
build_status = db.Column(db.String(20), comment='楼宇状态')
# rent_money = db.Column(db.String(20), comment='租金(万元)')
rent_money = db.Column(db.String(20), comment='租金范围(元/平米/天)')
wuye_money = db.Column(db.String(20), comment='物业费(元/平米/天)')
audit_status = db.Column(db.Integer, comment='审核状态 0为未审核;1为审核通过;2为提交;3为驳回;4未通过')
audit_message = db.Column(db.String(50), comment='审核附言')
build_info = db.Column(db.String(255), comment='楼宇介绍')
inside_picture_url = db.Column(db.String(255), comment='内部照片url')
outer_picture_url = db.Column(db.String(255), comment='外部照片url')
price_url = db.Column(db.String(255), comment='平面图url')
car_space_num = db.Column(db.Integer, comment='车位数(个,填写整数)')
lift_num = db.Column(db.Integer, comment='电梯数(部,填写整数)')
rentout_status = db.Column(db.String(20), comment='出租状态')
linkman = db.Column(db.String(20), comment='联系人')
link_mobile = db.Column(db.String(20), comment='联系方式')
build_area = db.Column(db.String(20), comment='建筑面积(㎡)')
empty_area = db.Column(db.String(20), comment='闲置面积(㎡)')
build_structure = db.Column(db.String(20), comment='建筑结构')
owner = db.Column(db.String(20), comment='权属人')
attract_status = db.Column(db.String(20), comment='拟招引状态')
attract_industry_status = db.Column(db.String(20), comment='招引业态')
cooperation_model = db.Column(db.String(20), comment='合作模式')
attract_advantage = db.Column(db.String(255), comment='招商优势')
policy = db.Column(db.String(255), comment='优惠政策')
# settled_company = db.Column(db.String(255), comment='入住企业名称(多个,列表形式,顿号分隔)')
# surround_facility = db.Column(db.String(255), comment='周边配套(多个,列表形式,顿号分隔)')
# education_name = db.Column(db.String(255), comment='教育机构名称(多个,列表形式,顿号分隔)')
# medical_name = db.Column(db.String(255), comment='医疗设施名称(多个,列表形式,顿号分隔)')
# park_name = db.Column(db.String(255), comment='大型公园名称(多个,列表形式,顿号分隔)')
# shangfu_center = db.Column(db.String(255), comment='商服中心(多个,列表形式,顿号分隔)')
# administration_center = db.Column(db.String(255), comment='行政中心(多个,列表形式,顿号分隔)')
# transportation = db.Column(db.String(255), comment='交通设施(多个,列表形式,顿号分隔)')
# 载体资源库-数据填报-土地详情表
class CarrierLand(db.Model):
__tablename_ = "carrier_land"
__table_args__ = ({'comment': '载体资源库-土地详情表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
district_name = db.Column(db.String(50), comment='区域名称')
land_name = db.Column(db.String(50), comment='土地名称')
industry_name = db.Column(db.String(255), comment='产业名称')
land_nature = db.Column(db.String(20), comment='土地性质)')
land_nature_id = db.Column(db.Integer, comment='土地性质id(1:农用地;2:商业用地;3:建设用地;4:旅游用地;5:居民用地。)')
detail_address = db.Column(db.String(20), comment='详细地址')
lng = db.Column(db.String(50), comment='经度')
lat = db.Column(db.String(50), comment='维度')
total_area = db.Column(db.String(20), comment='总面积(㎡)')
total_area_id = db.Column(db.Integer,
comment='总面积范围id(1:0-500㎡;2:500-1000㎡;3:1000-2000㎡;4:2000-5000㎡;5:5000-10000㎡)')
industry_type = db.Column(db.String(20), comment='产业类型')
jing_area = db.Column(db.String(20), comment='净面积(㎡)')
transfer_year = db.Column(db.String(20), comment='出让年限(年)')
transfer_year_id = db.Column(db.Integer, comment='出让年限范围id(1:0-5年;2:5-10年;3:10-15年;4:15-20年;5:20年以上)')
land_code = db.Column(db.String(50), comment='土地编码')
upload_time = db.Column(db.DateTime, default='', comment='数据上传时间')
upload_people = db.Column(db.String(20), comment='数据上传人名字')
upload_people_id = db.Column(db.String(20), comment='数据上传人用户id')
upload_people_role_id = db.Column(db.String(20), comment='数据上传人权限id')
upload_people_belong = db.Column(db.String(100), comment='数据上传人所属区县、机构、部门')
fix_time = db.Column(db.DateTime, default='', comment='数据修改时间')
fix_people = db.Column(db.String(20), comment='数据修改人名字')
land_status = db.Column(db.Integer, comment='土地状态 0为闲置;1为占用')
audit_status = db.Column(db.Integer, comment='审核状态 0为未审核;1为审核通过;2为提交;3为驳回;4未通过')
audit_message = db.Column(db.String(50), comment='审核附言')
linkman = db.Column(db.String(20), comment='联系人')
link_mobile = db.Column(db.String(20), comment='联系方式')
land_info = db.Column(db.String(255), comment='土地介绍')
inside_picture_url = db.Column(db.String(255), comment='内部照片url')
outer_picture_url = db.Column(db.String(255), comment='外部照片url')
plot_ratio = db.Column(db.String(20), comment='容积率')
sales_price = db.Column(db.String(20), comment='销售均价(毛坯)(万元)')
max_sales_price = db.Column(db.String(20), comment='最高销售单价(万元)')
max_car_space_price = db.Column(db.String(20), comment='车位最高销售单价')
plan_target = db.Column(db.String(20), comment='规划指标')
plan_condition = db.Column(db.String(20), comment='规划条件')
price_url = db.Column(db.String(255), comment='规划图url')
surround_facility = db.Column(db.String(255), comment='周边配套(多个,列表形式,顿号分隔)')
education_name = db.Column(db.String(255), comment='教育机构名称(多个,列表形式,顿号分隔)')
medical_name = db.Column(db.String(255), comment='医疗设施名称(多个,列表形式,顿号分隔)')
park_name = db.Column(db.String(255), comment='大型公园名称(多个,列表形式,顿号分隔)')
shangfu_center = db.Column(db.String(255), comment='商服中心(多个,列表形式,顿号分隔)')
administration_center = db.Column(db.String(255), comment='行政中心(多个,列表形式,顿号分隔)')
policy = db.Column(db.String(255), comment='相关政策(多个,列表形式,顿号分隔)')
# 载体资源库-数据填报-厂房详情表
class CarrierFactory(db.Model):
__tablename_ = "carrier_factory"
__table_args__ = ({'comment': '载体资源库-厂房详情表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
district_name = db.Column(db.String(50), comment='区域名称')
factory_name = db.Column(db.String(50), comment='厂房名称')
# is_standard = db.Column(db.Integer, comment='是否为标准化厂房(是1否0)')
# rent_status = db.Column(db.Integer, comment='是否对外租赁(是1否0)')
is_standard = db.Column(db.String(10), comment='是否为标准化厂房(是或否)')
rent_status = db.Column(db.String(10), comment='是否对外租赁(是或否)')
# rent_money = db.Column(db.String(20), comment='租金(万元)')
rent_money = db.Column(db.String(20), comment='租金范围(元/平米/天)')
detail_address = db.Column(db.String(20), comment='详细地址')
factory_area = db.Column(db.String(20), comment='建筑面积(㎡)')
cover_land_area = db.Column(db.String(20), comment='占地面积(㎡)')
cover_land_area_id = db.Column(db.Integer,
comment='占地面积范围id(1:0-500㎡;2:500-1000㎡;3:1000-2000㎡;4:2000-5000㎡;5:5000-10000㎡)')
industry_name = db.Column(db.String(255), comment='产业名称')
property_type = db.Column(db.String(50), comment='产权类型')
construction_time = db.Column(db.String(20), default='', comment='建设时间(例如:2022年)')
upload_time = db.Column(db.DateTime, default='', comment='数据上传时间')
upload_people = db.Column(db.String(20), comment='数据上传人名字')
upload_people_id = db.Column(db.String(20), comment='数据上传人用户id')
upload_people_role_id = db.Column(db.String(20), comment='数据上传人权限id')
upload_people_belong = db.Column(db.String(100), comment='数据上传人所属区县、机构、部门')
fix_time = db.Column(db.DateTime, default='', comment='数据修改时间')
fix_people = db.Column(db.String(20), comment='数据修改人名字')
factory_status = db.Column(db.String(50), comment='厂房状态')
audit_status = db.Column(db.String(20), comment='审核状态 0为未审核;1为审核通过;2为提交;3为驳回;4未通过;')
audit_message = db.Column(db.String(50), comment='审核附言')
lng = db.Column(db.String(50), comment='经度')
lat = db.Column(db.String(50), comment='维度')
factory_info = db.Column(db.String(255), comment='厂房介绍')
inside_picture_url = db.Column(db.String(255), comment='内部照片url')
outer_picture_url = db.Column(db.String(255), comment='外部照片url')
price_url = db.Column(db.String(255), comment='平面图url')
# owner = db.Column(db.String(20), comment='权属人')
empty_area = db.Column(db.String(20), comment='闲置面积(㎡)')
factory_structure = db.Column(db.String(20), comment='建筑结构')
width = db.Column(db.String(20), comment='跨度(米)')
high = db.Column(db.String(20), comment='层高(米)')
bearing = db.Column(db.String(20), comment='承重(500kg/m2)')
linkman = db.Column(db.String(20), comment='联系人')
link_mobile = db.Column(db.String(20), comment='联系方式')
# is_electric = db.Column(db.Integer, comment='是否已通电(是1否0,填写整数)')
# is_water = db.Column(db.Integer, comment='是否已通水(是1否0,填写整数)')
# is_warm = db.Column(db.Integer, comment='是否已通暖(是1否0,填写整数)')
# is_gas = db.Column(db.Integer, comment='是否已通燃气(是1否0,填写整数)')
# is_network = db.Column(db.Integer, comment='是否已通网络(是1否0,填写整数)')
# is_lift = db.Column(db.Integer, comment='是否有电梯(是1否0)')
is_electric = db.Column(db.String(10), comment='是否已通电(是或否)')
is_water = db.Column(db.String(10), comment='是否已通水(是或否)')
is_warm = db.Column(db.String(10), comment='是否已通暖(是或否)')
is_gas = db.Column(db.String(10), comment='是否已通燃气(是或否)')
is_network = db.Column(db.String(10), comment='是否已通网络(是或否)')
is_lift = db.Column(db.String(10), comment='是否有电梯(是或否)')
lift_num = db.Column(db.Integer, comment='电梯数量(部,填写整数)')
is_car_space = db.Column(db.Integer, comment='是否有车位(是1否0)')
# car_space_num = db.Column(db.Integer, comment='车位数(个,填写整数)')
layer_num = db.Column(db.Integer, comment='总层数(层,填写整数)')
attract_status = db.Column(db.String(20), comment='拟招引状态')
cooperation_model = db.Column(db.String(20), comment='合作模式')
attract_advantage = db.Column(db.String(255), comment='招商优势')
policy = db.Column(db.String(255), comment='相关政策')
# settled_company = db.Column(db.String(255), comment='入住企业名称(多个,列表形式,顿号分隔)')
# surround_facility = db.Column(db.String(255), comment='周边配套(多个,列表形式,顿号分隔)')
# education_name = db.Column(db.String(255), comment='教育机构名称(多个,列表形式,顿号分隔)')
# medical_name = db.Column(db.String(255), comment='医疗设施名称(多个,列表形式,顿号分隔)')
# park_name = db.Column(db.String(255), comment='大型公园名称(多个,列表形式,顿号分隔)')
# shangfu_center = db.Column(db.String(255), comment='商服中心(多个,列表形式,顿号分隔)')
# administration_center = db.Column(db.String(255), comment='行政中心(多个,列表形式,顿号分隔)')
# transportation = db.Column(db.String(255), comment='交通设施(多个,列表形式,顿号分隔)')
# 记录操作日志得数据表
class OperationLog(db.Model):
__tablename_ = "operation_log"
__table_args__ = ({'comment': '载体资源库-记录操作日志的数据表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
operation_time = db.Column(db.DateTime, default='', comment='操作时间')
operation_people = db.Column(db.String(20), comment='操作人名字')
operation_people_id = db.Column(db.String(20), comment='操作人id')
operation_people_belong = db.Column(db.String(100), comment='操作人所属区县、机构、部门')
operation_mobile = db.Column(db.String(20), comment='操作人电话')
operation_message = db.Column(db.String(255), comment='操作信息')
section = db.Column(db.String(20), comment='操作人职务')
remark = db.Column(db.String(20), comment='备注:是或否(是否是每月二十五号前进行提报导入)')
action = db.Column(db.String(20), comment='记录"导入"的动作用于备注(每月十五号前是否进行提报导入)的是和否')
read_type = db.Column(db.Integer, comment='消息类型(用于消息提醒) 0未读,1已读,3已读状态一天后转为历史消息')
time = db.Column(db.DateTime, default='', comment='转为已读状态的时间(用于消息提醒)')
from flask import current_app, request, jsonify
from sqlalchemy import or_
from apps.view_atlas import api_atlas
from apps.util import login_required
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
......@@ -74,7 +76,8 @@ def find_up_thr(name_query, relation):
@api_atlas.route('/industry/cluster', methods=['GET'])
def get_cluster():
try:
cluster_obj = Industry.query.filter_by(fid=0).all()
# cluster_obj = Industry.query.filter_by(fid=0).all()
cluster_obj = Industry.query.all()
data = {
"cluster": [
......@@ -189,7 +192,6 @@ def industry_enterprise():
return jsonify(code=RET.DBERR, msg="数据库查询错误")
# 点击产业创新资源联动显示 innovation resource
@api_atlas.route('/innovate/resource', methods=['POST'])
def industry_resource():
......@@ -414,6 +416,12 @@ def industry_policy():
page = req_dict.get("page") # 分页页码
perpage = req_dict.get("perpage") # 分页大小
policy_type = req_dict.get("policy_type") # 政策类型,全国、国务院
policy_year = req_dict.get("policy_year") # 政策年份
policy_name = req_dict.get("policy_name") # 政策名称
# 校验参数完整性
if not all([page, perpage]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
......@@ -421,56 +429,108 @@ def industry_policy():
indu_policy = ''
size = ''
name = Industry.query.filter_by(nid=inid).first().oname # 获取导航对应的真名
# name = '煤层气'
print(name)
if industry_level == 1:
if policy_level == 1: # 国家级
indu_policy = InduPolicy.query.filter(InduPolicy.navigator.like("%{}%".format(name)), InduPolicy.level=="国家级")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigator.like("%{}%".format(name)),
InduPolicy.level == "国家级",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name))
)
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
if policy_level == 2: # 省级
indu_policy = InduPolicy.query.filter(InduPolicy.navigator.like("%{}%".format(name)), InduPolicy.level=="省级")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigator.like("%{}%".format(name)),
InduPolicy.level == "省级",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name)))
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
if policy_level == 3: # 市级
indu_policy = InduPolicy.query.filter(InduPolicy.navigator.like("%{}%".format(name)), InduPolicy.level=="市级")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigator.like("%{}%".format(name)),
InduPolicy.level == "市级",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name)))
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
if policy_level == 4: # 区县
indu_policy = InduPolicy.query.filter(InduPolicy.navigator.like("%{}%".format(name)), InduPolicy.level=="区县")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigator.like("%{}%".format(name)),
InduPolicy.level == "区县",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name)))
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
if policy_level == 5: # 开发区
indu_policy = InduPolicy.query.filter(InduPolicy.navigator.like("%{}%".format(name)), InduPolicy.level=="开发区")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigator.like("%{}%".format(name)),
InduPolicy.level == "开发区",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name)))
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
if industry_level == 2:
if policy_level == 1: # 国家级
indu_policy = InduPolicy.query.filter(InduPolicy.navigat.like("%{}%".format(name)), InduPolicy.level=="国家级")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigat.like("%{}%".format(name)),
InduPolicy.level == "国家级",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name)))
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
if policy_level == 2: # 省级
indu_policy = InduPolicy.query.filter(InduPolicy.navigat.like("%{}%".format(name)), InduPolicy.level=="省级")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigat.like("%{}%".format(name)),
InduPolicy.level == "省级",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name)))
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
if policy_level == 3: # 市级
indu_policy = InduPolicy.query.filter(InduPolicy.navigat.like("%{}%".format(name)), InduPolicy.level=="市级")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigat.like("%{}%".format(name)),
InduPolicy.level == "市级",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name)))
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
if policy_level == 4: # 区县
indu_policy = InduPolicy.query.filter(InduPolicy.navigat.like("%{}%".format(name)), InduPolicy.level=="区县")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigat.like("%{}%".format(name)),
InduPolicy.level == "区县",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name)))
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
if policy_level == 5: # 开发区
indu_policy = InduPolicy.query.filter(InduPolicy.navigat.like("%{}%".format(name)), InduPolicy.level=="开发区")
indu_policy = InduPolicy.query.filter(
InduPolicy.navigat.like("%{}%".format(name)),
InduPolicy.level == "开发区",
InduPolicy.org == policy_type if policy_type == '国务院' else text(''),
InduPolicy.year == policy_year if policy_year else text(''),
InduPolicy.name.like('%{}%'.format(policy_name)))
size = indu_policy.count() # 分页总数
# indu_policy = indu_policy.
indu_policy = indu_policy.order_by(InduPolicy.pubdate.desc()).paginate(page, perpage).items
......@@ -678,3 +738,128 @@ def get_zaiti_detail_data():
return jsonify(code=RET.OK, msg='厂房详情查询成功!', data=data)
except Exception as e:
current_app.logger.error(e)
"""以下为202212月改版后需求"""
# 企业搜索
@api_atlas.route('/SearchEnterprises', methods=['POST'])
def search_enterprise():
req_dic = request.get_json()
entype = req_dic['entype']
aptitude = req_dic['aptitude'] # 资质
company_name = req_dic['company_name']
status = req_dic['status']
page = req_dic['page']
per_page = req_dic['per_page']
try:
company_obj = Company.query.filter(or_(
Company.entype == entype,
Company.company_name.like('%{}%'.format(company_name)),
Company.status == status,
Company.high_new == '1' if aptitude == '是否高新技术企业' else text(''),
Company.tbe == '1' if aptitude == '是否科技型中小企业' else text(''),
Company.quoted_company == '1' if aptitude == '是否上市企业' else text(''),
Company.sxmon == '1' if aptitude == '是否山西民营100强' else text(''),
Company.zjtg == '1' if aptitude == '是否为山西专精特新企业' else text(''),
Company.unicorn == '1' if aptitude == '独角兽企业' else text(''),
Company.dengl == '1' if aptitude == '瞪羚' else text(''),
Company.isfive == '1' if aptitude == '是否中国500强' else text(''),
Company.scale == '1' if aptitude == '规模以上企业' else text(''),
Company.serve == '1' if aptitude == '限额以上服务业' else text(''),
))
company_obj_list = company_obj.paginate(page, per_page).items
data = [{
"id": company_obj.id,
"company_name": company_obj.company_name,
"district": company_obj.district,
"entype": company_obj.entype,
"aptitude": ["是否高新技术企业" if company_obj.high_new == '1' else
"是否科技型中小企业" if company_obj.tbe == '1' else
"是否上市企业" if company_obj.quoted_company == '1' else
"是否山西民营100强" if company_obj.sxmon == '1' else
"是否为山西专精特新企业" if company_obj.zjtg == '1' else
"独角兽企业" if company_obj.unicorn == '1' else
"瞪羚" if company_obj.dengl == '1' else
"是否中国500强" if company_obj.isfive == '1' else
"规模以上企业" if company_obj.scale == '1' else
"限额以上服务业" if company_obj.serve == '1' else '']
} for company_obj in company_obj_list]
return jsonify(code=RET.OK, data=data, msg='查询成功。')
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg='查询出错!')
# # 产业链收藏
# @api_atlas.route('/IndustryCollect', methods=['POST'])
# def industry_collect():
# req_dic = request.get_json()
# industry_name = req_dic['industry_name']
# token = request.headers['token']
# try:
# user_obj = verify_token(token)
# user_id = user_obj.id
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.SESSIONERR, msg="用户信息校验失败,请重新登陆后尝试!")
#
# if not industry_name:
# return jsonify(code=RET.NODATA, msg="产业名称不能为空!")
#
# try:
# # 获取产业的fid
# industry_obj = Industry.query.filter_by(oname=industry_name).first()
# industry_id = industry_obj.id
#
# collect_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# collect_obj = IndustryCollect(
# industry_id=industry_id,
# user_id=user_id,
# collect_time=collect_time,
# industry_name=industry_name
# )
# db.session.add(collect_obj)
# db.session.commit()
# return jsonify(code=RET.OK, msg="收藏成功。")
# except Exception as e:
# db.session.rollback()
# current_app.logger.error(e)
# return jsonify(code=RET.SESSIONERR, msg="收藏失败!")
# 行业业收藏与取消
@api_atlas.route('/industry/collect', methods=['POST'])
@login_required
def indu_collect():
'''企业收藏与状态取消'''
token = request.headers["token"]
user = verify_token(token)
user_id = user.id # 用户id
req_dict = request.get_json()
_id = req_dict.get("id") # 二级行业id
collect = req_dict.get("collect") # 关注状态(1是,2否)
# 校验参数完整性
if not all([_id, collect]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
if collect == "2": # 未关注,我要关注
user = User.query.get(user_id)
indu = Industry.query.filter_by(nid=_id).first()
user.industry.append(indu)
db.session.commit()
return jsonify(code=RET.OK, msg="收藏成功", collect="1")
elif collect == "1": # 已关注,我要取关
user = User.query.get(user_id)
indu = Industry.query.filter_by(nid=_id).first()
user.industry.remove(indu)
db.session.commit()
return jsonify(code=RET.OK, msg="取消收藏", collect="2")
else:
return jsonify(code=RET.DATAERR, msg="参数异常")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误")
\ No newline at end of file
from sqlalchemy import func, desc, or_
from flask import current_app, request, jsonify
from apps.models import Induzone, Industry, CompanyIndustryPoint
from apps.models import Induzone, Industry, CompanyIndustryPoint, User
from apps.utils.response_code import RET
from apps.view_choose import api_address
# 获取某个行政区的全部园区信息
from apps.util import verify_token
@api_address.route("/DefaultAddress", methods=["POST"])
def default_address():
req_dict = request.get_json()
......@@ -137,3 +140,332 @@ def downlist(): # 一级二级行业分类
return jsonify(code=RET.DBERR, msg="数据库错误")
return jsonify(code=RET.OK, msg="查找成功", data=data)
"""以下为202212月改版后需求"""
# 搜索行政区公共方法
def global_region(key_words, district_name, page, per_page):
try:
if key_words:
carrier_obj = Induzone.query.filter(
and_(
Induzone.region.like('%{}%'.format(district_name)) if district_name else text(''),
# Induzone.navigat.like('%{}%'.format(industry_name)) if industry_name else text(''),
Induzone.id.in_([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
)).filter(
or_(
Induzone.region.like("%" + key_words + "%"),
Induzone.cluster.like("%" + key_words + "%"),
Induzone.navigat.like("%" + key_words + "%"),
Induzone.cate.like("%" + key_words + "%")
))
else:
carrier_obj = Induzone.query.filter(
and_(
Induzone.region.like('%{}%'.format(district_name)) if district_name else text(''),
# Induzone.navigat.like('%{}%'.format(industry_name)) if industry_name else text(''),
Induzone.id.in_([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
))
# region_obj_list = carrier_obj.order_by(Induzone.upload_time.desc()).paginate(page, per_page).items
region_obj_list = carrier_obj.paginate(page, per_page).items
# region_obj_list = carrier_obj.all()
carrier_size = len(region_obj_list)
if region_obj_list:
data_list = [{
"id": region_obj.id,
"carrier_type": '行政区',
"region_name": region_obj.name,
"cover_region_area": region_obj.area,
"gdp": region_obj.gdp,
"detail_address": region_obj.address, # 审核信息
"industry_name": region_obj.navigat,
"district_name": region_obj.region,
"lng": region_obj.lng,
"lat": region_obj.lat
} for region_obj in region_obj_list]
data = {"code": RET.OK, "data": {"data_list": data_list, "size": carrier_size, "msg": "行政区 数据获取成功!"}}
return data
else:
data = {"code": RET.DATAERR, "msg": "没有符合搜索条件的 行政区 数据!"}
return data
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
data = {"code": RET.DBERR, "msg": "行政区 查询数据库错误!"}
return data
# 厂房公共方法
def global_land(key_words, district_name, land_name, land_nature, industry_name, page, per_page):
try:
if key_words:
carrier_obj = CarrierLand.query.filter(
and_(CarrierLand.land_name.like('%{}%'.format(land_name)) if land_name else text(''),
CarrierLand.district_name.like('%{}%'.format(district_name)) if district_name else text(''),
CarrierLand.land_nature.like('%{}%'.format(land_nature)) if land_nature else text(''),
CarrierLand.industry_name.like('%{}%'.format(industry_name)) if industry_name else text(''),
CarrierLand.audit_status == 1
)).filter(
or_(CarrierLand.industry_name.like("%" + key_words + "%"),
CarrierLand.district_name.like("%" + key_words + "%"),
CarrierLand.land_name.like("%" + key_words + "%")
))
else:
carrier_obj = CarrierLand.query.filter(
and_(CarrierLand.land_name.like('%{}%'.format(land_name)) if land_name else text(''),
CarrierLand.district_name == district_name if district_name else text(''),
CarrierLand.land_nature == land_nature if land_nature else text(''),
CarrierLand.industry_name.like('%{}%'.format(industry_name)) if industry_name else text(''),
CarrierLand.audit_status == 1
))
land_obj_list = carrier_obj.order_by(CarrierLand.upload_time.desc()).paginate(page, per_page).items
carrier_size = len(land_obj_list)
if land_obj_list:
data_list = [{
"id": land_obj.id,
"carrier_type": "土地",
"land_name": land_obj.land_name,
"land_nature": land_obj.land_nature,
"total_area": land_obj.total_area,
"jing_area": land_obj.jing_area, # 审核信息
"district_name": land_obj.district_name,
"industry_name": land_obj.industry_name,
"lng": land_obj.lng,
"lat": land_obj.lat
} for land_obj in land_obj_list]
data = {"code": RET.OK, "data": {"data_list": data_list, "size": carrier_size, "msg": "土地 数据获取成功!"}}
return data
else:
data = {"code": RET.DATAERR, "msg": "没有符合搜索条件的 土地 数据!"}
return data
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
data = {"code": RET.DBERR, "msg": "土地 查询数据库错误!"}
return data
# 楼宇公共方法
def global_factory(key_words, district_name, factory_name, industry_name, page, per_page):
try:
if key_words:
carrier_obj = CarrierFactory.query.filter(
and_(CarrierFactory.factory_name.like('%{}%'.format(factory_name)) if factory_name else text(''),
CarrierFactory.district_name.like('%{}%'.format(district_name)) if district_name else text(''),
CarrierFactory.attract_status.like('%{}%'.format(industry_name)) if industry_name else text(''),
CarrierFactory.audit_status == 1
)).filter(
or_(CarrierFactory.attract_status.like("%" + key_words + "%"),
CarrierFactory.district_name.like("%" + key_words + "%"),
CarrierFactory.factory_name.like("%" + key_words + "%")
))
carrier_size = carrier_obj.count()
else:
carrier_obj = CarrierFactory.query.filter(
and_(CarrierFactory.factory_name.like('%{}%'.format(factory_name)) if factory_name else text(''),
CarrierFactory.district_name == district_name if district_name else text(''),
CarrierFactory.attract_status.like('%{}%'.format(industry_name)) if industry_name else text(''),
CarrierFactory.audit_status == 1
))
carrier_size = carrier_obj.count()
factory_obj_list = carrier_obj.order_by(CarrierFactory.upload_time.desc()).paginate(page, per_page).items
if factory_obj_list:
data_list = [{
"id": factory_obj.id,
"carrier_type": "标准厂房",
"factory_name": factory_obj.factory_name,
"factory_area": factory_obj.factory_area,
"district_name": factory_obj.district_name, # 审核信息
"detail_address": factory_obj.detail_address,
"industry_name": factory_obj.industry_name,
"is_standard": factory_obj.is_standard,
"attract_status": factory_obj.attract_status,
"lng": factory_obj.lng,
"lat": factory_obj.lat
} for factory_obj in factory_obj_list]
data = {"code": RET.OK, "data": {"data_list": data_list, "size": carrier_size, "msg": "厂房 数据获取成功!"}}
return data
else:
data = {"code": RET.DATAERR, "msg": "没有符合搜索条件的 厂房 数据!"}
return data
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
data = {"code": RET.DBERR, "msg": "厂房 查询数据库错误!"}
return data
# 土地公共方法
def global_build(key_words, district_name, build_name, industry_name, build_type, page, per_page):
try:
if key_words:
carrier_obj = CarrierBuild.query.filter(
and_(CarrierBuild.build_name.like('%{}%'.format(build_name)) if build_name else text(''),
CarrierBuild.district_name.like('%{}%'.format(district_name)) if district_name else text(''),
CarrierBuild.build_type.like('%{}%'.format(build_type)) if build_type else text(''),
CarrierBuild.attract_status.like('%{}%'.format(industry_name)) if industry_name else text(''),
CarrierBuild.audit_status == 1
)).filter(
or_(CarrierBuild.attract_status.like("%" + key_words + "%"),
CarrierBuild.district_name.like("%" + key_words + "%"),
CarrierBuild.build_name.like("%" + key_words + "%"),
CarrierBuild.build_type.like("%" + key_words + "%")
))
else:
carrier_obj = CarrierBuild.query.filter(
and_(CarrierBuild.build_name.like('%{}%'.format(build_name)) if build_name else text(''),
CarrierBuild.district_name.like('%{}%'.format(district_name)) if district_name else text(''),
CarrierBuild.build_type.like('%{}%'.format(build_type)) if build_type else text(''),
CarrierBuild.attract_status.like('%{}%'.format(industry_name)) if industry_name else text(''),
CarrierBuild.audit_status == 1
))
build_obj_list = carrier_obj.order_by(CarrierBuild.upload_time.desc()).paginate(page, per_page).items
carrier_size = len(build_obj_list)
if build_obj_list:
data_list = [{
"id": build_obj.id,
"carrier_type": "商业楼宇",
"district_name": build_obj.district_name,
"build_name": build_obj.build_name,
"detail_address": build_obj.detail_address, # 审核信息
"industry_name": build_obj.industry_name,
"layer_num": build_obj.layer_num,
"build_type": build_obj.build_type,
"attract_status": build_obj.attract_status,
"lng": build_obj.lng,
"lat": build_obj.lat
} for build_obj in build_obj_list]
data = {"code": RET.OK, "data": {"data_list": data_list, "size": carrier_size, "msg": "楼宇 数据获取成功!"}}
return data
else:
data = {"code": RET.DATAERR, "msg": "没有符合搜索条件的 楼宇 数据!"}
return data
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
data = {"code": RET.DBERR, "msg": "楼宇 查询数据库错误!"}
return data
def get_district_name(token, industry_name):
try:
user = verify_token(token)
user_id = user.id # 用户id
# 查出做此操作的用户名
user_obj = User.query.get(user_id)
district_name1 = user_obj.district_name # 所属区县
if district_name1 == '太原市':
return industry_name
else:
return district_name1
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="token过期,请重新登录!")
# 土地条件搜索功能
@api_address.route("/SearchLand", methods=["POST"])
def search_land():
req_dict = request.get_json()
key_words = req_dict['key_words']
district_name = req_dict['district_name']
land_name = req_dict['land_name']
land_nature = req_dict['land_nature']
industry_name = req_dict['industry_name']
# total_area_id = req_dict['total_area_id']
# transfer_year_id = req_dict['transfer_year_id']
page = req_dict.get("page") # 页码
per_page = int(req_dict.get("per_page")) # 每页大小
token = request.headers['token']
district_name = get_district_name(token, district_name)
data = global_land(key_words, district_name, land_name, land_nature, industry_name, page, per_page)
return jsonify(data)
# 厂房条件搜索功能
@api_address.route("/SearchFactory", methods=["POST"])
def search_factory():
req_dict = request.get_json()
key_words = req_dict['key_words'] # 关键字
district_name = req_dict['district_name'] # 区域名称
factory_name = req_dict['factory_name'] # 厂房名称
industry_name = req_dict['industry_name'] # 产业类型
page = req_dict.get("page") # 页码
per_page = int(req_dict.get("per_page")) # 每页大小
token = request.headers['token']
district_name = get_district_name(token, district_name)
data = global_factory(key_words, district_name, factory_name, industry_name, page, per_page)
return jsonify(data)
# 楼宇条件搜索功能
@api_address.route("/SearchBuild", methods=["POST"])
def search_build():
req_dict = request.get_json()
key_words = req_dict['key_words'] # 关键字
district_name = req_dict['district_name'] # 区域名称
build_name = req_dict['build_name'] # 楼宇名称
industry_name = req_dict['industry_name'] # 产业类型(名称)
build_type = req_dict['build_type'] # 楼宇类型id(商铺/写字楼)
page = req_dict.get("page") # 页码
per_page = int(req_dict.get("per_page")) # 每页大小
token = request.headers['token']
district_name = get_district_name(token, district_name)
data = global_build(key_words, district_name, build_name, industry_name, build_type, page, per_page)
return jsonify(data)
# 全部搜索功能
@api_address.route("/SearchAll", methods=["POST"])
def search_all():
req_dict = request.get_json()
key_words = req_dict['key_words'] # 关键字
carrier_type_id = req_dict['carrier_type_id'] # 载体类型id(1:园区;2:土地;3:楼宇;4:厂房。)
district_name = req_dict['district_name'] # 区域名称
industry_name = req_dict['industry_name'] # 产业类型名称
page = req_dict.get("page") # 页码
per_page = int(req_dict.get("per_page")) # 每页大小
token = request.headers['token']
district_name = get_district_name(token, district_name)
data_list = []
if carrier_type_id == 0:
# 行政区
if not industry_name:
region_data = global_region(key_words, district_name,
page, per_page)
data_list.append(region_data)
# 土地
land_data = global_land(key_words, district_name, '', '', industry_name, page, per_page)
data_list.append(land_data)
# 厂房
factory_data = global_factory(key_words, district_name, '', industry_name, page, per_page)
data_list.append(factory_data)
# 楼宇
build_data = global_build(key_words, district_name, '', industry_name, '', page, per_page)
data_list.append(build_data)
return jsonify(code=RET.OK, data=data_list, msg='全部数据查询成功!')
if carrier_type_id == 1: # 土地
data = global_land(key_words, district_name, '', '', industry_name, page, per_page)
return jsonify(data)
if carrier_type_id == 2: # 厂房
data = global_factory(key_words, district_name, '', industry_name, page, per_page)
return jsonify(data)
if carrier_type_id == 3: # 楼宇
data = global_build(key_words, district_name, '', industry_name, '', page, per_page)
return jsonify(data)
else:
data = {"code": RET.PARAMERR, "msg": '参数错误!'}
return jsonify(data)
......@@ -588,10 +588,6 @@ def newList():
return jsonify(code=RET.DBERR, msg="数据库错误")
# # 产品描述及推荐
# @api_radar.route('/randerSelect', methods=['GET'])
# # @login_required
......@@ -981,3 +977,56 @@ def newList():
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.DBERR, msg="数据库查询错误")
"""以下为202212月改版后需求新增"""
# 企业搜索
@api_radar.route('/SearchEnterprises', methods=['POST'])
def search_enterprise():
req_dic = request.get_json()
entype = req_dic['entype']
aptitude = req_dic['aptitude'] # 资质
company_name = req_dic['company_name']
status = req_dic['status']
page = req_dic['page']
per_page = req_dic['per_page']
try:
enterprise_obj = Enterprise.query.filter(or_(
Enterprise.entype == entype,
Enterprise.company_name.like('%{}%'.format(company_name)),
Enterprise.status == status,
Enterprise.high_new == '1' if aptitude == '是否高新技术企业' else text(''),
Enterprise.tbe == '1' if aptitude == '是否科技型中小企业' else text(''),
Enterprise.quoted_company == '1' if aptitude == '是否上市企业' else text(''),
Enterprise.sxmon == '1' if aptitude == '是否山西民营100强' else text(''),
Enterprise.zjtg == '1' if aptitude == '是否为山西专精特新企业' else text(''),
Enterprise.unicorn == '1' if aptitude == '独角兽企业' else text(''),
Enterprise.dengl == '1' if aptitude == '瞪羚' else text(''),
Enterprise.isfive == '1' if aptitude == '是否中国500强' else text(''),
Enterprise.scale == '1' if aptitude == '规模以上企业' else text(''),
Enterprise.serve == '1' if aptitude == '限额以上服务业' else text(''),
))
enterprise_obj_list = enterprise_obj.paginate(page, per_page).items
data = [{
"id": enterprise_obj.id,
"enterprise_name": enterprise_obj.enterprise_name,
"district": enterprise_obj.district,
"entype": enterprise_obj.entype,
"aptitude": ["是否高新技术企业" if enterprise_obj.high_new == '1' else
"是否科技型中小企业" if enterprise_obj.tbe == '1' else
"是否上市企业" if enterprise_obj.quoted_company == '1' else
"是否山西民营100强" if enterprise_obj.sxmon == '1' else
"是否为山西专精特新企业" if enterprise_obj.zjtg == '1' else
"独角兽企业" if enterprise_obj.unicorn == '1' else
"瞪羚" if enterprise_obj.dengl == '1' else
"是否中国500强" if enterprise_obj.isfive == '1' else
"规模以上企业" if enterprise_obj.scale == '1' else
"限额以上服务业" if enterprise_obj.serve == '1' else '']
} for enterprise_obj in enterprise_obj_list]
return jsonify(code=RET.OK, data=data, msg='查询成功。')
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg='查询出错!')
\ No newline at end of file
......@@ -77,6 +77,81 @@ def send_phone_code():
return jsonify(code=RET.THIRDERR, msg="发送失败")
# 后台用户账号密码
@api_user.route("/backLogin", methods=["POST"])
def back_login():
'''
用户密码登录
:return:
'''
# 参数获取与校验
req_dict = request.get_json()
# 解密
param = req_dict.get("param") # 揭秘参数
req_dict = json.loads(decrypt(param))
# name = req_dict.get('name')
name = req_dict.get('mobile')
password = req_dict.get('password')
# 校验参数完整性
if not all([name, password]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
# 判断错误次数是否超过限制,如果超过则10分钟内禁止此IP登录
user_ip = request.remote_addr
# print("IP地址:", user_ip)
try:
access_nums = redis_store.get('access_nums_{}'.format(user_ip))
except Exception as e:
current_app.logger.error(e)
else:
if access_nums:
if int(access_nums.decode()) >= constants.LOGIN_ERROR_TIMES:
return jsonify(code=RET.REQERR, msg="错误次数过多,请稍候重试")
# 验证账户与密码
try:
user = Bstage.query.filter_by(name=name).first()
# 用于记录日志
# section, user_name, operation_mobile, role_id, belong_unit = get_user_info(user)
name = user.name
role = user.role
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="获取用户信息失败")
# 将用户名与密码验证放置在一处,若失败返回提示信息并记录次数
# if (not user) or (not user.check_password(password)):
# # if (not user) or (password != "123"):
# try:
# redis_store.incr('access_nums_{}'.format(user_ip))
# redis_store.expire('access_nums_{}'.format(user_ip), constants.LOGIN_ERROR_FORBID_TIME)
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.DBERR, msg="密码错误")
# 若成功保存登录状态和管理员的角色id
token = create_token(user.id)
time = datetime.now()
current_app.logger.error(
'++++++++++++++++++++++++++++登录日志>>>{}:{}通过后台登录成功了!+++++++++++++++++++++++=++'.format(time, name))
# 记录日志
role_name = ''
if role == 1:
role_name = '超级管理员'
if role == 2:
role_name = '系统运维员'
# operation_message = "{}通过后台登录成功了!".format(role_name)
# upload_time = datetime.now()
# log = OperationLog(read_type=0, operation_people_id=user.id, operation_time=upload_time, operation_people=name,
# section=role_name,
# operation_message=operation_message, action='使用密码登录后台管理系统成功')
# db.session.add(log)
# db.session.commit()
return jsonify(code=RET.OK, msg="登录成功", token=token, flag=3)
# 手机验证码登录
@api_user.route("/LoginBySms", methods=["POST"])
def login_bysms():
......@@ -357,9 +432,7 @@ def binding():
return jsonify(code=RET.OK, msg="绑定成功,登录成功", data={"token": token, "flag": user.flag})
"""
用户中心
"""
"""用户中心"""
# 用户中心-账号设置-添加账号(注册)
......@@ -378,11 +451,11 @@ def register():
# age = req_dict.get("age") # 年龄
# sex = req_dict.get("sex") # 性别
# sms_code = req_dict.get("sms_code") # 验证码
is_organization_manager = req_dict.get("is_organization_manager") # 是否是机构负责人
charge_organization = req_dict.get("charge_organization") # 是机构负责人的话,所负责的机构
# is_organization_manager = req_dict.get("is_organization_manager") # 是否是机构负责人
# charge_organization = req_dict.get("charge_organization") # 是机构负责人的话,所负责的机构
belong_department = req_dict.get("belong_department") # 所属部门(政府)
is_department_manager = req_dict.get("is_department_manager") # 是否是部门负责人
# is_department_manager = req_dict.get("is_department_manager") # 是否是部门负责人
# charge_department = req_dict.get("charge_department") # 是部门负责人的话,所负责的部门
position = req_dict.get("position") # 职务
......@@ -390,39 +463,39 @@ def register():
name = req_dict.get("name") # 用户名
password = req_dict.get("password") # 密码
password_again = req_dict.get("password_again") # 密码2
sms_code = req_dict.get("sms_code") # 验证码
# 校验参数完整性
if not all([real_name, mobile, name, belong_organization, is_organization_manager, belong_department,
is_department_manager,
position, password, password_again]):
if not all([real_name, mobile, name, belong_organization, belong_department,
sms_code, position, password, password_again]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
# 校验手机号格式
if not re.match(r"1[23456789]\d{9}$", mobile):
return jsonify(code=RET.PARAMERR, msg="手机号格式错误")
# # 获取短信验证码
# try:
# real_sms_code = redis_store.get('sms_code_{}'.format(mobile)).decode()
# # real_sms_code = "123456"
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.NODATA, msg="短信验证码失效")
#
# # 判断短信验证码是否失效
# if not redis_store:
# return jsonify(code=RET.NODATA, msg="短信验证码失效")
# 获取短信验证码
try:
real_sms_code = redis_store.get('sms_code_{}'.format(mobile)).decode()
# real_sms_code = "123456"
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.NODATA, msg="短信验证码失效")
# # 删除redis中的短信验证码,防止重复校验
# try:
# redis_store.delete("sms_code_{}".format(mobile))
# except Exception as e:
# current_app.logger.error(e)
#
# # 判断用户填写短信验证码是否一致
# if real_sms_code != sms_code:
# # if "123456" != sms_code:
# return jsonify(code=RET.DATAERR, msg="短信验证码错误")
# 判断短信验证码是否失效
if not redis_store:
return jsonify(code=RET.NODATA, msg="短信验证码失效")
# 删除redis中的短信验证码,防止重复校验
try:
redis_store.delete("sms_code_{}".format(mobile))
except Exception as e:
current_app.logger.error(e)
# 判断用户填写短信验证码是否一致
if real_sms_code != sms_code:
# if "123456" != sms_code:
return jsonify(code=RET.DATAERR, msg="短信验证码错误")
# 用户名唯一(字母开头,长度4-15)
try:
......@@ -471,11 +544,11 @@ def register():
ouser.real_name = real_name # 姓名
ouser.mobile = mobile # 联系电话
ouser.belong_organization = belong_organization # 所属机构
ouser.is_organization_manager = is_organization_manager # 是否为机构负责人
ouser.charge_organization = charge_organization # 是机构负责人的话,所负责的机构
# ouser.is_organization_manager = is_organization_manager # 是否为机构负责人
# ouser.charge_organization = charge_organization # 是机构负责人的话,所负责的机构
ouser.belong_department = belong_department # 所属部门
ouser.is_department_manager = is_department_manager # 是否为部门负责人
# ouser.is_department_manager = is_department_manager # 是否为部门负责人
# ouser.charge_department = charge_department # 是部门负责人的话,所负责的部门
ouser.position = position # 职务
......@@ -487,10 +560,10 @@ def register():
user = User(real_name=real_name,
mobile=mobile,
belong_organization=belong_organization,
is_organization_manager=is_organization_manager,
charge_organization=charge_organization,
# is_organization_manager=is_organization_manager,
# charge_organization=charge_organization,
belong_department=belong_department,
is_department_manager=is_department_manager,
# is_department_manager=is_department_manager,
# charge_department=charge_department,
position=position,
name=name,
......@@ -542,46 +615,55 @@ def detail():
# 用户中心-个人中心确认修改
@api_user.route("/FixUserInfo", methods=["POST"])
@login_required
def fix_user_info():
token = request.headers["token"]
user = verify_token(token)
user_id = user.id
req_dict = request.get_json()
real_name = req_dict.get("real_name")
age = req_dict.get("age")
sex = req_dict.get("sex")
name = req_dict.get("name")
position = req_dict.get("position")
try:
user_information = User.query.get(user_id)
# 姓名
if real_name:
user_information.real_name = real_name
# 年龄
if age:
user_information.age = age
# 性别 1 - 男 2 - 女
if sex:
user_information.sex = sex
# 职务
if position:
user_information.position = position
# 用户名
if name:
user = User.query.filter_by(name=name).filter(User.id != user_id).first()
if user:
return jsonify(code=RET.DATAEXIST, msg="用户名已经存在")
user_information.name = name
db.session.commit()
except Exception as e:
db.session.rollback() # 回滚数据库
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
return jsonify(code=RET.OK, msg="修改成功")
# @api_user.route("/FixUserInfo", methods=["POST"])
# @login_required
# def fix_user_info():
# token = request.headers["token"]
# user = verify_token(token)
# user_id = user.id
# req_dict = request.get_json()
# real_name = req_dict.get("real_name")
# age = req_dict.get("age")
# sex = req_dict.get("sex")
# name = req_dict.get("name")
# position = req_dict.get("position")
#
# belong_organization = req_dict.get("belong_organization")
# belong_department = req_dict.get("belong_department")
#
# try:
# user_information = User.query.get(user_id)
# # 姓名
# if real_name:
# user_information.real_name = real_name
# # 机构
# if belong_organization:
# user_information.belong_organization = belong_organization
# # 部门
# if belong_department:
# user_information.belong_department = belong_department
# # 年龄
# if age:
# user_information.age = age
# # 性别 1 - 男 2 - 女
# if sex:
# user_information.sex = sex
# # 职务
# if position:
# user_information.position = position
# # 用户名
# if name:
# user = User.query.filter_by(name=name).filter(User.id != user_id).first()
# if user:
# return jsonify(code=RET.DATAEXIST, msg="用户名已经存在")
# user_information.name = name
# db.session.commit()
# except Exception as e:
# db.session.rollback() # 回滚数据库
# current_app.logger.error(e)
# return jsonify(code=RET.DBERR, msg="数据库错误")
#
# return jsonify(code=RET.OK, msg="修改成功")
# 修改用户手机号
......@@ -695,3 +777,283 @@ def change_password():
return jsonify(code=RET.DBERR, msg="数据库错误")
"""以下为202212月改版后需求"""
# 用户中心-个人中心确认修改
@api_user.route("/FixUserInfo", methods=["POST"])
@login_required
def fix_user_info():
token = request.headers["token"]
try:
user = verify_token(token)
user_id = user.id
except:
return jsonify(code=RET.SESSIONERR, msg='个人信息校验失败,请重新登录!')
req_dict = request.get_json()
real_name = req_dict.get("real_name")
age = req_dict.get("age")
sex = req_dict.get("sex")
name = req_dict.get("name")
position = req_dict.get("position")
belong_organization = req_dict.get("belong_organization") # 202212新增
belong_department = req_dict.get("belong_department") # 202212新增
try:
user_information = User.query.get(user_id)
# 姓名
if real_name:
user_information.real_name = real_name
# 机构
if belong_organization:
user_information.belong_organization = belong_organization
# 部门
if belong_department:
user_information.belong_department = belong_department
# 年龄
if age:
user_information.age = age
# 性别 1 - 男 2 - 女
if sex:
user_information.sex = sex
# 职务
if position:
user_information.position = position
# 用户名
if name:
user = User.query.filter_by(name=name).filter(User.id != user_id).first()
if user:
return jsonify(code=RET.DATAEXIST, msg="用户名已经存在")
user_information.name = name
db.session.commit()
except Exception as e:
db.session.rollback() # 回滚数据库
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
return jsonify(code=RET.OK, msg="修改成功")
# 用户中心-收藏界面获取收藏的产业
# @api_user.route("/GetCollectIndustry", methods=["GET"])
# @login_required
# def get_collect_industry():
# token = request.headers["token"]
# try:
# user = verify_token(token)
# user_id = user.id
# except:
# return jsonify(code=RET.SESSIONERR, msg='个人信息校验失败,请重新登录!')
#
# try:
# industry_obj_li = IndustryCollect.query.filter(IndustryCollect.user_id == user_id).all()
# data = [{
# "industry_id": industry_obj.id,
# "industry_name": industry_obj.industry_name
# } for industry_obj in industry_obj_li]
# return jsonify(code=RET.OK, data=data, msg="获取成功")
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.DBERR, msg="数据库错误")
# # 用户中心-取消收藏
# @api_user.route("/CancelCollectIndustry", methods=["POST"])
# @login_required
# def cancel_collect_industry():
# token = request.headers["token"]
# try:
# user = verify_token(token)
# user_id = user.id
# except:
# return jsonify(code=RET.SESSIONERR, msg='个人信息校验失败,请重新登录!')
# req_dict = request.get_json()
# industry_name = req_dict['industry_name']
#
# try:
# collect_obj = IndustryCollect.query.filter_by(industry_name=industry_name).first()
# db.session.delete(collect_obj)
# db.session.commit()
# return jsonify(code=RET.OK, msg="取消收藏成功。")
# except Exception as e:
# db.session.rollback() # 回滚数据库
# current_app.logger.error(e)
# return jsonify(code=RET.DBERR, msg="数据库错误")
# 查看收藏-收藏的企业和行业
@api_user.route("/GetCollect", methods=["POST"])
@login_required
def get_collect():
try:
token = request.headers["token"]
user = verify_token(token)
user_id = user.id
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="token过期,请重新登录!")
req_dict = request.get_json()
page = req_dict.get("page")
per_page = req_dict.get("per_page")
classify = req_dict.get("classify")
choice = req_dict.get("choice")
company_name = req_dict.get("company_name")
if not page:
page = 1
if not per_page:
per_page = 10
if classify == 1 and not all([classify, choice]):
return jsonify(code=RET.PARAMERR, msg="数据不全")
# 判断是企业还是行业关注,企业1,行业0
if classify == 1:
company = []
try:
user = User.query.get(user_id)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
if choice == "2":
try:
maxnum = len(user.enterprise)
company_list = user.enterprise[(page - 1) * per_page:page * per_page]
for i in company_list:
create_time = UserEnterprise.query.filter_by(enterprise_id=i.id, user_id=user_id).first()
if company_name and company_name in i.company_name:
company.append({
"id": i.id,
"company_name": i.company_name,
"create_time": create_time.create_time.strftime('%Y-%m-%d %H:%M:%S'),
"build_date": i.build_date.strftime("%Y-%m-%d") if i.build_date else "-"
})
else:
company.append({
"id": i.id,
"company_name": i.company_name,
"create_time": create_time.create_time.strftime('%Y-%m-%d %H:%M:%S'),
"build_date": i.build_date.strftime("%Y-%m-%d") if i.build_date else "-"
})
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
data = {
"ob_list": company,
"maxnum": maxnum
}
return jsonify(code=RET.OK, msg="查找成功", data=data)
else:
maxnum = len(user.company)
company_list = user.company[(page - 1) * per_page:page * per_page]
try:
for i in company_list:
create_time = UserCompany.query.filter_by(company_id=i.id, user_id=user_id).first()
company.append({
"id": i.id,
"company_name": i.company_name,
"create_time": create_time.create_time.strftime('%Y-%m-%d %H:%M:%S'),
"build_date": i.build_date.strftime("%Y-%m-%d") if i.build_date else "-"
})
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
data = {
"ob_list": company,
"maxnum": maxnum
}
return jsonify(code=RET.OK, msg="查找成功", data=data)
# 行业
try:
user = User.query.get(user_id)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
maxnum = len(user.industry)
industry = []
industry_list = user.industry[(page - 1) * per_page:page * per_page]
for i in industry_list:
# 查询关注时间
try:
indu = UserIndustry.query.filter_by(industry_id=i.id, user_id=user_id).first()
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# count = Company.query.filter_by(company_industry = i.name)
industry.append({
"id": i.id,
"industry_name": i.name,
"create_time": indu.create_time.strftime("%Y-%m-%d"),
"count": i.entities if i.entities else 0
})
industry = sorted(industry, key=lambda k: k['create_time'], reverse=True)
data = {
"ob_list": industry,
"maxnum": maxnum
}
return jsonify(code=RET.OK, msg="查找成功", data=data)
# 取消收藏
@api_user.route("/CancelCollect", methods=["POST"])
@login_required
def cancel_collect():
try:
token = request.headers["token"]
user = verify_token(token)
user_id = user.id
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="token过期,请重新登录!")
req_dict = request.get_json()
id = req_dict.get("id")
classify = req_dict.get("classify")
choice = req_dict.get("choice")
print(id, classify, choice)
if classify == 1 and not all([id, classify, choice]):
return jsonify(code=RET.PARAMERR, msg="数据不全")
# id = g.id
if classify == 1:
if choice == "2":
# 删除全国数据
# pass
try:
company_user = UserEnterprise.query.filter_by(enterprise_id=id, user_id=user_id).first()
db.session.delete(company_user)
db.session.commit()
return jsonify(code=RET.OK, msg="删除成功")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
else:
try:
company_user = UserCompany.query.filter_by(company_id=id, user_id=user_id).first()
db.session.delete(company_user)
db.session.commit()
return jsonify(code=RET.OK, msg="删除成功")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 删除行业数据
try:
industry_user = UserIndustry.query.filter_by(industry_id=id, user_id=user_id).first()
db.session.delete(industry_user)
db.session.commit()
return jsonify(code=RET.OK, msg="取关成功")
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