浏览代码

241201-1代码。

baoyubo 7 月之前
父节点
当前提交
442fcb0d3d

+ 46 - 2
models/resource_provision_base.py

@@ -1,4 +1,4 @@
-from sqlalchemy import Column, String, Numeric, DateTime, Integer,Float,Boolean,BigInteger
+from sqlalchemy import ForeignKey,Column, String, Numeric, DateTime, Integer,Float,Boolean,BigInteger,Text
 # from sqlalchemy.orm import declarative_base
 from sqlalchemy.ext.declarative import declarative_base
 from datetime import datetime
@@ -308,4 +308,48 @@ class Shelter(Base):
             # "is_delete": self.is_delete,
             "modified_time": self.modified_time.isoformat() if self.modified_time else None,
             "created_time": self.created_time.isoformat() if self.created_time else None,
-        }
+        }
+
+
+class ResourceProvisionMaterialType(Base):
+    __tablename__ = 'resource_provision_material_types'
+
+    id = Column(Integer, autoincrement=True, primary_key=True, comment='物资类型ID')
+    parent_id = Column(Integer, ForeignKey('resource_provision_material_types.id', ondelete='SET NULL'), comment='父类ID')
+    material_category_name = Column(String(255), nullable=False, comment='物资类别名称')
+    material_category_level = Column(Integer, comment='物资类别等级')
+    sort_order = Column(Integer, comment='排序')
+    display_status = Column(String(1), default='1', comment='显示状态(1显示 0不显示)')
+    del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
+    create_time = Column(DateTime, default=datetime.now, comment='数据创建时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='数据更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    def __repr__(self):
+        return f"<MaterialType(name='{self.material_category_name}', level='{self.material_category_level}')>"
+
+class ResourceProvisionWarehouseInfo(Base):
+    __tablename__ = 'resource_provision_warehouse_info'
+
+    warehouse_id = Column(String(255), primary_key=True, autoincrement=True, comment='仓库id')
+    warehouse_name = Column(String(255), nullable=True, comment='仓库名称')
+    status = Column(String(50), nullable=True, comment='状态')
+    contact_person = Column(String(100), nullable=True, comment='联系人')
+    contact_phone = Column(String(20), nullable=True, comment='联系电话')
+    address = Column(String(255), nullable=True, comment='地址')
+    remark = Column(Text, nullable=True, comment='备注')
+    type = Column(String(50), nullable=True, comment='类型')
+    level = Column(String(50), nullable=True, comment='等级')
+    storage_dept_id = Column(Integer, nullable=True, comment='物资保管部门id')
+    storage_dept_name = Column(String(255), nullable=True, comment='物资保管部门名称')
+    area_name = Column(String(100), nullable=True, comment='地区')
+    longitude = Column(Numeric(9, 6), nullable=True, comment='经度')
+    latitude = Column(Numeric(8, 6), nullable=True, comment='纬度')
+    area = Column(Numeric(15, 2), nullable=True, comment='占地面积(平方米)')
+    del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
+    create_time = Column(DateTime, default=datetime.now, comment='数据创建时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='数据更新时间')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    update_by = Column(BigInteger, default=None, comment='更新者')

+ 13 - 0
routers/api/resourceProvison/MaterialReserveManagement/__init__.py

@@ -0,0 +1,13 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from fastapi import APIRouter, Request, Depends
+
+from . import material_type
+from . import warehouse
+
+router = APIRouter()
+
+
+router.include_router(material_type.router, prefix="/type", tags=["物资种类"])
+router.include_router(warehouse.router, prefix="/warehouse", tags=["仓库"])

+ 153 - 0
routers/api/resourceProvison/MaterialReserveManagement/material_type.py

@@ -0,0 +1,153 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from fastapi import APIRouter, Request, Depends, Query, HTTPException, status,WebSocket,WebSocketDisconnect
+from common.security import valid_access_token,valid_websocket_token
+from fastapi.responses import JSONResponse
+from sqlalchemy.orm import Session
+from sqlalchemy.sql import func
+from common.auth_user import *
+from sqlalchemy import  text
+from pydantic import BaseModel
+from common.BigDataCenterAPI import *
+from database import get_db
+from typing import List
+from models import *
+from utils import *
+from utils.spatial import *
+from utils.ry_system_util import *
+from common.websocketManager import *
+import json
+import traceback
+
+router = APIRouter()
+
+def type_id_get_material_type_info(db,id):
+    query = db.query(ResourceProvisionMaterialType)
+    query = query.filter_by(id = id,del_flag = '0')
+    return query.first()
+
+
+
+@router.post("/create")
+async def create_pattern(
+    user_id=Depends(valid_access_token),
+    body = Depends(remove_xss_json),
+    db: Session = Depends(get_db)
+):
+    try:
+        new_type = ResourceProvisionMaterialType(
+            parent_id=body['parent_id'],
+            material_category_name=body['material_category_name'],
+            material_category_level=body['material_category_level'],
+            sort_order=body['sort_order'],
+            display_status=body['display_status'],
+            create_id = user_id
+        )
+        db.add(new_type)
+        db.commit()
+        return {"code": 200, "msg": "创建成功", "data": None}
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+
+
+@router.put("/update/{id}")
+async def update_pattern(
+    id :str ,
+    user_id=Depends(valid_access_token),
+    body=Depends(remove_xss_json),
+    db: Session = Depends(get_db)
+):
+    try:
+        update_type = type_id_get_material_type_info(db,id)
+        if not update_type:
+            return JSONResponse(status_code=404,content={"code":404,"msg":"type not found"})
+
+        update_type.parent_id = body['parent_id']
+        update_type.material_category_name = body['material_category_name']
+        update_type.material_category_level=body['material_category_level']
+        update_type.sort_order=body['sort_order']
+        update_type.display_status=body['display_status']
+        update_type.update_by = user_id
+        db.commit()
+        return {"code": 200, "msg": "更新成功"}
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+@router.get("/info/{id}")
+async def get_pattern_info(
+    id: str,
+    db: Session = Depends(get_db)
+):
+    try:
+
+        info = type_id_get_material_type_info(db,id)
+        if not info:
+            return JSONResponse(status_code=404,content={"code":404,"msg":"type not found"})
+        data = {"parent_id": info.parent_id,
+                "material_category_name": info.material_category_name,
+                "material_category_level": info.material_category_level,
+                "sort_order": info.sort_order,
+                "display_status": info.display_status,
+                "create_time": info.create_time,
+                "create_by": info.create_by,
+                "id": info.id}
+        return {"code": 200, "msg": "获取成功", "data": data}
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+@router.get("/list")
+async def get_pattern_list(
+    name: str = Query(None, description='名称'),
+    page: int = Query(1, gt=0, description='页码'),
+    pageSize: int = Query(5, gt=0, description='每页条目数量'),
+    db: Session = Depends(get_db)
+):
+    try:
+        query = db.query(ResourceProvisionMaterialType)
+        query = query.filter_by(del_flag='0')
+        if name:
+            query = query.filter(ResourceProvisionMaterialType.material_category_name.like(f'%{name}%'))
+        total_items = query.count()
+        # 排序
+        query = query.order_by(ResourceProvisionMaterialType.create_time.desc())
+        # 执行分页查询
+        lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
+        data = [{"parent_id": info.parent_id,
+                "material_category_name": info.material_category_name,
+                "material_category_level": info.material_category_level,
+                "sort_order": info.sort_order,
+                "display_status": info.display_status,
+                "create_time": info.create_time,
+                "create_by": info.create_by,
+                "id": info.id} for info in lists]
+        return {"code": 200, "msg": "查询成功", "data": data,
+                "total": total_items,
+                "page": page,
+                "pageSize": pageSize,
+                "totalPages": (total_items + pageSize - 1) // pageSize
+                }
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+@router.delete("/delete/{id}")
+async def delete_pattern(
+    id: str,
+    db: Session = Depends(get_db)
+):
+    try:
+        # 检查图案是否存在
+        info = type_id_get_material_type_info(db, id)
+        if not info:
+            return JSONResponse(status_code=404, content={"code": 404, "msg": "type not found"})
+        info.del_flag='2'
+        db.commit()
+        return {"code": 200, "msg": "删除成功"}
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")

+ 189 - 0
routers/api/resourceProvison/MaterialReserveManagement/warehouse.py

@@ -0,0 +1,189 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from fastapi import APIRouter, Request, Depends, Query, HTTPException, status,WebSocket,WebSocketDisconnect
+from common.security import valid_access_token,valid_websocket_token
+from fastapi.responses import JSONResponse
+from sqlalchemy.orm import Session
+from sqlalchemy.sql import func
+from common.auth_user import *
+from sqlalchemy import  text
+from pydantic import BaseModel
+from common.BigDataCenterAPI import *
+from database import get_db
+from typing import List
+from models import *
+from utils import *
+from utils.spatial import *
+from utils.ry_system_util import *
+from common.websocketManager import *
+import json
+import traceback
+
+router = APIRouter()
+
+def warehouse_id_get_warehouse_info(db,id):
+    query = db.query(ResourceProvisionWarehouseInfo)
+    query = query.filter_by(warehouse_id = id,del_flag = '0')
+    return query.first()
+
+
+
+@router.post("/create")
+async def create_pattern(
+    user_id=Depends(valid_access_token),
+    body = Depends(remove_xss_json),
+    db: Session = Depends(get_db)
+):
+    try:
+        new_type = ResourceProvisionWarehouseInfo(
+            warehouse_id = new_guid(),
+            warehouse_name=body['warehouse_name'],
+            status=body['status'],
+            contact_person=body['contact_person'],
+            contact_phone=body['contact_phone'],
+            address=body['address'],
+            type=body['type'],
+            level=body['level'],
+            storage_dept_id=body['storage_dept_id'],
+            storage_dept_name=body['storage_dept_name'],
+            area_name=body['area_name'],
+            longitude=body['longitude'],
+            latitude=body['latitude'],
+            area =body['area'],
+            remark=body['remark'],
+            create_id = user_id
+        )
+        db.add(new_type)
+        db.commit()
+        return {"code": 200, "msg": "创建成功", "data": None}
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+
+
+@router.put("/update/{id}")
+async def update_pattern(
+    id :str ,
+    user_id=Depends(valid_access_token),
+    body=Depends(remove_xss_json),
+    db: Session = Depends(get_db)
+):
+    try:
+        update_warehouse = warehouse_id_get_warehouse_info(db,id)
+        if not update_warehouse:
+            return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse not found"})
+        update_warehouse.warehouse_name = body['warehouse_name']
+        update_warehouse.status = body['status']
+        update_warehouse.contact_person = body['contact_person']
+        update_warehouse.contact_phone = body['contact_phone']
+        update_warehouse.address = body['address']
+        update_warehouse.type = body['type']
+        update_warehouse.level = body['level']
+        update_warehouse.storage_dept_id = body['storage_dept_id']
+        update_warehouse.storage_dept_name = body['storage_dept_name']
+        update_warehouse.area_name = body['area_name']
+        update_warehouse.longitude = body['longitude']
+        update_warehouse.latitude = body['latitude']
+        update_warehouse.area = body['area']
+        update_warehouse.remark = body['remark']
+        update_warehouse.update_by = user_id
+        db.commit()
+        return {"code": 200, "msg": "更新成功"}
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+@router.get("/info/{id}")
+async def get_pattern_info(
+    id: str,
+    db: Session = Depends(get_db)
+):
+    try:
+
+        info = warehouse_id_get_warehouse_info(db,id)
+        if not info:
+            return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse not found"})
+        data = {"warehouse_id": info.warehouse_id,
+                "warehouse_name": info.warehouse_name,
+                "status": info.status,
+                "contact_person": info.contact_person,
+                "contact_phone": info.contact_phone,
+                "address": info.address,
+                "remark": info.remark,
+                "type": info.type,
+                "level": info.level,
+                "storage_dept_id": info.storage_dept_id,
+                "storage_dept_name": info.storage_dept_name,
+                "area_name": info.area_name,
+                "longitude": info.longitude,
+                "latitude": info.latitude,
+                "create_by": info.create_by,
+                "area":info.area,
+                "create_time":info.create_time}
+        return {"code": 200, "msg": "获取成功", "data": data}
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+@router.get("/list")
+async def get_pattern_list(
+    # name: str = Query(None, description='名称'),
+    page: int = Query(1, gt=0, description='页码'),
+    pageSize: int = Query(10, gt=0, description='每页条目数量'),
+    db: Session = Depends(get_db)
+):
+    try:
+        query = db.query(ResourceProvisionWarehouseInfo)
+        query = query.filter_by(del_flag='0')
+        # if name:
+        #     query = query.filter(ResourceProvisionWarehouseInfo.material_category_name.like(f'%{name}%'))
+        total_items = query.count()
+        # 排序
+        query = query.order_by(ResourceProvisionWarehouseInfo.create_time.desc())
+        # 执行分页查询
+        lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
+        data = [{"warehouse_id": info.warehouse_id,
+                "warehouse_name": info.warehouse_name,
+                "status": info.status,
+                "contact_person": info.contact_person,
+                "contact_phone": info.contact_phone,
+                "address": info.address,
+                "remark": info.remark,
+                "type": info.type,
+                "level": info.level,
+                "storage_dept_id": info.storage_dept_id,
+                "storage_dept_name": info.storage_dept_name,
+                "area_name": info.area_name,
+                "longitude": info.longitude,
+                "latitude": info.latitude,
+                "create_by": info.create_by,
+                "area":info.area,
+                "create_time":info.create_time} for info in lists]
+        return {"code": 200, "msg": "查询成功", "data": data,
+                "total": total_items,
+                "page": page,
+                "pageSize": pageSize,
+                "totalPages": (total_items + pageSize - 1) // pageSize
+                }
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+@router.delete("/delete/{id}")
+async def delete_pattern(
+    id: str,
+    db: Session = Depends(get_db)
+):
+    try:
+        # 检查图案是否存在
+        info = warehouse_id_get_warehouse_info(db, id)
+        if not info:
+            return JSONResponse(status_code=404, content={"code": 404, "msg": "warehouse not found"})
+        info.del_flag='2'
+        db.commit()
+        return {"code": 200, "msg": "删除成功"}
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")

+ 4 - 0
routers/api/resourceProvison/__init__.py

@@ -4,7 +4,11 @@
 from fastapi import APIRouter, Request, Depends
 
 from . import emergency_resources
+from . import MaterialReserveManagement
 
 router = APIRouter()
 
 router.include_router(emergency_resources.router, prefix="/emergency", tags=["救灾资源"])
+
+router.include_router(MaterialReserveManagement.router, prefix="/material", tags=["物资储备"])
+