| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190 |
- import xml.etree.ElementTree as ET
- from typing import Union, Annotated
- from fastapi import FastAPI, HTTPException, status, Depends
- import os
- import uuid
- import re
- import zipfile
- import json
- import chromadb
- from datetime import timedelta
- from fastapi.middleware.cors import CORSMiddleware
- from fastapi.middleware.gzip import GZipMiddleware
- from sentence_transformers import SentenceTransformer
- model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
- import base64
- from pydantic import BaseModel
- from subdir import service
- from subdir import db
- from subdir import util
- import xml.dom.minidom as MD
- import numpy as np
- from fastapi.staticfiles import StaticFiles
- import httpx
- httpClient = httpx.AsyncClient()
- from pymongo import AsyncMongoClient
- uri = "mongodb://owner:Pheecian1@47.101.198.30:27017/baojia"
- uri2 = "mongodb://owner:Pheecian1@47.101.198.30:27017/dinge"
- client = AsyncMongoClient(uri)
- dingeclient = AsyncMongoClient(uri2)
- chroma_client = chromadb.HttpClient(host='47.101.198.30', port=8000)
- from fastapi.responses import FileResponse, RedirectResponse
- from fastapi_cache import FastAPICache
- from inmemory import InMemoryBackend
- from fastapi_cache.decorator import cache
- from contextlib import asynccontextmanager
- from fastapi import WebSocket, WebSocketDisconnect
- from fastapi import UploadFile, File, Form
- from collections.abc import AsyncIterator
- from tasks import process_data
- from celery.result import AsyncResult
- from fastapi_login import LoginManager
- class ConnectionManager:
- """Class defining socket events"""
- def __init__(self):
- """init method, keeping track of connections"""
- self.active_connections = []
-
- async def connect(self, websocket: WebSocket):
- """connect event"""
- await websocket.accept()
- self.active_connections.append(websocket)
- async def send_personal_message(self, message: str, websocket: WebSocket):
- """Direct Message"""
- await websocket.send_text(message)
-
- def disconnect(self, websocket: WebSocket):
- """disconnect event"""
- self.active_connections.remove(websocket)
- @asynccontextmanager
- async def lifespan(_: FastAPI) -> AsyncIterator[None]:
- FastAPICache.init(InMemoryBackend(), prefix="default")
- yield
- SECRET = '400687251779e65aca22ef5bb52b9cc4c218c63571004aeb'
- app = FastAPI(lifespan=lifespan)
- origins = [
- "http://localhost.tiangolo.com",
- "https://localhost.tiangolo.com",
- "http://localhost",
- "http://localhost:9002",
- "http://127.0.0.1:9002",
- ]
- app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
- )
- ##app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=5)
- ##app.mount("/static", StaticFiles(directory="front/dist"), name="static")
- ##manager = ConnectionManager()
- manager = LoginManager(SECRET, token_url='/token')
- @manager.user_loader()
- def load_user(id: str): # could also be an asynchronous function
-
- return id
- class Task(BaseModel):
- bianma: str
- mc: str
- tz: str
- dw: str
- sl: str
- n: int
- label: str
- name: str
- bh: str
- class Jxtz(BaseModel):
- biao_id: str
- bh: str
- glf: str
- lr: str
- bz: int
- gong: str
- chaiyou: str
- qiyou: str
- dian: str
- class Lsj(BaseModel):
- bianma: str
- mingcheng: str
- danwei: str
- class Xxj(BaseModel):
- city: str
- month: str
- class Rgtz(BaseModel):
- biao_id: str
- bh: str
- yi: str
- er: str
- san: str
- glf: str
- lr: str
- bz: int
- class Zcfx(BaseModel):
- biao_id: str
- bh: str
- class Zcfx2(BaseModel):
- biao_id: str
- bh: str
- prefix: str
- class Info(BaseModel):
- name: str
- class DingeshuRequest(BaseModel):
- value: int
- class DingeXilieRequest(BaseModel):
- value: int
- id: str
- class SingleDingeXilieRequest(BaseModel):
- zhuanye: int
- debh: str
- class InfoWithID(BaseModel):
- name: str
- id: str
- class Tiaojia(BaseModel):
- biao_id: str
- bh: str
- bm: str
- mingcheng: str
- danwei: str
- jiage: str
- glf: str
- lr: str
- bz: int
- class SearchDe(BaseModel):
- zhuanye: str
- text: str
- class UpdateZjcs(BaseModel):
- biao_id: str
- bh: str
- mc: str
- fl: str
- class Item(BaseModel):
- bh: str
- bt: str
- name: str
- class Rcj(BaseModel):
- bh: str
- bt: str
- bm: str
- name: str
- class Dercj(BaseModel):
- bh: str
- bt: str
- qdbm: str
- debm: str
- name: str
- class Zjcs(BaseModel):
- bh: str
- name: str
- @app.post("/pushtask/")
- async def pushtask(r: Task, user=Depends(manager)):
- task = process_data.apply_async(kwargs={"data": {"bianma": r.bianma, "mc": r.mc, "tz": r.tz, "dw": r.dw, "sl": r.sl, "n": r.n, "label": r.label, 'name': r.name, 'bh': r.bh}})
- return {"id": task.id}
- @app.get("/checktask/{id}")
- async def checktask(id, user=Depends(manager)):
- print(id)
- result = AsyncResult(id)
- return {
- "status": result.status,
- "result": result.result if result.ready() else None
- }
-
- @app.post("/outline2")
- async def read_root2(info: Info, user=Depends(manager)):
-
- return await db.getOutline(client, info.name, user)
- @app.post("/detail2")
- async def read_detail2(info: Info, user=Depends(manager)):
-
- return await db.getDetail(client, info.name, user)
- @app.post("/baojiahuizong2/")
- async def read_bjhz2(info: InfoWithID, user=Depends(manager)):
-
- raw = await db.getBjhz(client, info.name, info.id)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- for grandchild in entry["_children"]:
- if "__children" in grandchild:
- grandchild['_children'] = grandchild['__children']
- del grandchild['__children']
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/guifeishuijin2/")
- async def read_gfsj2(info: InfoWithID, user=Depends(manager)):
- raw = await db.getGfsj(client, info.name, info.id)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/qitaxiangmu2/")
- async def read_qtxm2(info: InfoWithID, user=Depends(manager)):
- raw = await db.getQtxm(client, info.name, info.id)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/zygczgj/")
- async def zygczgj(info: InfoWithID, user=Depends(manager)):
- return await db.getZygczgj(client, info.name, info.id)
- @app.post("/zanliejine2/")
- async def read_zlje2(info: InfoWithID, user=Depends(manager)):
- return await db.getZlje(client, info.name, info.id)
- @app.post("/jirigong2/")
- async def read_jrg2(info: InfoWithID, user=Depends(manager)):
- return await db.getJrg(client, info.name, info.id)
- @app.post("/zongchengbaofuwufei2/")
- async def read_zcbfwf2(info: InfoWithID, user=Depends(manager)):
- return await db.getZcbfwf(client, info.name, info.id)
- @app.post("/fabaorengongyingcailiao2/")
- async def read_fbrgycl2(info: InfoWithID, user=Depends(manager)):
- return await db.getFbrgycl(client, info.name, info.id)
- @app.post("/rencaijihuizong2/")
- async def read_rcjhz2(info: InfoWithID, user=Depends(manager)):
- return await db.getRcjhz(client, info.name, info.id)
- @app.post("/qingdanxiangmu2/")
- async def read_qdxm2(info: InfoWithID, user=Depends(manager)):
-
- return await db.getQdxm(client, info.name, info.id)
- @app.post("/qingdanmingxi/")
- async def read_qdmx(item : Item, user=Depends(manager)):
- return await db.getQdmx(client, item.name, item.bh, item.bt)
- @app.get("/qingdantuijian/{bm}")
- @cache(expire=86400)
- async def read_tuijian(bm: str):
-
-
- return service.getQingdanTuijian("", "", bm)
- @app.post("/zjcs/")
- async def read_zjcs(item : Zjcs, user=Depends(manager)):
- raw = await db.getZjcs(client, item.name, item.bh)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/djcs/")
- async def read_djcs(item : Zjcs, user=Depends(manager)):
- raw = await db.getDjcs(client, item.name, item.bh)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/files2/")
- async def read_files2(user=Depends(manager)):
- result = await db.list_files(client, user)
- return result
- @app.post("/deleteFile/")
- async def delete(r: Info, user=Depends(manager)):
- result = await db.delete_files(client, r.name, user)
- return result
- @app.get("/qingdanshu/{zhuanye}")
- @cache(expire=86400)
- async def read_qds(zhuanye : str):
- result = service.getQds()
- if zhuanye == '10':
- return [result[0]]
- elif zhuanye == '20':
- return [result[2]]
- elif zhuanye == '30':
- return [result[3]]
- elif zhuanye == '40':
- return [result[4]]
- else:
- return result
- @app.get("/qingdan/{bm}")
- @cache(expire=86400)
- async def read_qingdan(bm: str):
- result = service.getQingdan(bm)
- return result
- @app.get("/des/{value}")
- @cache(expire=86400)
- async def read_des(value: int):
- result = service.getDes(value)
- if value == 30:
- result.append({
- "id": "2075",
- "key" : "2075",
- "value" : "2075",
- "label" : "安装费用",
- "title" : "安装费用",
- "children" : [
- {
- "id": "2076",
- "key" : "2076",
- "value" : "2076",
- "label" : "脚手架搭拆费",
- "title" : "脚手架搭拆费",
- "children" : []
- },
- {
- "id": "2077",
- "key" : "2077",
- "value" : "2077",
- "label" : "施工超高增加费",
- "title" : "施工超高增加费",
- "children" : []
- },
-
- {
- "id": "2080",
- "key" : "2080",
- "value" : "2080",
- "label" : "高层建筑增加费",
- "title" : "高层建筑增加费",
- "children" : [
- {
- "id": "2081",
- "key" : "2081",
- "value" : "2081",
- "label" : "第四册",
- "title" : "第四册",
- "children" : []
- },
- {
- "id": "2082",
- "key" : "2082",
- "value" : "2082",
- "label" : "第五册",
- "title" : "第五册",
- "children" : []
- },
- {
- "id": "2083",
- "key" : "2083",
- "value" : "2083",
- "label" : "第七册",
- "title" : "第七册",
- "children" : []
- },
- {
- "id": "2084",
- "key" : "2084",
- "value" : "2084",
- "label" : "第九册",
- "title" : "第九册",
- "children" : []
- },
- {
- "id": "2085",
- "key" : "2085",
- "value" : "2085",
- "label" : "第十册",
- "title" : "第十册",
- "children" : []
- },
- {
- "id": "2086",
- "key" : "2086",
- "value" : "2086",
- "label" : "第十一册",
- "title" : "第十一册",
- "children" : []
- },
- ]
- },
- {
- "id": "2078",
- "key" : "2078",
- "value" : "2078",
- "label" : "安装生产同时增加费",
- "title" : "安装生产同时增加费",
- "children" : []
- },
- {
- "id": "2079",
- "key" : "2079",
- "value" : "2079",
- "label" : "有害环境操作增加费",
- "title" : "有害环境操作增加费",
- "children" : []
- },
- {
- "id": "2087",
- "key" : "2087",
- "value" : "2087",
- "label" : "系统调试费",
- "title" : "系统调试费",
- "children" : []
- },
- ]
- })
- if value == 60:
- result.append({
- "id": "184",
- "key" : "184",
- "value" : "184",
- "label" : "安装费用",
- "title" : "安装费用",
- "children" : [
- {
- "id": "185",
- "key" : "185",
- "value" : "185",
- "label" : "脚手架搭拆费",
- "title" : "脚手架搭拆费",
- "children" : []
- },
- {
- "id": "186",
- "key" : "186",
- "value" : "186",
- "label" : "施工超高增加费",
- "title" : "施工超高增加费",
- "children" : []
- },
- {
- "id": "187",
- "key" : "187",
- "value" : "187",
- "label" : "高层建筑增加费",
- "title" : "高层建筑增加费",
- "children" : []
- }
- ]
- })
- return result
- @app.get("/pbs/{value}")
- @cache(expire=86400)
- async def read_pbs(value:int):
- result = service.getPbs(value)
- #print(result)
- result.insert(0, {"id": "0","key": "0", "label": "全部", "title": "全部"})
- return result
- @app.get("/jxs/{value}")
- @cache(expire=86400)
- async def read_jxs(value:int):
- result = service.getJxs(value)
- #print(result)
- result.insert(0, {"id": "0","key": "0", "label": "全部", "title": "全部"})
- return result
- @app.get("/cls/{value}")
- @cache(expire=86400)
- async def read_cls(value:int):
- result = service.getCls(value)
- #print(result)
- result.insert(0, {"id": "0","key": "0", "label": "全部", "title": "全部"})
- return result
- @app.get("/pbxl/{name}/{zhuanye}")
- @cache(expire=86400)
- async def read_pbxl(name: str, zhuanye: int):
- result = service.getPbxl(name, zhuanye)
- #print(result)
- return result
- @app.get("/jxxl/{name}/{zhuanye}")
- @cache(expire=86400)
- async def read_jxxl(name: str, zhuanye: int):
- result = service.getJxxl(name, zhuanye)
- #print(result)
- return result
- @app.get("/clxl/{name}/{zhuanye}")
- @cache(expire=86400)
- async def read_clxl(name: str, zhuanye: int):
- result = service.getClxl(name, zhuanye)
- #print(result)
- return result
- @app.get("/cankao/")
- @cache(expire=86400)
- async def cankao():
- result = service.getCankao()
- #print(result)
- return result
- @app.post("/qufei/")
- async def read_qufei(r: Info, user=Depends(manager)):
- return await db.getQufei(client, r.name, user)
- @app.post("/jiagongcai/")
- async def read_jiagongcai(r: Info, user=Depends(manager)):
- return await db.getJiagongcai(client, r.name)
- @app.get("/dexilie/{value}/{id}")
- @cache(expire=86400)
- async def read_dexilie(value: int, id: str):
- if value == 30 and int(id) > 2074:
- return service.getDeXilie_azfy(value, id)
- if value == 60 and int(id) > 183:
- return service.getDeXilie_xsazfy(value, id)
- result = service.getDeXilie(value, id)
- #print(result)
- return result
- @app.get("/singledexilie2/{zhuanye}/{debh}")##debh = debh!description
- @cache(expire=86400)
- async def read_singledexilie2(zhuanye: int, debh: str):
- if debh.startswith("D") :
- return json.dumps({
- "reverse": "None",
- "rgde": None,
- "jxde": None,
- "clde": None,
- "actual_zhuanye": zhuanye,
- "bz_selected": {"BZBH": {}},
- "bz_selected2": {"BZBH": {}}
- }, ensure_ascii=False)
- if "-F" in debh and zhuanye == 30:
- return service.read_singledexilie_azfy(debh)
- if "-F" in debh and zhuanye == 60:
- return service.read_singledexilie_xsazfy(debh)
- if debh == '19-19':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-20':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-21':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-22':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-23':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-24':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-25':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-26':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-27':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-28':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-29':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-30':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-31':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-32':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-33':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-34':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-35':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-36':
- return service.read_singledexilie_tjazfy(debh)
- r_debh = debh.split("!")[0]
- if "附注" in r_debh:
- position = r_debh.find("附注")
- r_debh = r_debh[:position]
- ##print(r_debh)
- result1, result2, rgde, jxde, clde, bz_selected, bz_selected2, actual_zhuanye= service.getSingleDeXilie(zhuanye, r_debh)
- ##print("get result ***************************************")
- if result1:
- result3 = json.loads(result1)
- else:
- result3 = {}
- result3["reverse"] = str(result2)
- result3["rgde"] = rgde
- result3["jxde"] = jxde
- result3["clde"] = clde
- result3["actual_zhuanye"] = actual_zhuanye
- if bz_selected != None:
- result3["bz_selected"] = json.loads(bz_selected)
- else:
- result3["bz_selected"] = {"BZBH": {}}
- if bz_selected2 != None:
- result3["bz_selected2"] = json.loads(bz_selected2)
- else:
- result3["bz_selected2"] = {"BZBH": {}}
- ####14-227+[14-228]*-2
- ####3-409*1.2
- ##print(r_debh)
- if "[" in r_debh:
- position3 = r_debh.find("*")
- coef = 1
- if position3 == -1:
- pass
- else:
- coef = r_debh[1 + position3:]
- ##print(coef)
- tail = 0
- for i in range(0, len(coef) + 1):
- if i == len(coef):
- tail = i
- break
- if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-' and coef[i] != '.':
- tail = i
- break
- if tail == 0:
- ##print("1113111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- coef = float(coef[0:tail])
- position1 = r_debh.find("[")
- position2 = r_debh.find("]")
- if position2 == -1:
- ##print("1121111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- if r_debh[position1-1] == "+":
- pass
- elif r_debh[position1-1] == "-":
- coef = -coef
- else:
- ##print("111111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- debh = r_debh[position1+1: position2]
- if result3['GLDE']: ##csv文件里的字段,表示这个定额有没有配套的增减定额
- hit = False
- for key, value in result3['GLDE'].items():
- if debh in value:
- hit = True
- if not hit:
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- else:
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- result1_, result2_, rgde_, jxde_, clde_, bz_selected_, bz_selected2_, actual_zhuanye_ = service.getSingleDeXilie(zhuanye, debh)
- if result1_:
- rgde=util.mergerg(rgde, rgde_, coef)
- jxde=util.mergejx(jxde, jxde_, coef)
- clde=util.mergecl(clde, clde_, coef)
- result3["rgde"] = rgde
- result3["jxde"] = jxde
- result3["clde"] = clde
- item_ = None
- for item in result3['DW'].keys():
- item_ = item
- result3['DEBH'] = {item_: util.cleanBM(r_debh)}
- else:
- result3["reverse"] = 'None'
- elif "*" in r_debh:##1-234*1.2
- position3 = r_debh.find("*")
- coef = 1
-
- coef = r_debh[1 + position3:]
- ##print(coef)
- tail = 0
- for i in range(0, len(coef) + 1):
- if i == len(coef):
- tail = i
- break
- if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-' and coef[i] != '.':
- tail = i
- break
- if tail == 0:
- ##print("1113111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- coef = float(coef[0:tail])
- util.multirg(result3["rgde"], coef)
- util.multijx(result3["jxde"], coef)
- util.multicl(result3["clde"], coef)
- item_ = None
- for item in result3['DW'].keys():
- item_ = item
- result3['DEBH'] = {item_: (r_debh)}
- ##print(result3)
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- @app.get("/singledexilie/{zhuanye}/{debh}/{mc}")
- @cache(expire=86400)
- async def read_singledexilie(zhuanye: int, debh: str, mc: str):
- if debh.startswith("D") :
- return json.dumps({
- "reverse": "None",
- "rgde": None,
- "jxde": None,
- "clde": None,
- "actual_zhuanye": zhuanye,
- "bz_selected": {"BZBH": {}},
- "bz_selected2": {"BZBH": {}}
- }, ensure_ascii=False)
- if "-F" in debh:
- if mc == '第一章' or mc == '第二章' or mc == '第三章':
- return service.read_singledexilie_xsazfy(debh)
- return service.read_singledexilie_azfy(debh)
- if debh == '19-19':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-20':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-21':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-22':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-23':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-24':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-25':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-26':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-27':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-28':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-29':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-30':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-31':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-32':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-33':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-34':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-35':
- return service.read_singledexilie_tjazfy(debh)
- if debh == '19-36':
- return service.read_singledexilie_tjazfy(debh)
-
- r_debh = debh.split("!")[0]
- if "附注" in r_debh:
- position = r_debh.find("附注")
- r_debh = r_debh[:position]
- ##print(r_debh)
- result1, result2, rgde, jxde, clde, bz_selected, bz_selected2, actual_zhuanye= await db.getSingleDeXilie(model, dingeclient, zhuanye, r_debh, mc)
- ###print("get result ***************************************")
- if result1:
- result3 = json.loads(result1)
- else:
- result3 = {}
- result3["reverse"] = str(result2)
- result3["rgde"] = rgde
- result3["jxde"] = jxde
- result3["clde"] = clde
- result3["actual_zhuanye"] = actual_zhuanye
- if bz_selected != None:
- result3["bz_selected"] = json.loads(bz_selected)
- else:
- result3["bz_selected"] = {"BZBH": {}}
- if bz_selected2 != None:
- result3["bz_selected2"] = json.loads(bz_selected2)
- else:
- result3["bz_selected2"] = {"BZBH": {}}
- ####14-227+[14-228]*-2
- ####3-409*2
- ##print(r_debh)
- if "[" in r_debh:
- position3 = r_debh.find("*")
- coef = 1
- if position3 == -1:
- pass
- else:
- coef = r_debh[1 + position3:]
- ##print(coef)
- tail = 0
- for i in range(0, len(coef) + 1):
- if i == len(coef):
- tail = i
- break
- if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-' and coef[i] != '.':
- tail = i
- break
- if tail == 0:
- ##print("1113111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- coef = float(coef[0:tail])
- position1 = r_debh.find("[")
- position2 = r_debh.find("]")
- if position2 == -1:
- ##print("1121111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- if r_debh[position1-1] == "+":
- pass
- elif r_debh[position1-1] == "-":
- coef = -coef
- else:
- ##print("111111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- debh = r_debh[position1+1: position2]
- if result3['GLDE']: ##csv文件里的字段,表示这个定额有没有配套的增减定额
- hit = False
- for key, value in result3['GLDE'].items():
- if debh in value:
- hit = True
- if not hit:
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- else:
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- result1_, result2_, rgde_, jxde_, clde_, bz_selected_, bz_selected2_, actual_zhuanye_ = await db.getSingleDeXilie(model, dingeclient, zhuanye, debh, mc)
- if result1_:
- rgde=util.mergerg(rgde, rgde_, coef)
- jxde=util.mergejx(jxde, jxde_, coef)
- clde=util.mergecl(clde, clde_, coef)
- result3["rgde"] = rgde
- result3["jxde"] = jxde
- result3["clde"] = clde
- item_ = None
- for item in result3['DW'].keys():
- item_ = item
- result3['DEBH'] = {item_: util.cleanBM(r_debh)}
- else:
- result3["reverse"] = 'None'
- elif "*" in r_debh:##1-234*1.2
- position3 = r_debh.find("*")
- coef = 1
-
- coef = r_debh[1 + position3:]
- ##print(coef)
- tail = 0
- for i in range(0, len(coef) + 1):
- if i == len(coef):
- tail = i
- break
- if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-' and coef[i] != '.':
- tail = i
- break
- if tail == 0:
- ##print("1113111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- coef = float(coef[0:tail])
- util.multirg(result3["rgde"], coef)
- util.multijx(result3["jxde"], coef)
- util.multicl(result3["clde"], coef)
- item_ = None
- for item in result3['DW'].keys():
- item_ = item
- result3['DEBH'] = {item_: (r_debh)}
- ##print(result3)
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- @app.post("/save/")
- async def save(r: Info, user=Depends(manager)):
- data = json.loads(r.name)
- ##print(data)
-
- return await db.save(client, data)
- @app.post("/statistics/")
- async def statistics(r: Info, user=Depends(manager)):
-
- ##print(data)
- return await db.statistics(client, r.name, user)
- @app.post("/zujia/")
- async def zujia(r: Info, user=Depends(manager)):
-
- ##print(data)
- return await db.zujia(client, r.name, user)
- @app.post("/tuijian/")
- async def tuijian(r: Info, user=Depends(manager)):
-
- ##print(data)
- return await db.tuijian(chroma_client, r.name)
- @app.post("/frequency/")
- async def frequency(r: InfoWithID, user=Depends(manager)):
-
- ##print(data)
- return await db.frequency(client, r.name, r.id, user)
- @app.post("/savedjcs/")
- async def savedjcs(r: Info, user=Depends(manager)):
- data = json.loads(r.name)
- ##print(data)
-
- return await db.savedjcs(client, data)
- @app.post("/applyFL/")
- async def applyFL(r: InfoWithID, user=Depends(manager)):
- data = json.loads(r.name)
- ##print(data)
-
- return await db.applyFL(client, r.id, data, user)
- @app.post("/xxj/")
- async def xxj(r: Xxj, user=Depends(manager)):
- return service.xxj(r.city, r.month)
- @app.post("/jgfb/")
- async def jgfb(r: Lsj, user=Depends(manager)):
- if r.bianma.startswith('D'):
- embedding = model.encode([r.mingcheng])
- return await db.jgfb(chroma_client, r.bianma, r.mingcheng, r.danwei, embedding)
- return service.jgfb(r.bianma, r.mingcheng, r.danwei)
- @app.post("/lsj/")
- async def lsj(r: Lsj, user=Depends(manager)):
- if r.bianma.startswith('D'):
- embedding = model.encode([r.mingcheng])
- return await db.lsj(chroma_client, r.bianma, r.mingcheng, r.danwei, embedding)
- return service.lsj(r.bianma, r.mingcheng, r.danwei)
- @app.post("/rgtz/")
- async def rgtz(r: Rgtz, user=Depends(manager)):
- glf = r.glf
- lr = r.lr
- if r.glf == '':
- glf = '0'
- if r.lr == "":
- lr = '0'
- ##return []
- yi = r.yi
- er = r.er
- san = r.san
- return await db.rgtz(client, r.biao_id, r.bh, yi, er, san, glf, lr, r.bz)
- @app.post("/zcfx/")
- async def zcfx(r: Zcfx, user=Depends(manager)):
- return await db.zcfx(client, r.biao_id, r.bh)
- @app.post("/zcfx2/")
- async def zcfx2(r: Zcfx2, user=Depends(manager)):
- return await db.zcfx2(client, r.biao_id, r.bh, r.prefix)
- @app.post("/jxtz/")
- async def jxtz(r: Jxtz, user=Depends(manager)):
- glf = r.glf
- lr = r.lr
- if r.glf == '':
- glf = '0'
- if r.lr == "":
- lr = '0'
- return await db.jxtz(client, r.biao_id, r.bh, r.gong, r.chaiyou, r.qiyou, r.dian, glf, lr, r.bz)
- @app.post("/tiaojia/")
- async def tiaojia(r: Tiaojia, user=Depends(manager)):
- ##return []
- glf = r.glf
- lr = r.lr
- if r.glf == '':
- glf = '0'
- if r.lr == "":
- lr = '0'
- return await db.tiaojia(client, r.biao_id, r.bh, r.bm, r.mingcheng, r.danwei, r.jiage, glf, lr, r.bz)
- @app.post("/searchde/")
- async def searchde(r: SearchDe):
- ##return []
-
- return await db.searchde(dingeclient, r.zhuanye, r.text)
- @app.post("/updatezjcs/")
- async def updatezjcs(r: UpdateZjcs, user=Depends(manager)):
- ##return []
-
- return await db.updatezjcs(client, r.biao_id, r.bh, r.mc, r.fl)
- @app.post("/upload/")
- async def upload(file: Annotated[UploadFile, File()], token: Annotated[str, Form()]):
- user = await manager.get_current_user(token)
- print(user)
- if file.filename.endswith('13jz') or file.filename.endswith("13jt"):
- content = await file.read()
- string = content.decode('utf-8')
- await resolve(string, user)
- return [file.filename]
- elif file.filename.endswith("jszf") or file.filename.endswith("JSZF") or file.filename.endswith('jscf') or file.filename.endswith('JSCF'):
- content = await file.read()
- string = content.decode('utf-8')
- root = ET.fromstring(string)
- for child in root:
- ##print(child)
- if child.tag == "ZBFileContent" or child.tag == 'DYFileContent':
- base64_bytes = child.text.encode("ascii")
- sample_string_bytes = base64.b64decode(base64_bytes)
- tmp = str(uuid.uuid4())
- os.mkdir(os.path.join("tmp", tmp))
- with open(tmp, "wb") as file_:
- file_.write(sample_string_bytes)
- with zipfile.ZipFile(tmp, 'r') as zip_ref:
- zip_ref.extractall(os.path.join("tmp", tmp))
- dir_list = os.listdir(os.path.join("tmp", tmp))
- ##print(dir_list)
- for entry in dir_list:
- if entry.endswith("13jz"):
- with open(os.path.join("tmp", tmp, entry), 'r') as f:
- await resolve(f.read(), user)
- return [file.filename]
- else:
- return [file.filename]
-
-
- @app.get("/download/{item_id}")
- async def download_file(item_id, user=Depends(manager)):
- print(user)
- tmp = str(uuid.uuid4())
- file_path = "export/contacts.xml.b"
- # Create the root element
- root = ET.Element("JingJiBiao")
- # Create a sub-element
- ##TouBiaoXx = ET.SubElement(root, "TouBiaoXx")
- await db.build(client, root, item_id)
- # Create the tree and write to a file
- tree = ET.ElementTree(root)
- tree.write("export/contacts.xml"+tmp, encoding="utf-8")
- dom = MD.parse("export/contacts.xml"+tmp)
-
- with open("export/contacts.xml.b" + tmp, 'w') as f:
- f.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n")
- content = (dom.toprettyxml(indent=" "))
- content_ = content.split("\n")
- f.write("\n".join(content_[1:]))
-
- return FileResponse(file_path+tmp, media_type='application/octet-stream', filename="contacts.xml")
-
- async def resolve(data, user):
- await db.resolve(data, user, client)##manager.send_personal_message(f"You wrote: {data}", websocket)
- ##@app.websocket("/ws")
- ##async def websocket_endpoint(websocket: WebSocket):
- ## await manager.connect(websocket)
- ## try:
- ## while True:
- ## data = await websocket.receive_text()
- ## await resolve(websocket, data)
- ## ##await manager.broadcast(f"Client #{client_id} says: {data}")
- ## except WebSocketDisconnect:
- ## manager.disconnect(websocket)
- ## ##await manager.broadcast(f"Client left the chat")
- ## {'access_token': '96__yNpsN6UIOtAgfNOmu34wdt4BBnN9vZLbzCq94NCQnKoDNu7H217eM7ZMS-KZDcV9CyfpLmY80829lbJ20EFasEtBbqetdazuTYHn_8IZ34', 'expires_in': 7200, 'refresh_token': '96_JMFvhYr0scOw9pWs_ygdwYZbku9FwSbO-hcI0OVchVHoqUsXeZtZpQKCJOiq4y-LwIacvlC9huClMLTqE0CUcwugvyOV_pnr2rBYw3aTRWg', 'openid': 'oEcfS62dGXuzzAADYPzjr6OXYdJk', 'scope': 'snsapi_login', 'unionid': 'o1X7S67iVGRVbqvrjr1_UzBE4xdg'}
- @app.post("/token/")
- async def token(r : Info):
- response = await httpClient.get("https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx74b45ac9983e4b3e&secret=bf6741ce4209a0af45f267be2abf560b&code="+ r.name + "&grant_type=authorization_code")
- info = (response.json())
- response = await httpClient.get("https://api.weixin.qq.com/sns/userinfo?access_token=" + info['access_token'] + "&openid="+ info['openid'])
- info = (response.json())
- token = manager.create_access_token(data=dict(sub=info['openid']), expires=timedelta(hours=12))
- return {'token' : token, 'token_type' : 'bearer', "nickname": info['nickname'], "img" : info['headimgurl'], "openid" : info["openid"]}
-
|