data.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. import json
  2. import os
  3. from flask import request, jsonify, g
  4. from flask_restx import Resource, Namespace, reqparse
  5. from sqlalchemy import select, insert, update, delete
  6. from sqlalchemy.orm import Session
  7. from werkzeug.datastructures import FileStorage
  8. from app.configs.config import TEMPLATE_FILE_PATH, TEMPLATE_FILE_URL
  9. from app.database import engine
  10. from app.defines import StatesCode, Module, OperationType
  11. from app.modle.template import Template
  12. from app.utils.jwt_util import login_required
  13. from app.utils.save_log import save_log
  14. from app.utils.util import to_dict, cn_now
  15. ns = Namespace('data', description='数据管理接口')
  16. template_list = reqparse.RequestParser(bundle_errors=True)
  17. template_list.add_argument(name='page_size', type=int, location='args', required=False, help='每页记录数量,默认:20')
  18. template_list.add_argument(name='page', type=int, location='args', required=False, help='第几页')
  19. template_list.add_argument(name='template_name', type=str, location='args', required=False, help='模版名称')
  20. template_list.add_argument(name='template_format', type=str, location='args', required=False, help='模版格式')
  21. template_list.add_argument(name='template_type', type=str, location='args', required=False,
  22. help='模版类型 0:报表,1:报告')
  23. template_list.add_argument(name='report_type', type=str, location='args', required=False, help='报告类型')
  24. @ns.route('/template_list')
  25. class TemplateConfigListApi(Resource):
  26. method_decorators = [login_required]
  27. @ns.doc(id='template_list', description='模版列表')
  28. @ns.expect(template_list)
  29. def get(self):
  30. """获取模版列表"""
  31. page_size = int(request.args.get('page_size', 20))
  32. page = int(request.args.get('page', 1))
  33. template_name = request.args.get('template_name')
  34. template_format = request.args.get('template_format')
  35. report_type = request.args.get('report_type')
  36. template_type = request.args.get('template_type')
  37. with Session(engine) as session:
  38. stmt = select(Template).where(Template.template_type == template_type)
  39. if template_name:
  40. stmt.where(Template.name == template_name)
  41. if template_format:
  42. stmt.where(Template.format == template_format)
  43. if report_type:
  44. stmt.where(Template.report_type == report_type)
  45. stmt.offset(page_size * (page - 1)).limit(page_size)
  46. results = session.execute(stmt).scalars().all()
  47. save_log(request, Module.DATA, OperationType.INQUIRE, StatesCode.SUCCESS)
  48. return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
  49. template = reqparse.RequestParser(bundle_errors=True)
  50. template.add_argument(name='template_id', type=int, location='args', required=False, help='模版id')
  51. template_details = reqparse.RequestParser(bundle_errors=True)
  52. template_details.add_argument(name='template_id', type=int, location='form', required=False, help='模版id')
  53. template_details.add_argument(name='template_name', type=str, location='form', required=False, help='模版名称')
  54. template_details.add_argument(name='template_format', type=str, location='form', required=False, help='模版格式')
  55. template_details.add_argument(name='report_type', type=str, location='form', required=False, help='报告类型')
  56. template_details.add_argument(name='introduction', type=str, location='form', required=False, help='模版简介')
  57. template_details.add_argument(name='template_file', type=FileStorage, location='files', required=False, help='模版文件')
  58. template_details.add_argument(name='template_type', type=int, location='files', required=False,
  59. help='模版类型 0:报表,1:报告')
  60. @ns.route('/template')
  61. class TemplateConfigApi(Resource):
  62. # method_decorators = [login_required]
  63. @ns.doc(id='get_template', description='获取模版详情')
  64. @ns.expect(template)
  65. def get(self):
  66. """获取模版详情"""
  67. template_id = request.args.get('template_id')
  68. if template_id is None:
  69. return jsonify(code=StatesCode.UNKNOWN_ERROR, message='模版id不能为空')
  70. with Session(engine) as session:
  71. stmt = select(Template).where(Template.id == template_id)
  72. results = session.execute(stmt).scalars().all()
  73. save_log(request, Module.DATA, OperationType.INQUIRE, StatesCode.SUCCESS)
  74. return jsonify(code=StatesCode.SUCCESS, message='获取成功', data=to_dict(results))
  75. @ns.doc(id='add_template', description='添加报表模版')
  76. @ns.expect(template_details)
  77. def post(self):
  78. """添加模版"""
  79. template_name = request.form.get('template_name')
  80. template_format = request.form.get('template_format')
  81. introduction = request.form.get('introduction')
  82. template_file = request.files.get('template_file')
  83. report_type = request.form.get('report_type')
  84. template_type = request.form.get('template_type')
  85. if template_name is None and template_type is None:
  86. return jsonify(code=StatesCode.UNKNOWN_ERROR, message='报表模版名和模版类型不能为空')
  87. # 模版存储(url),
  88. if template_file:
  89. template_file.save(os.path.join(TEMPLATE_FILE_PATH, template_file.filename))
  90. template_url = TEMPLATE_FILE_URL + template_file.filename
  91. else:
  92. template_url = None
  93. with Session(engine) as session:
  94. # 判断是否存在
  95. stmt = select(Template).where(Template.name == template_name)
  96. result = session.execute(stmt).scalars().first()
  97. if result:
  98. return jsonify(code=StatesCode.UNKNOWN_ERROR, message="模版已存在")
  99. # 添加
  100. stmt = insert(Template).values(
  101. name=template_name,
  102. format=template_format,
  103. Introduction=introduction,
  104. report_type=report_type,
  105. creator=g.user_name,
  106. create_time=cn_now(),
  107. update_time=cn_now(),
  108. template_url=template_url,
  109. template_type=template_type
  110. )
  111. session.execute(stmt)
  112. session.commit()
  113. save_log(request, Module.DATA, OperationType.ADD, StatesCode.SUCCESS)
  114. return jsonify(code=StatesCode.SUCCESS, message='添加成功')
  115. @ns.doc(id='update_templatet', description='修改模版信息')
  116. @ns.expect(template_details)
  117. def put(self):
  118. """修改模版"""
  119. template_id = request.form.get('template_id')
  120. template_name = request.form.get('template_name')
  121. template_format = request.form.get('template_format')
  122. introduction = request.form.get('introduction')
  123. template_file = request.files.get('template_file')
  124. report_type = request.form.get('report_type')
  125. template_type = request.form.get('template_type')
  126. if template_id is None or template_name is None:
  127. return jsonify(code=StatesCode.UNKNOWN_ERROR, message="模版id和模版名不能为空")
  128. # 报表模版存储(url),
  129. if template_file:
  130. template_file.save(os.path.join(TEMPLATE_FILE_PATH, template_file.filename))
  131. template_url = TEMPLATE_FILE_URL + template_file.filename
  132. else:
  133. template_url = None
  134. with Session(engine) as session:
  135. stmt = update(Template).where(Template.id == template_id).values(
  136. name=template_name,
  137. format=template_format,
  138. Introduction=introduction,
  139. report_type=report_type,
  140. creator=g.user_name,
  141. create_time=cn_now(),
  142. update_time=cn_now(),
  143. template_url=template_url,
  144. template_type=template_type
  145. )
  146. session.execute(stmt)
  147. session.commit()
  148. save_log(request, Module.DATA, OperationType.UPDATE, StatesCode.SUCCESS)
  149. return jsonify(code=StatesCode.SUCCESS, message='修改成功')
  150. @ns.doc(id='delete_template', description='删除模版')
  151. @ns.expect(template_details)
  152. def delete(self):
  153. """删除模版"""
  154. template_id = request.form.get('template_id')
  155. if template_id is None:
  156. return jsonify(code=StatesCode.UNKNOWN_ERROR, message="模版id不能为空")
  157. with Session(engine) as session:
  158. stmt = delete(Template).where(Template.id == template_id)
  159. session.execute(stmt)
  160. session.commit()
  161. save_log(request, Module.DATA, OperationType.DELETE, StatesCode.SUCCESS)
  162. return jsonify(code=StatesCode.SUCCESS, message='删除成功')
  163. batch_delete_template = reqparse.RequestParser(bundle_errors=True)
  164. batch_delete_template.add_argument(name='template_ids', type=str, required=True, location='form', help='模版id列表')
  165. @ns.route('/batch_delete_template')
  166. class BatchTemplateConfigApi(Resource):
  167. # method_decorators = [login_required]
  168. @ns.doc(id='batch_delete_template', description='批量删除模版')
  169. @ns.expect(batch_delete_template)
  170. def delete(self):
  171. """批量删除模版"""
  172. template_ids = request.form.get('template_ids')
  173. if template_ids is not None:
  174. template_ids = json.loads(template_ids)
  175. else:
  176. return jsonify(code=StatesCode.UNKNOWN_ERROR, message='模版id不能为空')
  177. with Session(engine) as session:
  178. stmt = select(Template).where(Template.id.in_(template_ids))
  179. results = session.execute(stmt).scalars().all()
  180. for result in results:
  181. session.delete(result)
  182. session.commit()
  183. save_log(request, Module.DATA, OperationType.BATCH_DELETE, StatesCode.SUCCESS)
  184. return jsonify(code=StatesCode.SUCCESS, message='批量删除成功')
  185. @ns.route('/company')
  186. class CompanyApi(Resource):
  187. def get(self):
  188. """获取公司基本信息"""
  189. return jsonify(code=StatesCode.SUCCESS, message='获取成功', data='')
  190. def put(self):
  191. """修改公司基本信息"""
  192. return jsonify(code=StatesCode.SUCCESS, message='修改成功', data='')
  193. @ns.route('/building_list')
  194. class BuildingListApi(Resource):
  195. def get(self):
  196. """获取楼宇列表"""
  197. return jsonify(code=StatesCode.SUCCESS, message='获取成功', data='')
  198. @ns.route('/building')
  199. class BuildingApi(Resource):
  200. def get(self):
  201. """获取楼宇信息"""
  202. return jsonify(code=StatesCode.SUCCESS, message='获取成功', data='')
  203. def post(self):
  204. """添加楼宇"""
  205. return jsonify(code=StatesCode.SUCCESS, message='添加成功', data='')
  206. def put(self):
  207. """修改楼宇"""
  208. return jsonify(code=StatesCode.SUCCESS, message='修改成功', data='')
  209. def delete(self):
  210. """删除楼宇"""
  211. return jsonify(code=StatesCode.SUCCESS, message='删除成功', data='')
  212. @ns.route('/underlying_system')
  213. class UnderlyingSystemMessageApi(Resource):
  214. def post(self):
  215. """添加底层系统信息"""
  216. return jsonify(code=StatesCode.SUCCESS, message='添加成功', data='')