| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- 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])
- 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):
-
- for entry in rg2:
- CLBH = entry['CLBH']
- for toMerge in rg1:
- if toMerge['CLBH'] == CLBH:
- toMerge['gr'] = float(toMerge['gr']) + coef * float(entry['gr'])
- toMerge['gf'] = float(toMerge['gf']) + coef * float(entry['gf'])
- 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):
-
- for entry in rg2:
- jxbh = entry['jxbh']
- for toMerge in rg1:
- if toMerge['jxbh'] == jxbh:
- toMerge['sl'] = float(toMerge['sl']) + coef * float(entry['sl'])
- toMerge['hj'] = float(toMerge['hj']) + coef * float(entry['hj'])
- 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):
-
- for entry in rg2:
- CLBH = entry['CLBH']
- for toMerge in rg1:
- if toMerge['CLBH'] == CLBH:
- toMerge['SL'] = float(toMerge['SL']) + coef * float(entry['SL'])
- toMerge['HJ'] = float(toMerge['HJ']) + coef * float(entry['HJ'])
- 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]
-
-
-
|