Kaynağa Gözat

fix_suanshi

Xiaopeng Zhang 5 ay önce
ebeveyn
işleme
2560031aa7
4 değiştirilmiş dosya ile 62 ekleme ve 12 silme
  1. 3 3
      README
  2. 32 1
      main.py
  3. 7 7
      subdir/service.py
  4. 20 1
      subdir/util.py

+ 3 - 3
README

@@ -20,13 +20,13 @@ Feature
 安装费用用单位是元的另外一套体系
 
 TODO
-套定额不能套重复的定额,因为我们是以定额编码做key的
+套定额不能套重复的定额,因为我们是以定额编码做key的(fixed)
 JD_PeiBiF 表很有用,它可以用来找一个材料的组成。
 举个例子,810078NT3 是陶粒混凝土CL20,他是由中沙,水泥,陶粒组成,这个关系在JD_PeiBiF立面可以查到·
 
 回程费 按照百分比算的(djcs 支持)
-公式 比如 [1-274]*2 没必要支持,完全可以改数量
-附注 小众情况还不支持
+公式 比如 [1-274]*2 没必要支持,完全可以改数量(fixed)
+附注 小众情况还不支持Debm="17-177附注2*-1附注3*-1"
 材料甲供标志是有用的,这个还没处理,招标工程量清单里面会有发包人供应材料,会有编号和价格,但是数量是零,套完定额才能知道
 需要人材机汇总后一并处理下甲供材,把量拿到,把总价算好
 

+ 32 - 1
main.py

@@ -478,6 +478,7 @@ async def read_singledexilie(zhuanye: int, debh: str):
     if "-F" in debh:
         return service.read_singledexilie_azfy(debh)
     r_debh = debh.split("#")[0]
+    print(r_debh)
     result1, result2, rgde, jxde, clde, bz_selected, bz_selected2, actual_zhuanye= service.getSingleDeXilie(zhuanye, r_debh)
     print("get result ***************************************")
     if result1:
@@ -497,6 +498,9 @@ async def read_singledexilie(zhuanye: int, debh: str):
         result3["bz_selected2"] = json.loads(bz_selected2)
     else:
         result3["bz_selected2"] = {"BZBH": {}}
+    ####14-227+[14-228]*-2
+    ####3-409*2
+    print(r_debh)
     if "[" in r_debh:
         position3 = r_debh.find("*")
         coef = 1
@@ -510,7 +514,7 @@ async def read_singledexilie(zhuanye: int, debh: str):
                 if i == len(coef):
                     tail = i
                     break
-                if coef[i] > '9' or coef[i] < '0':
+                if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-':
                     tail = i
                     break
             if tail == 0:
@@ -559,7 +563,34 @@ async def read_singledexilie(zhuanye: int, debh: str):
             result3['DEBH'] = {item_: util.cleanBM(r_debh)}
         else:
             result3["reverse"] = 'None'
+    elif "*" in r_debh:##1-234*2
+        position3 = r_debh.find("*")
+        coef = 1
         
+        coef = r_debh[1 + position3:]
+        print(coef)
+        tail = 0
+        for i in range(0, len(coef) + 1):
+            if i == len(coef):
+                tail = i
+                break
+            if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-':
+                tail = i
+                break
+        if tail == 0:
+            print("1113111")
+            result3["reverse"] = 'None'
+            return json.dumps(result3, ensure_ascii=False)
+        coef = int(coef[0:tail])
+        util.multirg(result3["rgde"], coef)
+        util.multijx(result3["jxde"], coef)
+        util.multicl(result3["clde"], coef)
+        item_ = None
+        for item in result3['DW'].keys():
+            item_ = item
+        result3['DEBH'] = {item_: (r_debh)}
+
+
     return json.dumps(result3, ensure_ascii=False)
 
 

+ 7 - 7
subdir/service.py

@@ -1225,7 +1225,7 @@ def getDeXilie(value, id):
     else:
         gj = pd.read_csv("de/xsaz/JD_DanWeiGJ.csv")
         filtered = gj[gj["YSDELBH"]==int(index)]
-    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCPBHJ", "GLDE", "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock", "mcxz", "qfbz", "sptfl"], axis=1)
+    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCPBHJ", "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock", "mcxz", "qfbz", "sptfl"], axis=1)
     return filtered.to_json(force_ascii=False)
 
 
