util.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import xml.etree.ElementTree as ET
  2. from typing import Union
  3. from fastapi import FastAPI
  4. import os
  5. import uuid
  6. import re
  7. from fastapi.middleware.cors import CORSMiddleware
  8. from pydantic import BaseModel
  9. import pandas as pd
  10. from numpy import float64
  11. def indexrcj(rcjhz, rcjarray):
  12. bm = rcjarray[1]
  13. name = rcjarray[2]
  14. danwei = rcjarray[4]
  15. target = bm + name + danwei
  16. for i in range(len(rcjhz)):
  17. entry = rcjhz[i]
  18. attempt = entry[1] + entry[2] + entry[4]
  19. if attempt == target:
  20. return str(i)
  21. print("###########################warning######################")
  22. print(rcjarray)
  23. print("###########################rcjhz not include ###################")
  24. ##raise Exception("not found rcjid")
  25. return ""
  26. def huizongrcj(data):
  27. huizong = {}
  28. result = [
  29. [ "ID", "编码", "名称", "规格型号", "单位", "数量", "单价", "合价", "产地",
  30. "供应厂商", "人材机类别", "主要材料标志", "主材标志", "设备标志", "甲供标志", "暂估价标志"]]
  31. left = []
  32. for entry in data:
  33. bm = entry[1]
  34. name = entry[2]
  35. danwei = entry[4]
  36. if '000FE' in bm and danwei == '%': ##azfy
  37. left.append(entry)
  38. continue
  39. key = bm + name + danwei
  40. if key in huizong:
  41. huizong[key].append(entry)
  42. else:
  43. huizong[key] = [entry]
  44. for key,value in huizong.items():
  45. result_hl = 0
  46. for i in range(0, len(value)):
  47. result_hl = result_hl + float(value[i][10])
  48. result_dj = float(value[0][5])
  49. result_hj = result_hl * result_dj
  50. result.append([value[0][0], value[0][1], value[0][2], value[0][3], value[0][4], result_hl,
  51. value[0][5], result_hj, value[0][6], value[0][7], value[0][8], value[0][13],
  52. value[0][14], value[0][15], value[0][9], value[0][12]])
  53. for entry in left:
  54. result.append([entry[0], entry[1], entry[2], entry[3], entry[4], entry[10],
  55. entry[5], entry[11], entry[6], entry[7], entry[8], entry[13],
  56. entry[14], entry[15], entry[9], entry[12]])
  57. return result
  58. def mergerg(rg1, rg2, coef):
  59. for entry in rg2:
  60. CLBH = entry['CLBH']
  61. for toMerge in rg1:
  62. if toMerge['CLBH'] == CLBH:
  63. toMerge['gr'] = float(toMerge['gr']) + coef * float(entry['gr'])
  64. toMerge['gf'] = float(toMerge['gf']) + coef * float(entry['gf'])
  65. def mergejx(rg1, rg2, coef):
  66. for entry in rg2:
  67. jxbh = entry['jxbh']
  68. for toMerge in rg1:
  69. if toMerge['jxbh'] == jxbh:
  70. toMerge['sl'] = float(toMerge['sl']) + coef * float(entry['sl'])
  71. toMerge['hj'] = float(toMerge['hj']) + coef * float(entry['hj'])
  72. def mergecl(rg1, rg2, coef):
  73. for entry in rg2:
  74. CLBH = entry['CLBH']
  75. for toMerge in rg1:
  76. if toMerge['CLBH'] == CLBH:
  77. toMerge['SL'] = float(toMerge['SL']) + coef * float(entry['SL'])
  78. toMerge['HJ'] = float(toMerge['HJ']) + coef * float(entry['HJ'])
  79. def cleanBM(raw):
  80. if raw.find("]") == -1:
  81. return raw
  82. if raw.endswith(']'):
  83. return raw
  84. pos = raw.find("*")
  85. tail = 0
  86. for i in range(pos + 1, len(raw) + 1):
  87. if i == len(raw):
  88. tail = i
  89. break
  90. if raw[i] > '9' or raw[i] < '0':
  91. tail = i
  92. break
  93. return raw[0:tail]