Commit f9f5e843 by dong

fix20221126

parent 88aa9901
......@@ -3,6 +3,7 @@ import time
import oss2
import requests
import sqlalchemy
import xlrd
import xlwt
from dateutil.relativedelta import relativedelta
......@@ -129,7 +130,7 @@ def check_project_detail1():
if not project_id:
return jsonify(code=RET.PARAMERR, msg="参数不能为空!")
try:
project_obj = ProjectManagement.query.filter_by(id=project_id).first()
project_obj = ProjectManagement.query.filter_by(id=project_id, is_delete=0).first()
project_data = {"id": project_obj.id,
"project_stalker": project_obj.project_stalker, # 项目跟踪
"project_name": project_obj.project_name, # 项目名称
......@@ -241,7 +242,7 @@ def upload_project_data2():
# del (row_content[0])
project_name = row_content[1] # 项目名称
# 判断该项目是否已经存在
project_obj = ProjectManagement.query.filter_by(project_name=project_name).first()
project_obj = ProjectManagement.query.filter_by(project_name=project_name, is_delete=0).first()
if project_obj:
rep_num += 1
rep_project_name_list.append(project_name)
......@@ -369,7 +370,7 @@ def batch_export_project5():
target_data_list = []
for select_id in select_id_list:
try:
project_obj = ProjectManagement.query.filter_by(id=select_id).first()
project_obj = ProjectManagement.query.filter_by(id=select_id, is_delete=0).first()
# 提取数据,写入xslx表格
data_list = []
project_num = project_obj.project_num
......@@ -490,7 +491,7 @@ def batch_delete1():
try:
for select_id in delete_id_list:
project_obj_list = ProjectManagement.query.filter_by(id=select_id).all()
project_obj_list = ProjectManagement.query.filter_by(id=select_id, is_delete=0).all()
if not project_obj_list:
return jsonify(code=RET.DBERR, msg="数据不存在!")
for project_obj in project_obj_list:
......@@ -562,7 +563,7 @@ def project_edit():
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行编辑项目信息操作时用户信息校验失败,请重新登陆后尝试!")
try:
project_obj = ProjectManagement.query.get(project_id)
project_obj = ProjectManagement.query.filter_by(id=project_id, is_delete=0).first()
if not project_obj:
return jsonify(code=RET.NODATA, msg='查无此项目!')
project_obj.project_stalker = project_stalker
......@@ -723,7 +724,7 @@ def upload_shanxi_data():
return jsonify(code=RET.PARAMERR, msg='区县名称不能为空!')
try:
target_obj = ShanxiTarget.query.filter_by(district_name=district_name, data_time=data_time).first()
target_obj = ShanxiTarget.query.filter_by(district_name=district_name, data_time=data_time, is_delete=0).first()
if target_obj: # 更新
# target_obj.file_name = target_obj.data_time + '全省数据'
target_obj.data_time = data_time
......@@ -796,7 +797,10 @@ def shanxi_data_list():
year = req_dic['year']
current_year = datetime.now().year
try:
target_obj_list = ShanxiTarget.query.filter(ShanxiTarget.data_time.like('%{}%'.format(year) if year else current_year)).all()
target_obj_list = ShanxiTarget.query.filter(
ShanxiTarget.data_time.like('%{}%'.format(year) if year else current_year),
ShanxiTarget.is_delete == 0
).all()
data_time_set = set(target_obj.data_time for target_obj in target_obj_list)
# 收集上传周期
......@@ -843,7 +847,7 @@ def add_shanxi_data():
arrive_target_money = data['arrive_target_money'] # 目标资金到位
arrive_finish_rate = data['arrive_finish_rate'] # 计划投资额完成率
try:
target_obj = ShanxiTarget.query.filter_by(district_name=district_name, data_time=data_time).first()
target_obj = ShanxiTarget.query.filter_by(district_name=district_name, data_time=data_time, is_delete=0).first()
if target_obj: # 更新
target_obj.data_time = data_time
target_obj.upload_time = upload_time
......@@ -903,7 +907,7 @@ def shanxi_data_detail():
req_dic = request.get_json()
data_time = req_dic["data_time"]
try:
target_obj_li = ShanxiTarget.query.filter_by(data_time=data_time).all()
target_obj_li = ShanxiTarget.query.filter_by(data_time=data_time, is_delete=0).all()
data = [{
"data_time": target_obj.data_time,
"upload_time": target_obj.upload_time,
......@@ -947,7 +951,7 @@ def download_shanxi_data():
return jsonify(code=RET.PARAMERR, msg="参数不能为空!")
target_data_list = []
try:
target_obj_li = ShanxiTarget.query.filter_by(data_time=data_time).all()
target_obj_li = ShanxiTarget.query.filter_by(data_time=data_time, is_delete=0).all()
for target_obj in target_obj_li:
# 提取数据,写入xslx表格
data_list = []
......@@ -1020,7 +1024,7 @@ def delete_shanxi_data():
req_dic = request.get_json()
data_time = req_dic["data_time"]
try:
target_obj_li = ShanxiTarget.query.filter_by(data_time=data_time).all()
target_obj_li = ShanxiTarget.query.filter_by(data_time=data_time, is_delete=0).all()
for target_obj in target_obj_li:
target_obj.is_delete = 1
db.session.commit()
......@@ -1052,7 +1056,7 @@ def upload_jc_data():
print(file.filename) # 打印文件名
upload_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
current_year = str(datetime.now().year) + '年'
# current_year = str(datetime.now().year) + '年'
try:
f = file.read() # 文件内容
......@@ -1089,10 +1093,10 @@ def upload_jc_data():
return jsonify(code=RET.PARAMERR, msg='区县名称不能为空!')
try:
target_obj = JcTarget.query.filter_by(district_name=district_name, year=year).first()
target_obj = JcTarget.query.filter_by(district_name=district_name, year=year, is_delete=0).first()
if target_obj: # 更新
target_obj.file_name = current_year + '年度目标数据'
target_obj.year = current_year
# target_obj.file_name = year + '年度目标数据'
# target_obj.year = year
target_obj.upload_time = upload_time
target_obj.upload_unit = user_unity
target_obj.upload_people = user_name
......@@ -1108,9 +1112,9 @@ def upload_jc_data():
else:
# 写入数据库
target_obj = JcTarget(
file_name=current_year + '年度目标数据',
file_name=year + '年度目标数据',
is_delete=0,
year=current_year,
year=year,
upload_time=upload_time,
upload_unit=user_unity,
upload_people=user_name,
......@@ -1152,7 +1156,7 @@ def add_jc_data():
req_dic = request.get_json()
data_list = req_dic["data_list"]
upload_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
current_year = str(datetime.now().year) + '年'
# current_year = str(datetime.now().year) + '年'
for data in data_list:
year = data['year'] # 所属年份
......@@ -1163,7 +1167,7 @@ def add_jc_data():
money_arrive_target1 = data['money_arrive_target1'] # 固定资产投资项目资金到位额
money_arrive_target0 = data['money_arrive_target0'] # 非固定资产投资项目资金到位额
try:
target_obj = JcTarget.query.filter_by(district_name=district_name, year=year).first()
target_obj = JcTarget.query.filter_by(district_name=district_name, year=year, is_delete=0).first()
if target_obj: # 更新
target_obj.district_name = district_name
target_obj.money_sign = money_sign
......@@ -1173,9 +1177,10 @@ def add_jc_data():
target_obj.money_arrive_target0 = money_arrive_target0
db.session.commit()
else:
target_obj = ShanxiTarget(
target_obj = JcTarget(
is_delete=0,
year=current_year,
file_name=year + '年度目标数据',
year=year,
upload_time=upload_time,
upload_unit=user_unity,
upload_people=user_name,
......@@ -1216,12 +1221,12 @@ def jc_data_list():
JcTarget.year.like('%{}%'.format(str(year)) if year else text('')),
JcTarget.is_delete == 0
).all()
data_time_set = set(target_obj.year for target_obj in target_obj_list)
year_set = set(target_obj.year for target_obj in target_obj_list)
# 收集上传周期
data_li = []
for data_time in list(data_time_set):
target_obj = JcTarget.query.filter_by(year=year).first()
for year in list(year_set):
target_obj = JcTarget.query.filter_by(year=year, is_delete=0).first()
data = {"year": target_obj.year,
"file_name": target_obj.file_name,
"upload_time": target_obj.upload_time,
......@@ -1235,8 +1240,7 @@ def jc_data_list():
return jsonify(code=RET.DBERR, msg="查询数据库错误!")
# 详情数据列表(某周期山西各地市指标数据列表展示)
# 详情数据列表(某周期晋城各地市指标数据列表展示)
@api_manage.route("/JcDataDetail", methods=["POST"])
def jc_data_detail():
token = request.headers['token']
......@@ -1248,24 +1252,25 @@ def jc_data_detail():
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行操作时用户信息校验失败,请重新登陆后尝试!")
req_dic = request.get_json()
data_time = req_dic["data_time"]
year = req_dic["year"]
try:
target_obj_li = ShanxiTarget.query.filter_by(data_time=data_time).all()
target_obj_li = JcTarget.query.filter_by(year=year, is_delete=0).all()
data = [{
"data_time": target_obj.data_time,
"year": target_obj.year,
"upload_time": target_obj.upload_time,
"upload_unit": target_obj.upload_unit,
"upload_people": target_obj.upload_people,
"grade_sign": target_obj.grade_sign,
"grade_start": target_obj.grade_start,
"grade_plan_invest": target_obj.grade_plan_invest,
"grade_arrive_target1": target_obj.grade_arrive_target1,
"grade_arrive_target0": target_obj.grade_arrive_target0,
"district_name": target_obj.district_name,
"sign_money": target_obj.sign_money,
"sign_target_money": target_obj.sign_target_money,
"sign_finish_rate": target_obj.sign_finish_rate,
"plan_invest_money": target_obj.plan_invest_money,
"plan_target_money": target_obj.plan_target_money,
"plan_finish_rate": target_obj.plan_finish_rate,
"arrive_money": target_obj.arrive_money,
"arrive_target_money": target_obj.arrive_target_money,
"arrive_finish_rate": target_obj.arrive_finish_rate,
"money_sign": target_obj.money_sign,
"rate_start": target_obj.rate_start,
"money_plan_invest": target_obj.money_plan_invest,
"money_arrive_target1": target_obj.money_arrive_target1,
"money_arrive_target0": target_obj.money_arrive_target0
} for target_obj in target_obj_li]
return jsonify(code=RET.OK, data=data, msg="获取成功!")
except Exception as e:
......@@ -1275,17 +1280,396 @@ def jc_data_detail():
return jsonify(code=RET.DBERR, msg="数据库异常")
# 删除某时间周期的数据
@api_manage.route("/DeleteJcData", methods=["POST"])
def delete_jc_data():
token = request.headers['token']
try:
user_obj = verify_token(token)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行操作时用户信息校验失败,请重新登陆后尝试!")
req_dic = request.get_json()
year = req_dic["year"]
try:
target_obj_li = JcTarget.query.filter_by(year=year, is_delete=0).all()
for target_obj in target_obj_li:
target_obj.is_delete = 1
db.session.commit()
continue
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_manage.route("/DownloadJcData", methods=["POST"])
def download_jc_data():
token = request.headers['token']
try:
user_obj = verify_token(token)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行操作时用户信息校验失败,请重新登陆后尝试!")
req_dic = request.get_json()
year = req_dic["year"]
path = './apps/statics/project_file/'
# pro_path = 'http://39.100.39.50:8008/aaa_statics/project_file/' # 项目路径
pro_path = 'http://192.168.1.4:5000/statics/project_file/' # 项目路径
if not year:
return jsonify(code=RET.PARAMERR, msg="参数不能为空!")
target_data_list = []
try:
target_obj_li = JcTarget.query.filter_by(year=year, is_delete=0).all()
for target_obj in target_obj_li:
# 提取数据,写入xslx表格
data_list = []
district_name = target_obj.district_name
data_list.append(district_name) # 区县名称
money_sign = target_obj.money_sign
data_list.append(money_sign) # 签约项目金额
rate_start = target_obj.rate_start
data_list.append(rate_start) # 项目开工率
money_plan_invest = target_obj.money_plan_invest
data_list.append(money_plan_invest) # 新开工固定资产投资项目计划投资额
money_arrive_target1 = target_obj.money_arrive_target1
data_list.append(money_arrive_target1) # 固定资产投资项目资金到位额
money_arrive_target0 = target_obj.money_arrive_target0
data_list.append(money_arrive_target0) # 非固定资产投资项目资金到位额
target_data_list.append(data_list)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误!")
head_list = ''
sheet = ''
try:
sheet_name_titles = {
"sheet1": ["县(市、区)、开发区", "年度目标(亿元)", "开工率年度目标",
"年度目标(亿元)", "年度目标(亿元)", "年度目标(亿元)"]}
excel = xlwt.Workbook(encoding='utf-8')
# 写入表头
for i in range(len(sheet_name_titles)):
for k, v in sheet_name_titles.items():
sheet_name = k
sheet = excel.add_sheet(sheet_name)
head_list = v
print(head_list)
for j in range(len(head_list)):
sheet.write(0, j, head_list[j])
# 写入数据,从第二行(i+1)
rows = len(target_data_list)
cols = len(head_list)
for i in range(rows):
for j in range(cols):
sheet.write(i + 1, j, target_data_list[i][j])
time_stamp = '{0:%Y%m%d%H%M%S}'.format(datetime.now())
file_name = "晋城市及县区年度目标表{}.xlsx".format(time_stamp)
excel.save(path + file_name)
return jsonify(code=RET.OK, url=pro_path + file_name, msg="导出/下载成功!")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="批量导出操作失败!")
"""固定资产投资项目资金到位"""
# 上传山西省地市指标
@api_manage.route("/UploadMoneyArrive", methods=["POST"])
def upload_money_arrive():
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
user_unity = user_obj.belong_organization
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行操作时用户信息校验失败,请重新登陆后尝试!")
# 上传的文件
file = request.files['file']
print(file.filename) # 打印文件名
data_time = request.form['data_time']
# file_name = file.filename
upload_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
try:
f = file.read() # 文件内容
data = xlrd.open_workbook(file_contents=f)
table = data.sheets()[0]
names = data.sheet_names() # 返回book中所有工作表的名字
status = data.sheet_loaded(names[0]) # 检查sheet1是否导入完毕
print(status)
nrows = table.nrows # 获取该sheet中的有效行数
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.THIRDERR, msg="读取文件失败!")
success_num = 0
row_list = [table.row_values(i) for i in range(3, nrows)]
for i in range(0, len(row_list)):
row_content = row_list[i]
if not row_content:
return jsonify(code=RET.NODATA,
msg="表格内无有效数据!请尝试 <清空浏览器缓存> 后下载最新模板,根据模板提示信息编辑数据后再次上传。(注:第三行为首行有效数据不能为空、第一行和第二行无法读取。)")
try:
district_name = row_content[0] # 区县名称
arrive_money = row_content[1] # 到位金额
except Exception as e:
# 表示操作失败,回滚数据库操作
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据异常!请尝试 <清空浏览器缓存> 后下载最新模板,根据模板提示信息编辑数据后再次上传。")
if not district_name:
return jsonify(code=RET.PARAMERR, msg='区县名称不能为空!')
try:
target_obj = MoneyArrive.query.filter_by(district_name=district_name, data_time=data_time, is_delete=0).first()
if target_obj: # 更新
# target_obj.file_name = target_obj.data_time + '固投资金到位情况'
target_obj.data_time = data_time
target_obj.upload_time = upload_time
target_obj.upload_unit = user_unity
target_obj.upload_people = user_name
target_obj.district_name = district_name
target_obj.arrive_money = arrive_money
db.session.commit()
success_num += 1
continue
else:
# 写入数据库
target_obj = ShanxiTarget(
file_name=data_time + '固投资金到位情况',
is_delete=0,
data_time=data_time,
upload_time=upload_time,
upload_unit=user_unity,
upload_people=user_name,
district_name=district_name,
arrive_money=arrive_money
)
db.session.add(target_obj)
db.session.commit()
success_num += 1
continue
except Exception as e:
# 表示操作失败,回滚数据库操作
db.session.rollback()
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库异常")
if success_num > 0:
return jsonify(code=RET.OK,
msg='上传成功!数据上传 {} 条数据'.format(success_num))
else:
return jsonify(code=RET.DATAERR, msg='无新数据上传。')
# 概览数据列表(山西指标上传页数据列表展示)
@api_manage.route("/MoneyArriveList", methods=["POST"])
def money_arrive_list():
token = request.headers['token']
try:
user_obj = verify_token(token)
# user_name = user_obj.real_name
# user_unity = user_obj.belong_organization
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行操作时用户信息校验失败,请重新登陆后尝试!")
req_dic = request.get_json()
year = req_dic['year']
current_year = datetime.now().year
try:
target_obj_list = MoneyArrive.query.filter(
MoneyArrive.data_time.like('%{}%'.format(year) if year else current_year), MoneyArrive.is_delete == 0
).all()
data_time_set = set(target_obj.data_time for target_obj in target_obj_list)
# 收集上传周期
data_li = []
for data_time in list(data_time_set):
target_obj = MoneyArrive.query.filter_by(data_time=data_time, is_delete=0).first()
data = {"file_name": target_obj.file_name,
"data_time": target_obj.data_time,
"upload_time": target_obj.upload_time,
"upload_unit": target_obj.upload_unit,
"upload_people": target_obj.upload_people}
data_li.append(data)
return jsonify(code=RET.OK, data=data_li, msg='获取成功!')
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="查询数据库错误!")
# 新增/编辑山西指标上传页数据
@api_manage.route("/AddEditMoneyArrive", methods=["POST"])
def add_edit_money_arrive():
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
user_unity = user_obj.belong_organization
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行操作时用户信息校验失败,请重新登陆后尝试!")
req_dic = request.get_json()
data_list = req_dic["data_list"]
upload_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
for data in data_list:
data_time = data['data_time'] # 数据年份
district_name = data['district_name'] # 区县名称
money_arrive = data['money_arrive'] # 签约金额
try:
target_obj = MoneyArrive.query.filter_by(district_name=district_name, data_time=data_time, is_selete=0).first()
if target_obj: # 更新
target_obj.data_time = data_time
target_obj.upload_time = upload_time
target_obj.upload_unit = user_unity
target_obj.upload_people = user_name
target_obj.district_name = district_name
target_obj.money_arrive = money_arrive
db.session.commit()
else:
target_obj = MoneyArrive(
is_delete=0,
data_time=data_time,
upload_time=upload_time,
upload_unit=user_unity,
upload_people=user_name,
district_name=district_name,
money_arrive=money_arrive,
)
db.session.add(target_obj)
db.session.commit()
continue
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_manage.route("/MoneyArriveDetail", methods=["POST"])
def arrive_money_detail():
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
user_unity = user_obj.belong_organization
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行操作时用户信息校验失败,请重新登陆后尝试!")
req_dic = request.get_json()
data_time = req_dic["data_time"]
try:
target_obj_li = MoneyArrive.query.filter_by(data_time=data_time, is_delete=0).all()
data = [{
"data_time": target_obj.data_time,
"upload_time": target_obj.upload_time,
"upload_unit": target_obj.upload_unit,
"upload_people": target_obj.upload_people,
"district_name": target_obj.district_name,
"money_arrive": target_obj.money_arrive,
} for target_obj in target_obj_li]
return jsonify(code=RET.OK, data=data, msg="获取成功!")
except Exception as e:
# 表示操作失败,回滚数据库操作
db.session.rollback()
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库异常")
# 下载数据详情
@api_manage.route("/DownloadMoneyArrive", methods=["POST"])
def download_money_arrive():
token = request.headers['token']
try:
user_obj = verify_token(token)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行操作时用户信息校验失败,请重新登陆后尝试!")
req_dic = request.get_json()
data_time = req_dic["data_time"]
path = './apps/statics/project_file/'
# pro_path = 'http://39.100.39.50:8008/aaa_statics/project_file/' # 项目路径
pro_path = 'http://192.168.1.4:5000/statics/project_file/' # 项目路径
if not data_time:
return jsonify(code=RET.PARAMERR, msg="参数不能为空!")
target_data_list = []
try:
target_obj_li = MoneyArrive.query.filter_by(data_time=data_time, is_delete=0).all()
for target_obj in target_obj_li:
# 提取数据,写入xslx表格
data_list = []
district_name = target_obj.district_name
data_list.append(district_name) # 区县名称
money_arrive = target_obj.money_arrive
data_list.append(money_arrive) # 签约金额
target_data_list.append(data_list)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误!")
head_list = ''
sheet = ''
try:
sheet_name_titles = {
"sheet1": ["县(市、区)、开发区", "固定资产投资项目资金到位额(亿元)"]}
excel = xlwt.Workbook(encoding='utf-8')
# 写入表头
for i in range(len(sheet_name_titles)):
for k, v in sheet_name_titles.items():
sheet_name = k
sheet = excel.add_sheet(sheet_name)
head_list = v
print(head_list)
for j in range(len(head_list)):
sheet.write(0, j, head_list[j])
# 写入数据,从第二行(i+1)
rows = len(target_data_list)
cols = len(head_list)
for i in range(rows):
for j in range(cols):
sheet.write(i + 1, j, target_data_list[i][j])
time_stamp = '{0:%Y%m%d%H%M%S}'.format(datetime.now())
file_name = "晋城市及县区固投到位资金完成情况{}.xlsx".format(time_stamp)
excel.save(path + file_name)
return jsonify(code=RET.OK, url=pro_path + file_name, msg="导出/下载成功!")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="批量导出操作失败!")
# 删除某时间周期的数据
@api_manage.route("/DeleteMoneyArrive", methods=["POST"])
def delete_money_arrive():
token = request.headers['token']
try:
user_obj = verify_token(token)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.SESSIONERR, msg="进行操作时用户信息校验失败,请重新登陆后尝试!")
req_dic = request.get_json()
data_time = req_dic["data_time"]
try:
target_obj_li = MoneyArrive.query.filter_by(data_time=data_time, is_delete=0).all()
for target_obj in target_obj_li:
target_obj.is_delete = 1
db.session.commit()
continue
return jsonify(code=RET.OK, msg="删除成功!")
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="查询数据库错误!")
......
import os
import time
import oss2
import requests
import sqlalchemy
import xlrd
import xlwt
from dateutil.relativedelta import relativedelta
from flask import current_app, jsonify, request
from sqlalchemy import and_
from sqlalchemy import and_, or_
import zipfile
from apps.models import *
from apps.models import ProjectManagement
from apps.utils.response_code import RET
from apps.view_project_management import api_project
from apps.inves_manage import api_manage
from apps.util import verify_token
from apps.util import verify_identity
"""统计分析"""
# 项目管理---项目列表
from apps.inves_manage.siku_view import get_num, upload_daily_picture
# 统计分析
@api_project.route("/StatisticAnalysis", methods=["POST"])
def statistic_analysis():
req_dic = request.get_json()
flag = req_dic['flag']
district = req_dic['district']
data_dic = {}
"""指标分析"""
# 山西省地市数据统计
@api_manage.route("/StatisticShanxiData", methods=["POST"])
def statistic_shanxi_data():
req_dic = request.get_json()
flag = req_dic['flag'] # 1项目签约金额完成情况, 2新开工项目计划投资额完成情况, 3固定资产投资项目资金到位完成情况
try:
# 行业分布
# 获取最新的时间周期
data_obj = ShanxiTarget.query.order_by(sqlalchemy.desc(ShanxiTarget.id)).first()
data_time = data_obj.data_time
# 获取最新时间周期的数据
target_obj_li = ShanxiTarget.query.filter_by(data_time=data_time).all()
data1 = ''
data2 = ''
if flag == 1:
data_list = []
project_obj_list = ProjectManagement.query.all()
# 获取所有项目中的行业并去重
industry_name_set = set(project_obj.industry for project_obj in project_obj_list)
for industry_name in list(industry_name_set):
industry_count = ProjectManagement.query.filter(ProjectManagement.industry == industry_name).count()
if not industry_count:
industry_count = 0
data_list.append({'industry_name': industry_name,
'industry_count': industry_count})
data_list.sort(key=lambda s: s["industry_count"], reverse=True)
return jsonify(code=RET.OK, data=data_list, msg='数据获取成功!')
# 项目类型统计 1招引项目,2洽谈项目,3签约项目,4开工项目,5投产项目
data = [{
"district_name": target_obj.district_name,
"sign_money": str(target_obj.sign_money) + '亿',
"sign_target_money": str(target_obj.sign_target_money) + '亿',
"sign_finish_rate": str(target_obj.sign_finish_rate) + '%',
} for target_obj in target_obj_li]
data1 = sorted(data, key=lambda x: x['sign_money'], reverse=True)
data2 = sorted(data1, key=lambda x: x['sign_finish_rate'], reverse=True)
if flag == 2:
data_list = []
project_type_name = ''
for project_type in [1, 2, 3, 4, 5]:
if project_type == 1:
project_type_name = '已招引'
elif project_type == 2:
project_type_name = '已洽谈'
elif project_type == 3:
project_type_name = '已签约'
elif project_type == 4:
project_type_name = '已开工'
elif project_type == 5:
project_type_name = '已投产'
project_type_count = ProjectManagement.query.filter(
ProjectManagement.project_type == project_type).count()
if not project_type_count:
project_type_count = 0
data_list.append({'project_type_name': project_type_name,
'project_type_count': project_type_count})
return jsonify(code=RET.OK, data=data_list, msg='数据获取成功!')
# 企业投资额度统计
data = [{
"district_name": target_obj.district_name,
"plan_invest_money": str(target_obj.plan_invest_money) + '亿',
"plan_target_money": str(target_obj.plan_target_money) + '亿',
"plan_finish_rate": str(target_obj.plan_finish_rate) + '%',
} for target_obj in target_obj_li]
data1 = sorted(data, key=lambda x: x['plan_invest_money'], reverse=True)
data2 = sorted(data1, key=lambda x: x['plan_finish_rate'], reverse=True)
if flag == 3:
# # 投资额度为100万的
# investment_volume_count1 = ProjectManagement.query.filter(
# ProjectManagement.investment_volume == '100').count()
# if investment_volume_count1:
# data_dic.update({"investment_volume_count1": investment_volume_count1})
# else:
# data_dic.update({"investment_volume_count1": 0})
#
# # 投资额度为100万-300万的
# investment_volume_count2 = ProjectManagement.query.filter(and_
# (ProjectManagement.investment_volume > '100',
# ProjectManagement.investment_volume < '300')).count()
# if investment_volume_count2:
# data_dic.update({"investment_volume_count2": investment_volume_count2})
# else:
# data_dic.update({"investment_volume_count2": 0})
#
# # 投资额度为300, 500, 1000, 3000, 5000万的
# investment_volume_count3 = ProjectManagement.query.filter(
# ProjectManagement.investment_volume > '300').count()
# if investment_volume_count3:
# data_dic.update({"investment_volume_count3": investment_volume_count3})
# else:
# data_dic.update({"investment_volume_count3": 0})
#
# # 投资额度为300万的
# investment_volume_count4 = ProjectManagement.query.filter(
# ProjectManagement.investment_volume > '500').count()
# if investment_volume_count4:
# data_dic.update({"investment_volume_count4": investment_volume_count4})
# else:
# data_dic.update({"investment_volume_count4": 0})
#
# # 投资额度为1000万的
# investment_volume_count5 = ProjectManagement.query.filter(
# ProjectManagement.investment_volume > '1000').count()
# if investment_volume_count5:
# data_dic.update({"investment_volume_count5": investment_volume_count5})
# else:
# data_dic.update({"investment_volume_count5": 0})
#
# # 投资额度为3000万的
# investment_volume_count6 = ProjectManagement.query.filter(
# ProjectManagement.investment_volume > '3000').count()
# if investment_volume_count6:
# data_dic.update({"investment_volume_count6": investment_volume_count6})
# else:
# data_dic.update({"investment_volume_count6": 0})
#
# # 投资额度为5000万的
# investment_volume_count7 = ProjectManagement.query.filter(
# ProjectManagement.investment_volume > '5000').count()
# if investment_volume_count7:
# data_dic.update({"investment_volume_count7": investment_volume_count7})
# else:
# data_dic.update({"investment_volume_count7": 0})
investment_volume_count1 = ProjectManagement.query.filter(and_(
ProjectManagement.investment_volume <= 0.3,
ProjectManagement.project_type >= 4),
).count() # 投资额度为0-0.3亿的
if investment_volume_count1:
data_dic.update({"investment_volume_count1": investment_volume_count1})
else:
data_dic.update({"investment_volume_count1": 0})
# 投资额度为0.3-1亿的
investment_volume_count2 = ProjectManagement.query.filter(and_
(ProjectManagement.investment_volume > 0.3,
ProjectManagement.investment_volume <= 1,
ProjectManagement.project_type >= 4),
).count()
if investment_volume_count2:
data_dic.update({"investment_volume_count2": investment_volume_count2})
else:
data_dic.update({"investment_volume_count2": 0})
data = [{
"district_name": target_obj.district_name,
"arrive_money": str(target_obj.arrive_money) + '亿',
"arrive_target_money": str(target_obj.arrive_target_money) + '亿',
"arrive_finish_rate": str(target_obj.arrive_finish_rate) + '%',
} for target_obj in target_obj_li]
data1 = sorted(data, key=lambda x: x['arrive_money'], reverse=True)
data2 = sorted(data1, key=lambda x: x['arrive_finish_rate'], reverse=True)
return jsonify(code=RET.OK, data={"data1": data1, "data2": data2}, msg="获取成功!")
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="查询数据库错误!")
# 投资额度为1-3亿的
investment_volume_count3 = ProjectManagement.query.filter(and_
(ProjectManagement.investment_volume > 1,
ProjectManagement.investment_volume <= 3,
ProjectManagement.project_type >= 4),
).count()
if investment_volume_count3:
data_dic.update({"investment_volume_count3": investment_volume_count3})
else:
data_dic.update({"investment_volume_count3": 0})
# 晋城市数据统计
@api_manage.route("/StatisticJcData", methods=["POST"])
def statistic_jc_data():
req_dic = request.get_json()
flag = req_dic['flag']
current_year = datetime.now().year
district_li = ["全市", "城区", "泽州县", "高平市", "阳城县", "陵川县",
"沁水县", "晋城经济技术开发区", "高平经济技术开发区",
"阳城经济技术开发区", "沁水经济技术开发区",
"陵川生态文化旅游示范区"]
data_li1 = []
data_li2 = []
data_li3 = []
data_li4 = []
data_li5 = []
data_li6 = []
# 投资额度为3-10亿的
investment_volume_count4 = ProjectManagement.query.filter(and_
(ProjectManagement.investment_volume > 3,
ProjectManagement.investment_volume <= 10,
ProjectManagement.project_type >= 4),
).count()
if investment_volume_count4:
data_dic.update({"investment_volume_count4": investment_volume_count4})
try:
# 一。项目签约完成率(签约项目完成率:完成率(%):签约金额(亿元)/ 年度目标(亿元))
for district in district_li:
project_obj_list = ProjectManagement.query.filter(
ProjectManagement.sign_time.like('%{}%'.format(str(current_year))),
ProjectManagement.district.like('%{}%'.format(str(district)))
).all()
if not project_obj_list:
investment_volume = 0
else:
data_dic.update({"investment_volume_count4": 0})
# 投资额度为10-50亿的
investment_volume_count5 = ProjectManagement.query.filter(and_
(ProjectManagement.investment_volume > 10,
ProjectManagement.investment_volume <= 50,
ProjectManagement.project_type >= 4),
).count()
if investment_volume_count5:
data_dic.update({"investment_volume_count5": investment_volume_count5})
investment_volume = sum([project_obj.investment_volume for project_obj in project_obj_list])
# 年度目标
jc_obj = JcTarget.query.filter(
JcTarget.district_name == district,
JcTarget.year.like('%{}%'.format(str(current_year)))
).first()
if not jc_obj:
year_target = 0
else:
data_dic.update({"investment_volume_count5": 0})
# 投资额度为50-100的
investment_volume_count6 = ProjectManagement.query.filter(and_
(ProjectManagement.investment_volume > 50,
ProjectManagement.investment_volume <= 100,
ProjectManagement.project_type >= 4),
).count()
year_target = jc_obj.money_sign
if investment_volume_count6:
data_dic.update({"investment_volume_count6": investment_volume_count6})
data = {
"district": district,
"rate": investment_volume / year_target if year_target and year_target != 0 else 0
}
data_li1.append(data)
continue
# 项目签约情况得分=完成率(%)*赋分(15 上传后获取)如果小于赋分(15 上传后获取),
# 则输出完成率(%)*赋分(15 上传后获取)的结果,否则输出赋分(15)
grade_li1 = []
for data in data_li1:
grade = data["rate"] * 15
if grade < 15:
grade_li1.append({"district": data["district"], "grade": grade})
else:
data_dic.update({"investment_volume_count6": 0})
# 投资额度为100-150亿的
investment_volume_count7 = ProjectManagement.query.filter(and_
(ProjectManagement.investment_volume > 100,
ProjectManagement.investment_volume <= 150,
ProjectManagement.project_type >= 4),
grade_li1.append({"district": data["district"], "grade": 15})
# 二。项目开工率(开工率进度:当年签约当年开工个数/签约个数)
for district in district_li:
# 签约项目个数
sign_num = ProjectManagement.query.filter(
ProjectManagement.sign_time.like('%{}%'.format(str(current_year))),
ProjectManagement.district.like('%{}%'.format(str(district)))
).count()
# 年度目标
start_num = ProjectManagement.query.filter(
ProjectManagement.start_time.like('%{}%'.format(str(current_year))),
ProjectManagement.district.like('%{}%'.format(str(district)))
).count()
if investment_volume_count7:
data_dic.update({"investment_volume_count7": investment_volume_count7})
data = {
"district": district,
"rate": start_num / sign_num if sign_num and sign_num != 0 else 0
}
data_li2.append(data)
continue
# 项目开工率情况得分=如果开工率进度小于0.4,则输出开工率进度*赋分(5分)/0.4,否则输出赋分(5分);
grade_li2 = []
for data in data_li2:
grade = data["rate"]
if grade < 0.4:
grade_li2.append({"district": data["district"], "grade": grade * 5 / 0.4})
else:
data_dic.update({"investment_volume_count7": 0})
grade_li2.append({"district": data["district"], "grade": 5})
# 投资额度为大于150亿的
investment_volume_count8 = ProjectManagement.query.filter(and_(
ProjectManagement.investment_volume > 150,
ProjectManagement.project_type >= 4),
).count()
if investment_volume_count8:
data_dic.update({"investment_volume_count8": investment_volume_count8})
# 三。新开工项目计划投资额完成率得分=(完成率(%):新开工项目计划投资额(亿元)/ 年度目标(亿元))
for district in district_li:
project_obj_list = ProjectManagement.query.filter(
ProjectManagement.start_time.like('%{}%'.format(str(current_year))),
ProjectManagement.district.like('%{}%'.format(str(district)))
).all()
if not project_obj_list:
investment_volume = 0
else:
data_dic.update({"investment_volume_count8": 0})
print(data_dic)
return jsonify(code=RET.OK, data=data_dic, msg='数据获取成功!')
# 项目签约率、开工率、投产率
if flag == 4:
data_list = []
total_project_count = ProjectManagement.query.count()
project_type_name = ''
for project_type in [3, 4, 5]:
if project_type == 3:
project_type_name = '签约'
project_type_count_qy = ProjectManagement.query.filter(
ProjectManagement.project_type >= project_type).count()
if not project_type_count_qy:
project_type_rate_qy = 0
project_type_count_qy = 0
investment_volume = sum([project_obj.investment_volume for project_obj in project_obj_list])
# 年度目标
jc_obj = JcTarget.query.filter(
JcTarget.district_name == district,
JcTarget.year.like('%{}%'.format(str(current_year)))
).first()
if not jc_obj:
year_target = 0
else:
project_type_rate_qy = str(round((project_type_count_qy / total_project_count) * 100, 2)) + '%'
year_target = jc_obj.money_plan_invest
elif project_type == 4:
project_type_name = '开工'
project_type_count_kg = ProjectManagement.query.filter(
ProjectManagement.project_type >= project_type).count()
if not project_type_count_kg:
project_type_rate_kg = 0
project_type_count_kg = 0
data = {
"district": district,
"rate": investment_volume / year_target if year_target and year_target != 0 else 0
}
data_li3.append(data)
continue
# return jsonify(code=RET.OK, data=data_li, msg="新开工项目计划投资额完成率获取成功")
# 新开工固定资产投资项目计划投资额完成情况=如果完成率(%)小于1,
# 则输出完成率(%)*赋分(25 上传后获取)的结果,否则输出赋分(25);
grade_li3 = []
for data in data_li3:
grade = data["rate"]
if grade < 1:
grade_li3.append({"district": data["district"], "grade": grade * 25})
else:
project_type_rate_kg = str(round((project_type_count_kg / total_project_count) * 100, 2)) + '%'
elif project_type == 5:
project_type_name = '投产'
project_type_count_tc = ProjectManagement.query.filter(
ProjectManagement.project_type >= project_type).count()
if not project_type_count_tc:
project_type_rate_tc = 0
project_type_count_tc = 0
grade_li3.append({"district": data["district"], "grade": 25})
# 四。固定资产投资项目到位资金完成率(完成率(%):固定资产投资项目资金到位额(亿元)/ 年度目标(亿元))
for district in district_li:
project_obj = MoneyArrive.query.filter(
MoneyArrive.data_time.like('%{}%'.format(str(current_year))),
MoneyArrive.district_name.like('%{}%'.format(str(district)))
).first()
if not project_obj:
arrive_money = 0
else:
project_type_rate_tc = str(round((project_type_count_tc / total_project_count) * 100, 2)) + '%'
data_dic = {"project_type_rate_qy": project_type_rate_qy,
"project_type_count_qy": project_type_count_qy,
"project_type_rate_kg": project_type_rate_kg,
"project_type_count_kg": project_type_count_kg,
"project_type_rate_tc": project_type_rate_tc,
"project_type_count_tc": project_type_count_tc,
"total_project_count": total_project_count}
return jsonify(code=RET.OK, data=data_dic, msg='数据获取成功!')
# 月投资额
if flag == 5:
# 获取当前年份
year = datetime.now().year
data_list = []
project_obj_list = ProjectManagement.query.filter(ProjectManagement.project_type >= 3).all()
month_set = set([str(project_obj.file_time).split('-')[1] for project_obj in project_obj_list])
for month in list(month_set):
project_list = ProjectManagement.query.filter(
ProjectManagement.file_time.like('%{}-{}%'.format(year, month))).all()
# 获取投资额
data = [float(project.investment_volume) for project in project_list]
data_list.append({'month': month, 'money': round(sum(data), 2)})
return jsonify(code=RET.OK, data=data_list, msg='数据获取成功!')
# 根据所属区域统计个数
if flag == 6:
# 收集项目区域
data_list = []
if not district:
project_obj_list = ProjectManagement.query.all()
district_set = set([project.district.split(';')[0] for project in project_obj_list])
for district in list(district_set):
project_count = ProjectManagement.query.filter(
ProjectManagement.district.like('%{}%'.format(district))).count()
# data_dic.update({'district': district, 'count': project_count})
data_list.append({'district': district, 'count': project_count})
arrive_money = project_obj.arrive_money
# 年度目标
jc_obj = JcTarget.query.filter(
JcTarget.district_name == district,
JcTarget.year.like('%{}%'.format(str(current_year)))
).first()
if not jc_obj:
year_target = 0
else:
project_obj_list = ProjectManagement.query.filter(
ProjectManagement.district.like('%{}%'.format(district))).all()
# city_set = set([project.district.split(';')[1] for project in project_obj_list])
city_set = set()
for project in project_obj_list:
try:
city = project.district.split(';')[1]
city_set.add(city)
except:
continue
for city in list(city_set):
project_count = ProjectManagement.query.filter(
ProjectManagement.district.like('%{}%'.format(city))).count()
data_list.append({'city': city, 'count': project_count})
return jsonify(code=RET.OK, data=data_list, msg='数据获取成功!')
# return jsonify(code=RET.OK, data=data_dic, msg='数据获取成功!')
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg='数据查询错误!')
"""绩效管理"""
year_target = jc_obj.money_arrive_target1
# 绩效评分---项目专班下拉框内容
@api_project.route("/ClassDropDownBox", methods=["GET"])
def drop_down_box():
try:
class_obj_list = ProjectClass.query.all()
class_name_list = set(
[class_obj.class_name if class_obj.class_name else '' for class_obj in class_obj_list])
return jsonify(code=RET.OK, data=list(class_name_list), msg='获取成功!')
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg='数据查询错误!')
# 绩效评分---编辑项目专班考核分数
@api_project.route("/EditClassScore", methods=["POST"])
def edit_performance_score():
req_dic = request.get_json()
class_name = req_dic['class_name']
class_score1 = req_dic['class_score1']
class_score2 = req_dic['class_score2']
class_score3 = req_dic['class_score3']
class_score4 = req_dic['class_score4']
total_score = 0
score_list = [class_score1, class_score2, class_score3, class_score4]
for i in range(0, len(score_list)):
if float(score_list[i]):
total_score += float(score_list[i])
data = {
"district": district,
"rate": arrive_money / year_target if year_target and year_target != 0 else 0
}
data_li4.append(data)
continue
# return jsonify(code=RET.OK, data=data_li, msg="固定资产投资项目到位资金完成率获取成功")
# 固定资产投资项目资金到位情况得分=如果完成率(%)小于1,
# 则输出完成率(%)*赋分(25 上传后获取)的结果,否则输出赋分(25);
grade_li4 = []
for data in data_li4:
grade = data["rate"]
if grade < 1:
grade_li4.append({"district": data["district"], "grade": grade * 25})
else:
total_score += 0
try:
class_obj = ProjectClass.query.filter_by(class_name=class_name).first()
time = datetime.now().strftime("%Y-%m-%d %H:%M")
if not class_obj:
return jsonify(code=RET.NODATA, msg='无此专班,请先在项目中创建!')
class_obj.class_score1 = class_score1
class_obj.class_score2 = class_score2
class_obj.class_score3 = class_score3
class_obj.class_score4 = class_score4
class_obj.total_score = total_score
class_obj.time = time
db.session.commit()
return jsonify(code=RET.OK, msg='提交成功!')
except Exception as e:
current_app.logger.error(e)
db.session.rollback()
return jsonify(code=RET.DBERR, msg='数据查询错误!')
# 绩效评分---编辑区县、开发区绩效评分
@api_project.route("/EditDistrictScore", methods=["POST"])
def edit_district_score():
req_dic = request.get_json()
district_name = req_dic['district_name']
district_score1 = req_dic['district_score1']
district_score2 = req_dic['district_score2']
district_score3 = req_dic['district_score3']
district_score4 = req_dic['district_score4']
district_score5 = req_dic['district_score5']
district_score6 = req_dic['district_score6']
district_score7 = req_dic['district_score7']
district_score8 = req_dic['district_score8']
try:
project_obj = ScoreDistrict.query.filter_by(district_name=district_name).first()
time = datetime.now().strftime("%Y-%m-%d %H:%M")
if project_obj:
project_obj.district_name = district_name
project_obj.district_score1 = district_score1
project_obj.district_score2 = district_score2
project_obj.district_score3 = district_score3
project_obj.district_score4 = district_score4
project_obj.district_score5 = district_score5
project_obj.district_score6 = district_score6
project_obj.district_score7 = district_score7
project_obj.district_score8 = district_score8
project_obj.time = time
db.session.commit()
return jsonify(code=RET.OK, msg='提交成功!')
grade_li4.append({"district": data["district"], "grade": 25})
# 五。非固定资产投资项目到位资金完成率(完成率(%):非固定资产投资项目资金到位额(亿元)/ 年度目标(亿元))
for district in district_li:
project_obj_list = ProjectManagement.query.filter(
ProjectManagement.is_fixed_investment == '否',
ProjectManagement.sign_time.like('%{}%'.format(str(current_year))),
ProjectManagement.district.like('%{}%'.format(str(district)))
).all()
if not project_obj_list:
investment_volume = 0
else:
project_obj = ScoreDistrict(district_name=district_name, district_score1=district_score1,
district_score2=district_score2, district_score3=district_score3,
district_score4=district_score4, district_score5=district_score5,
district_score6=district_score6, district_score7=district_score7,
district_score8=district_score8, time=time)
db.session.add(project_obj)
db.session.commit()
return jsonify(code=RET.OK, msg='提交成功!')
except Exception as e:
current_app.logger.error(e)
db.session.rollback()
return jsonify(code=RET.DBERR, msg='数据查询错误!')
# 绩效评分---编辑市直有关单位考核分数
@api_project.route("/EditUnitScore", methods=["POST"])
def edit_unit_score():
req_dic = request.get_json()
unit_name = req_dic['unit_name']
unit_score1 = req_dic['unit_score1']
unit_score2 = req_dic['unit_score2']
unit_score3 = req_dic['unit_score3']
unit_score4 = req_dic['unit_score4']
unit_score5 = req_dic['unit_score5']
try:
unit_obj = ScoreUnit.query.filter_by(unit_name=unit_name).first()
time = datetime.now().strftime("%Y-%m-%d %H:%M")
if unit_obj:
unit_obj.unit_name = unit_name
unit_obj.unit_score1 = unit_score1
unit_obj.unit_score2 = unit_score2
unit_obj.unit_score3 = unit_score3
unit_obj.unit_score4 = unit_score4
unit_obj.unit_score5 = unit_score5
unit_obj.time = time
db.session.commit()
return jsonify(code=RET.OK, msg='提交成功!')
investment_volume = sum([project_obj.investment_year for project_obj in project_obj_list])
# 年度目标
jc_obj = JcTarget.query.filter(
JcTarget.district_name == district,
JcTarget.year.like('%{}%'.format(str(current_year)))
).first()
if not jc_obj:
year_target = 0
else:
unit_obj = ScoreUnit(unit_name=unit_name, unit_score1=unit_score1, unit_score2=unit_score2,
unit_score3=unit_score3, unit_score4=unit_score4, unit_score5=unit_score5,
time=time)
db.session.add(unit_obj)
db.session.commit()
return jsonify(code=RET.OK, msg='提交成功!')
except Exception as e:
current_app.logger.error(e)
db.session.rollback()
return jsonify(code=RET.DBERR, msg='数据查询错误!')
# 绩效评分---编辑驻外办事机构考核
@api_project.route("/EditOverseasScore", methods=["POST"])
def edit_overseas_score():
req_dic = request.get_json()
offices_name = req_dic['offices_name']
offices_score1 = req_dic['offices_score1']
offices_score2 = req_dic['offices_score2']
offices_score3 = req_dic['offices_score3']
try:
offices_obj = ScoreOverseasOffices.query.filter_by(offices_name=offices_name).first()
time = datetime.now().strftime("%Y-%m-%d %H:%M")
if offices_obj:
offices_obj.offices_name = offices_name
offices_obj.offices_score1 = offices_score1
offices_obj.offices_score2 = offices_score2
offices_obj.offices_score3 = offices_score3
offices_obj.time = time
db.session.commit()
return jsonify(code=RET.OK, msg='提交成功!')
year_target = jc_obj.money_arrive_target0
data = {
"district": district,
"rate": investment_volume / year_target if year_target and year_target != 0 else 0
}
data_li5.append(data)
continue
# return jsonify(code=RET.OK, data=data_li, msg="固定资产投资项目到位资金完成率获取成功")
# 综合得分
# 项目签约情况得分
# 得分(满分15分):完成率( % )*赋分(15
# 上传后获取)如果小于赋分(15
# 上传后获取),则输出完成率( % )*赋分(15
# 上传后获取)的结果,否则输出赋分(15)
pass
# 非固定资产投资项目资金到位情况得分=如果完成率(%)小于1,
# 则输出完成率(%)*赋分(5 上传后获取)的结果,否则输出赋分(5);
grade_li5 = []
for data in data_li5:
grade = data["rate"]
if grade < 1:
grade_li5.append({"district": data["district"], "grade": grade * 5})
else:
offices_obj = ScoreOverseasOffices(offices_name=offices_name, offices_score1=offices_score1,
offices_score2=offices_score2, offices_score3=offices_score3,
time=time)
db.session.add(offices_obj)
db.session.commit()
return jsonify(code=RET.OK, msg='提交成功!')
grade_li5.append({"district": data["district"], "grade": 5})
# 六。综合得分
for district in district_li:
# 签约情况得分
for grade_dic in grade_li1:
if grade_dic["district"] == district:
grade1 = grade_dic["grade"]
# 项目开工率情况得分
for grade_dic in grade_li2:
if grade_dic["district"] == district:
grade2 = grade_dic["grade"]
# 新开工得分
for grade_dic in grade_li3:
if grade_dic["district"] == district:
grade4 = grade_dic["grade"]
# 固定资产得分
for grade_dic in grade_li4:
if grade_dic["district"] == district:
grade4 = grade_dic["grade"]
# 非固定资产得分
for grade_dic in grade_li5:
if grade_dic["district"] == district:
grade5 = grade_dic["grade"]
total_grade = grade1 + grade2 + grade4 + grade4 + grade5
data_li6.append({"district": district, "total_grade": total_grade})
continue
return jsonify(code=RET.OK,
data={"data_li1": data_li1, "data_li2": data_li2,
"data_li3": data_li3, "data_li4": data_li4,
"data_li5": data_li5, "data_li6": data_li6},
msg="数据查询成功")
except Exception as e:
current_app.logger.error(e)
db.session.rollback()
return jsonify(code=RET.DBERR, msg='数据查询错误!')
return jsonify(code=RET.DBERR, msg="数据查询错误!")
# 绩效评分---编辑服务保障部门考核绩效评分数据
@api_project.route("/EditServiceDepartmentScore", methods=["POST"])
def edit_service_department_score():
req_dic = request.get_json()
department_name = req_dic['department_name']
department_score1 = req_dic['department_score1']
department_score2 = req_dic['department_score2']
department_score3 = req_dic['department_score3']
department_score4 = req_dic['department_score4']
try:
department_obj = ScoreServiceDepartment.query.filter_by(department_name=department_name).first()
time = datetime.now().strftime("%Y-%m-%d %H:%M")
"""项目分析"""
if department_obj:
department_obj.department_name = department_name
department_obj.department_score1 = department_score1
department_obj.department_score2 = department_score2
department_obj.department_score3 = department_score3
department_obj.department_score4 = department_score4
department_obj.time = time
db.session.commit()
return jsonify(code=RET.OK, msg='提交成功!')
else:
department_obj = ScoreServiceDepartment(department_name=department_name,
department_score1=department_score1,
department_score2=department_score2,
department_score3=department_score3,
department_score4=department_score4,
time=time)
db.session.add(department_obj)
db.session.commit()
return jsonify(code=RET.OK, msg='提交成功!')
except Exception as e:
current_app.logger.error(e)
db.session.rollback()
return jsonify(code=RET.DBERR, msg='数据查询错误!')
# 绩效评分---获取输入框数据
@api_project.route("/GetInputData", methods=["POST"])
def get_input_data():
# 项目来源区域分布饼状图
@api_manage.route("/ArealDistribution", methods=["POST"])
def areal_distribution():
req_dic = request.get_json()
flag = req_dic['flag']
name = req_dic['name']
data = ''
district = req_dic['district']
try:
# 获取专班信息
if flag == 1:
project_obj = ProjectClass.query.filter_by(class_name=name).first()
if not project_obj:
return jsonify(code=RET.NODATA, msg='无此专班信息!请核实。')
data = {
"class_name": name,
"class_score1": project_obj.class_score1,
"class_score2": project_obj.class_score2,
"class_score3": project_obj.class_score3,
"class_score4": project_obj.class_score4,
"time": project_obj.time
}
# 获取对县(市、区)、开发区考核信息
elif flag == 2:
district_obj = ScoreDistrict.query.filter_by(district_name=name).first()
if not district_obj:
return jsonify(code=RET.NODATA, msg='无此县区信息!请核实。')
data = {
"district_name": name,
"district_score1": district_obj.district_score1,
"district_score2": district_obj.district_score2,
"district_score3": district_obj.district_score3,
"district_score4": district_obj.district_score4,
"district_score5": district_obj.district_score5,
"district_score6": district_obj.district_score6,
"district_score7": district_obj.district_score7,
"district_score8": district_obj.district_score8,
"time": district_obj.time,
}
# 获取市直有关单位和群团组织考核信息 ScoreUnit
elif flag == 3:
unit_obj = ScoreUnit.query.filter_by(unit_name=name).first()
if not unit_obj:
return jsonify(code=RET.NODATA, msg='无此市值单位信息!请核实。')
data = {
"unit_name": name,
"unit_score1": unit_obj.unit_score1,
"unit_score2": unit_obj.unit_score2,
"unit_score3": unit_obj.unit_score3,
"unit_score4": unit_obj.unit_score4,
"unit_score5": unit_obj.unit_score5,
"time": unit_obj.time,
}
# 获取驻外办事机构信息
elif flag == 4:
offices_obj = ScoreOverseasOffices.query.filter_by(offices_name=name).first()
if not offices_obj:
return jsonify(code=RET.NODATA, msg='无此市值单位信息!请核实。')
data = {
"offices_name": name,
"offices_score1": offices_obj.offices_score1,
"offices_score2": offices_obj.offices_score2,
"offices_score3": offices_obj.offices_score3,
"time": offices_obj.time,
}
# 获取服务保障等任务的职能部门
elif flag == 5:
department_obj = ScoreServiceDepartment.query.filter_by(department_name=name).first()
if not department_obj:
return jsonify(code=RET.NODATA, msg='无此市值单位信息!请核实。')
project_obj_list = ProjectManagement.query.filter(
ProjectManagement.district == district)
num1 = 0 # 京津冀
num2 = 0 # 长三角
num3 = 0 # 珠三角
num4 = 0 # 中原经济区
num5 = 0 # 其他
for project_obj in project_obj_list:
if project_obj.project_source in ["北京", "天津", "河北"]:
num1 += 1
elif project_obj.project_source in ["上海", "江苏", "浙江"]:
num2 += 1
elif project_obj.project_source in ["广东", "香港", "澳门"]:
num3 += 1
elif project_obj.project_source in ["河南", "天津", "河北", "长治", "晋城", "运城",
"聊城", "菏泽", "泰安", "宿州", "淮北", "阜阳",
"亳州", "蚌埠", "淮南", "邢台", "邯郸",]:
num4 += 1
else:
num5 += 1
total_num = sum([num1, num2, num3, num4, num5])
data = {
"department_name": name,
"department_score1": department_obj.department_score1,
"department_score2": department_obj.department_score2,
"department_score3": department_obj.department_score3,
"department_score4": department_obj.department_score4,
"time": department_obj.time,
"data1": str(round(num1 / total_num, 2)) + '%',
"data2": str(round(num2 / total_num, 2)) + '%',
"data3": str(round(num3 / total_num, 2)) + '%',
"data4": str(round(num4 / total_num, 2)) + '%',
"data5": str(round(num5 / total_num, 2)) + '%',
}
return jsonify(code=RET.OK, data=data, msg='数据获取成功!')
return jsonify(code=RET.OK, data=data, msg='数据查询成功')
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg='数据查询错误!')
"""绩效排名"""
return jsonify(code=RET.DBERR, msg="数据查询错误!")
# 绩效排名
@api_project.route("/ScoreRank", methods=["POST"])
def score_rank():
# 项目来源区域分布项目列表
@api_manage.route("/ArealProject", methods=["POST"])
def areal_project():
req_dic = request.get_json()
district = req_dic['district']
project_source = req_dic['project_source']
flag = req_dic['flag'] # 1项目专班,2区县,3市直部门,4驻外办,5服务保障部门
score_list = ''
try:
if flag == 1:
score_list = []
class_obj_list = ProjectClass.query.all()
if not class_obj_list:
return jsonify(code=RET.NODATA, msg='暂无数据!')
for class_obj in class_obj_list:
if not class_obj.class_name:
continue
score_dic = {
'class_name': class_obj.class_name,
'class_score1': class_obj.class_score1,
'class_score2': class_obj.class_score2,
'class_score3': class_obj.class_score3,
'class_score4': class_obj.class_score4,
'total_score': class_obj.total_score if class_obj.total_score else 0
}
score_list.append(score_dic)
score_list.sort(key=lambda s: s["total_score"], reverse=True)
if flag == 2:
district_obj_list = ScoreDistrict.query.all()
if not district_obj_list:
return jsonify(code=RET.NODATA, msg='暂无数据!')
score_list = [{
'district_name': district_obj.district_name,
'district_score1': district_obj.district_score1,
'district_score2': district_obj.district_score2,
'district_score3': district_obj.district_score3,
'district_score4': district_obj.district_score4,
'district_score5': district_obj.district_score5,
'district_score6': district_obj.district_score6,
'district_score7': district_obj.district_score7,
'district_score8': district_obj.district_score8,
"total_district_score": district_obj.district_score1 + district_obj.district_score2 +
district_obj.district_score3 + district_obj.district_score4 +
district_obj.district_score5 + district_obj.district_score6 +
district_obj.district_score7 + district_obj.district_score8}
for district_obj in district_obj_list]
print(score_list)
score_list.sort(key=lambda s: s["total_district_score"], reverse=True)
# 3市直部门
if flag == 3:
unit_obj_list = ScoreUnit.query.all()
if not unit_obj_list:
return jsonify(code=RET.NODATA, msg='暂无数据!')
score_list = [{
'unit_name': unit_obj.unit_name,
'unit_score1': unit_obj.unit_score1,
'unit_score2': unit_obj.unit_score2,
'unit_score3': unit_obj.unit_score3,
'unit_score4': unit_obj.unit_score4,
'unit_score5': unit_obj.unit_score5,
"total_unit_score": unit_obj.unit_score1 + unit_obj.unit_score2 +
unit_obj.unit_score3 + unit_obj.unit_score4 +
unit_obj.unit_score5}
for unit_obj in unit_obj_list]
score_list.sort(key=lambda s: s["total_unit_score"], reverse=True)
# 4驻外办
if flag == 4:
offices_obj_list = ScoreOverseasOffices.query.all()
if not offices_obj_list:
return jsonify(code=RET.NODATA, msg='暂无数据!')
score_list = [{
'offices_name': offices_obj.offices_name,
'offices_score1': offices_obj.offices_score1,
'offices_score2': offices_obj.offices_score2,
'offices_score3': offices_obj.offices_score3,
"total_offices_score": offices_obj.offices_score1 + offices_obj.offices_score2 +
offices_obj.offices_score3}
for offices_obj in offices_obj_list]
score_list.sort(key=lambda s: s["total_offices_score"], reverse=True)
# 5服务保障部门
if flag == 5:
department_obj_list = ScoreServiceDepartment.query.all()
if not department_obj_list:
return jsonify(code=RET.NODATA, msg='暂无数据!')
score_list = [{
'department_name': department_obj.department_name,
'department_score1': department_obj.department_score1,
'department_score2': department_obj.department_score2,
'department_score3': department_obj.department_score3,
'department_score4': department_obj.department_score4,
"total_department_score": department_obj.department_score1 + department_obj.department_score2 +
department_obj.department_score3 + department_obj.department_score4}
for department_obj in department_obj_list]
score_list.sort(key=lambda s: s["total_department_score"], reverse=True)
return jsonify(code=RET.OK, data=score_list, msg='提交成功!')
project_obj = ProjectManagement.query.filter(
ProjectManagement.district == district,
)
if project_source == '京津冀':
project_obj = ProjectManagement.filter(or_(
ProjectManagement.province.like('%北京%'),
ProjectManagement.province.like('%天津%'),
ProjectManagement.province.like('%河北%')
))
elif project_source == '长三角':
project_obj = ProjectManagement.filter(or_(
ProjectManagement.province.like('%江苏%'),
ProjectManagement.province.like('%浙江%'),
ProjectManagement.province.like('%上海%')
))
elif project_source == '珠三角':
project_obj = ProjectManagement.filter(or_(
ProjectManagement.province.like('%广东%'),
ProjectManagement.province.like('%香港%'),
ProjectManagement.province.like('%澳门%')
))
elif project_source == '中原经济区':
project_obj = ProjectManagement.filter(or_(
ProjectManagement.province.like('%河南%'),
ProjectManagement.province.like('%天津%'),
ProjectManagement.province.like('%河北%'),
ProjectManagement.province.like('%长治%'),
ProjectManagement.province.like('%晋城%'),
ProjectManagement.province.like('%运城%'),
ProjectManagement.province.like('%聊城%'),
ProjectManagement.province.like('%菏泽%'),
ProjectManagement.province.like('%泰安%'),
ProjectManagement.province.like('%宿州%'),
ProjectManagement.province.like('%淮北%'),
ProjectManagement.province.like('%阜阳%'),
ProjectManagement.province.like('%亳州%'),
ProjectManagement.province.like('%蚌埠%'),
ProjectManagement.province.like('%淮南%'),
ProjectManagement.province.like('%邢台%'),
ProjectManagement.province.like('%邯郸%'),
))
elif project_source == '其他':
project_obj = ProjectManagement.filter(and_(
ProjectManagement.province.notlike('%河南%'),
ProjectManagement.province.notlike('%天津%'),
ProjectManagement.province.notlike('%河北%'),
ProjectManagement.province.notlike('%长治%'),
ProjectManagement.province.notlike('%晋城%'),
ProjectManagement.province.notlike('%运城%'),
ProjectManagement.province.notlike('%聊城%'),
ProjectManagement.province.notlike('%菏泽%'),
ProjectManagement.province.notlike('%泰安%'),
ProjectManagement.province.notlike('%宿州%'),
ProjectManagement.province.notlike('%淮北%'),
ProjectManagement.province.notlike('%阜阳%'),
ProjectManagement.province.notlike('%亳州%'),
ProjectManagement.province.notlike('%蚌埠%'),
ProjectManagement.province.notlike('%淮南%'),
ProjectManagement.province.notlike('%邢台%'),
ProjectManagement.province.notlike('%邯郸%'),
ProjectManagement.province.notlike('%北京%'),
ProjectManagement.province.notlike('%天津%'),
ProjectManagement.province.notlike('%河北%'),
ProjectManagement.province.notlike('%江苏%'),
ProjectManagement.province.notlike('%浙江%'),
ProjectManagement.province.notlike('%上海%'),
ProjectManagement.province.notlike('%广东%'),
ProjectManagement.province.notlike('%香港%'),
ProjectManagement.province.notlike('%澳门%')
))
else:
return jsonify(code=RET.PARAMERR, msg="参数错误!")
project_obj_list = project_obj.all()
pass
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg='数据查询错误!')
return jsonify(code=RET.DBERR, msg="数据查询错误!")
......@@ -1235,15 +1235,15 @@ class ShanxiTarget(db.Model):
district_name = db.Column(db.String(30), comment='区县名称')
# 签约项目情况
sign_money = db.Column(db.Float, comment='签约金额')
sign_target_money = db.Column(db.Float, comment='目标金额')
sign_target_money = db.Column(db.Float, comment='目标金额(年度目标)')
sign_finish_rate = db.Column(db.Float, comment='完成率')
# 新开工固定资产投资项目计划投资完成情况
plan_invest_money = db.Column(db.Float, comment='计划投资额')
plan_target_money = db.Column(db.Float, comment='目标计划投资额')
plan_target_money = db.Column(db.Float, comment='目标计划投资额(年度目标)')
plan_finish_rate = db.Column(db.Float, comment='计划投资额完成率')
# 固定资产投资项目资金到位情况
arrive_money = db.Column(db.Float, comment='资金到位')
arrive_target_money = db.Column(db.Float, comment='目标资金到位')
arrive_target_money = db.Column(db.Float, comment='目标资金到位(年度目标)')
arrive_finish_rate = db.Column(db.Float, comment='计划投资额完成率')
......@@ -1259,21 +1259,33 @@ class JcTarget(db.Model):
upload_unit = db.Column(db.String(30), comment='上传部门')
upload_people = db.Column(db.String(30), comment='上传人')
grade_sign = db.Column(db.Float, comment='签约项目金额')
grade_start = db.Column(db.Float, comment='项目开工率')
grade_plan_invest = db.Column(db.Float, comment='新开工固定资产投资项目计划投资')
grade_arrive_target1 = db.Column(db.Float, comment='固定资产投资项目资金到位')
grade_arrive_target0 = db.Column(db.Float, comment='非固定资产投资项目资金到位')
grade_sign = db.Column(db.Float, comment='签约项目情况赋分15')
grade_start = db.Column(db.Float, comment='项目开工率赋分5')
grade_plan_invest = db.Column(db.Float, comment='新开工固定资产投资项目计划投资赋分25')
grade_arrive_target1 = db.Column(db.Float, comment='固定资产投资项目资金到位赋分25')
grade_arrive_target0 = db.Column(db.Float, comment='非固定资产投资项目资金到位赋分5')
district_name = db.Column(db.String(30), comment='区县名称')
money_sign = db.Column(db.Float, comment='签约项目金额')
rate_start = db.Column(db.Float, comment='项目开工率')
money_plan_invest = db.Column(db.Float, comment='新开工固定资产投资项目计划投资额')
money_arrive_target1 = db.Column(db.Float, comment='固定资产投资项目资金到位额')
money_arrive_target0 = db.Column(db.Float, comment='非固定资产投资项目资金到位额')
money_sign = db.Column(db.Float, comment='签约项目金额(年度目标)')
rate_start = db.Column(db.Float, comment='项目开工率(年度目标)')
money_plan_invest = db.Column(db.Float, comment='新开工固定资产投资项目计划投资额(年度目标)')
money_arrive_target1 = db.Column(db.Float, comment='固定资产投资项目资金到位额(年度目标)')
money_arrive_target0 = db.Column(db.Float, comment='非固定资产投资项目资金到位额(年度目标)')
# 项目化管理-固定资产投资项目资金到位表
class MoneyArrive(db.Model):
__tablename_ = "money_arrive"
__table_args__ = ({'comment': '项目化管理-固定资产投资项目资金到位表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
is_delete = db.Column(db.Integer, comment='逻辑删除')
data_time = db.Column(db.String(30), comment='数据年份')
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='固定资产投资项目资金到位额(')
......
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