import requests from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from APPData.Crud import CompanyCrud, LawsuitCrud from Utils.AccessControl.AccessUtil import rbac from Utils.DataBase.MongoHelperUtils import get_mongodb, get_tyc_mongodb from Utils.DataBase.SqlAlchemyUtils import get_db from Utils.TycApi.CommonUtil import CommonUtils from Utils.TycApi.Configure import DB_SFFX from Utils.TycApi.Lawsuit import get_tyc_data router = APIRouter( tags=["法律诉讼"], prefix="/api/wide_data/lawsuit", dependencies=[Depends(rbac)] ) @router.get("/pull", summary="拉取数据") def func01(name: str, db: Session = Depends(get_db)): mongodb = get_mongodb() tyc_mongodb = get_tyc_mongodb() # 根据name查询企业是否存在 data = CompanyCrud.get_company_by_name(db=db, name=name) if not data: # 不能存在新建企业再返回cid data = CompanyCrud.create_company_by_name(db=db, name=name) cid = data.id # 查询数据库是否有此条数据 search_data = mongodb.find_data("WR_DataBase", 'C9.6_法律诉讼', {"企业ID": cid}, []) if search_data: return {"info": "Data already exists", "Datail": search_data} # 拉取天眼查数据到mongodb tyc_res = get_tyc_data(name) if tyc_res != 'success': raise HTTPException(status_code=401, detail=tyc_res) # 查询天眼查数据库 tyc_data = tyc_mongodb.find_data(DB_SFFX, '法律诉讼', {"企业名称": name}, ['法律诉讼']) if not tyc_data: raise HTTPException(status_code=401, detail='Data query failed') record = tyc_data.get('法律诉讼', dict()) record = record.get('result', list()) for item in record: data = dict() data['企业ID'] = cid data['id'] = item.get('id', None) data['标题'] = item.get('title', None) data['案由'] = item.get('caseReason', None) data['案号'] = item.get('caseNo', None) data['涉案方'] = list() persons = item.get('casePersons', list()) for person in persons: person_dict = dict() person_dict['案件身份'] = person.get('role') person_dict['名称'] = person.get('name') person_dict['裁判结果'] = person.get('result') data['涉案方'].append(person_dict) data['发布日期'] = CommonUtils.time_stamp(item.get('submitTime', None)) data['裁判日期'] = item.get('judgeTime', None) data['更新时间'] = CommonUtils.get_current_time() # 保存到数据到data_business LawsuitCrud.create_lawsuit_by_id(db=db, mongodb=mongodb, _id=cid, content=data) mongodb.client.close() tyc_mongodb.client.close() return {"info": "Pull succeeded"} @router.post("/update", summary="更新数据") def func02(cid: str, db: Session = Depends(get_db)): mongodb = get_mongodb() tyc_mongodb = get_tyc_mongodb() # 查询企业是否存在 db_item = CompanyCrud.get_company_by_id(db, _id=cid) if not db_item: raise HTTPException(status_code=204, detail="Company Not Found") name = db_item.name # 拉取天眼查数据到mongodb tyc_res = get_tyc_data(name) if tyc_res != 'success': raise HTTPException(status_code=401, detail=tyc_res) # 查询天眼查数据库 tyc_data = tyc_mongodb.find_data(DB_SFFX, '法律诉讼', {"企业名称": name}, ['法律诉讼']) if not tyc_data: raise HTTPException(status_code=401, detail='Data query failed') record = tyc_data.get('法律诉讼', dict()) record = record.get('result', list()) for item in record: data = dict() data['企业ID'] = cid data['id'] = item.get('id', None) data['标题'] = item.get('title', None) data['案由'] = item.get('caseReason', None) data['案号'] = item.get('caseNo', None) data['涉案方'] = list() persons = item.get('casePersons', list()) for person in persons: person_dict = dict() person_dict['案件身份'] = person.get('role') person_dict['名称'] = person.get('name') person_dict['裁判结果'] = person.get('result') data['涉案方'].append(person_dict) data['发布日期'] = CommonUtils.time_stamp(item.get('submitTime', None)) data['裁判日期'] = item.get('judgeTime', None) data['更新时间'] = CommonUtils.get_current_time() # 保存到数据到data_lawsuit LawsuitCrud.update_lawsuit_by_id(mongodb=mongodb, _id=data['id'], content=data) mongodb.client.close() tyc_mongodb.client.close() return {"info": "Update succeeded"} @router.get("/view", summary="查看数据") def func03(cid: str, db: Session = Depends(get_db)): mongodb = get_mongodb() # 查询mysql数据库中的_id db_item = CompanyCrud.get_company_by_id(db, _id=cid) if not db_item: raise HTTPException(status_code=204, detail="Company Not Found") # 根据_id查询mongodb数据库 data = LawsuitCrud.find_lawsuit_by_id(db=db, mongodb=mongodb, _id=cid) return data