import xml.etree.ElementTree as ET from typing import Union from fastapi import FastAPI import os import uuid import re from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel import pandas as pd from numpy import float64 def indexrcj(rcjhz, rcjarray): bm = rcjarray[1] name = rcjarray[2] danwei = rcjarray[4] target = bm + name + danwei for i in range(len(rcjhz)): entry = rcjhz[i] attempt = entry[1] + entry[2] + entry[4] if attempt == target: return str(i) print("###########################warning######################") print(rcjarray) print("###########################rcjhz not include ###################") ##raise Exception("not found rcjid") return "" def huizongrcj_order(data): huizong = {} result = [ ["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]] left = [] for entry in data: bm = entry[1] name = entry[2] danwei = entry[4] if '000FE' in bm and danwei == '%': ##azfy left.append(entry) continue if '00EXP001' in bm and danwei == '%': ##回程费 left.append(entry) continue if '99EXP007' in bm and danwei == '%': ##回程费 left.append(entry) continue if '99EXP022' in bm and danwei == '%': ##回程费 left.append(entry) continue if '31130104' in bm and danwei == '%': ##回程费 left.append(entry) continue key = bm + name + danwei if key in huizong: huizong[key].append(entry) else: huizong[key] = [entry] for key,value in huizong.items(): result_hl = 0 for i in range(0, len(value)): result_hl = result_hl + float(value[i][10]) if type(value[0][5]) == type('aaa') and len(value[0][5]) == 0: value[0][5]='0' result_dj = float(value[0][5]) result_hj = result_hl * result_dj result.append([value[0][0], value[0][1], value[0][2], value[0][3], value[0][4], value[0][5],value[0][6], value[0][7], value[0][8], value[0][9], result_hl, result_hj, value[0][12],value[0][13], value[0][14], value[0][15], ]) for entry in left: result.append([entry[0], entry[1], entry[2], entry[3], entry[4], entry[5], entry[6], entry[7], entry[8], entry[9], entry[10], entry[11], entry[12], entry[13], entry[14], entry[15]]) return result def huizongrcj(data): huizong = {} result = [ [ "ID", "编码", "名称", "规格型号", "单位", "数量", "单价", "合价", "产地", "供应厂商", "人材机类别", "主要材料标志", "主材标志", "设备标志", "甲供标志", "暂估价标志"]] left = [] for entry in data: bm = entry[1] name = entry[2] danwei = entry[4] if '000FE' in bm and danwei == '%': ##azfy left.append(entry) continue if '00EXP001' in bm and danwei == '%': ##azfy left.append(entry) continue if '99EXP007' in bm and danwei == '%': ##azfy left.append(entry) continue if '99EXP022' in bm and danwei == '%': ##azfy left.append(entry) continue if '31130104' in bm and danwei == '%': ##azfy left.append(entry) continue key = bm + name + danwei if key in huizong: huizong[key].append(entry) else: huizong[key] = [entry] for key,value in huizong.items(): result_hl = 0 for i in range(0, len(value)): result_hl = result_hl + float(value[i][10]) result_dj = float(value[0][5]) result_hj = result_hl * result_dj result.append([value[0][0], value[0][1], value[0][2], value[0][3], value[0][4], result_hl, value[0][5], result_hj, value[0][6], value[0][7], value[0][8], value[0][13], value[0][14], value[0][15], value[0][9], value[0][12]]) for entry in left: result.append([entry[0], entry[1], entry[2], entry[3], entry[4], entry[10], entry[5], entry[11], entry[6], entry[7], entry[8], entry[13], entry[14], entry[15], entry[9], entry[12]]) return result def mergerg(rg1, rg2, coef): isolated = [] for entry in rg2: CLBH = entry['CLBH'] hit = False for toMerge in rg1: if toMerge['CLBH'] == CLBH: hit = True toMerge['gr'] = float(toMerge['gr']) + coef * float(entry['gr']) toMerge['gf'] = float(toMerge['gf']) + coef * float(entry['gf']) if not hit: isolated.append({'CLBH':entry['CLBH'],'CLMC': entry['CLMC'], 'JLDW': entry['JLDW'], 'YSJG': float(entry['YSJG']), 'gr': float(entry['gr']), 'gf': float(entry['gf'])}) return rg1 + isolated def multirg(rg1, coef): for toMerge in rg1: toMerge['gr'] = float(toMerge['gr']) * coef toMerge['gf'] = float(toMerge['gf']) * coef def mergejx(rg1, rg2, coef): isolated = [] for entry in rg2: jxbh = entry['jxbh'] hit = False for toMerge in rg1: if toMerge['jxbh'] == jxbh: hit = True toMerge['sl'] = float(toMerge['sl']) + coef * float(entry['sl']) toMerge['hj'] = float(toMerge['hj']) + coef * float(entry['hj']) if not hit: isolated.append({'jxbh':entry['jxbh'],'jxmc': entry['jxmc'], 'DW': entry['DW'], 'tbdj': float(entry['tbdj']), 'sl': float(entry['sl']), 'hj': float(entry['hj'])}) return rg1 + isolated def multijx(rg1, coef): for toMerge in rg1: toMerge['sl'] = float(toMerge['sl']) * coef toMerge['hj'] = float(toMerge['hj']) * coef def mergecl(rg1, rg2, coef): isolated=[] for entry in rg2: CLBH = entry['CLBH'] hit = False for toMerge in rg1: if toMerge['CLBH'] == CLBH: hit = True toMerge['SL'] = float(toMerge['SL']) + coef * float(entry['SL']) toMerge['HJ'] = float(toMerge['HJ']) + coef * float(entry['HJ']) if not hit: isolated.append({'CLBH':entry['CLBH'],'CLMC': entry['CLMC'], 'JLDW': entry['JLDW'], 'YSJG': float(entry['YSJG']), 'SL': float(entry['SL']), 'HJ': float(entry['HJ'])}) return rg1 + isolated def multicl(rg1, coef): for toMerge in rg1: toMerge['SL'] = float(toMerge['SL']) * coef toMerge['HJ'] = float(toMerge['HJ']) * coef def cleanBM(raw): if raw.find("]") == -1: return raw if raw.endswith(']'): return raw pos = raw.find("*") tail = 0 for i in range(pos + 1, len(raw) + 1): if i == len(raw): tail = i break if (raw[i] > '9' or raw[i] < '0') and raw[i] != '-' and raw[i] != '.': tail = i break return raw[0:tail]