Explorar el Código

support xsaz fy

Xiaopeng Zhang hace 4 meses
padre
commit
948b708fed
Se han modificado 3 ficheros con 122 adiciones y 19 borrados
  1. 21 18
      README
  2. 41 1
      main.py
  3. 60 0
      subdir/service.py

+ 21 - 18
README

@@ -1,5 +1,5 @@
 Feature 
-对于清单表,可以删除,添加常规定额,添加单项定额,添加算式定额
+对于清单表,可以删除,添加常规定额,添加单项定额(一个清单可以有普通定额跟单项定额,单项定额的特点是不算管理费跟利润),添加算式定额
 对于清单表,可以改定额的名称,改定额的数量
 对于定额表,对于人材机,可以替换,可以改名称,
 可以改单价(但是目前还不支持改单价后反应到其他定额,这个功能比较消耗性能, 完全可以不允许改单价,只能在汇总表改单价)
@@ -11,7 +11,17 @@ Feature
 对于费率表,可以改费率
 对于单价措施,可以删除,可以添加单项定额,目前不支持算式定额,只能用定额树,不支持替换人材机,不支持修改定额名称
 单价措施支持附注,不支持预拌砂浆,不支持补充人材机,支持百分比人材机(回程费),
-支持安装费用(还需要增加修缮工程的安装费用,跟安装不一样)
+支持安装费用(还需要增加修缮工程的安装费用,跟安装不一样(fixed))
+
+人材机表格的计算逻辑:
+1. 首先使用附注底稿,根据附注选择,完善信息,顺便决定有没有后缀“换”
+2. 跟补充结合
+3. 根据预拌砂浆配置,计算最终数据
+人材机表格改变附注或者改变预拌砂浆配置,将使得先前的所有人为改动失效
+更改补充,只会在补充的部分产生影响,不影响非补充的部分
+所以一般的编辑顺序应该是,先选择好附注跟预拌砂浆配置,之后再在view层面修改
+view层面的修改(包括换)不经过底稿,完全在view层面改动,由用户负责
+
 
 导入功能
 附注disable
@@ -21,11 +31,10 @@ Feature
 
 TODO
 套定额不能套重复的定额,因为我们是以定额编码做key的(fixed)
-JD_PeiBiF 表很有用,它可以用来找一个材料的组成。
-举个例子,810078NT3 是陶粒混凝土CL20,他是由中沙,水泥,陶粒组成,这个关系在JD_PeiBiF立面可以查到·
+
 
 回程费 按照百分比算的(djcs 支持) 00EXP001/31130104/99EXP007
-公式 比如 [1-274]*2 没必要支持,完全可以改数量(fixed)
+公式 比如 1-274*2 没必要支持,完全可以改数量(fixed)
 附注 小众情况还不支持Debm="17-177附注2*-1附注3*-1"(fixed)
 材料甲供标志是有用的,这个还没处理,招标工程量清单里面会有发包人供应材料,会有编号和价格,但是数量是零,套完定额才能知道
 需要人材机汇总后一并处理下甲供材,把量拿到,把总价算好(fixed)
@@ -33,11 +42,11 @@ JD_PeiBiF 表很有用,它可以用来找一个材料的组成。
 
 
 
-一个清单可以有普通定额跟单项定额,单项定额的特点是不算管理费跟利润
+
 
 
 有套定额直接在清单下面加材料,这个目前不支持
-然后材料替换,这个不光砂浆混凝土会换,好像有人换其他的
+然后材料替换,这个不光砂浆混凝土会换,好像有人换其他的(fixed)
 土建 淮补4-1 这个定额没有,土建定额的定额书应该是有问题(2003土建)
 3-9-S4 2021 市政
 安装补充,神奇的编号 110000F,  侧墙轴流风机  910000F 可燃气体探测器 燃气声光报警器 410000F 编号跟册子有关
@@ -50,23 +59,17 @@ JD_PeiBiF 表很有用,它可以用来找一个材料的组成。
 配合比表各个专业不同,我们现在是统一用的土建的,这个要改(fixed)
 
 市政2-389 31130104 清单里面也会出现 (市政的31130104需要特殊处理) 现在处理的是措施里面的回程费
-
+JD_PeiBiF 表很有用,它可以用来找一个材料的组成。
+安装费用的编码
+高层建筑F3
 安装生产同时 F4
 有害环境F5
-高层建筑F3
 
 
-关于主要材料标志,安装,修缮安装跟市政是有的,其他没有
 
+关于主要材料标志,安装,修缮安装跟市政是有的,其他没有
 
+定额全文索引
 db.collection.createIndex({'DEBH': 'text'})
 
 
-人材机表格的计算逻辑:
-1. 首先使用附注底稿,根据附注选择,完善信息,顺便决定有没有后缀“换”
-2. 跟补充结合
-3. 根据预拌砂浆配置,计算最终数据
-人材机表格改变附注或者改变预拌砂浆配置,将使得先前的所有人为改动失效
-所以一般的编辑顺序应该是,先选择好附注跟预拌砂浆配置,之后再在view层面修改
-view层面的修改(包括换)不经过底稿,完全在view层面改动,由用户负责
-更改补充,只会在补充的部分产生影响,不影响非补充的部分

+ 41 - 1
main.py

@@ -429,6 +429,40 @@ async def read_des(value: int):
             ]
 
         })
