warehouse_outbound.py 8.7 KB

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