util.py 7.2 KB

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