+    if value == 60:
+        result.append({
+            "id": "184",
+            "key" : "184",
+            "value" : "184",
+            "label" : "安装费用",
+            "title" : "安装费用",
+            "children" : [
+                {
+                "id": "185",
+                "key" : "185",
+                "value" : "185",
+                "label" : "脚手架搭拆费",
+                "title" : "脚手架搭拆费",
+                "children" : []
+                },
+                {
+                "id": "186",
+                "key" : "186",
+                "value" : "186",
+                "label" : "施工超高增加费",
+                "title" : "施工超高增加费",
+                "children" : []
+                },
+                {
+                "id": "187",
+                "key" : "187",
+                "value" : "187",
+                "label" : "高层建筑增加费",
+                "title" : "高层建筑增加费",
+                "children" : []
+                }
+            ]
+        })
     return result
 
 @app.get("/pbs/{value}")
@@ -496,6 +530,8 @@ async def read_jiagongcai(r: Info):
 async def read_dexilie(value: int, id: str):
     if value == 30 and int(id) > 2074:
         return service.getDeXilie_azfy(value, id)
+    if value == 60 and int(id) > 183:
+        return service.getDeXilie_xsazfy(value, id)
     result = service.getDeXilie(value, id)
     #print(result)
     return result
@@ -513,8 +549,10 @@ async def read_singledexilie2(zhuanye: int, debh: str):
             "bz_selected": {"BZBH": {}},
             "bz_selected2": {"BZBH": {}}
         }, ensure_ascii=False)
-    if "-F" in debh:
+    if "-F" in debh and zhuanye == 30:
         return service.read_singledexilie_azfy(debh)
+    if "-F" in debh and zhuanye == 60:
+        return service.read_singledexilie_xsazfy(debh)
     r_debh = debh.split("!")[0]
     if "附注" in r_debh:
         position = r_debh.find("附注")
@@ -648,6 +686,8 @@ async def read_singledexilie(zhuanye: int, debh: str, mc: str):
             "bz_selected2": {"BZBH": {}}
         }, ensure_ascii=False)
     if "-F" in debh:
+        if mc == '第一章' or mc == '第二章' or mc == '第三章':
+            return service.read_singledexilie_xsazfy(debh)
         return service.read_singledexilie_azfy(debh)
     r_debh = debh.split("!")[0]
     if "附注" in r_debh:

+ 60 - 0
subdir/service.py

@@ -892,6 +892,40 @@ def getCls(value):
     length = len(shu)
     return processCls(shu, 0, length, 1)
 
+def read_singledexilie_xsazfy(debh):
+    id = "None"
+    if "-F1" in debh:
+        id = "185"
+    elif "-F2" in debh:
+        id = "186"
+    elif "-F3" in debh:
+        id = "187"
+    
+    r_debh = debh.split("!")[0]
+    if len(debh.split("!")) == 1:
+        return json.dumps({
+            "reverse": id, 
+            "rgde": [],
+            "jxde": [],
+            "clde": [],
+            "actual_zhuanye": 60,
+            "bz_selected": {"BZBH": {}},
+            "bz_selected2": {"BZBH": {}}
+        }, ensure_ascii=False)
+    gclmc = debh.split("!")[1]
+        
+    return json.dumps({
+            "reverse": id, 
+            "DEBH": {"111": r_debh},
+            "GCLMC": {"111": gclmc},
+            "DW": {"111": '项'},
+            "rgde": [],
+            "jxde": [],
+            "clde": [],
+            "actual_zhuanye": 60,
+            "bz_selected": {"BZBH": {}},
+            "bz_selected2": {"BZBH": {}}
+        }, ensure_ascii=False)
 
 def read_singledexilie_azfy(debh):
     id = "None"
@@ -944,6 +978,32 @@ def read_singledexilie_azfy(debh):
             "bz_selected2": {"BZBH": {}}
         }, ensure_ascii=False)
 
+def getDeXilie_xsazfy(value, id):
+    if int(id) == 184:
+        return "{\"Unnamed: 0\":{},\"id\":{},\"DEBH\":{},\"GCLMC\":{},\"GCLSJDJ\":{},\"DW\":{},\"DeId\":{}}"
+    if int(id) == 185:
+        data = {'DW': ['项', '项', '项'], 
+                'DEBH': ['1-F1', '2-F1', '3-F1'],
+                 "GCLMC": [ "第一章" , "第二章", "第三章"],
+                   "GCLSJDJ": ["0", "0", "0"]}
+        df = pd.DataFrame(data)
+        return df.to_json(force_ascii=False)
+    if int(id) == 186:
+        data = {'DW': ['项', '项', '项'], 
+                'DEBH': ['1-F2', '2-F2', '3-F2'],
+                 "GCLMC": [ "第一章" , "第二章", "第三章"],
+                   "GCLSJDJ": ["0", "0", "0"]}
+        df = pd.DataFrame(data)
+        return df.to_json(force_ascii=False)
+    if int(id) == 187:
+        data = {'DW': ['项', '项', '项'], 
+                'DEBH': ['1-F3', '2-F3', '3-F3'],
+                 "GCLMC": [ "第一章" , "第二章", "第三章"],
+                   "GCLSJDJ": ["0", "0", "0"]}
+        df = pd.DataFrame(data)
+        return df.to_json(force_ascii=False)
+
+
 def getDeXilie_azfy(value, id):
     if int(id) == 2075 or int(id) == 2080:
         return "{\"Unnamed: 0\":{},\"id\":{},\"DEBH\":{},\"GCLMC\":{},\"GCLSJDJ\":{},\"DW\":{},\"DeId\":{}}"