warehouse_inbound.py 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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 pandas as pd
  22. import traceback
  23. router = APIRouter()
  24. @router.post("/create")
  25. async def create_pattern(
  26. user_id=Depends(valid_access_token),
  27. body = Depends(remove_xss_json),
  28. db: Session = Depends(get_db)
  29. ):
  30. try:
  31. room_id = body['room_id']
  32. warehouse_info = warehouse_room_id_get_warehouse_room_info(db,room_id)
  33. warehouse_id = ''
  34. if warehouse_info:
  35. warehouse_id = warehouse_info.warehouse_id
  36. new_inbound = ResourceProvisionInboundBasic(
  37. # id = new_guid(),
  38. warehouse_id=warehouse_id, #body['warehouse_id'],
  39. purchase_order_number=body['purchase_order_number'],
  40. is_donation=body['is_donation'],
  41. transport_order_number=body['transport_order_number'],
  42. donator_phone=body['donator_phone'],
  43. donator_name=body['donator_name'],
  44. reviewer=body['reviewer'],
  45. enterprise_name=body['enterprise_name'],
  46. enterprise_code=body['enterprise_code'],
  47. grading_info=body['grading_info'],
  48. type=body['type'],
  49. supplier_name=body['supplier_name'],
  50. remark=body['remark'],
  51. supplier_code=body['supplier_code'],
  52. completion_time=body['completion_time'],
  53. planned_completion_time=body['planned_completion_time'],
  54. room_id=body['room_id'],
  55. # inbound_order_number=body['inbound_order_number'],
  56. create_by = user_id
  57. )
  58. db.add(new_inbound)
  59. db.commit()
  60. new_inbound.inbound_order_number= f'{time.strftime("%Y%m%d", time.localtime())}1{str(new_inbound.id).zfill(7)}'
  61. filePath = f'/data/upload/mergefile/uploads/{body["filename"]}'
  62. movementData = pd.read_excel(filePath).to_dict(orient='records')
  63. create_movement(db, movementData, new_inbound.inbound_order_number, 'I', user_id)
  64. db.commit()
  65. return {"code": 200, "msg": "创建成功", "data": None}
  66. except Exception as e:
  67. traceback.print_exc()
  68. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  69. # @router.put("/update/{id}")
  70. # async def update_pattern(
  71. # id :str ,
  72. # user_id=Depends(valid_access_token),
  73. # body=Depends(remove_xss_json),
  74. # db: Session = Depends(get_db)
  75. # ):
  76. # try:
  77. # info = warehouse_room_id_get_warehouse_room_info(db,id)
  78. # if not info:
  79. # return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"})
  80. # info.room_name = body['room_name']
  81. # info.warehouse = body['warehouse_id']
  82. # info.room_area = body['room_area']
  83. # info.available_area = body['available_area']
  84. # info.height = body['height']
  85. # info.room_volume = body['room_volume']
  86. # info.available_volume = body['available_volume']
  87. # info.storage_type = body['storage_type']
  88. # info.level = body['level']
  89. # info.storage_type_code = body['storage_type_code']
  90. # info.last_inventory_time = body['last_inventory_time']
  91. # info.update_by = user_id
  92. # db.commit()
  93. # return {"code": 200, "msg": "更新成功"}
  94. # except Exception as e:
  95. # traceback.print_exc()
  96. # raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  97. @router.get("/info/{id}")
  98. async def get_pattern_info(
  99. id: str,
  100. db: Session = Depends(get_db)
  101. ):
  102. try:
  103. info = inbound_id_get_inbound_info(db,id)
  104. if not info:
  105. return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"})
  106. warehouse_info = warehouse_id_get_warehouse_info(db,info.warehouse_id)
  107. if warehouse_info:
  108. warehouse_name = warehouse_info.warehouse_name
  109. else:
  110. warehouse_name = None
  111. room_info = warehouse_room_id_get_warehouse_room_info(db,info.room_id)
  112. if room_info:
  113. room_name = room_info.room_name
  114. else:
  115. room_name = None
  116. data = {
  117. "id":info.id,
  118. "warehouse_id": info.warehouse_id,
  119. "warehouse_name": warehouse_name,
  120. "room_id": info.room_id,
  121. "room_name": room_name,
  122. "purchase_order_number": info.purchase_order_number,
  123. "is_donation": info.is_donation,
  124. "transport_order_number": info.transport_order_number,
  125. "donator_phone": info.donator_phone,
  126. "donator_name": info.donator_name,
  127. "reviewer": info.reviewer,
  128. "grading_info": info.grading_info,
  129. "enterprise_name": info.enterprise_name,
  130. "enterprise_code": info.enterprise_code,
  131. "type": info.type,
  132. "supplier_name": info.supplier_name,
  133. "creation_time": info.creation_time,
  134. "remark": info.remark,
  135. "supplier_code": info.supplier_code,
  136. "completion_time": info.completion_time,
  137. "inbound_order_number":info.inbound_order_number,
  138. "new_time":info.new_time,
  139. "create_time":info.create_time}
  140. return {"code": 200, "msg": "获取成功", "data": data}
  141. except Exception as e:
  142. traceback.print_exc()
  143. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  144. @router.get("/list")
  145. async def get_pattern_list(
  146. # warehouse_id: str = Query(None, description='名称'),
  147. page: int = Query(1, gt=0, description='页码'),
  148. pageSize: int = Query(100, gt=0, description='每页条目数量'),
  149. db: Session = Depends(get_db)
  150. ):
  151. try:
  152. query = db.query(ResourceProvisionInboundBasic)
  153. query = query.filter_by(del_flag='0')
  154. # if warehouse_id:
  155. # query = query.filter(ResourceProvisionWarehouseInfo.warehouse_id==warehouse_id)
  156. total_items = query.count()
  157. # 排序
  158. query = query.order_by(ResourceProvisionInboundBasic.create_time.desc())
  159. # 执行分页查询
  160. lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
  161. data = []
  162. for info in lists:
  163. warehouse_info = warehouse_id_get_warehouse_info(db, info.warehouse_id)
  164. if warehouse_info:
  165. warehouse_name = warehouse_info.warehouse_name
  166. else:
  167. warehouse_name = None
  168. room_info = warehouse_room_id_get_warehouse_room_info(db, info.room_id)
  169. if room_info:
  170. room_name = room_info.room_name
  171. else:
  172. room_name = None
  173. data.append({
  174. "id":info.id,
  175. "warehouse_id": info.warehouse_id,
  176. "warehouse_name": warehouse_name,
  177. "room_id": info.room_id,
  178. "room_name": room_name,
  179. "purchase_order_number": info.purchase_order_number,
  180. "is_donation": info.is_donation,
  181. "transport_order_number": info.transport_order_number,
  182. "donator_phone": info.donator_phone,
  183. "donator_name": info.donator_name,
  184. "reviewer": info.reviewer,
  185. "grading_info": info.grading_info,
  186. "enterprise_name": info.enterprise_name,
  187. "enterprise_code": info.enterprise_code,
  188. "type": info.type,
  189. "supplier_name": info.supplier_name,
  190. "creation_time": info.creation_time,
  191. "remark": info.remark,
  192. "supplier_code": info.supplier_code,
  193. "completion_time": info.completion_time,
  194. "inbound_order_number":info.inbound_order_number,
  195. "new_time":info.new_time,
  196. "create_time":info.create_time} )
  197. return {"code": 200, "msg": "查询成功", "data": data,
  198. "total": total_items,
  199. "page": page,
  200. "pageSize": pageSize,
  201. "totalPages": (total_items + pageSize - 1) // pageSize
  202. }
  203. except Exception as e:
  204. traceback.print_exc()
  205. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  206. # @router.delete("/delete/{id}")
  207. # async def delete_pattern(
  208. # id: str,
  209. # db: Session = Depends(get_db)
  210. # ):
  211. # try:
  212. # # 检查图案是否存在
  213. # info = warehouse_room_id_get_warehouse_room_info(db, id)
  214. # if not info:
  215. # return JSONResponse(status_code=404, content={"code": 404, "msg": "warehouse room not found"})
  216. # info.del_flag='2'
  217. # db.commit()
  218. # return {"code": 200, "msg": "删除成功"}
  219. # except Exception as e:
  220. # traceback.print_exc()
  221. # raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")