| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069 |
- 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 = None##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
- from pymongo import AsyncMongoClient
- client = AsyncMongoClient()
- chroma_client = None##chromadb.HttpClient(host='localhost', 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 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 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("/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 value == debh:
- 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_:
- util.mergerg(rgde, rgde_, coef)
- util.mergejx(jxde, jxde_, coef)
- 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, client, 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 value == debh:
- 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, client, zhuanye, debh, mc)
- if result1_:
- util.mergerg(rgde, rgde_, coef)
- util.mergejx(jxde, jxde_, coef)
- 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)
- @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(client, 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"):
- content = await file.read()
- string = content.decode('utf-8')
- root = ET.fromstring(string)
- for child in root:
- ##print(child)
- if child.tag == "ZBFileContent":
- 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")
-
- @app.post("/token/")
- async def token(r : Info):
- token = manager.create_access_token(data=dict(sub=r.name), expires=timedelta(hours=12))
- return {'token' : token, 'token_type' : 'bearer'}
-
|