warehouse_root.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status,WebSocket,WebSocketDisconnect
  4. from common.security import valid_access_token,valid_websocket_token
  5. from fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy.sql import func
  8. from common.auth_user import *
  9. from sqlalchemy import text
  10. from pydantic import BaseModel
  11. from common.BigDataCenterAPI import *
  12. from database import get_db
  13. from typing import List
  14. from models import *
  15. from utils import *
  16. from utils.spatial import *
  17. from utils.ry_system_util import *
  18. from utils.resource_provision_util import *
  19. from common.websocketManager import *
  20. import json
  21. import traceback
  22. import xlrd
  23. import os
  24. # 目录在文档上传接口写死
  25. UPLOAD_mergefile_PATH = '/data/upload/mergefile'
  26. router = APIRouter()
  27. @router.post("/create")
  28. async def create_pattern(
  29. user_id=Depends(valid_access_token),
  30. body = Depends(remove_xss_json),
  31. db: Session = Depends(get_db)
  32. ):
  33. try:
  34. new_type = ResourceProvisionWarehouseRoomInfo(
  35. id = new_guid(),
  36. room_name=body['room_name'],
  37. warehouse=body['warehouse_id'],
  38. room_area=body['room_area'],
  39. available_area=body['available_area'],
  40. height=body['height'],
  41. room_volume=body['room_volume'],
  42. available_volume=body['available_volume'],
  43. storage_type=body['storage_type'],
  44. level=body['level'],
  45. storage_type_code=body['storage_type_code'],
  46. last_inventory_time=body['last_inventory_time'],
  47. create_by = user_id
  48. )
  49. db.add(new_type)
  50. db.commit()
  51. return {"code": 200, "msg": "创建成功", "data": None}
  52. except Exception as e:
  53. traceback.print_exc()
  54. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  55. @router.put("/update/{id}")
  56. async def update_pattern(
  57. id :str ,
  58. user_id=Depends(valid_access_token),
  59. body=Depends(remove_xss_json),
  60. db: Session = Depends(get_db)
  61. ):
  62. try:
  63. info = warehouse_room_id_get_warehouse_room_info(db,id)
  64. if not info:
  65. return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"})
  66. info.room_name = body['room_name']
  67. info.warehouse = body['warehouse_id']
  68. info.room_area = body['room_area']
  69. info.available_area = body['available_area']
  70. info.height = body['height']
  71. info.room_volume = body['room_volume']
  72. info.available_volume = body['available_volume']
  73. info.storage_type = body['storage_type']
  74. info.level = body['level']
  75. info.storage_type_code = body['storage_type_code']
  76. info.last_inventory_time = body['last_inventory_time']
  77. info.update_by = user_id
  78. db.commit()
  79. return {"code": 200, "msg": "更新成功"}
  80. except Exception as e:
  81. traceback.print_exc()
  82. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  83. @router.get("/info/{id}")
  84. async def get_pattern_info(
  85. id: str,
  86. user_id=Depends(valid_access_token),
  87. db: Session = Depends(get_db)
  88. ):
  89. try:
  90. info = warehouse_room_id_get_warehouse_room_info(db,id)
  91. if not info:
  92. return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"})
  93. warehouse_info = warehouse_id_get_warehouse_info(db,info.warehouse)
  94. print(info.warehouse,warehouse_info)
  95. if warehouse_info:
  96. warehouse_name = warehouse_info.warehouse_name
  97. else:
  98. warehouse_name = None
  99. data = {
  100. "id":info.id,
  101. "warehouse_id": info.warehouse,
  102. "warehouse_name": warehouse_name,
  103. "room_name": info.room_name,
  104. "room_area": info.room_area,
  105. "available_area": info.available_area,
  106. "height": info.height,
  107. "room_volume": info.room_volume,
  108. "available_volume": info.available_volume,
  109. "storage_type": info.storage_type,
  110. "level": info.level,
  111. "storage_type_code": info.storage_type_code,
  112. "last_inventory_time": info.last_inventory_time,
  113. "create_time":info.create_time}
  114. return {"code": 200, "msg": "获取成功", "data": data}
  115. except Exception as e:
  116. traceback.print_exc()
  117. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  118. @router.get("/list")
  119. async def get_pattern_list(
  120. user_id=Depends(valid_access_token),
  121. warehouse_id: str = Query(None, description='名称'),
  122. page: int = Query(1, gt=0, description='页码'),
  123. pageSize: int = Query(100, gt=0, description='每页条目数量'),
  124. db: Session = Depends(get_db)
  125. ):
  126. try:
  127. query = db.query(ResourceProvisionWarehouseRoomInfo)
  128. query = query.filter_by(del_flag='0')
  129. if warehouse_id:
  130. query = query.filter(ResourceProvisionWarehouseInfo.warehouse_id==warehouse_id)
  131. total_items = query.count()
  132. # 排序
  133. query = query.order_by(ResourceProvisionWarehouseRoomInfo.create_time.desc())
  134. # 执行分页查询
  135. lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
  136. data = []
  137. for info in lists:
  138. warehouse_info = warehouse_id_get_warehouse_info(db, info.warehouse)
  139. if warehouse_info:
  140. warehouse_name = warehouse_info.warehouse_name
  141. else:
  142. warehouse_name = None
  143. data.append({
  144. "id":info.id,
  145. "warehouse_id": info.warehouse,
  146. "warehouse_name": warehouse_name,
  147. "room_name": info.room_name,
  148. "room_area": info.room_area,
  149. "available_area": info.available_area,
  150. "height": info.height,
  151. "room_volume": info.room_volume,
  152. "available_volume": info.available_volume,
  153. "storage_type": info.storage_type,
  154. "level": info.level,
  155. "storage_type_code": info.storage_type_code,
  156. "last_inventory_time": info.last_inventory_time,
  157. "create_time":info.create_time} )
  158. return {"code": 200, "msg": "查询成功", "data": data,
  159. "total": total_items,
  160. "page": page,
  161. "pageSize": pageSize,
  162. "totalPages": (total_items + pageSize - 1) // pageSize
  163. }
  164. except Exception as e:
  165. traceback.print_exc()
  166. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  167. @router.delete("/delete/{id}")
  168. async def delete_pattern(
  169. id: str,
  170. user_id=Depends(valid_access_token),
  171. db: Session = Depends(get_db)
  172. ):
  173. try:
  174. # 检查图案是否存在
  175. info = warehouse_room_id_get_warehouse_room_info(db, id)
  176. if not info:
  177. return JSONResponse(status_code=404, content={"code": 404, "msg": "warehouse room not found"})
  178. info.del_flag='2'
  179. db.commit()
  180. return {"code": 200, "msg": "删除成功"}
  181. except Exception as e:
  182. traceback.print_exc()
  183. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  184. @router.get('/treeselect')
  185. async def gettreeselect(request: Request,room_name: str = Query(None, description='名称'),material_type_name: str = Query(None, description='名称'),db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)):
  186. query = db.query(ResourceProvisionWarehouseInfo)
  187. query = query.filter_by(del_flag='0')
  188. query = query.filter_by(status='1')
  189. query = query.order_by(ResourceProvisionWarehouseInfo.create_time.desc())
  190. lists = query.all()
  191. data = []
  192. for info in lists:
  193. data_info = {"id": info.warehouse_id,
  194. "label": info.warehouse_name,
  195. "isWarehouse": True}
  196. # material_list = warehouse_id_get_material_list(db,info.warehouse_id)
  197. query1 = db.query(ResourceProvisionWarehouseRoomInfo)
  198. query1 = query1.filter_by(warehouse=info.warehouse_id, del_flag='0')
  199. if room_name:
  200. query1 = query1.filter(ResourceProvisionWarehouseRoomInfo.room_name.like(f'%{room_name}%'))
  201. room_list= query1.all()
  202. if room_list:
  203. data_info['children'] = []
  204. for room in room_list:
  205. data_info['children'].append({"id": room.id,
  206. "label": room.room_name,
  207. "warehouse_id": info.warehouse_id,
  208. "warehouse_name":info.warehouse_name,
  209. "isWarehouse": False})
  210. data.append(data_info)
  211. return {
  212. "code": 200,
  213. "msg": "操作成功",
  214. "data": data
  215. }
  216. # 导入
  217. @router.post('/import')
  218. async def import_doc(
  219. request: Request,
  220. db: Session = Depends(get_db),
  221. body = Depends(remove_xss_json),
  222. user_id = Depends(valid_access_token)
  223. ):
  224. # print(body)
  225. try:
  226. filename = body['filename']
  227. if len(filename) == 0:
  228. raise Exception()
  229. file = filename[0]
  230. url = file['url']
  231. file_path = f"{UPLOAD_mergefile_PATH}/uploads/{url}"
  232. file_path = os.path.abspath(file_path)
  233. print(file_path)
  234. book = xlrd.open_workbook(file_path)
  235. sheet = book.sheet_by_index(0)
  236. data = []
  237. '''
  238. for i in range(9, sheet.nrows):
  239. # 预案名称
  240. plan_name = sheet.cell(i, 0).value
  241. # 一级目录
  242. title1 = sheet.cell(i, 1).value
  243. # 二级目录
  244. title2 = sheet.cell(i, 2).value
  245. # 三级目录
  246. title3 = sheet.cell(i, 3).value
  247. # 正文
  248. content = sheet.cell(i, 4).value
  249. if len(plan_name) < 1 and len(title1) < 1 and len(title2) < 1 and len(title3) < 1 and len(content) < 1 :
  250. break
  251. data.append({
  252. 'plan_name': plan_name,
  253. 'title1': title1,
  254. 'title2': title2,
  255. 'title3': title3,
  256. 'content': content,
  257. })
  258. if len(data) > 0:
  259. db.query(EmergencyDoc).filter(EmergencyDoc.plan_id == plan_id).delete()
  260. db.commit()
  261. title1 = ''
  262. content = ''
  263. docs = []
  264. for n in data:
  265. if n['title1'] != '':
  266. if len(docs) > 0:
  267. add_doc_1(db, title1, content, docs, plan_id)
  268. docs = []
  269. title1 = n['title1']
  270. content = n['content']
  271. if n['title2'] != '':
  272. docs.append(n)
  273. continue
  274. docs.append(n)
  275. if len(docs) > 0:
  276. add_doc_1(db, title1, content, docs, plan_id)
  277. '''
  278. return {
  279. 'code': 200,
  280. 'msg': '导入成功'
  281. }
  282. except Exception:
  283. traceback.print_exc()
  284. return {
  285. 'code': 500,
  286. 'msg': '导入发生异常'
  287. }