123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
- #!/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 utils.resource_provision_util import *
- from common.websocketManager import *
- import json
- import traceback
- router = APIRouter()
- @router.post("/create")
- async def create_pattern(
- user_id=Depends(valid_access_token),
- body = Depends(remove_xss_json),
- db: Session = Depends(get_db)
- ):
- try:
- dept_info = user_id_get_user_info(db,user_id)
- new_dispatch = ResourceProvisionDispatch(
- id = new_guid(),
- dispatch_purpose=body['dispatch_purpose'],
- dispatch_person=user_id,
- dispatch_unit=dept_info.dept_id,
- dispatch_status = '1',
- create_by = user_id
- )
- db.add(new_dispatch)
- serial_number=0
- for info in body['detail']:
- serial_number+=1
- material_into = material_id_get_material_info(db, info['material_code'])
- if material_into:
- material_name = material_into.material_name
- material_type_id = material_into.material_type
- warehouse_id=material_into.warehouse_id
- material_type_info = type_id_get_material_type_info(db, material_into.material_type)
- if material_type_info:
- material_category_name = material_type_info.material_category_name
- else:
- material_category_name = None
- else:
- material_type_id=None
- warehouse_id = None
- material_name = None
- material_category_name = None
- new_detail = ResourceProvisionDispatchDetail(
- id=new_guid(),
- serial_number=serial_number,
- dispatch_id = new_dispatch.id,
- warehouse_id = warehouse_id,
- material_type_id = material_type_id,
- material_type = material_category_name,
- material_code = info['material_code'],
- material_name = material_name,
- material_quantity = info['material_quantity'],
- material_purpose = info['material_purpose'],
- create_by = user_id
- )
- db.add(new_detail)
- 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_dispatch(
- id :str ,
- user_id=Depends(valid_access_token),
- body=Depends(remove_xss_json),
- db: Session = Depends(get_db)
- ):
- try:
- update_dispatch = dispatch_id_get_dispatch_info(db,id)
- if not update_dispatch:
- return JSONResponse(status_code=404,content={"code":404,"msg":"dispatch not found"})
- if str(update_dispatch.dispatch_person) != str(user_id):
- return JSONResponse(status_code=404, content={"code": 404, "msg": "dispatch not permission"})
- update_dispatch.dispatch_purpose = body['dispatch_purpose']
- update_dispatch.update_by = user_id
- detail_list = []
- serial_number=0
- for info in body['detail']:
- serial_number+=1
- material_into = material_id_get_material_info(db, info['material_code'])
- if material_into:
- material_name = material_into.material_name
- material_type_id = material_into.material_type
- warehouse_id = material_into.warehouse_id
- material_type_info = type_id_get_material_type_info(db, material_into.material_type)
- if material_type_info:
- material_category_name = material_type_info.material_category_name
- else:
- material_category_name = None
- else:
- material_type_id = None
- warehouse_id = None
- material_name = None
- material_category_name = None
- if info['id']=='':
- new_detail = ResourceProvisionDispatchDetail(
- id=new_guid(),
- serial_number=serial_number,
- dispatch_id=update_dispatch.id,
- warehouse_id=warehouse_id,
- material_type_id=material_type_id,
- material_type=material_category_name,
- material_code=info['material_code'],
- material_name=material_name,
- material_quantity=info['material_quantity'],
- material_purpose=info['material_purpose'],
- create_by=user_id
- )
- db.add(new_detail)
- detail_list.append(new_detail.id)
- else:
- detail = detail_id_get_dispatch_detail_info(db,info['id'])
- if detail is None:
- new_detail = ResourceProvisionDispatchDetail(
- id=new_guid(),
- serial_number=serial_number,
- dispatch_id=update_dispatch.id,
- warehouse_id=warehouse_id,
- material_type_id=material_type_id,
- material_type=material_category_name,
- material_code=info['material_code'],
- material_name=material_name,
- material_quantity=info['material_quantity'],
- material_purpose=info['material_purpose'],
- create_by=user_id
- )
- db.add(new_detail)
- detail_list.append(new_detail.id)
- else:
- detail.serial_number = serial_number
- detail.warehouse_id = warehouse_id
- detail.material_type_id = material_type_id
- detail.material_type = material_category_name
- detail.material_code = info['material_code']
- detail.material_name = material_name
- detail.material_quantity = info['material_quantity']
- detail.material_unit_price = info['material_unit_price']
- detail.material_purpose = info['material_purpose']
- detail.update_by = user_id
- detail_list.append(info['id'])
- query = db.query(ResourceProvisionDispatchDetail)
- query = query.filter_by(dispatch_id=id, del_flag='0').filter(~ResourceProvisionDispatchDetail.id.in_(detail_list))
- for i in query.all():
- i.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)}")
- @router.get("/info/{id}")
- async def get_pattern_info(
- id: str,
- db: Session = Depends(get_db)
- ):
- try:
- info = dispatch_id_get_dispatch_info(db,id)
- if not info:
- return JSONResponse(status_code=404,content={"code":404,"msg":"dispatch not found"})
- dept_info = dept_id_get_dept_info(db,info.dispatch_unit)
- user_info = user_id_get_user_info(db,info.dispatch_person)
- review_info = dispatch_id_get_dispatch_review_info(db,id)
- if review_info is None:
- dispatch_status = info.dispatch_status
- else:
- dispatch_status = review_info.review_result
- data = {"id": info.id,
- "dispatch_date": info.dispatch_date,
- "dispatch_purpose": info.dispatch_purpose,
- "dispatch_unit": info.dispatch_unit,
- "dispatch_unit_name": dept_info.dept_name,
- "dispatch_person": info.dispatch_person,
- "dispatch_person_name": user_info.nick_name,
- "dispatch_status": dispatch_status,
- "create_time": info.create_time}
- detail=[]
- for detail_info in dispatch_id_get_dispatch_detail_list(db,id):
- # material_type_info = type_id_get_material_type_info(db,detail_info.material_type)
- # if material_type_info:
- # material_category_name=material_type_info.material_category_name
- # else:
- # material_category_name = None
- # material_into = material_id_get_material_info(db,detail_info.material_code)
- # if material_into:
- # material_name = material_into.material_name
- # else:
- # material_name = None
- warehouse_info = warehouse_id_get_warehouse_info(db,detail_info.warehouse_id)
- if warehouse_info:
- warehouse_name = warehouse_info.warehouse_name
- else:
- warehouse_name = None
- detail.append({"id":detail_info.id,
- "serial_number":detail_info.serial_number,
- "warehouse_id":detail_info.warehouse_id,
- "warehouse_name":warehouse_name,
- "material_type":detail_info.material_type,
- "material_type_id":detail_info.material_type_id,
- "material_code":detail_info.material_code,
- "material_name":detail_info.material_name,
- "material_quantity":detail_info.material_quantity,
- "material_purpose":detail_info.material_purpose})
- data['detail']=detail
- 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(
- # dispatch_details: str = Query(None, description='名称'),
- page: int = Query(1, gt=0, description='页码'),
- pageSize: int = Query(None, gt=0, description='每页条目数量'),
- db: Session = Depends(get_db)
- ):
- try:
- query = db.query(ResourceProvisionDispatch)
- query = query.filter_by(del_flag='0')
- total_items = query.count()
- # 排序
- if pageSize is None:
- pageSize=total_items
- query = query.order_by(ResourceProvisionDispatch.dispatch_date.desc())
- # 执行分页查询
- lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
- data = []
- for info in lists:
- dept_info = dept_id_get_dept_info(db, info.dispatch_unit)
- user_info = user_id_get_user_info(db, info.dispatch_person)
- review_info = dispatch_id_get_dispatch_review_info(db, info.id)
- if review_info is None:
- dispatch_status = info.dispatch_status
- else:
- dispatch_status = review_info.review_result
- data .append( {"id": info.id,
- "dispatch_date": info.dispatch_date,
- "dispatch_purpose": info.dispatch_purpose,
- "dispatch_unit": info.dispatch_unit,
- "dispatch_unit_name": dept_info.dept_name,
- "dispatch_person": info.dispatch_person,
- "dispatch_person_name": user_info.nick_name,
- "dispatch_status": dispatch_status,
- "create_time": info.create_time})
- 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 = dispatch_id_get_dispatch_info(db, id)
- # if not info:
- # return JSONResponse(status_code=404, content={"code": 404, "msg": "type not found"})
- # info.del_flag='2'
- # review_info = dispatch_id_get_dispatch_review_info(db, id)
- # review_info.del_flag ='2'
- # for detail_info in dispatch_id_get_dispatch_detail_list(db, id):
- # detail_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)}")
- @router.post("/review")
- async def create_pattern(
- user_id=Depends(valid_access_token),
- body = Depends(remove_xss_json),
- db: Session = Depends(get_db)
- ):
- try:
- new_review = ResourceProvisionDispatchReview(
- id=new_guid(),
- reviewer=user_id,
- dispatch_id=body['dispatch_id'],
- review_result=body['review_result'],
- review_comments=body['review_comments'],
- create_by = user_id
- )
- db.add(new_review)
- 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.get("/review/list")
- async def get_pattern_list(
- page: int = Query(1, gt=0, description='页码'),
- pageSize: int = Query(None, gt=0, description='每页条目数量'),
- db: Session = Depends(get_db)
- ):
- try:
- review_list = [info.dispatch_id for info in get_dispatch_review_list(db)]
- query = db.query(ResourceProvisionDispatch)
- query = query.filter_by(del_flag='0')
- query = query.filter(~ResourceProvisionDispatch.id.in_(review_list))
- total_items = query.count()
- # 排序
- if pageSize is None:
- pageSize=total_items
- query = query.order_by(ResourceProvisionDispatch.dispatch_date.desc())
- # 执行分页查询
- lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
- data = []
- for info in lists:
- dept_info = dept_id_get_dept_info(db, info.dispatch_unit)
- user_info = user_id_get_user_info(db, info.dispatch_person)
- # review_info = dispatch_id_get_dispatch_review_info(db, info.id)
- # if review_info is None:
- # dispatch_details = info.dispatch_details
- # else:
- # dispatch_details = review_info.review_result
- data = {"id": info.id,
- "dispatch_date": info.dispatch_date,
- "dispatch_purpose": info.dispatch_purpose,
- "dispatch_unit": info.dispatch_unit,
- "dispatch_unit_name": dept_info.dept_name,
- "dispatch_person": info.dispatch_person,
- "dispatch_person_name": user_info.nick_name,
- "dispatch_status": info.dispatch_status,
- "create_time": info.create_time}
- 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)}")
|