You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

381 lines
13 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import os
from flask import (
Flask,
send_file, request, jsonify, make_response
)
from gevent import pywsgi
from Model.Bussines import *
from Model.HuiJiModel import *
from Utils.OfficeUtil import *
app = Flask(__name__)
# 当前目录
file_path_and_name = os.path.abspath(__file__)
basepath = os.path.dirname(os.path.abspath(__file__))
#  model层实例
hm = HuiJiModel()
# 异步获取报送单位数据
@app.route('/Mars/getSelectTree', methods=['GET'])
def getSelectTree():
_id = request.args.get("id")
return hm.getSelectTree(_id)
# 所有县区
@app.route('/Mars/getXianQu', methods=['GET'])
def getXianQu():
res = hm.getXianQu()
return jsonify(success=True, message='获取成功', data=res)
@app.route('/Mars/exportPpt', methods=['GET'])
def exportPpt():
year = int(request.args.get("year"))
path = basepath + '/Out/' + str(year) + '.pptx'
# 如果存在,直接返回
if os.path.exists(path):
return send_file(path, as_attachment=True, download_name="PPT版本" + str(year) + "年年报.pptx")
from_to = str(year) + "-" + str(year + 1) # 开始终止年份
# 修改Ppt
ppt = Presentation(basepath + '/Template/Template.pptx')
# 替换城市
PptReplaceText(ppt, '{city}', city)
# 替换年份
PptReplaceText(ppt, '{year}', from_to)
ReplaceTxtInTable(ppt, '{year}', from_to)
# 以下五个有图有数
data = getSchoolInfo(basepath, year) # 获取学校情况
for key in data:
PptReplaceText(ppt, "{" + key + "}", str(data[key]))
ReplaceTxtInTable(ppt, "{" + key + "}", str(data[key]))
data = getStudentInfo(basepath, year) # 获取学生情况
for key in data:
PptReplaceText(ppt, "{" + key + "}", str(data[key]))
ReplaceTxtInTable(ppt, "{" + key + "}", str(data[key]))
data = getJzgInfo(basepath, year) # 获取教职工
for key in data:
PptReplaceText(ppt, "{" + key + "}", str(data[key]))
ReplaceTxtInTable(ppt, "{" + key + "}", str(data[key]))
data = getZrjsInfo(basepath, year) # 获取专任教师
for key in data:
PptReplaceText(ppt, "{" + key + "}", str(data[key]))
ReplaceTxtInTable(ppt, "{" + key + "}", str(data[key]))
data = getZdmjInfo(basepath, year) # 获取办学条件的占地面积
for key in data:
PptReplaceText(ppt, "{" + key + "}", str(data[key]))
ReplaceTxtInTable(ppt, "{" + key + "}", str(data[key]))
# 办学条件的其它,这个没有图
data = getQtInfo(year)
for key in data:
PptReplaceText(ppt, "{" + key + "}", str(data[key]))
ReplaceTxtInTable(ppt, "{" + key + "}", str(data[key]))
# 替换图片
for i in range(1, 6):
PptReplacePic(ppt, basepath + "/OutImage/" + str(i) + ".png", basepath + "/Image/" + str(i) + ".png")
# 生成PowerPoint文档 
ppt.save(path)
print("恭喜PowerPoint文档替换文字与图片成功完成")
return send_file(path, as_attachment=True, download_name="PPT版本" + str(year) + "年年报.pptx")
@app.route('/Mars/exportDoc', methods=['GET'])
def exportDoc():
year = int(request.args.get("year"))
path = basepath + '/Out/' + str(year) + '.docx'
# 如果存在,直接返回
if os.path.exists(path):
return send_file(path, as_attachment=True, download_name="Word版本" + str(year) + "年年报.docx")
from_to = str(year) + "-" + str(year + 1) # 开始终止年份
# 修改Word
document = Document(basepath + "/Template/Template.docx")
# 替换城市
WordReplaceText(document, "{city}", city)
# 替换年份
WordReplaceText(document, "{year}", from_to)
# 以下五个有图有数
data = getSchoolInfo(basepath, year) # 获取学校情况
for key in data:
WordReplaceText(document, "{" + key + "}", str(data[key]))
data = getStudentInfo(basepath, year) # 获取学生情况
for key in data:
WordReplaceText(document, "{" + key + "}", str(data[key]))
data = getJzgInfo(basepath, year) # 获取教职工
for key in data:
WordReplaceText(document, "{" + key + "}", str(data[key]))
data = getZrjsInfo(basepath, year) # 获取专任教师
for key in data:
WordReplaceText(document, "{" + key + "}", str(data[key]))
data = getZdmjInfo(basepath, year) # 获取办学条件的占地面积
for key in data:
WordReplaceText(document, "{" + key + "}", str(data[key]))
# 办学条件的其它,这个没有图
data = getQtInfo(year)
for key in data:
WordReplaceText(document, "{" + key + "}", str(data[key]))
# 替换图片
for i in range(1, 6):
WordReplacePic(document, "{pic" + str(i) + "}", basepath + "/OutImage/" + str(i) + ".jpg")
# 生成Word文档 
document.save(path)
print("恭喜Word文档替换文字与图片成功完成")
return send_file(path, as_attachment=True, download_name="Word版本" + str(year) + "年年报.docx")
# 创建模板
@app.route('/Mars/createModule', methods=['POST'])
def createModule():
module_name = request.form.get("module_name")
module_body = request.form.get("module_body")
module_id = hm.createModule(module_name=module_name, module_body=module_body)
return jsonify(success=True, module_id=module_id, message='保存成功')
# 修改模板
@app.route('/Mars/updateModule', methods=['POST'])
def updateModule():
module_id = request.form.get("module_id")
module_name = request.form.get("module_name")
module_body = request.form.get("module_body")
res = hm.updateModule(module_id=module_id, module_name=module_name, module_body=module_body)
return jsonify(success=res['success'], message=res['message'])
#  删除模板
@app.route('/Mars/delModule', methods=['POST'])
def delModule():
module_id = request.form.get("module_id")
flag = hm.delModule(module_id=module_id)
if flag:
return jsonify(success=True, message='保存成功')
else:
return jsonify(success=False, message='此模板已被使用,不能删除!')
#  获取模板
@app.route('/Mars/getModule', methods=['GET'])
def getModule():
module_id = request.args.get("module_id")
res = hm.getModule(module_id)
print(res)
return jsonify(success=True, message='查询成功', data=res)
# 获取模块列表,支持关键字查询
@app.route('/Mars/listModule', methods=['GET'])
def listModule():
keyword = request.args.get("keyword")
page = int(request.args.get("page"))
limit = int(request.args.get("limit"))
res, cnt = hm.listModule(keyword, page, limit)
return jsonify(CommonUtil.renderJsonForLayUI(res, cnt))
'''=================================================================================================================='''
# 创建任务
@app.route('/Mars/createTask', methods=['POST'])
def createTask():
module_id = request.form.get("module_id")
task_name = request.form.get("task_name")
range_json = request.form.get("range_json")
end_date = request.form.get("end_date")
hm.createTask(module_id, task_name, range_json, end_date)
return jsonify(success=True, message='创建成功')
# 修改任务
@app.route('/Mars/updateTask', methods=['POST'])
def updateTask():
task_id = request.form.get("task_id")
task_name = request.form.get("task_name")
range_json = request.form.get("range_json")
end_date = request.form.get("end_date")
module_id = request.form.get("module_id")
hm.updateTask(task_id, module_id, task_name, range_json, end_date)
return jsonify(success=True, message='保存成功')
# 删除任务
@app.route('/Mars/delTask', methods=['POST'])
def delTask():
task_id = request.form.get("task_id")
hm.delTask(task_id)
return jsonify(success=True, message='保存成功')
# 获取任务
@app.route('/Mars/getTask', methods=['GET'])
def getTask():
task_id = request.args.get("task_id")
res = hm.getTask(task_id)
# 扩展一下前缀
expandInfo = hm.expandTaskReceiveOrgsPrefix(res)
res["expandInfo"] = expandInfo
return jsonify(success=True, message='获取成功', data=res)
# 获取任务列表
@app.route('/Mars/listTask', methods=['GET'])
def listTask():
page = int(request.args.get("page"))
limit = int(request.args.get("limit"))
keyword = request.args.get("keyword")
is_publish = -1
if request.args.get("is_publish") is not None:
is_publish = int(request.args.get("is_publish"))
res, cnt = hm.listTask(keyword, page, limit, is_publish)
return jsonify(CommonUtil.renderJsonForLayUI(res, cnt))
# 发布任务
@app.route('/Mars/publishTask', methods=['POST'])
def publishTask():
task_id = int(request.form.get("task_id"))
hm.publishTask(task_id)
return jsonify(success=True, message='发布成功!')
# 登录接口
# http://127.0.0.1:8888/Mars/doLogin?org_name=青山桥镇鳌鱼学校
@app.route('/Mars/doLogin', methods=['GET'])
def doLogin():
org_name = request.args.get("org_name")
organizationno = hm.doLogin(org_name)
resp = make_response(jsonify(success=True, message='登录成功!')) # "success"是响应体
resp.set_cookie("organizationno", organizationno, httponly=True)
return resp
# 保存学校端的录入结果
@app.route('/Mars/updateTaskForSchool', methods=['POST'])
def updateTaskForSchool():
org_code = request.cookies.get("organizationno")
if org_code is None:
return jsonify(success=False, message='请先登录后再进行操作')
task_id = request.form.get("task_id")
resultJson = request.form.get("resultJson")
hm.updateTaskForSchool(org_code, task_id, resultJson)
return jsonify(success=True, message='保存成功')
# 获取任务列表For School
# http://192.168.100.100:8888/Mars/doLogin?org_name=%E6%A1%83%E6%BA%90%E5%8E%BF%E9%BB%84%E7%9F%B3%E9%95%87%E4%B8%AD%E5%AD%A6
# http://127.0.0.1:8888/Mars/listTaskForSchool?page=1&limit=50
# http://192.168.100.100:8888/Mars/listTaskForSchool?page=1&limit=50
@app.route('/Mars/listTaskForSchool', methods=['GET'])
def listTaskForSchool():
org_code = request.cookies.get("organizationno")
if org_code is None:
return jsonify(success=False, message='请先登录后再进行操作')
page = int(request.args.get("page"))
limit = int(request.args.get("limit"))
keyword = request.args.get("keyword")
flag = request.args.get("flag")
res, cnt = hm.listTaskForSchool(keyword, org_code, flag, page, limit)
return jsonify(CommonUtil.renderJsonForLayUI(res, cnt))
# 显示某条任务的填报情况
@app.route('/Mars/getTaskForSchool', methods=['GET'])
def getTaskForSchool():
org_code = request.args.get("org_code")
if org_code is None:
org_code = request.cookies.get("organizationno")
if org_code is None:
return jsonify(success=False, message='请先登录后再进行操作')
task_id = request.args.get("task_id")
data = hm.getTaskForSchool(org_code, task_id)
return jsonify(data)
# http://127.0.0.1:8888/Mars/getTaskFillInfo?task_id=1&page=1&limit=50&flag=0
# 获取填报情况
@app.route('/Mars/getTaskFillInfo', methods=['GET'])
def getTaskFillInfo():
task_id = request.args.get("task_id")
page = int(request.args.get("page"))
limit = int(request.args.get("limit"))
flag = request.args.get("flag")
res, cnt = hm.getTaskFillInfo(task_id, flag, page, limit)
return jsonify(CommonUtil.renderJsonForLayUI(res, cnt))
# 获取表单类型
@app.route('/Mars/getFormTypeList', methods=['GET'])
def getFormTypeList():
res, cnt = hm.getFormTypeList()
return jsonify(CommonUtil.renderJsonForLayUI(res, cnt))
@app.route('/Mars/getFormType', methods=['GET'])
def getFormType():
type_id = request.args.get("type_id")
res, cnt = hm.getFormType(type_id)
return jsonify(CommonUtil.renderJsonForLayUI(res, cnt))
@app.route('/Mars/addFormType', methods=['POST'])
def addFormType():
type_name = request.args.get("type_name")
hm.addFormType(type_name)
return jsonify(success=True, message='保存成功')
@app.route('/Mars/updateFormType', methods=['POST'])
def updateFormType():
type_id = request.args.get("type_id")
type_name = request.args.get("type_name")
hm.updateFormType(type_id, type_name)
return jsonify(success=True, message='保存成功')
@app.route('/Mars/delFormType', methods=['POST'])
def delFormType():
type_id = request.args.get("type_id")
hm.delFormType(type_id)
return jsonify(success=True, message='保存成功')
# 根据单位代码获取单位信息
# http://127.0.0.1:8888/Mars/getBureauInfoByOrganizationNo?organizationno=1143014532
@app.route('/Mars/getBureauInfoByOrganizationNo', methods=['GET'])
def getBureauInfoByOrganizationNo():
organizationno = request.args.get("organizationno")
data = hm.getBureauInfoByOrganizationNo(organizationno)
return jsonify(data)
if __name__ == '__main__':
# 生产环境配置方法
# http://127.0.0.1:8888/Mars/exportDoc?year=2020
# http://127.0.0.1:8888/Mars/exportPpt?year=2020
# server = pywsgi.WSGIServer(('0.0.0.0', 8888), app)
# server.serve_forever()
app.config['JSON_AS_ASCII'] = False
# 调试环境配置方法
app.run(host='0.0.0.0', port=8888, debug=True)