util.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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_order(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. if '00EXP001' in bm and danwei == '%': ##azfy
  40. left.append(entry)
  41. continue
  42. if '99EXP007' in bm and danwei == '%': ##azfy
  43. left.append(entry)
  44. continue
  45. if '31130104' in bm and danwei == '%': ##azfy
  46. left.append(entry)
  47. continue
  48. key = bm + name + danwei
  49. if key in huizong:
  50. huizong[key].append(entry)
  51. else:
  52. huizong[key] = [entry]
  53. for key,value in huizong.items():
  54. result_hl = 0
  55. for i in range(0, len(value)):
  56. result_hl = result_hl + float(value[i][10])
  57. result_dj = float(value[0][5])
  58. result_hj = result_hl * result_dj
  59. result.append([value[0][0], value[0][1], value[0][2], value[0][3], value[0][4],
  60. value[0][5],value[0][6], value[0][7], value[0][8], value[0][9], result_hl,
  61. result_hj, value[0][12],value[0][13],
  62. value[0][14], value[0][15], ])
  63. for entry in left:
  64. result.append([entry[0], entry[1], entry[2], entry[3], entry[4], entry[5],
  65. entry[6], entry[7], entry[8], entry[9], entry[10], entry[11],
  66. entry[12], entry[13], entry[14], entry[15]])
  67. return result
  68. def huizongrcj(data):
  69. huizong = {}
  70. result = [
  71. [ "ID", "编码", "名称", "规格型号", "单位", "数量", "单价", "合价", "产地",
  72. "供应厂商", "人材机类别", "主要材料标志", "主材标志", "设备标志", "甲供标志", "暂估价标志"]]
  73. left = []
  74. for entry in data:
  75. bm = entry[1]
  76. name = entry[2]
  77. danwei = entry[4]
  78. if '000FE' in bm and danwei == '%': ##azfy
  79. left.append(entry)
  80. continue
  81. if '00EXP001' in bm and danwei == '%': ##azfy
  82. left.append(entry)
  83. continue
  84. if '99EXP007' in bm and danwei == '%': ##azfy
  85. left.append(entry)
  86. continue
  87. if '31130104' in bm and danwei == '%': ##azfy
  88. left.append(entry)
  89. continue
  90. key = bm + name + danwei
  91. if key in huizong:
  92. huizong[key].append(entry)
  93. else:
  94. huizong[key] = [entry]
  95. for key,value in huizong.items():
  96. result_hl = 0
  97. for i in range(0, len(value)):
  98. result_hl = result_hl + float(value[i][10])
  99. result_dj = float(value[0][5])
  100. result_hj = result_hl * result_dj
  101. result.append([value[0][0], value[0][1], value[0][2], value[0][3], value[0][4], result_hl,
  102. value[0][5], result_hj, value[0][6], value[0][7], value[0][8], value[0][13],
  103. value[0][14], value[0][15], value[0][9], value[0][12]])
  104. for entry in left:
  105. result.append([entry[0], entry[1], entry[2], entry[3], entry[4], entry[10],
  106. entry[5], entry[11], entry[6], entry[7], entry[8], entry[13],
  107. entry[14], entry[15], entry[9], entry[12]])
  108. return result
  109. def mergerg(rg1, rg2, coef):
  110. for entry in rg2:
  111. CLBH = entry['CLBH']
  112. for toMerge in rg1:
  113. if toMerge['CLBH'] == CLBH:
  114. toMerge['gr'] = float(toMerge['gr']) + coef * float(entry['gr'])
  115. toMerge['gf'] = float(toMerge['gf']) + coef * float(entry['gf'])
  116. def multirg(rg1, coef):
  117. for toMerge in rg1:
  118. toMerge['gr'] = float(toMerge['gr']) * coef
  119. toMerge['gf'] = float(toMerge['gf']) * coef
  120. def mergejx(rg1, rg2, coef):
  121. for entry in rg2:
  122. jxbh = entry['jxbh']
  123. for toMerge in rg1:
  124. if toMerge['jxbh'] == jxbh:
  125. toMerge['sl'] = float(toMerge['sl']) + coef * float(entry['sl'])
  126. toMerge['hj'] = float(toMerge['hj']) + coef * float(entry['hj'])
  127. def multijx(rg1, coef):
  128. for toMerge in rg1:
  129. toMerge['sl'] = float(toMerge['sl']) * coef
  130. toMerge['hj'] = float(toMerge['hj']) * coef
  131. def mergecl(rg1, rg2, coef):
  132. for entry in rg2:
  133. CLBH = entry['CLBH']
  134. for toMerge in rg1:
  135. if toMerge['CLBH'] == CLBH:
  136. toMerge['SL'] = float(toMerge['SL']) + coef * float(entry['SL'])
  137. toMerge['HJ'] = float(toMerge['HJ']) + coef * float(entry['HJ'])
  138. def multicl(rg1, coef):
  139. for toMerge in rg1:
  140. toMerge['SL'] = float(toMerge['SL']) * coef
  141. toMerge['HJ'] = float(toMerge['HJ']) * coef
  142. def cleanBM(raw):
  143. if raw.find("]") == -1:
  144. return raw
  145. if raw.endswith(']'):
  146. return raw
  147. pos = raw.find("*")
  148. tail = 0
  149. for i in range(pos + 1, len(raw) + 1):
  150. if i == len(raw):
  151. tail = i
  152. break
  153. if (raw[i] > '9' or raw[i] < '0') and raw[i] != '-':
  154. tail = i
  155. break
  156. return raw[0:tail]