fapi.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. #coding:utf-8
  2. from fastapi import FastAPI, Request, Body, UploadFile,Form
  3. from fastapi import BackgroundTasks, FastAPI, File, UploadFile,Request
  4. import os
  5. import uvicorn
  6. import time
  7. import requests
  8. # from Zipfile import zipfile
  9. import main
  10. app = FastAPI()
  11. # 报价再评审
  12. @app.post("/quote_review_result")
  13. async def create_item(text_list=Body(None)):
  14. #json_post_raw = await request.json()
  15. try:
  16. json_post = json.dumps(eval(text_list))
  17. except:
  18. # json_post = json.dumps({'prompt':str(text_list)})
  19. json_post = text_list
  20. print(json_post)
  21. projectId = json_post['projectId']
  22. projectName = json_post['projectName']
  23. bidderUnit = json_post['bidderUnit']
  24. quoteCheck = json_post['quoteCheck']
  25. # try:
  26. if 1:
  27. data = main.quote_review_result(quoteCheck[0])
  28. code = 0
  29. ok = True
  30. msg = '成功'
  31. # except:
  32. # code = 1
  33. # ok = False
  34. # data = {}
  35. # msg = '失败'
  36. _json = {"code":code, "ok":ok, "data":data, "msg":msg}
  37. return _json
  38. @app.post("/req_json")
  39. async def req_json(request: Request, json_data: dict):
  40. # request.json() 返回json,此时可以利用pydantic进行json数据校验并映射到一个model类实例
  41. json_post_raw = await request.json()
  42. return json_post_raw
  43. # 获取minio上的文件
  44. def get_minio_file():
  45. if os.path.isfile(path) and path.endswith('.zip'):
  46. ## 解压方式1:存在乱码
  47. # f = zipfile.ZipFile(file, mode='r')
  48. # f.extractall(target_dir)
  49. ## 解压方式2:防止乱码
  50. with ZipFile(path, allowZip64=True) as zf:
  51. # 排除目录文件
  52. # print("zf.filelist", zf.filelist)
  53. file_iter = (filename for filename in zf.filelist if os.path.isfile(path))
  54. for filename in file_iter:
  55. # 编码文件名称为 utf 格式
  56. filename.filename = decode_path(filename.filename) # 防止乱码的操作
  57. zf.extract(filename, "./cache/" + tempdir)
  58. return 1
  59. # 专家打分图表上传
  60. @app.post("/quote_check_score")
  61. async def data(text_list=Body(None)):
  62. # json_post = await request.json()
  63. try:
  64. json_post = json.dumps(eval(text_list))
  65. except:
  66. # json_post = json.dumps({'prompt':str(text_list)})
  67. json_post = text_list
  68. try:
  69. projectId = json_post['projectId']
  70. projectName = json_post['projectName']
  71. # 企业列表
  72. bidderUnit = json_post['bidderUnit']
  73. # 不同模块评审因素
  74. quoteCheck = json_post['quoteCheck']
  75. # 专家打分图片列表
  76. scoreFile = json_post['scoreFile']
  77. except:
  78. pass
  79. # try:
  80. if 1:
  81. data = main.quote_check_score()
  82. code = 0
  83. ok = True
  84. msg = '成功'
  85. # except:
  86. # code = 1
  87. # ok = False
  88. # data = {}
  89. # msg = '失败'
  90. _json = {"code":code, "ok":ok, "data":data, "msg":msg}
  91. return _json
  92. # 下载招标、投标、专家打分表图片文件
  93. def get_file(path_name="1@/static/bm/project/20240726130404_采购文件.docx", save_file='./download'):
  94. url = 'http://222.92.111.18:8006/admin/sys-file/download' # 要下载的文件的URL
  95. url = 'http://222.92.111.18:8006/admin/sys-file/preview'
  96. json = {"path":path_name}
  97. response = requests.get(url, data=json, stream=True) # 发送GET请求,stream参数指定以流的方式下载文件
  98. file_name = path_name.split('/')[-1]
  99. save_file_path = save_file + '/new_'+file_name
  100. # print(response.text)
  101. code = 0
  102. if response.status_code == 200: # 检查响应状态码
  103. try:
  104. with open(save_file_path, 'wb') as f: # 打开本地文件进行写入操作
  105. for chunk in response.iter_content(chunk_size=1024): # 分块读取文件内容,每次读取1KB
  106. if chunk: # 检查是否有数据块可读
  107. f.write(chunk) # 将数据块写入本地文件
  108. f.flush() # 刷新缓冲区,确保数据写入磁盘
  109. print('文件下载完成!')
  110. except:
  111. code = 1
  112. else:
  113. print('下载失败,状态码:', response.status_code)
  114. code = -1
  115. return save_file_path, code
  116. #预审查、清标
  117. @app.post("/file_upload")
  118. async def file_upload(text_list=Body(None)):
  119. # json_post = await request.json()
  120. try:
  121. json_post = json.dumps(eval(text_list))
  122. except:
  123. # json_post = json.dumps({'prompt':str(text_list)})
  124. json_post = text_list
  125. print(json_post)
  126. projectId = json_post['projectId']
  127. projectName = json_post['projectName']
  128. bidderUnit = json_post['bidderUnit']
  129. reportFlag = json_post['reportFlag'] # 0 预审查 1 清标
  130. buyFile = json_post['buyFile'] #采购文件
  131. bidderFile = json_post['bidderFile'] #投标文件
  132. try:
  133. buy_file_path, code = get_file(buyFile)
  134. bidder_file_path, code = get_file(bidderFile)
  135. json_data = {
  136. "code":0,
  137. "name":'',
  138. "msg":"文件下载成功",
  139. "data":{},
  140. "ok":True
  141. }
  142. except:
  143. json_data = {
  144. "code":1,
  145. "name":'',
  146. "msg":"文件下载失败",
  147. "data":{},
  148. "ok":False
  149. }
  150. return json_data
  151. return json_data
  152. if __name__ == '__main__':
  153. uvicorn.run(app, host='0.0.0.0', port=8888, workers=1)