@@ -1424,7 +1424,7 @@ def getSingleDeXilie_xsaz(debh):
                 clde_["SL"] = SL.item()
                 clde_["HJ"] = HJ.item()
                 clde.append(clde_)
-    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ", "GLDE", "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
+    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ",  "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
     return filtered.to_json(force_ascii=False), id, rgde, jxde, clde, bz_selected.to_json(force_ascii=False) if len(bz_selected) > 0 else None, bz_selected2.to_json(force_ascii=False) if len(bz_selected2) > 0 else None
 
 
@@ -1552,7 +1552,7 @@ def getSingleDeXilie_xstj(debh):
                 clde_["SL"] = SL.item()
                 clde_["HJ"] = HJ.item()
                 clde.append(clde_)
-    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ", "GLDE", "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
+    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ",  "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
     return filtered.to_json(force_ascii=False), id, rgde, jxde, clde, bz_selected.to_json(force_ascii=False) if len(bz_selected) > 0 else None, bz_selected2.to_json(force_ascii=False) if len(bz_selected2) > 0 else None
 
 
@@ -1677,7 +1677,7 @@ def getSingleDeXilie_yl(debh):
                 clde_["SL"] = SL.item()
                 clde_["HJ"] = HJ.item()
                 clde.append(clde_)
-    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ", "GLDE", "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
+    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ",  "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
     return filtered.to_json(force_ascii=False), id, rgde, jxde, clde, bz_selected.to_json(force_ascii=False) if len(bz_selected) > 0 else None, bz_selected2.to_json(force_ascii=False) if len(bz_selected2) > 0 else None
 
 
@@ -1803,7 +1803,7 @@ def getSingleDeXilie_az(debh):
                 clde_["SL"] = SL
                 clde_["HJ"] = HJ
                 clde.append(clde_)
-    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ", "GLDE", "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
+    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ",  "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
     return filtered.to_json(force_ascii=False), id, rgde, jxde, clde, bz_selected.to_json(force_ascii=False) if len(bz_selected) > 0 else None, bz_selected2.to_json(force_ascii=False) if len(bz_selected2) > 0 else None
 
 
@@ -1929,7 +1929,7 @@ def getSingleDeXilie_sz(debh):
                 clde_["SL"] = SL.item() if type(SL) == float64 else SL
                 clde_["HJ"] = HJ.item() if type(HJ) == float64 else HJ
                 clde.append(clde_)
-    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ", "GLDE", "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
+    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ",  "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
     return filtered.to_json(force_ascii=False), id, rgde, jxde, clde, bz_selected.to_json(force_ascii=False) if len(bz_selected) > 0 else None, bz_selected2.to_json(force_ascii=False) if len(bz_selected2) > 0 else None
         
         
@@ -2056,7 +2056,7 @@ def getSingleDeXilie_tj(debh):
                 clde_["SL"] = SL.item() if type(SL) == float64 else SL
                 clde_["HJ"] = HJ.item() if type(HJ) == float64 else HJ
                 clde.append(clde_)
-    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ", "GLDE", "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
+    filtered = filtered.drop(['BH1', 'BH2', "GCLCLF", "GCLCLF1", "GCLGG", "GCLGLF", "GCLJJ", "GCLJXF", "GCLLR", "GCLRGF", "GCLRGR", "GCLSJDJ", "GCPBHJ", "GLFFL", "LRFL", "PBBH", "PBBHM", "PBDJ", "PBSL", "THMC", "THSL", "dejb", "is_lock",  "mcxz", "qfbz",  "sptfl"], axis=1)
     return filtered.to_json(force_ascii=False), id, rgde, jxde, clde, bz_selected.to_json(force_ascii=False) if len(bz_selected) > 0 else None, bz_selected2.to_json(force_ascii=False) if len(bz_selected2) > 0 else None
 
 def getDwgc(root, id, Zylb):

+ 20 - 1
subdir/util.py

@@ -124,6 +124,12 @@ def mergerg(rg1, rg2, coef):
             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):
@@ -134,6 +140,13 @@ def mergejx(rg1, rg2, coef):
             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):
@@ -144,6 +157,12 @@ def mergecl(rg1, rg2, coef):
             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 
 
 
 
@@ -159,7 +178,7 @@ def cleanBM(raw):
             tail = i
             break
         
-        if raw[i] > '9' or raw[i] < '0':
+        if (raw[i] > '9' or raw[i] < '0') and raw[i] != '-':
             tail = i
             break
     return raw[0:tail]