Commit 837174d2 by dong

fix20221117

parent c59cb590
...@@ -3,6 +3,8 @@ import time ...@@ -3,6 +3,8 @@ import time
import datetime import datetime
import random import random
import re import re
import oss2
import pandas as pd import pandas as pd
import xlrd import xlrd
import xlsxwriter import xlsxwriter
...@@ -328,6 +330,69 @@ def update_star_project(row_content): ...@@ -328,6 +330,69 @@ def update_star_project(row_content):
return 'error1' return 'error1'
def upload_daily_picture(file_type, file_name, file):
try:
access_key_id = "LTAI4Fkgi7DUf6jCVW3KNGwT"
access_key_secret = "ynr6TWWNOnpALn3YUICUaXwpp9w4er"
auth = oss2.Auth(access_key_id, access_key_secret)
bucket_name = "zysf-store"
endpoint = "oss-cn-beijing.aliyuncs.com"
bucket = oss2.Bucket(auth, endpoint, bucket_name)
file_name = file_name.split('.')
time_stamp = '{0:%Y%m%d%H%M%S}'.format(datetime.now())
file_name = file_name[0] + time_stamp + '.' + file_name[1]
file_url = ''
if file_type == 1:
bucket.put_object('/晋城招商图谱平台/四库管理文件/文件/' + file_name, file)
file_url = "https://{}.{}/{}".format(bucket_name, endpoint, '/晋城招商图谱平台/四库管理文件/文件/' + file_name)
if file_type == 2:
bucket.put_object('/晋城招商图谱平台/四库管理文件/图片/' + file_name, file)
file_url = "https://{}.{}/{}".format(bucket_name, endpoint, '/晋城招商图谱平台/四库管理文件/图片/' + file_name)
time.sleep(1)
return file_url
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.THIRDERR, msg='第三方系统(阿里云oss存储)出错!')
# 编辑页文件图片删除接口
def file_delete(file_del_list, img_del_list, project_id, flag):
if file_del_list:
try:
for file_id in file_del_list:
if file_id:
file_obj = ProjectFile.query.filter_by(flag=flag, id=file_id, project_id=project_id, file_type=1).first()
db.session.delete(file_obj)
db.session.commit()
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
return 'error'
if img_del_list:
try:
for img_id in img_del_list:
if img_id:
img_obj = ProjectFile.query.filter_by(flag=flag, id=img_id, project_id=project_id, file_type=2).first()
db.session.delete(img_obj)
db.session.commit()
except Exception as e:
db.session.rollback()
current_app.logger.error(e)
return 'error'
return 'ok'
# 记录项目动态
def write_dynamic(user_name, project_id, item, time):
dynamic_obj = ProjectDynamicLog(operation_people=user_name,
project_id=project_id,
item=item,
time=time,
)
db.session.add(dynamic_obj)
db.session.commit()
# 线索库搜索接口 # 线索库搜索接口
@api_manage.route("/SearchProject", methods=["POST"]) @api_manage.route("/SearchProject", methods=["POST"])
def search_project(): def search_project():
...@@ -607,7 +672,7 @@ def batch_del(): ...@@ -607,7 +672,7 @@ def batch_del():
for select_id in select_id_list: for select_id in select_id_list:
project_obj = SikuProject.query.get(select_id) project_obj = SikuProject.query.get(select_id)
if not project_obj: if not project_obj:
return jsonify(code=RET.NODATA, msg="查无此数据!") return jsonify(code=RET.NODATA, msg="查无此项目!")
project_obj.is_delete = 1 project_obj.is_delete = 1
db.session.commit() db.session.commit()
continue continue
...@@ -752,6 +817,7 @@ def distribute_project(): ...@@ -752,6 +817,7 @@ def distribute_project():
token = request.headers['token'] token = request.headers['token']
try: try:
user_obj = verify_token(token) user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!") return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
...@@ -761,7 +827,7 @@ def distribute_project(): ...@@ -761,7 +827,7 @@ def distribute_project():
for district in district_list: for district in district_list:
old_project_obj = SikuProject.query.get(project_id) old_project_obj = SikuProject.query.get(project_id)
if not old_project_obj: if not old_project_obj:
return jsonify(code=RET.NODATA, msg="查无此数据!") return jsonify(code=RET.NODATA, msg="查无此项目!")
old_distribute_condition = old_project_obj.distribute_condition old_distribute_condition = old_project_obj.distribute_condition
if old_distribute_condition and old_distribute_condition == district: if old_distribute_condition and old_distribute_condition == district:
continue continue
...@@ -776,6 +842,14 @@ def distribute_project(): ...@@ -776,6 +842,14 @@ def distribute_project():
# 构造项目编号 # 构造项目编号
time_strf = datetime.now().strftime("%Y%m%d") time_strf = datetime.now().strftime("%Y%m%d")
project_obj_list = SikuProject.query.all() project_obj_list = SikuProject.query.all()
flag = False
for project_obj in project_obj_list:
if project_obj.project_name == old_project_obj.project_name and \
project_obj.distribute_condition == district:
flag = True
break
if flag:
continue
max_project_num = '' max_project_num = ''
if project_obj_list: if project_obj_list:
max_project_num = max([project_obj.project_num for project_obj in project_obj_list]) max_project_num = max([project_obj.project_num for project_obj in project_obj_list])
...@@ -820,14 +894,20 @@ def distribute_project(): ...@@ -820,14 +894,20 @@ def distribute_project():
db.session.add(new_project) db.session.add(new_project)
db.session.commit() db.session.commit()
district_list1.append(district) district_list1.append(district)
if district_list1: if district_list1:
# 记录项目动态
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '分发至 {} 对接库'.format(district_list1), time1)
return jsonify(code=RET.OK, msg="该项目已分发至 {} 对接库。".format(district_list1)) return jsonify(code=RET.OK, msg="该项目已分发至 {} 对接库。".format(district_list1))
else: else:
return jsonify(code=RET.NODATA, msg="不可重复分发!".format(district_list1)) return jsonify(code=RET.DATAEXIST, msg="已存在,不可重复分发!".format(district_list1))
except Exception as e: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return jsonify(code=RET.DATAERR, msg="分发操作出错!") return jsonify(code=RET.DBERR, msg="分发操作出错!")
# 获取项目详情 # 获取项目详情
...@@ -846,7 +926,7 @@ def get_project_detail(): ...@@ -846,7 +926,7 @@ def get_project_detail():
try: try:
project_obj = SikuProject.query.get(project_id) project_obj = SikuProject.query.get(project_id)
if not project_obj: if not project_obj:
return jsonify(code=RET.NODATA, msg="查无此数据!") return jsonify(code=RET.NODATA, msg="查无此项目!")
data = { data = {
"project_name": project_obj.project_name, "project_name": project_obj.project_name,
...@@ -874,18 +954,25 @@ def get_project_detail(): ...@@ -874,18 +954,25 @@ def get_project_detail():
return jsonify(code=RET.OK, data=data, msg="项目详情获取成功!") return jsonify(code=RET.OK, data=data, msg="项目详情获取成功!")
except Exception as e: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return jsonify(code=RET.DATAERR, msg="数据查询失败!") return jsonify(code=RET.DBERR, msg="数据查询失败!")
# 编辑项目详情 # 编辑项目详情
@api_manage.route("/EditProjectDetail", methods=["POST"]) @api_manage.route("/EditProjectDetail", methods=["POST"])
def edit_project_detail(): def edit_project_detail():
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
req_dic = request.get_json() req_dic = request.get_json()
project_id = req_dic['project_id'] project_id = req_dic['project_id']
try: try:
project_obj = SikuProject.query.get(project_id) project_obj = SikuProject.query.get(project_id)
if not project_obj: if not project_obj:
return jsonify(code=RET.NODATA, msg="查无此数据!") return jsonify(code=RET.NODATA, msg="查无此项目!")
project_obj.project_name = req_dic['project_name'] project_obj.project_name = req_dic['project_name']
project_obj.investor_name = req_dic['investor_name'] project_obj.investor_name = req_dic['investor_name']
project_obj.investor_district = req_dic['investor_district'] project_obj.investor_district = req_dic['investor_district']
...@@ -904,10 +991,14 @@ def edit_project_detail(): ...@@ -904,10 +991,14 @@ def edit_project_detail():
project_obj.other_source = req_dic['other_source'] project_obj.other_source = req_dic['other_source']
project_obj.remark = req_dic['remark'] project_obj.remark = req_dic['remark']
db.session.commit() db.session.commit()
# 记录项目动态
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '编辑了项目', time1)
return jsonify(code=RET.OK, msg="编辑成功!") return jsonify(code=RET.OK, msg="编辑成功!")
except Exception as e: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return jsonify(code=RET.DATAERR, msg="编辑操作出错!") return jsonify(code=RET.DBERR, msg="编辑操作出错!")
# 转办功能(转办个其他区县,改变拟落地区域字段内容) # 转办功能(转办个其他区县,改变拟落地区域字段内容)
...@@ -916,6 +1007,7 @@ def project_transition(): ...@@ -916,6 +1007,7 @@ def project_transition():
token = request.headers['token'] token = request.headers['token']
try: try:
user_obj = verify_token(token) user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!") return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
...@@ -927,7 +1019,7 @@ def project_transition(): ...@@ -927,7 +1019,7 @@ def project_transition():
try: try:
project_obj = SikuProject.query.filter_by(id=project_id, flag=flag).first() project_obj = SikuProject.query.filter_by(id=project_id, flag=flag).first()
if not project_obj: if not project_obj:
return jsonify(code=RET.NODATA, msg="查无此数据!") return jsonify(code=RET.NODATA, msg="查无此项目!")
if flag == 2: if flag == 2:
# 对接库 转办:把选定的项目转给其它县区,此项目的拟落地区域,变为新的县区 # 对接库 转办:把选定的项目转给其它县区,此项目的拟落地区域,变为新的县区
...@@ -939,188 +1031,913 @@ def project_transition(): ...@@ -939,188 +1031,913 @@ def project_transition():
project_obj.project_to_area = district project_obj.project_to_area = district
project_obj.flag = 2 project_obj.flag = 2
db.session.commit() db.session.commit()
# 记录项目动态
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '将项目转办至{}。'.format(district), time1)
return jsonify(code=RET.OK, msg="转办成功!") return jsonify(code=RET.OK, msg="转办成功!")
except Exception as e: except Exception as e:
current_app.logger.error(e) current_app.logger.error(e)
return jsonify(code=RET.DATAERR, msg="转办操作出错!") return jsonify(code=RET.DBERR, msg="转办操作出错!")
# 流转功能
@api_manage.route("/ProjectMove", methods=["POST"])
def project_move():
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
try:
req_dic = request.get_json()
project_id = req_dic['project_id']
flag = req_dic['flag'] # 流转到:3为签约库, 4为开工库
project_obj = SikuProject.query.get(project_id)
if not project_obj:
return jsonify(code=RET.NODATA, msg="查无此项目!")
if project_obj.flag == flag:
return jsonify(code=RET.PARAMERR, msg="参数错误!")
pass project_obj.flag = flag
db.session.commit()
# 记录项目动态
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '将项目流转至 {} 。'.format('签约库' if flag == 3 else '开工库' if flag == 4 else ''), time1)
# 批量导出-线索库数据 return jsonify(code=RET.OK, msg="流转成功!")
# @api_manage.route("/BatchExportProject", methods=["POST"]) except Exception as e:
# def batch_export_project(): current_app.logger.error(e)
# req_dic = request.get_json() return jsonify(code=RET.DBERR, msg="流转操作出错!")
# token = request.headers['token']
#
# try:
# user_obj = verify_token(token)
# user_name = user_obj.real_name
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.SESSIONERR, msg="进行批量导入操作时用户信息校验失败,请重新登陆后尝试!")
#
# select_id_list = req_dic["select_id_list"]
# path = './apps/statics/project_file/'
# path = 'D:/中研项目代码/flask_jincheng/apps/statics/project_file/'
# # pro_path = 'http://39.100.39.50:5051/statics/project_file/' # 项目路径
# if not select_id_list:
# return jsonify(code=RET.PARAMERR, msg="参数不能为空!")
# target_data_list = []
# for select_id in select_id_list:
# try:
# project_obj = SikuProject.query.filter_by(id=select_id).first()
# # 提取数据,写入xslx表格
# data_list = []
# distribute_condition = project_obj.distribute_condition # 分发情况
# data_list.append(distribute_condition)
# project_name = project_obj.project_name # 项目名称
# data_list.append(project_name)
# investor_name = project_obj.investor_name # 投资方名称
# data_list.append(investor_name)
# investor_district = project_obj.investor_district # 投资方所在地
# data_list.append(investor_district)
# project_type = project_obj.project_type # 项目类型
# data_list.append(project_type)
# investment_volume = project_obj.investment_volume # 总投资额(万元)
# data_list.append(investment_volume)
# project_year = project_obj.project_year # 项目年份
# data_list.append(project_year)
# project_info = project_obj.project_info # 项目基本情况
# data_list.append(project_info)
# thread_people = project_obj.thread_people # 线索提供人
# data_list.append(thread_people)
# thread_people_mobile = project_obj.thread_people_mobile # 线索提供人联系方式
# data_list.append(thread_people_mobile)
# thread_progress = project_obj.thread_progress # 线索进展
# data_list.append(thread_progress)
# target_data_list.append(data_list)
# # 记录项目动态
# time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# except Exception as e:
# current_app.logger.error(e)
# return jsonify(code=RET.DBERR, msg="数据库查询错误!")
# try:
# sheet_name_titles = {
# "sheet1": ["项目编号(自动生成)", "项目名称", "投资方名称", "投资方所在地", "项目类型",
# "总投资额(万元)", "拟引资额(万元)", "项目基本情况", "项目方基本情况", "线索提供人",
# "单位及职务", "联系方式", "备注",]}
#
# # 大标题(居中、加粗、字号)
# style = xlwt.XFStyle()
# al = xlwt.Alignment()
# al.horz = 0x02 # 设置水平居中
# al.vert = 0x01 # 设置垂直居中
# style.alignment = al
# # 为样式创建字体
# font = xlwt.Font()
# font.name = 'Times New Roman' # 字体
# font.bold = True # 加粗
# font.height = 0x00C8 * 2
# # 设置样式
# style.font = font
#
# # 表头(居中、加粗)
# style1 = xlwt.XFStyle()
# al1 = xlwt.Alignment()
# al1.horz = 0x02 # 设置水平居中
# al1.vert = 0x01 # 设置垂直居中
# style1.alignment = al1
# # style1.alignment.wrap = 1 # 设置自动换行
# # 为样式创建字体
# font = xlwt.Font()
# font.name = 'Times New Roman' # 字体
# font.bold = True # 加粗
# # 设置样式
# style1.font = font
# # 设置边框(THIN实线/DASHED虚线)
# borders = xlwt.Borders()
# borders.left = xlwt.Borders.THIN
# borders.right = xlwt.Borders.THIN
# borders.top = xlwt.Borders.THIN
# borders.bottom = xlwt.Borders.THIN
# style1.borders = borders # Add Borders to Style
#
# # 普通内容
# style2 = xlwt.XFStyle()
# al2 = xlwt.Alignment()
# al2.horz = 0x02 # 设置水平居中
# al2.vert = 0x01 # 设置垂直居中
# style2.alignment = al2
# style2.alignment.wrap = 1 # 设置自动换行
# # 设置边框(THIN实线/DASHED虚线)
# borders = xlwt.Borders()
# borders.left = xlwt.Borders.THIN
# borders.right = xlwt.Borders.THIN
# borders.top = xlwt.Borders.THIN
# borders.bottom = xlwt.Borders.THIN
# style2.borders = borders # Add Borders to Style
#
# # 需要左对齐的 7建设内容、12最新进展、13需要解决的问题
# style3 = xlwt.XFStyle()
# al3 = xlwt.Alignment()
# al3.horz = 0x01 # 设置左对齐
# al3.vert = 0x01 # 设置垂直居中
# style3.alignment = al3
# style3.alignment.wrap = 1 # 设置自动换行
# # 设置边框(THIN实线/DASHED虚线)
# borders = xlwt.Borders()
# borders.left = xlwt.Borders.THIN
# borders.right = xlwt.Borders.THIN
# borders.top = xlwt.Borders.THIN
# borders.bottom = xlwt.Borders.THIN
# style3.borders = borders # Add Borders to Style
#
# # 创建excel
# excel = xlwt.Workbook(encoding='utf-8')
# # 写入表头
# for k, v in sheet_name_titles.items():
# sheet_name = k
# sheet = excel.add_sheet(sheet_name)
# # 写入大标题
# title_name = '线索库'
# # 合并单元格,合并第2行到第4行的第4列到第5列
# sheet.write_merge(0, 0, 0, 17, title_name, style)
# tall_style = xlwt.easyxf('font:height 720')
# sheet.row(0).set_style(tall_style)
# # 写入表头
# head_list = v
# for j in range(len(head_list)):
# sheet.write(1, j, head_list[j], style1)
# # 设置单元格列宽
# if j in [7, 12, 13]:
# sheet.col(j).width = 50 * 256
# else:
# sheet.col(j).width = 30 * 256
#
# """===================我是一条木得感情的分割线============================="""
#
# # 写入内容
# for index, value_list in enumerate(target_data_list, 2):
# for i, value in enumerate(value_list):
# if i in [7, 12, 13]:
# sheet.write(index, i, value, style3)
# else:
# sheet.write(index, i, value, style2)
# 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("/AddProgress", methods=["POST"])
def add_progress():
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
add_time = datetime.now()
try:
req_dic = request.get_json()
project_id = req_dic['project_id']
info = req_dic['info']
flag = req_dic['flag'] # 2为对接库,3为签约库,4为开工库
progress_obj = ProgressCondition(
flag=flag,
add_time=add_time,
info=info,
project_id=project_id
)
db.session.add(progress_obj)
db.session.commit()
# 记录项目动态
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '新增了进展情况。', time1)
return jsonify(code=RET.OK, msg="进展情况新增成功!")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="进展情况新增失败!")
# 编辑项目对接/推进情况(进展)
@api_manage.route("/EditProgress", methods=["POST"]) # 对接库-编辑项目对接情况(进展)
def edit_progress():
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
try:
req_dic = request.get_json()
progress_id = req_dic['progress_id']
info = req_dic['info']
if not info:
return jsonify(code=RET.NODATA, msg="无变更内容!")
progress_obj = ProgressCondition.query.get(progress_id)
project_id = progress_obj.project_id
progress_obj.info = info
db.session.commit()
# 记录项目动态
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '编辑了进展情况。', time1)
return jsonify(code=RET.OK, msg="进展情况编辑成功!")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="进展情况编辑失败!")
# 获取项目详情信息(对接库、签约库、开工库)
@api_manage.route("/CheckProjectDetail", methods=["POST"])
def check_project_detail():
req_dic = request.get_json()
project_id = req_dic['project_id']
# flag = req_dic['flag'] # 2为对接库,3为签约库,4为开工库
token = request.headers['token']
try:
project_obj = SikuProject.query.get(project_id)
flag = project_obj.flag
if flag == 2:
project_data = {"id": project_obj.id,
"project_name": project_obj.project_name, # 项目名称
"investor_name": project_obj.investor_name, # 投资方名称
"investor_district": project_obj.investor_district, # 投资方所在地
"project_type": project_obj.project_type, # 项目类型
"investment_volume": project_obj.investment_volume, # 总投资额(万元)
"project_num": project_obj.project_num, # 项目编号
"investment_volume1": project_obj.investment_volume1, # 拟引资额(万元)
"project_schedule": project_obj.project_schedule, # 项目进展
"stop_reason": project_obj.stop_reason, # 暂停或终止原因
"remark": project_obj.remark, # 备注
"project_to_area": project_obj.project_to_area, # 拟落地区域
"development_area": project_obj.development_area, # 开发区
"garden": project_obj.garden, # 园区
"project_address": project_obj.project_address, # 项目详细地址
# "joint_condition": project_obj.joint_condition, # 项目对接情况
"project_problem": project_obj.project_problem, # 项目当前存在的问题
"project_stalker": project_obj.project_stalker, # 项目跟踪人
"joint_person": project_obj.joint_person, # 对接人
"joint_person_unity": project_obj.joint_person_unity, # 对接人单位及职务
"joint_person_mobile": project_obj.joint_person_mobile, # 对接人联系方式
"project_people": project_obj.project_people, # 项目方联系人
"project_people_unity": project_obj.project_people_unity, # 项目方单位或职务
"project_people_mobile": project_obj.project_people_mobile, # 项目方联系方式
}
if flag == 3:
project_data = {"id": project_obj.id,
"project_name": project_obj.project_name, # 项目名称
"investor_name": project_obj.investor_name, # 投资方名称
"investor_district": project_obj.investor_district, # 投资方所在地
"project_type": project_obj.project_type, # 项目类型
"investment_volume": project_obj.investment_volume, # 总投资额(万元总投资额(万元)
"project_num": project_obj.project_num, # 项目编号
"investment_volume1": project_obj.investment_volume1, # 拟引资额(万元拟引资额(万元)
"project_schedule": project_obj.project_schedule, # 项目进展
"stop_reason": project_obj.stop_reason, # 暂停或终止原因
"remark": project_obj.remark, # 备注
"development_area": project_obj.development_area, # 开发区
"garden": project_obj.garden, # 园区
"project_address": project_obj.project_address, # 项目详细地址
# "joint_condition": project_obj.joint_condition, # 项目对接情况
"project_stalker": project_obj.project_stalker, # 项目跟踪人
"joint_person": project_obj.joint_person, # 对接人
"joint_person_unity": project_obj.joint_person_unity, # 对接人单位及职务
"joint_person_mobile": project_obj.joint_person_mobile, # 对接人联系方式
"project_people": project_obj.project_people, # 项目方联系人
"project_people_unity": project_obj.project_people_unity, # 项目方单位或职务
"project_people_mobile": project_obj.project_people_mobile, # 项目方联系方式
"attract_name": project_obj.attract_name, # 引资方名称
"Party_A_name": project_obj.Party_A_name, # 签约甲方名称
"Party_A_people": project_obj.Party_A_people, # 签约甲方联系人
"Party_A_mobile": project_obj.Party_A_mobile, # 签约甲方联系方式
"Party_B_name": project_obj.Party_B_name, # 签约乙方名称
"Party_B_people": project_obj.Party_B_people, # 签约乙方联系人
"Party_B_mobile": project_obj.Party_B_mobile, # 签约乙方联系方式
"sign_time": project_obj.sign_time.strftime("%Y-%m-%d"), # 签约时间
"project_to_area1": project_obj.project_to_area1, # 落地区域
"sign_style": project_obj.sign_style, # 签约方式
"sign_explain": project_obj.sign_explain, # 其他签约说明
}
if flag == 4:
project_data = {"id": project_obj.id,
"project_name": project_obj.project_name, # 项目名称
"investor_name": project_obj.investor_name, # 投资方名称
"investor_district": project_obj.investor_district, # 投资方所在地
"project_type": project_obj.project_type, # 项目类型
"investment_volume": project_obj.investment_volume, # 总投资额(万元)
"project_num": project_obj.project_num, # 项目编号
"investment_volume1": project_obj.investment_volume1, # 拟引资额(万元)
"project_schedule": project_obj.project_schedule, # 项目进展
"development_area": project_obj.development_area, # 开发区
"garden": project_obj.garden, # 园区
"project_address": project_obj.project_address, # 项目详细地址
"project_problem": project_obj.project_problem, # 项目当前存在的问题
"project_stalker": project_obj.project_stalker, # 项目跟踪人
"joint_person": project_obj.joint_person, # 对接人
"joint_person_unity": project_obj.joint_person_unity, # 对接人单位及职务
"joint_person_mobile": project_obj.joint_person_mobile, # 对接人联系方式
"project_people": project_obj.project_people, # 项目方联系人
"project_people_unity": project_obj.project_people_unity, # 项目方单位或职务
"project_people_mobile": project_obj.project_people_mobile, # 项目方联系方式
"attract_name": project_obj.attract_name, # 引资方名称
"progress_condition": project_obj.progress_condition, # 项目推进情况
"sign_time": project_obj.sign_time, # 签约时间
"investment": project_obj.investment.strftime("%Y-%m-%d"), # 到位资金
"project_to_area1": project_obj.project_to_area1, # 落地区域
"start_time": project_obj.start_time.strftime("%Y-%m-%d"), # 开工时间
"remark": project_obj.remark, # 备注
}
# 项目进展
progress_obj_list = project_obj.progress_conditions
progress_data = []
if progress_obj_list:
progress_data = [{
"id": progress_obj.id,
"time": progress_obj.add_time,
"info": progress_obj.info
} for progress_obj in progress_obj_list if progress_obj.flag == flag]
progress_data = sorted(progress_data, key=lambda x: x['time'], reverse=True)
file_obj_list = project_obj.project_files
file_data = []
three_data = []
if flag == 3:
# 文件
if file_obj_list:
file_data = [{
"id": file_obj.id,
"file_url": file_obj.file_url,
"file_name": file_obj.file_name,
"project_id": file_obj.project_id,
"file_type": file_obj.file_type
} for file_obj in file_obj_list if file_obj.file_type == 1 and file_obj.flag == flag]
# 第三方联系人
three_list = project_obj.sign_threes
three_data = [{
"name": three_obj.name,
"people": three_obj.people,
"mobile": three_obj.mobile,
} for three_obj in three_list]
# 图片
img_data = []
if file_obj_list:
img_data = [{
"id": img_obj.id,
"file_url": img_obj.file_url,
"file_name": img_obj.file_name,
"project_id": img_obj.project_id,
"file_type": img_obj.file_type
} for img_obj in file_obj_list if img_obj.file_type == 2 and img_obj.flag == flag]
return jsonify(code=RET.OK, data={"project_data": project_data,
"three_data": three_data,
"file_data": file_data,
"img_data": img_data,
"progress_data": progress_data,
"msg": "数据获取成功!"})
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="操作失败!数据库查询错误")
# 编辑对接库、签约库、开工库
@api_manage.route("/EditProject", methods=["POST"])
def edit_project():
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
user_id = user_obj.id
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
# 三库共有的
project_id = request.form['project_id']
# flag = request.form['flag'] # 2为对接库,3为签约库,4为开工库
three_list = request.files.getlist('three_list')
img_list = request.files.getlist('img_list')
file_list = request.files.getlist('file_list')
file_del_list = request.form.getlist('file_del_list')
img_del_list = request.form.getlist('img_del_list')
project_name = request.form["project_name"]
investor_name = request.form["investor_name"]
investor_district = request.form["investor_district"]
project_type = request.form["project_type"]
investment_volume = request.form["investment_volume"]
investment_volume1 = request.form["investment_volume1"]
project_schedule = request.form["project_schedule"]
stop_reason = request.form["stop_reason"]
remark = request.form["remark"]
development_area = request.form["development_area"]
garden = request.form["garden"]
project_address = request.form["project_address"]
project_problem = request.form["project_problem"]
project_stalker = request.form["project_stalker"]
joint_person = request.form["joint_person"]
joint_person_unity = request.form["joint_person_unity"]
joint_person_mobile = request.form["joint_person_mobile"]
project_people = request.form["project_people"]
project_people_unity = request.form["project_people_unity"]
project_people_mobile = request.form["project_people_mobile"]
# 个别的
project_to_area = request.form["project_to_area"]
attract_name = request.form["attract_name"]
investment = request.form["investment"]
project_to_area1 = request.form["project_to_area1"]
sign_time = request.form["sign_time"]
start_time = request.form["start_time"]
Party_A_name = request.form["Party_A_name"]
Party_A_people = request.form["Party_A_people"]
Party_A_mobile = request.form["Party_A_mobile"]
Party_B_name = request.form["Party_B_name"]
Party_B_people = request.form["Party_B_people"]
Party_B_mobile = request.form["Party_B_mobile"]
sign_style = request.form["sign_style"]
sign_explain = request.form["sign_explain"]
try:
project_obj = SikuProject.query.get(project_id)
flag = project_obj.flag
project_obj.project_name = project_name
project_obj.investor_name = investor_name
project_obj.investor_district = investor_district
project_obj.project_type = project_type
project_obj.investment_volume = investment_volume
project_obj.investment_volume1 = investment_volume1
project_obj.project_schedule = project_schedule
project_obj.stop_reason = stop_reason
project_obj.remark = remark
project_obj.development_area = development_area
project_obj.garden = garden
project_obj.project_address = project_address
project_obj.project_problem = project_problem
project_obj.project_stalker = project_stalker
project_obj.joint_person = joint_person
project_obj.joint_person_unity = joint_person_unity
project_obj.joint_person_mobile = joint_person_mobile
project_obj.project_people = project_people
project_obj.project_people_unity = project_people_unity
project_obj.project_people_mobile = project_people_mobile
if project_to_area and flag == 2:
project_obj.project_to_area = project_to_area
if attract_name and flag in [3, 4]:
project_obj.attract_name = attract_name
if investment and flag == 4:
project_obj.investment = investment
if project_to_area1 and flag in [3, 4]:
project_obj.project_to_area1 = project_to_area1
if sign_time and flag in [3, 4]:
project_obj.sign_time = sign_time
if start_time and flag in [3, 4]:
project_obj.start_time = start_time
if Party_A_name and flag == 4:
project_obj.Party_A_name = Party_A_name
if Party_A_people and flag == 4:
project_obj.Party_A_people = Party_A_people
if Party_A_mobile and flag == 4:
project_obj.Party_A_mobile = Party_A_mobile
if Party_B_name and flag == 4:
project_obj.Party_B_name = Party_B_name
if Party_B_people and flag == 4:
project_obj.Party_B_people = Party_B_people
if Party_B_mobile and flag == 4:
project_obj.Party_B_mobile = Party_B_mobile
if sign_style and flag == 4:
project_obj.sign_style = sign_style
if sign_explain and flag == 4:
project_obj.sign_explain = sign_explain
try:
if three_list:
for three_obj in three_list:
three_obj = SignThree(
name=three_obj.name,
people=three_obj.people,
mobile=three_obj.mobile,
project_id=project_id
)
db.session.add(three_obj)
db.session.commit()
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="第三方保存出错,编辑失败!")
# 删除文件和图片
if file_del_list or img_del_list:
result = file_delete(file_del_list, img_del_list, project_id, flag)
if result == 'error':
return jsonify(code=RET.DBERR, msg="附件删除异常,编辑失败!")
edit_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# flag1 = 0
# flag2 = 0
try:
# 上传文件
if file_list:
for file_obj in file_list:
file_name = file_obj.filename
file_url = upload_daily_picture(1, file_name, file_obj)
# 存入数据库
file_obj = ProjectFile(project_id=project_id,
flag=flag,
file_type=1,
file_name=file_name,
file_url=file_url,
upload_time=edit_time,
upload_people=user_name,
upload_people_id=user_id
)
db.session.add(file_obj)
db.session.commit()
flag1 = 1
# 上传图片
if img_list:
for img_obj in img_list:
img_name = img_obj.filename
img_url = upload_daily_picture(2, img_name, img_obj)
# 存入数据库
img_obj = ProjectFile(project_id=project_id,
flag=flag,
file_type=2,
file_name=img_name,
file_url=img_url,
upload_time=edit_time,
upload_people=user_name,
upload_people_id=user_id
)
db.session.add(img_obj)
db.session.commit()
flag2 = 1
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="文件/图片上传出错,编辑失败!")
# msg1 = ''
# msg2 = ''
# if flag1 == 1:
# msg1 = '文件上传成功。'
# if flag2 == 1:
# msg2 = '图片上传成功。'
# return jsonify(code=RET.OK, msg="编辑成功!" + msg1 + msg2)
db.session.commit()
# 记录项目动态
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '编辑了项目详情信息。', time1)
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("/BatchExportProject1", methods=["POST"])
def batch_export_project1():
req_dic = request.get_json()
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
select_id_list = req_dic["select_id_list"]
path = './apps/statics/project_file/'
pro_path = 'D:/中研项目代码/flask_jincheng/apps/statics/project_file/'
# pro_path = 'http://39.100.39.50:5051/statics/project_file/' # 项目路径
if not select_id_list:
return jsonify(code=RET.PARAMERR, msg="参数不能为空!")
target_data_list = []
for select_id in select_id_list:
try:
project_obj = SikuProject.query.filter_by(id=select_id).first()
# 提取数据,写入xslx表格
data_list = []
project_num = project_obj.project_num # 项目名称
data_list.append(project_num)
project_name = project_obj.project_name # 项目名称
data_list.append(project_name)
investor_name = project_obj.investor_name # 投资方名称
data_list.append(investor_name)
investor_district = project_obj.investor_district # 投资方所在地
data_list.append(investor_district)
project_type = project_obj.project_type # 项目类型
data_list.append(project_type)
investment_volume = project_obj.investment_volume # 总投资额(万元)
data_list.append(investment_volume)
investment_volume1 = project_obj.investment_volume1 # ni投资额(万元)
data_list.append(investment_volume1)
project_info = project_obj.project_info # 项目基本情况
data_list.append(project_info)
project_info1 = project_obj.project_info1 # 项目方基本情况
data_list.append(project_info1)
thread_people = project_obj.thread_people # 线索提供人
data_list.append(thread_people)
thread_people_unity = project_obj.thread_people_unity # 线索提供人单位
data_list.append(thread_people_unity)
thread_people_mobile = project_obj.thread_people_mobile # 线索提供人联系方式
data_list.append(thread_people_mobile)
remark = project_obj.remark # 备注
data_list.append(remark)
target_data_list.append(data_list)
# 记录项目动态
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误!")
try:
sheet_name_titles = {
"sheet1": ["项目编号(自动生成)", "项目名称", "投资方名称", "投资方所在地", "项目类型",
"总投资额(万元)", "拟引资额(万元)", "项目基本情况", "项目方基本情况", "线索提供人",
"单位及职务", "联系方式", "备注",]}
head_list = ''
sheet = ''
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)
# 记录项目动态
for project_id in select_id_list:
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '导出了项目文件。', time1)
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("/BatchExportProject2", methods=["POST"])
def batch_export_project2():
req_dic = request.get_json()
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
select_id_list = req_dic["select_id_list"]
path = './apps/statics/project_file/'
pro_path = 'D:/中研项目代码/flask_jincheng/apps/statics/project_file/'
# pro_path = 'http://39.100.39.50:5051/statics/project_file/' # 项目路径
if not select_id_list:
return jsonify(code=RET.PARAMERR, msg="参数不能为空!")
target_data_list = []
for select_id in select_id_list:
try:
project_obj = SikuProject.query.filter_by(id=select_id).first()
# 提取数据,写入xslx表格
data_list = []
project_num = project_obj.project_num # 项目名称
data_list.append(project_num)
project_name = project_obj.project_name # 项目名称
data_list.append(project_name)
investor_name = project_obj.investor_name # 投资方名称
data_list.append(investor_name)
investor_district = project_obj.investor_district # 投资方所在地
data_list.append(investor_district)
project_type = project_obj.project_type # 项目类型
data_list.append(project_type)
investment_volume = project_obj.investment_volume # 总投资额(万元)
data_list.append(investment_volume)
investment_volume1 = project_obj.investment_volume1 # ni投资额(万元)
data_list.append(investment_volume1)
project_to_area1 = project_obj.project_to_area1 # ni投资额(万元)
data_list.append(project_to_area1)
development_area = project_obj.development_area # ni投资额(万元)
data_list.append(development_area)
project_address = project_obj.project_address # ni投资额(万元)
data_list.append(project_address)
joint_condition = project_obj.joint_condition # ni投资额(万元)
data_list.append(joint_condition)
project_problem = project_obj.project_problem # ni投资额(万元)
data_list.append(project_problem)
project_stalker = project_obj.project_stalker # ni投资额(万元)
data_list.append(project_stalker)
joint_person = project_obj.joint_person # ni投资额(万元)
data_list.append(joint_person)
joint_person_unity = project_obj.joint_person_unity # ni投资额(万元)
data_list.append(joint_person_unity)
joint_person_mobile = project_obj.joint_person_mobile # ni投资额(万元)
data_list.append(joint_person_mobile)
project_people = project_obj.project_people # ni投资额(万元)
data_list.append(project_people)
project_people_unity = project_obj.project_people_unity # ni投资额(万元)
data_list.append(project_people_unity)
project_people_mobile = project_obj.project_people_mobile # ni投资额(万元)
data_list.append(project_people_mobile)
remark = project_obj.remark # 备注
data_list.append(remark)
target_data_list.append(data_list)
# 记录项目动态
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误!")
try:
sheet_name_titles = {
"sheet1": ["项目编号(自动生成)", "项目名称", "投资方名称", "投资方所在地", "项目类型",
"总投资额(万元)", "拟投资额(万元)", "拟落地区域", "开发区", "项目详细地址", "项目对接情况",
"项目当前存在问题", "项目跟踪人",
"对接人", "对接人单位及职务", "对接人联系方式", "项目方联系人",
"项目方单位及职务","项目方联系方式","备注",]}
head_list = ''
sheet = ''
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)
# 记录项目动态
for project_id in select_id_list:
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '导出了项目文件。', time1)
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("/BatchExportProject3", methods=["POST"])
def batch_export_project3():
req_dic = request.get_json()
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
select_id_list = req_dic["select_id_list"]
path = './apps/statics/project_file/'
pro_path = 'D:/中研项目代码/flask_jincheng/apps/statics/project_file/'
# pro_path = 'http://39.100.39.50:5051/statics/project_file/' # 项目路径
if not select_id_list:
return jsonify(code=RET.PARAMERR, msg="参数不能为空!")
target_data_list = []
for select_id in select_id_list:
try:
project_obj = SikuProject.query.filter_by(id=select_id).first()
# 提取数据,写入xslx表格
data_list = []
project_num = project_obj.project_num # 项目名称
data_list.append(project_num)
project_name = project_obj.project_name # 项目名称
data_list.append(project_name)
attract_name = project_obj.attract_name # 投资方名称
data_list.append(attract_name)
investor_name = project_obj.investor_name # 投资方名称
data_list.append(investor_name)
investor_district = project_obj.investor_district # 投资方所在地
data_list.append(investor_district)
project_type = project_obj.project_type # 项目类型
data_list.append(project_type)
investment_volume = project_obj.investment_volume # 总投资额(万元)
data_list.append(investment_volume)
investment_volume1 = project_obj.investment_volume1 # ni投资额(万元)
data_list.append(investment_volume1)
project_to_area = project_obj.project_to_area # ni投资额(万元)
data_list.append(project_to_area)
development_area = project_obj.development_area # ni投资额(万元)
data_list.append(development_area)
project_address = project_obj.project_address # ni投资额(万元)
data_list.append(project_address)
progress_condition = project_obj.progress_condition # ni投资额(万元)
data_list.append(progress_condition)
Party_A_name = project_obj.Party_A_name # ni投资额(万元)
data_list.append(Party_A_name)
Party_A_people = project_obj.Party_A_people # ni投资额(万元)
data_list.append(Party_A_people)
Party_A_mobile = project_obj.Party_A_mobile # ni投资额(万元)
data_list.append(Party_A_mobile)
Party_B_name = project_obj.Party_B_name # ni投资额(万元)
data_list.append(Party_B_name)
Party_B_people = project_obj.Party_B_people # ni投资额(万元)
data_list.append(Party_B_people)
Party_B_mobile = project_obj.Party_B_mobile # ni投资额(万元)
data_list.append(Party_B_mobile)
sign_time = project_obj.sign_time # ni投资额(万元)
data_list.append(sign_time)
project_stalker = project_obj.project_stalker # ni投资额(万元)
data_list.append(project_stalker)
joint_person = project_obj.joint_person # ni投资额(万元)
data_list.append(joint_person)
joint_person_unity = project_obj.joint_person_unity # ni投资额(万元)
data_list.append(joint_person_unity)
joint_person_mobile = project_obj.joint_person_mobile # ni投资额(万元)
data_list.append(joint_person_mobile)
project_people = project_obj.project_people # ni投资额(万元)
data_list.append(project_people)
project_people_unity = project_obj.project_people_unity # ni投资额(万元)
data_list.append(project_people_unity)
project_people_mobile = project_obj.project_people_mobile # ni投资额(万元)
data_list.append(project_people_mobile)
remark = project_obj.remark # 备注
data_list.append(remark)
target_data_list.append(data_list)
# 记录项目动态
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误!")
try:
sheet_name_titles = {
"sheet1": ["项目编号(自动生成)", "项目名称", "引资方名称", "投资方名称", "投资方所在地",
"项目类型", "总投资额(万元)", "拟投资额(万元)", "落地区域", "开发区", "项目详细地址",
"项目推进情况", "签约甲方名称", "签约甲方联系人", "签约甲方联系方式", "签约乙方名称",
"签约乙方联系人", "签约乙方联系方式", "签约时间", "项目跟踪人", "对接人", "对接人单位及职务",
"对接人联系方式", "项目方联系人", "项目方单位及职务", "项目方联系方式", "备注"]}
head_list = ''
sheet = ''
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)
# 记录项目动态
for project_id in select_id_list:
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '导出了项目文件。', time1)
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("/BatchExportProject4", methods=["POST"])
def batch_export_project4():
req_dic = request.get_json()
token = request.headers['token']
try:
user_obj = verify_token(token)
user_name = user_obj.real_name
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="用户信息校验失败,请重新登陆后尝试!")
select_id_list = req_dic["select_id_list"]
path = './apps/statics/project_file/'
pro_path = 'D:/中研项目代码/flask_jincheng/apps/statics/project_file/'
# pro_path = 'http://39.100.39.50:5051/statics/project_file/' # 项目路径
if not select_id_list:
return jsonify(code=RET.PARAMERR, msg="参数不能为空!")
target_data_list = []
for select_id in select_id_list:
try:
project_obj = SikuProject.query.filter_by(id=select_id).first()
# 提取数据,写入xslx表格
data_list = []
project_num = project_obj.project_num # 项目名称
data_list.append(project_num)
project_name = project_obj.project_name # 项目名称
data_list.append(project_name)
attract_name = project_obj.attract_name # 投资方名称
data_list.append(attract_name)
investor_name = project_obj.investor_name # 投资方名称
data_list.append(investor_name)
investor_district = project_obj.investor_district # 投资方所在地
data_list.append(investor_district)
project_type = project_obj.project_type # 项目类型
data_list.append(project_type)
investment_volume = project_obj.investment_volume # 总投资额(万元)
data_list.append(investment_volume)
investment_volume1 = project_obj.investment_volume1 # ni投资额(万元)
data_list.append(investment_volume1)
investment = project_obj.investment # ni投资额(万元)
data_list.append(investment)
project_to_area = project_obj.project_to_area # ni投资额(万元)
data_list.append(project_to_area)
development_area = project_obj.development_area # ni投资额(万元)
data_list.append(development_area)
project_address = project_obj.project_address # ni投资额(万元)
data_list.append(project_address)
progress_condition = project_obj.progress_condition # ni投资额(万元)
data_list.append(progress_condition)
project_problem = project_obj.project_problem # ni投资额(万元)
data_list.append(project_problem)
sign_time = project_obj.sign_time # ni投资额(万元)
data_list.append(sign_time)
start_time = project_obj.start_time # ni投资额(万元)
data_list.append(start_time)
project_stalker = project_obj.project_stalker # ni投资额(万元)
data_list.append(project_stalker)
joint_person = project_obj.joint_person # ni投资额(万元)
data_list.append(joint_person)
joint_person_unity = project_obj.joint_person_unity # ni投资额(万元)
data_list.append(joint_person_unity)
joint_person_mobile = project_obj.joint_person_mobile # ni投资额(万元)
data_list.append(joint_person_mobile)
project_people = project_obj.project_people # ni投资额(万元)
data_list.append(project_people)
project_people_unity = project_obj.project_people_unity # ni投资额(万元)
data_list.append(project_people_unity)
project_people_mobile = project_obj.project_people_mobile # ni投资额(万元)
data_list.append(project_people_mobile)
remark = project_obj.remark # 备注
data_list.append(remark)
target_data_list.append(data_list)
# 记录项目动态
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库查询错误!")
try:
sheet_name_titles = {
"sheet1": ["项目编号(自动生成)", "项目名称", "引资方名称", "投资方名称", "投资方所在地",
"项目类型", "总投资额(万元)", "拟投资额(万元)", "到位资金(万元)", "落地区域", "开发区",
"项目详细地址", "项目推进情况", "项目当前存在问题", "签约时间", "开工时间",
"项目跟踪人", "对接人", "对接人单位及职务", "对接人联系方式", "项目方联系人", "项目方单位及职务",
"项目方联系方式", "备注"]}
head_list = ''
sheet = ''
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)
# 记录项目动态
for project_id in select_id_list:
time1 = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
write_dynamic(user_name, project_id, '导出了项目文件。', time1)
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="批量导出操作失败!")
......
...@@ -1034,7 +1034,8 @@ class GovDepartment(db.Model): ...@@ -1034,7 +1034,8 @@ class GovDepartment(db.Model):
"""招商资源管理""" """招商资源管理"""
class SikuProject(db.Model): # 四库管理-项目信息表 # 四库管理-项目信息表
class SikuProject(db.Model):
__tablename_ = "siku_project" __tablename_ = "siku_project"
__table_args__ = ({'comment': '四库管理-项目信息表'}) # 添加表注释 __table_args__ = ({'comment': '四库管理-项目信息表'}) # 添加表注释
# 项目标签 # 项目标签
...@@ -1072,6 +1073,7 @@ class SikuProject(db.Model): # 四库管理-项目信息表 ...@@ -1072,6 +1073,7 @@ class SikuProject(db.Model): # 四库管理-项目信息表
# 对接库 # 对接库
project_to_area = db.Column(db.String(20), comment='拟落地区域') project_to_area = db.Column(db.String(20), comment='拟落地区域')
development_area = db.Column(db.String(20), comment='开发区') development_area = db.Column(db.String(20), comment='开发区')
garden = db.Column(db.String(20), comment='园区')
project_address = db.Column(db.String(20), comment='项目详细地址') project_address = db.Column(db.String(20), comment='项目详细地址')
joint_condition = db.Column(db.String(20), comment='项目对接情况') joint_condition = db.Column(db.String(20), comment='项目对接情况')
project_problem = db.Column(db.String(20), comment='项目当前存在的问题') project_problem = db.Column(db.String(20), comment='项目当前存在的问题')
...@@ -1094,6 +1096,8 @@ class SikuProject(db.Model): # 四库管理-项目信息表 ...@@ -1094,6 +1096,8 @@ class SikuProject(db.Model): # 四库管理-项目信息表
Party_B_mobile = db.Column(db.String(20), comment='签约乙方联系方式') Party_B_mobile = db.Column(db.String(20), comment='签约乙方联系方式')
sign_time = db.Column(db.DateTime, comment='签约时间') sign_time = db.Column(db.DateTime, comment='签约时间')
sign_year = db.Column(db.Integer, comment='签约年份') sign_year = db.Column(db.Integer, comment='签约年份')
sign_style = db.Column(db.String(20), comment='签约方式')
sign_explain = db.Column(db.String(255), comment='其他签约说明')
# 开工库 # 开工库
investment = db.Column(db.String(20), comment='到位资金') investment = db.Column(db.String(20), comment='到位资金')
...@@ -1102,7 +1106,54 @@ class SikuProject(db.Model): # 四库管理-项目信息表 ...@@ -1102,7 +1106,54 @@ class SikuProject(db.Model): # 四库管理-项目信息表
start_year = db.Column(db.Integer, comment='开工年份') start_year = db.Column(db.Integer, comment='开工年份')
# 四库管理对接库-项目进展(项目对接情况/项目推进情况)
class ProgressCondition(db.Model):
__tablename_ = "progress_condition"
__table_args__ = ({'comment': '四库管理对接库-项目进展(项目对接情况/项目推进情况)'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
flag = db.Column(db.Integer, comment='2为对接库,3为签约库,4为开工库')
add_time = db.Column(db.DateTime, comment='添加时间')
info = db.Column(db.String(20), comment='项目对接情况')
project_id = db.Column(db.Integer, db.ForeignKey("siku_project.id"), comment='外键id,项目id')
project = db.relationship('SikuProject', backref=db.backref('progress_conditions')) # 项目1-N项目对接情况
# 四库管理对接库-相关印证资料图片
class ProjectFile(db.Model):
__tablename_ = "project_file"
__table_args__ = ({'comment': '四库管理对接库-相关印证资料图片'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
flag = db.Column(db.Integer, comment='2为对接库,3为签约库,4为开工库')
file_type = db.Column(db.Integer, comment='1文件,2图片')
file_url = db.Column(db.String(300), comment='相关印证资料图片url')
file_name = db.Column(db.String(20), comment='相关印证资料图片名称')
upload_time = db.Column(db.String(20), comment='上传时间')
upload_people = db.Column(db.String(20), comment='上传人')
upload_people_id = db.Column(db.Integer, comment='上传人id')
project_id = db.Column(db.Integer, db.ForeignKey("siku_project.id"), comment='外键id,项目id')
project = db.relationship('SikuProject', backref=db.backref('project_files')) # 项目1-N项目对接情况
# 签约库-签约的第三方
class SignThree(db.Model):
__tablename_ = "sign_three"
__table_args__ = ({'comment': '签约库-签约的第三方'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
# flag = db.Column(db.Integer, comment='2为对接库,3为签约库,4为开工库')
name = db.Column(db.String(20), comment='第三方名称')
people = db.Column(db.String(20), comment='第三方联系人')
mobile = db.Column(db.String(20), comment='第三方联系方式')
project_id = db.Column(db.Integer, db.ForeignKey("siku_project.id"), comment='外键id,项目id')
project = db.relationship('SikuProject', backref=db.backref('sign_threes')) # 项目1-N项目对接情况
# 四库管理-项目动态数据表
class ProjectDynamicLog(db.Model):
__tablename_ = "project_dynamic_log"
__table_args__ = ({'comment': '四库管理-项目动态数据表'}) # 添加表注释
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键id')
project_id = db.Column(db.Integer, comment='项目id')
operation_people = db.Column(db.String(30), comment='操作人')
item = db.Column(db.String(255), comment='动态')
time = db.Column(db.String(30), comment='时间')
\ No newline at end of file
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