Explorar el Código

support export

Xiaopeng Zhang hace 5 meses
padre
commit
dceeb2f9c9
Se han modificado 3 ficheros con 191 adiciones y 170 borrados
  1. 6 2
      main.py
  2. 178 167
      subdir/db.py
  3. 7 1
      subdir/util.py

+ 6 - 2
main.py

@@ -686,10 +686,14 @@ async def download_file(item_id):
 
     # Create the tree and write to a file
     tree = ET.ElementTree(root)
-    tree.write("export/contacts.xml", xml_declaration=True, encoding="UTF-8")
+    tree.write("export/contacts.xml", encoding="utf-8")
     dom = MD.parse("export/contacts.xml")
+   
     with open("export/contacts.xml.b", 'w') as f:
-        f.write(dom.toprettyxml(indent="  "))
+        f.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n")
+        content = (dom.toprettyxml(indent="  "))
+        content_ = content.split("\n")
+        f.write("\n".join(content_[1:]))
     
 
     return FileResponse(file_path, media_type='application/octet-stream', filename="contacts.xml")

+ 178 - 167
subdir/db.py

@@ -609,8 +609,17 @@ def dfs3(items):
                 result.append(r)
     return result
 
+def roundstr(input):
+    a = float(input)
+    b = round(a, 2)
+    return str(b)
 
 
+def roundstr4(input):
+    a = float(input)
+    b = round(a, 4)
+    return str(b)
+
 async def build(client, root, id):
     db = client["baojia"]
     collection = db["jingjibiao"]
@@ -623,10 +632,10 @@ async def build(client, root, id):
 
     TouBiaoXx = ET.SubElement(root, 'TouBiaoXx')
     ##{'Tbzj' : '', 'Zgj' : '', 'Aqwmf' : '', 'Gf' : '' } 
-    TouBiaoXx.set('Tbzj', str(document['TouBiaoXx']['Tbzj']))
-    TouBiaoXx.set('Zgj', str(document['TouBiaoXx']['Zgj']))
-    TouBiaoXx.set('Aqwmf', str(document['TouBiaoXx']['Aqwmf']))
-    TouBiaoXx.set('Gf', str(document['TouBiaoXx']['Gf']))
+    TouBiaoXx.set('Tbzj', roundstr(document['TouBiaoXx']['Tbzj']))
+    TouBiaoXx.set('Zgj', roundstr(document['TouBiaoXx']['Zgj']))
+    TouBiaoXx.set('Aqwmf', roundstr(document['TouBiaoXx']['Aqwmf']))
+    TouBiaoXx.set('Gf', roundstr(document['TouBiaoXx']['Gf']))
     if 'Zbr' in document['TouBiaoXx']:
         TouBiaoXx.set('Zbr', str(document['TouBiaoXx']['Zbr']))
     if 'Tbr' in document['TouBiaoXx']:
@@ -641,10 +650,10 @@ async def build(client, root, id):
         Dxgcxx = ET.SubElement(root, 'Dxgcxx')
         Dxgcxx.set('Dxgcbh', str(item['Dxgcbh']))
         Dxgcxx.set('Dxgcmc', str(item['Dxgcmc']))
-        Dxgcxx.set('Je', str(item['Je']))
-        Dxgcxx.set('Zgj', str(item['Zgj']))
-        Dxgcxx.set('Aqwmf', str(item['Aqwmf']))
-        Dxgcxx.set('Gf', str(item['Gf']))
+        Dxgcxx.set('Je', roundstr(item['Je']))
+        Dxgcxx.set('Zgj', roundstr(item['Zgj']))
+        Dxgcxx.set('Aqwmf', roundstr(item['Aqwmf']))
+        Dxgcxx.set('Gf', roundstr(item['Gf']))
         for entry in item['Dwgc']:
             Dwgcxx = ET.SubElement(Dxgcxx, 'Dwgcxx')
             Dwgcxx.set('Dwgcbh', str(entry['Dwgcbh']))
@@ -673,8 +682,8 @@ async def build(client, root, id):
                 FywjMx = ET.SubElement(Fywj, 'FywjMx')
                 FywjMx.set('Xh', str(bjhz_[0]))
                 FywjMx.set('Mc', str(bjhz_[1]))
-                FywjMx.set('Je', str(bjhz_[2]))
-                FywjMx.set('Zgj', str(bjhz_[3]))
+                FywjMx.set('Je', roundstr(bjhz_[2]))
+                FywjMx.set('Zgj', roundstr(bjhz_[3]))
                 FywjMx.set('Fyxlb', str(bjhz_[4]))
             ########################################Gfsj##########################
             Gfsj = ET.SubElement(Dwgcxx, 'Gfsj')
@@ -682,16 +691,17 @@ async def build(client, root, id):
                 GfsjMx = ET.SubElement(Gfsj, 'GfsjMx')
                 GfsjMx.set('Xh', str(gfsj_[0]))
                 GfsjMx.set('Mc', str(gfsj_[1]))
-                GfsjMx.set('Qfjs', str(gfsj_[2]))
+                GfsjMx.set('Qfjs', roundstr(gfsj_[2]))
                 GfsjMx.set('Jsjc', str(gfsj_[3]))
                 GfsjMx.set('Fl', str(gfsj_[4]))
-                GfsjMx.set('Je', str(gfsj_[5]))
+                GfsjMx.set('Je', roundstr(gfsj_[5]))
                 GfsjMx.set('Fyxlb', str(gfsj_[6]))
+            ########################################Qdxm##########################
             Qdxm = ET.SubElement(Dwgcxx, 'Qdxm')
             if 'Default' in qdbt:
                 collection = db["qdxm"]
                 before_sort = []
-                async for post in collection.find({"biao_id": id, "Dwgcbh": entry['Dwgcbh']}):
+                async for post in collection.find({"biao_id": id, "Dwgcbh": entry['Dwgcbh'], 'bt': 'Default'}):
                     before_sort.append(post)
                 after_sort = sorted(before_sort, key=lambda x: int(x['序号']))
                 for qdmx in after_sort:
@@ -702,19 +712,19 @@ async def build(client, root, id):
                     Qdmx.set('Xmtz', str(qdmx['项目特征']))
                     Qdmx.set('Jsgz', str(qdmx['计算规则']))
                     Qdmx.set('Dw', str(qdmx['单位']))
-                    Qdmx.set('Sl', str(qdmx['数量']))
-                    Qdmx.set('Zhdj', str(qdmx['综合单价']))
-                    Qdmx.set('Zhhj', str(qdmx['合价']))
-                    Qdmx.set('Rgf', str(qdmx['人工费']))
-                    Qdmx.set('Zcf', str(qdmx['主材费']))
-                    Qdmx.set('Sbf', str(qdmx['设备费']))
-                    Qdmx.set('Fcf', str(qdmx['辅材费']))
-                    Qdmx.set('Clf', str(qdmx['材料费']))
-                    Qdmx.set('Jxf', str(qdmx['机械费']))
-                    Qdmx.set('Glf', str(qdmx['管理费']))
-                    Qdmx.set('Lr', str(qdmx['利润']))
-                    Qdmx.set('Zgj', str(qdmx['暂估价']))
-                    Qdmx.set('Zgr', str(qdmx['综合人工工日']))
+                    Qdmx.set('Sl', roundstr4(qdmx['数量']))
+                    Qdmx.set('Zhdj', roundstr4(qdmx['综合单价']))
+                    Qdmx.set('Zhhj', roundstr4(qdmx['合价']))
+                    Qdmx.set('Rgf', roundstr4(qdmx['人工费']))
+                    Qdmx.set('Zcf', roundstr4(qdmx['主材费']))
+                    Qdmx.set('Sbf', roundstr4(qdmx['设备费']))
+                    Qdmx.set('Fcf', roundstr4(qdmx['辅材费']))
+                    Qdmx.set('Clf', roundstr4(qdmx['材料费']))
+                    Qdmx.set('Jxf', roundstr4(qdmx['机械费']))
+                    Qdmx.set('Glf', roundstr4(qdmx['管理费']))
+                    Qdmx.set('Lr', roundstr4(qdmx['利润']))
+                    Qdmx.set('Zgj', roundstr4(qdmx['暂估价']))
+                    Qdmx.set('Zgr', roundstr4(qdmx['综合人工工日']))
                     Qdmx.set('Bz', str(qdmx['备注']))
                     Qdxdezj = ET.SubElement(Qdmx, 'Qdxdezj')
                     if '__children' in qdmx:
@@ -723,17 +733,17 @@ async def build(client, root, id):
                             QdxdezjMx.set('Debm', str(child['清单编码']))
                             QdxdezjMx.set('Mc', str(child['名称']))
                             QdxdezjMx.set('Dw', str(child['单位']))
-                            QdxdezjMx.set('DwQdSl', str(child['数量']))
-                            QdxdezjMx.set('Dj', str(child['综合单价']))
-                            QdxdezjMx.set('Hj', str(child['合价']))
-                            QdxdezjMx.set('Rgf', str(child['人工费']))
-                            QdxdezjMx.set('Zcf', str(child['主材费']))
-                            QdxdezjMx.set('Sbf', str(child['设备费']))
-                            QdxdezjMx.set('Fcf', str(child['辅材费']))
-                            QdxdezjMx.set('Clf', str(child['材料费']))
-                            QdxdezjMx.set('Jxf', str(child['机械费']))
-                            QdxdezjMx.set('Glf', str(child['管理费']))
-                            QdxdezjMx.set('Lr', str(child['利润']))
+                            QdxdezjMx.set('DwQdSl', roundstr4(child['数量']))
+                            QdxdezjMx.set('Dj', roundstr4(child['综合单价']))
+                            QdxdezjMx.set('Hj', roundstr4(child['合价']))
+                            QdxdezjMx.set('Rgf', roundstr4(child['人工费']))
+                            QdxdezjMx.set('Zcf', roundstr4(child['主材费']))
+                            QdxdezjMx.set('Sbf', roundstr4(child['设备费']))
+                            QdxdezjMx.set('Fcf', roundstr4(child['辅材费']))
+                            QdxdezjMx.set('Clf', roundstr4(child['材料费']))
+                            QdxdezjMx.set('Jxf', roundstr4(child['机械费']))
+                            QdxdezjMx.set('Glf', roundstr4(child['管理费']))
+                            QdxdezjMx.set('Lr', roundstr4(child['利润']))
                             Qdxdercjhl = ET.SubElement(QdxdezjMx, 'Qdxdercjhl')
                             for i in range(len(child['dercj'])):
                                 if i == 0:
@@ -741,8 +751,8 @@ async def build(client, root, id):
                                 else:
                                     QdxdercjhlMx = ET.SubElement(Qdxdercjhl, 'QdxdercjhlMx')
                                     QdxdercjhlMx.set('RcjId', util.indexrcj(rcjhz, child['dercj'][i]))
-                                    QdxdercjhlMx.set('Rcjhl', str(child['dercj'][i][10]))
-                                    QdxdercjhlMx.set('Rcjhj', str(child['dercj'][i][11]))
+                                    QdxdercjhlMx.set('Rcjhl', roundstr4(child['dercj'][i][10]))
+                                    QdxdercjhlMx.set('Rcjhj', roundstr4(child['dercj'][i][11]))
                     Qdxrcjhl = ET.SubElement(Qdmx, 'Qdxrcjhl')
                     for i in range(len(qdmx['rcj'])):
                         if i == 0:
@@ -751,89 +761,89 @@ async def build(client, root, id):
                             QdxrcjhlMx = ET.SubElement(Qdxrcjhl, 'QdxrcjhlMx')
                             QdxrcjhlMx.set('RcjId', util.indexrcj(rcjhz, qdmx['rcj'][i]))
                                            ##str(djcs['rcj'][i][0]))
-                            QdxrcjhlMx.set('Rcjhl', str(qdmx['rcj'][i][10]))
-                            QdxrcjhlMx.set('Rcjhj', str(qdmx['rcj'][i][11]))
+                            QdxrcjhlMx.set('Rcjhl', roundstr4(qdmx['rcj'][i][10]))
+                            QdxrcjhlMx.set('Rcjhj', roundstr4(qdmx['rcj'][i][11]))
+                            QdxrcjhlMx.set('Zgjbz', str(qdmx['rcj'][i][12]))
+                            QdxrcjhlMx.set('Zyclbz', str(qdmx['rcj'][i][13]))
+                            QdxrcjhlMx.set('Zcbz', str(qdmx['rcj'][i][14]))
+                            QdxrcjhlMx.set('Sbbz', str(qdmx['rcj'][i][15]))
+            
+            qdbt_addition = Dwgc['qdbt_addition']
+            for bt in qdbt_addition:
+                QdBt = ET.SubElement(Qdxm, 'QdBt')
+                QdBt.set('Xh', bt['Xh'])
+                QdBt.set('Mc', bt['Mc'])
+                QdBt.set('Je', roundstr(bt['Je']))
+                QdBt.set('Zgj', roundstr(bt['Zgj']))
+                QdBt.set('Bz', bt['Bz'])
+                collection = db["qdxm"]
+                before_sort = []
+                async for post in collection.find({"biao_id": id, "Dwgcbh": entry['Dwgcbh'], 'bt': bt['Mc']}):
+                    before_sort.append(post)
+                after_sort = sorted(before_sort, key=lambda x: int(x['序号']))
+                for qdmx in after_sort:
+                    Qdmx = ET.SubElement(QdBt, 'Qdmx')
+                    Qdmx.set('Xh', str(qdmx['序号']))
+                    Qdmx.set('Qdbm', str(qdmx['清单编码']))
+                    Qdmx.set('Mc', str(qdmx['名称']))
+                    Qdmx.set('Xmtz', str(qdmx['项目特征']))
+                    Qdmx.set('Jsgz', str(qdmx['计算规则']))
+                    Qdmx.set('Dw', str(qdmx['单位']))
+                    Qdmx.set('Sl', roundstr4(qdmx['数量']))
+                    Qdmx.set('Zhdj', roundstr4(qdmx['综合单价']))
+                    Qdmx.set('Zhhj', roundstr4(qdmx['合价']))
+                    Qdmx.set('Rgf', roundstr4(qdmx['人工费']))
+                    Qdmx.set('Zcf', roundstr4(qdmx['主材费']))
+                    Qdmx.set('Sbf', roundstr4(qdmx['设备费']))
+                    Qdmx.set('Fcf', roundstr4(qdmx['辅材费']))
+                    Qdmx.set('Clf', roundstr4(qdmx['材料费']))
+                    Qdmx.set('Jxf', roundstr4(qdmx['机械费']))
+                    Qdmx.set('Glf', roundstr4(qdmx['管理费']))
+                    Qdmx.set('Lr', roundstr4(qdmx['利润']))
+                    Qdmx.set('Zgj', roundstr4(qdmx['暂估价']))
+                    Qdmx.set('Zgr', roundstr4(qdmx['综合人工工日']))
+                    Qdmx.set('Bz', str(qdmx['备注']))
+                    Qdxdezj = ET.SubElement(Qdmx, 'Qdxdezj')
+                    if '__children' in qdmx:
+                        for child in qdmx['__children']:
+                            QdxdezjMx = ET.SubElement(Qdxdezj, 'QdxdezjMx')
+                            QdxdezjMx.set('Debm', str(child['清单编码']))
+                            QdxdezjMx.set('Mc', str(child['名称']))
+                            QdxdezjMx.set('Dw', str(child['单位']))
+                            QdxdezjMx.set('DwQdSl', roundstr4(child['数量']))
+                            QdxdezjMx.set('Dj', roundstr4(child['综合单价']))
+                            QdxdezjMx.set('Hj', roundstr4(child['合价']))
+                            QdxdezjMx.set('Rgf', roundstr4(child['人工费']))
+                            QdxdezjMx.set('Zcf', roundstr4(child['主材费']))
+                            QdxdezjMx.set('Sbf', roundstr4(child['设备费']))
+                            QdxdezjMx.set('Fcf', roundstr4(child['辅材费']))
+                            QdxdezjMx.set('Clf', roundstr4(child['材料费']))
+                            QdxdezjMx.set('Jxf', roundstr4(child['机械费']))
+                            QdxdezjMx.set('Glf', roundstr4(child['管理费']))
+                            QdxdezjMx.set('Lr', roundstr4(child['利润']))
+                            Qdxdercjhl = ET.SubElement(QdxdezjMx, 'Qdxdercjhl')
+                            for i in range(len(child['dercj'])):
+                                if i == 0:
+                                    pass
+                                else:
+                                    QdxdercjhlMx = ET.SubElement(Qdxdercjhl, 'QdxdercjhlMx')
+                                    QdxdercjhlMx.set('RcjId', util.indexrcj(rcjhz, child['dercj'][i]))
+                                    QdxdercjhlMx.set('Rcjhl', roundstr4(child['dercj'][i][10]))
+                                    QdxdercjhlMx.set('Rcjhj', roundstr4(child['dercj'][i][11]))
+                    Qdxrcjhl = ET.SubElement(Qdmx, 'Qdxrcjhl')
+                    for i in range(len(qdmx['rcj'])):
+                        if i == 0:
+                            pass
+                        else:
+                            QdxrcjhlMx = ET.SubElement(Qdxrcjhl, 'QdxrcjhlMx')
+                            QdxrcjhlMx.set('RcjId', util.indexrcj(rcjhz, qdmx['rcj'][i]))
+                                       ##str(djcs['rcj'][i][0]))
+                            QdxrcjhlMx.set('Rcjhl', roundstr4(qdmx['rcj'][i][10]))
+                            QdxrcjhlMx.set('Rcjhj', roundstr4(qdmx['rcj'][i][11]))
                             QdxrcjhlMx.set('Zgjbz', str(qdmx['rcj'][i][12]))
                             QdxrcjhlMx.set('Zyclbz', str(qdmx['rcj'][i][13]))
                             QdxrcjhlMx.set('Zcbz', str(qdmx['rcj'][i][14]))
                             QdxrcjhlMx.set('Sbbz', str(qdmx['rcj'][i][15]))
-            else:
-                qdbt_addition = Dwgc['qdbt_addition']
-                for bt in qdbt_addition:
-                    QdBt = ET.SubElement(Qdxm, 'QdBt')
-                    QdBt.set('Xh', bt['Xh'])
-                    QdBt.set('Mc', bt['Mc'])
-                    QdBt.set('Je', bt['Je'])
-                    QdBt.set('Zgj', bt['Zgj'])
-                    QdBt.set('Bz', bt['Bz'])
-                    collection = db["qdxm"]
-                    before_sort = []
-                    async for post in collection.find({"biao_id": id, "Dwgcbh": entry['Dwgcbh'], 'bt': bt['Mc']}):
-                        before_sort.append(post)
-                    after_sort = sorted(before_sort, key=lambda x: int(x['序号']))
-                    for qdmx in after_sort:
-                        Qdmx = ET.SubElement(QdBt, 'Qdmx')
-                        Qdmx.set('Xh', str(qdmx['序号']))
-                        Qdmx.set('Qdbm', str(qdmx['清单编码']))
-                        Qdmx.set('Mc', str(qdmx['名称']))
-                        Qdmx.set('Xmtz', str(qdmx['项目特征']))
-                        Qdmx.set('Jsgz', str(qdmx['计算规则']))
-                        Qdmx.set('Dw', str(qdmx['单位']))
-                        Qdmx.set('Sl', str(qdmx['数量']))
-                        Qdmx.set('Zhdj', str(qdmx['综合单价']))
-                        Qdmx.set('Zhhj', str(qdmx['合价']))
-                        Qdmx.set('Rgf', str(qdmx['人工费']))
-                        Qdmx.set('Zcf', str(qdmx['主材费']))
-                        Qdmx.set('Sbf', str(qdmx['设备费']))
-                        Qdmx.set('Fcf', str(qdmx['辅材费']))
-                        Qdmx.set('Clf', str(qdmx['材料费']))
-                        Qdmx.set('Jxf', str(qdmx['机械费']))
-                        Qdmx.set('Glf', str(qdmx['管理费']))
-                        Qdmx.set('Lr', str(qdmx['利润']))
-                        Qdmx.set('Zgj', str(qdmx['暂估价']))
-                        Qdmx.set('Zgr', str(qdmx['综合人工工日']))
-                        Qdmx.set('Bz', str(qdmx['备注']))
-                        Qdxdezj = ET.SubElement(Qdmx, 'Qdxdezj')
-                        if '__children' in qdmx:
-                            for child in qdmx['__children']:
-                                QdxdezjMx = ET.SubElement(Qdxdezj, 'QdxdezjMx')
-                                QdxdezjMx.set('Debm', str(child['清单编码']))
-                                QdxdezjMx.set('Mc', str(child['名称']))
-                                QdxdezjMx.set('Dw', str(child['单位']))
-                                QdxdezjMx.set('DwQdSl', str(child['数量']))
-                                QdxdezjMx.set('Dj', str(child['综合单价']))
-                                QdxdezjMx.set('Hj', str(child['合价']))
-                                QdxdezjMx.set('Rgf', str(child['人工费']))
-                                QdxdezjMx.set('Zcf', str(child['主材费']))
-                                QdxdezjMx.set('Sbf', str(child['设备费']))
-                                QdxdezjMx.set('Fcf', str(child['辅材费']))
-                                QdxdezjMx.set('Clf', str(child['材料费']))
-                                QdxdezjMx.set('Jxf', str(child['机械费']))
-                                QdxdezjMx.set('Glf', str(child['管理费']))
-                                QdxdezjMx.set('Lr', str(child['利润']))
-                                Qdxdercjhl = ET.SubElement(QdxdezjMx, 'Qdxdercjhl')
-                                for i in range(len(child['dercj'])):
-                                    if i == 0:
-                                        pass
-                                    else:
-                                        QdxdercjhlMx = ET.SubElement(Qdxdercjhl, 'QdxdercjhlMx')
-                                        QdxdercjhlMx.set('RcjId', util.indexrcj(rcjhz, child['dercj'][i]))
-                                        QdxdercjhlMx.set('Rcjhl', str(child['dercj'][i][10]))
-                                        QdxdercjhlMx.set('Rcjhj', str(child['dercj'][i][11]))
-                        Qdxrcjhl = ET.SubElement(Qdmx, 'Qdxrcjhl')
-                        for i in range(len(qdmx['rcj'])):
-                            if i == 0:
-                                pass
-                            else:
-                                QdxrcjhlMx = ET.SubElement(Qdxrcjhl, 'QdxrcjhlMx')
-                                QdxrcjhlMx.set('RcjId', util.indexrcj(rcjhz, qdmx['rcj'][i]))
-                                           ##str(djcs['rcj'][i][0]))
-                                QdxrcjhlMx.set('Rcjhl', str(qdmx['rcj'][i][10]))
-                                QdxrcjhlMx.set('Rcjhj', str(qdmx['rcj'][i][11]))
-                                QdxrcjhlMx.set('Zgjbz', str(qdmx['rcj'][i][12]))
-                                QdxrcjhlMx.set('Zyclbz', str(qdmx['rcj'][i][13]))
-                                QdxrcjhlMx.set('Zcbz', str(qdmx['rcj'][i][14]))
-                                QdxrcjhlMx.set('Sbbz', str(qdmx['rcj'][i][15]))
 
 
 
@@ -849,32 +859,32 @@ async def build(client, root, id):
                 ZjCsMx.set('Xh', str(zjcs_['序号']))
                 ZjCsMx.set('Bm', str(zjcs_['清单编码']))
                 ZjCsMx.set('Mc', str(zjcs_['名称']))
-                ZjCsMx.set('Js', str(zjcs_['计算基数']))
+                ZjCsMx.set('Js', roundstr(zjcs_['计算基数']))
                 ZjCsMx.set('Jsjc', str(zjcs_['计算基础']))
                 ZjCsMx.set('Fl', str(zjcs_['费率']))
-                ZjCsMx.set('Je', str(zjcs_['金额']))
+                ZjCsMx.set('Je', roundstr(zjcs_['金额']))
                 ZjCsMx.set('Xmlb', str(zjcs_['项目类别']))
                 if '__children' in zjcs_:
                     AqwmfMx = ET.SubElement(ZjCsMx, 'AqwmfMx')
                     AqwmfMx.set('Mc', str(zjcs_['__children'][0]['名称']))
-                    AqwmfMx.set('Js', str(zjcs_['__children'][0]['计算基数']))
+                    AqwmfMx.set('Js', roundstr(zjcs_['__children'][0]['计算基数']))
                     AqwmfMx.set('Jsjc', str(zjcs_['__children'][0]['计算基础']))
                     AqwmfMx.set('Fl', str(zjcs_['__children'][0]['费率']))
-                    AqwmfMx.set('Je', str(zjcs_['__children'][0]['金额']))
+                    AqwmfMx.set('Je', roundstr(zjcs_['__children'][0]['金额']))
                     AqwmfMx.set('Xmlb', str(zjcs_['__children'][0]['项目类别']))
                     AqwmfMx = ET.SubElement(ZjCsMx, 'AqwmfMx')
                     AqwmfMx.set('Mc', str(zjcs_['__children'][1]['名称']))
-                    AqwmfMx.set('Js', str(zjcs_['__children'][1]['计算基数']))
+                    AqwmfMx.set('Js', roundstr(zjcs_['__children'][1]['计算基数']))
                     AqwmfMx.set('Jsjc', str(zjcs_['__children'][1]['计算基础']))
                     AqwmfMx.set('Fl', str(zjcs_['__children'][1]['费率']))
-                    AqwmfMx.set('Je', str(zjcs_['__children'][1]['金额']))
+                    AqwmfMx.set('Je', roundstr(zjcs_['__children'][1]['金额']))
                     AqwmfMx.set('Xmlb', str(zjcs_['__children'][1]['项目类别']))
                     AqwmfMx = ET.SubElement(ZjCsMx, 'AqwmfMx')
                     AqwmfMx.set('Mc', str(zjcs_['__children'][2]['名称']))
-                    AqwmfMx.set('Js', str(zjcs_['__children'][2]['计算基数']))
+                    AqwmfMx.set('Js', roundstr(zjcs_['__children'][2]['计算基数']))
                     AqwmfMx.set('Jsjc', str(zjcs_['__children'][2]['计算基础']))
                     AqwmfMx.set('Fl', str(zjcs_['__children'][2]['费率']))
-                    AqwmfMx.set('Je', str(zjcs_['__children'][2]['金额']))
+                    AqwmfMx.set('Je', roundstr(zjcs_['__children'][2]['金额']))
                     AqwmfMx.set('Xmlb', str(zjcs_['__children'][2]['项目类别']))
             DjCs = ET.SubElement(Csxm, 'DjCs')
             collection = db["Djcs"]
@@ -890,19 +900,19 @@ async def build(client, root, id):
                 DjCsMx.set('Xmtz', str(djcs['项目特征']))
                 DjCsMx.set('Jsgz', str(djcs['计算规则']))
                 DjCsMx.set('Dw', str(djcs['单位']))
-                DjCsMx.set('Sl', str(djcs['数量']))
-                DjCsMx.set('Zhdj', str(djcs['综合单价']))
-                DjCsMx.set('Zhhj', str(djcs['合价']))
-                DjCsMx.set('Rgf', str(djcs['人工费']))
-                DjCsMx.set('Zcf', str(djcs['主材费']))
-                DjCsMx.set('Sbf', str(djcs['设备费']))
-                DjCsMx.set('Fcf', str(djcs['辅材费']))
-                DjCsMx.set('Clf', str(djcs['材料费']))
-                DjCsMx.set('Jxf', str(djcs['机械费']))
-                DjCsMx.set('Glf', str(djcs['管理费']))
-                DjCsMx.set('Lr', str(djcs['利润']))
-                DjCsMx.set('Zgj', str(djcs['暂估价']))
-                DjCsMx.set('Zgr', str(djcs['综合人工工日']))
+                DjCsMx.set('Sl', roundstr4(djcs['数量']))
+                DjCsMx.set('Zhdj', roundstr4(djcs['综合单价']))
+                DjCsMx.set('Zhhj', roundstr4(djcs['合价']))
+                DjCsMx.set('Rgf', roundstr4(djcs['人工费']))
+                DjCsMx.set('Zcf', roundstr4(djcs['主材费']))
+                DjCsMx.set('Sbf', roundstr4(djcs['设备费']))
+                DjCsMx.set('Fcf', roundstr4(djcs['辅材费']))
+                DjCsMx.set('Clf', roundstr4(djcs['材料费']))
+                DjCsMx.set('Jxf', roundstr4(djcs['机械费']))
+                DjCsMx.set('Glf', roundstr4(djcs['管理费']))
+                DjCsMx.set('Lr', roundstr4(djcs['利润']))
+                DjCsMx.set('Zgj', roundstr4(djcs['暂估价']))
+                DjCsMx.set('Zgr', roundstr4(djcs['综合人工工日']))
                 Csxdezj = ET.SubElement(DjCsMx, 'Csxdezj')
                 if '__children' in djcs:
                     for child in djcs['__children']:
@@ -910,17 +920,17 @@ async def build(client, root, id):
                         CsxdezjMx.set('Debm', str(child['清单编码']))
                         CsxdezjMx.set('Mc', str(child['名称']))
                         CsxdezjMx.set('Dw', str(child['单位']))
-                        CsxdezjMx.set('DwQdSl', str(child['数量']))
-                        CsxdezjMx.set('Dj', str(child['综合单价']))
-                        CsxdezjMx.set('Hj', str(child['合价']))
-                        CsxdezjMx.set('Rgf', str(child['人工费']))
-                        CsxdezjMx.set('Zcf', str(child['主材费']))
-                        CsxdezjMx.set('Sbf', str(child['设备费']))
-                        CsxdezjMx.set('Fcf', str(child['辅材费']))
-                        CsxdezjMx.set('Clf', str(child['材料费']))
-                        CsxdezjMx.set('Jxf', str(child['机械费']))
-                        CsxdezjMx.set('Glf', str(child['管理费']))
-                        CsxdezjMx.set('Lr', str(child['利润']))
+                        CsxdezjMx.set('DwQdSl', roundstr4(child['数量']))
+                        CsxdezjMx.set('Dj', roundstr4(child['综合单价']))
+                        CsxdezjMx.set('Hj', roundstr4(child['合价']))
+                        CsxdezjMx.set('Rgf', roundstr4(child['人工费']))
+                        CsxdezjMx.set('Zcf', roundstr4(child['主材费']))
+                        CsxdezjMx.set('Sbf', roundstr4(child['设备费']))
+                        CsxdezjMx.set('Fcf', roundstr4(child['辅材费']))
+                        CsxdezjMx.set('Clf', roundstr4(child['材料费']))
+                        CsxdezjMx.set('Jxf', roundstr4(child['机械费']))
+                        CsxdezjMx.set('Glf', roundstr4(child['管理费']))
+                        CsxdezjMx.set('Lr', roundstr4(child['利润']))
                         Csxdercjhl = ET.SubElement(CsxdezjMx, 'Csxdercjhl')
                         for i in range(len(child['dercj'])):
                             if i == 0:
@@ -928,8 +938,8 @@ async def build(client, root, id):
                             else:
                                 CsxdercjhlMx = ET.SubElement(Csxdercjhl, 'CsxdercjhlMx')
                                 CsxdercjhlMx.set('RcjId', util.indexrcj(rcjhz, child['dercj'][i]))
-                                CsxdercjhlMx.set('Rcjhl', str(child['dercj'][i][10]))
-                                CsxdercjhlMx.set('Rcjhj', str(child['dercj'][i][11]))
+                                CsxdercjhlMx.set('Rcjhl', roundstr4(child['dercj'][i][10]))
+                                CsxdercjhlMx.set('Rcjhj', roundstr4(child['dercj'][i][11]))
                     Csxrcjhl = ET.SubElement(DjCsMx, 'Csxrcjhl')
                     for i in range(len(djcs['rcj'])):
                         if i == 0:
@@ -938,8 +948,8 @@ async def build(client, root, id):
                             CsxrcjhlMx = ET.SubElement(Csxrcjhl, 'CsxrcjhlMx')
                             CsxrcjhlMx.set('RcjId', util.indexrcj(rcjhz, djcs['rcj'][i]))
                                            ##str(djcs['rcj'][i][0]))
-                            CsxrcjhlMx.set('Rcjhl', str(djcs['rcj'][i][10]))
-                            CsxrcjhlMx.set('Rcjhj', str(djcs['rcj'][i][11]))
+                            CsxrcjhlMx.set('Rcjhl', roundstr4(djcs['rcj'][i][10]))
+                            CsxrcjhlMx.set('Rcjhj', roundstr4(djcs['rcj'][i][11]))
                             CsxrcjhlMx.set('Zgjbz', str(djcs['rcj'][i][12]))
                             CsxrcjhlMx.set('Zyclbz', str(djcs['rcj'][i][13]))
                             CsxrcjhlMx.set('Zcbz', str(djcs['rcj'][i][14]))
@@ -981,7 +991,7 @@ async def build(client, root, id):
                 QtxmMx = ET.SubElement(Qtxm, 'QtxmMx')
                 QtxmMx.set('Xh', str(qtxm_[0]))
                 QtxmMx.set('Mc', str(qtxm_[1]))
-                QtxmMx.set('Je', str(qtxm_[2]))
+                QtxmMx.set('Je', roundstr(qtxm_[2]))
                 QtxmMx.set('Xmlb', str(qtxm_[3]))
                 QtxmMx.set('Bz', str(qtxm_[4]))
             Zlje = ET.SubElement(Dwgcxx, 'Zlje')
@@ -990,7 +1000,7 @@ async def build(client, root, id):
                 ZljeMx.set('Xh', str(zlje[i]['序号']))
                 ZljeMx.set('Mc', str(zlje[i]['名称']))
                 ZljeMx.set('Dw', str(zlje[i]['单位']))
-                ZljeMx.set('Zdje', str(zlje[i]['暂定金额']))
+                ZljeMx.set('Zdje', roundstr(zlje[i]['暂定金额']))
                 ZljeMx.set('Bz', str(zlje[i]['备注']))
             Clzg = ET.SubElement(Dwgcxx, 'Clzg')
             Zygczg = ET.SubElement(Dwgcxx, 'Zygczg')
@@ -999,38 +1009,38 @@ async def build(client, root, id):
                 ZygczgMx.set('Xh', str(zygczgj_['序号']))
                 ZygczgMx.set('Mc', str(zygczgj_['名称']))
                 ZygczgMx.set('Gcnr', str(zygczgj_['工程内容']))
-                ZygczgMx.set('Je', str(zygczgj_['金额']))
+                ZygczgMx.set('Je', roundstr(zygczgj_['金额']))
                 ZygczgMx.set('Bz', str(zygczgj_['备注']))
             Jrg = ET.SubElement(Dwgcxx, 'Jrg')
             for jrg_ in jrg:
                 JrgBt = ET.SubElement(Jrg, 'JrgBt')
                 JrgBt.set('Xh', str(jrg_['序号']))
                 JrgBt.set('Mc', str(jrg_['名称']))
-                JrgBt.set('Je', str(jrg_['金额']))
+                JrgBt.set('Je', roundstr(jrg_['金额']))
                 JrgBt.set('Lb', str(jrg_['类别']))
             Zcbfwf = ET.SubElement(Dwgcxx, 'Zcbfwf')
             for zcbfwf_ in zcbfwf:
                 ZcbfwfMx = ET.SubElement(Zcbfwf, 'ZcbfwfMx')
                 ZcbfwfMx.set('Xh', str(zcbfwf_['序号']))
                 ZcbfwfMx.set('Mc', str(zcbfwf_['名称']))
-                ZcbfwfMx.set('Xmjz', str(zcbfwf_['项目价值']))
+                ZcbfwfMx.set('Xmjz', roundstr(zcbfwf_['项目价值']))
                 ZcbfwfMx.set('Fwnr', str(zcbfwf_['服务内容']))
                 ZcbfwfMx.set('Jsjc', str(zcbfwf_['计算基础']))
                 ZcbfwfMx.set('Fl', str(zcbfwf_['费率']))
-                ZcbfwfMx.set('Je', str(zcbfwf_['金额']))
+                ZcbfwfMx.set('Je', roundstr(zcbfwf_['金额']))
             Zjxmjdkzffj = ET.SubElement(Dwgcxx, 'Zjxmjdkzffj')
             Fbrgycl = ET.SubElement(Dwgcxx, 'Fbrgycl')
             for fbrgycl_ in fbrgycl:
                 FbrgyclMx = ET.SubElement(Fbrgycl, 'FbrgyclMx')
                 FbrgyclMx.set('Xh', str(fbrgycl_['序号']))
-                FbrgyclMx.set('RcjId', str(fbrgycl_['ID']))
+                FbrgyclMx.set('RcjId', util.indexrcj(rcjhz, [fbrgycl_['序号'], fbrgycl_['材料编号'], fbrgycl_['名称'], fbrgycl_['规格型号'], fbrgycl_['单位']]))
                 FbrgyclMx.set('Clbh', str(fbrgycl_['材料编号']))
                 FbrgyclMx.set('Mc', str(fbrgycl_['名称']))
                 FbrgyclMx.set('Ggxh', str(fbrgycl_['规格型号']))
                 FbrgyclMx.set('Dw', str(fbrgycl_['单位']))
-                FbrgyclMx.set('Sl', str(fbrgycl_['数量']))
-                FbrgyclMx.set('Dj', str(fbrgycl_['单价']))
-                FbrgyclMx.set('Hj', str(fbrgycl_['合价']))
+                FbrgyclMx.set('Sl', roundstr4(fbrgycl_['数量']))
+                FbrgyclMx.set('Dj', roundstr4(fbrgycl_['单价']))
+                FbrgyclMx.set('Hj', roundstr4(fbrgycl_['合价']))
                 FbrgyclMx.set('Jhfs', str(fbrgycl_['交货方式']))
                 FbrgyclMx.set('Sddd', str(fbrgycl_['送达地点']))
                 FbrgyclMx.set('Bz', str(fbrgycl_['备注']))
@@ -1046,9 +1056,9 @@ async def build(client, root, id):
                     RcjhzMx.set('Mc', str(rcjhz[i][2]))
                     RcjhzMx.set('Ggxh', str(rcjhz[i][3]))
                     RcjhzMx.set('Dw', str(rcjhz[i][4]))
-                    RcjhzMx.set('Sl', str(rcjhz[i][5]))
-                    RcjhzMx.set('Dj', str(rcjhz[i][6]))
-                    RcjhzMx.set('Hj', str(rcjhz[i][7]))
+                    RcjhzMx.set('Sl', roundstr4(rcjhz[i][5]))
+                    RcjhzMx.set('Dj', roundstr4(rcjhz[i][6]))
+                    RcjhzMx.set('Hj', roundstr4(rcjhz[i][7]))
                     RcjhzMx.set('Cd', str(rcjhz[i][8]))
                     RcjhzMx.set('Gycs', str(rcjhz[i][9]))
                     RcjhzMx.set('Rcjlb', str(rcjhz[i][10]))
@@ -1431,6 +1441,7 @@ async def save(client, data):
         rcjhz = rcjhz + qdrcj
     collection = db["Djcs"]
     async for post in collection.find({'biao_id': biao_id, "Dwgcbh": bh}, {'__children': 0}):
+        
         qdrcj = post['rcj'][1:]
         for entry in qdrcj:
             entry[10] = float(entry[10]) * float(post['数量'])

+ 7 - 1
subdir/util.py

@@ -21,9 +21,14 @@ def indexrcj(rcjhz, rcjarray):
         attempt = entry[1] + entry[2] + entry[4]
         if attempt == target:
             return str(i)
-    raise Exception("not found rcjid")
+    print("###########################warning######################")
+    print(rcjarray)
+    print("###########################rcjhz not include ###################")
+    ##raise Exception("not found rcjid")
+    return ""
 
 def huizongrcj(data):
+    
     huizong = {}
     result = [
     [ "ID", "编码", "名称", "规格型号", "单位", "数量", "单价", "合价", "产地", 
@@ -46,6 +51,7 @@ def huizongrcj(data):
         result.append([value[0][0], value[0][1], value[0][2], value[0][3], value[0][4], result_hl,
                        value[0][5], result_hj, value[0][6], value[0][7], value[0][8], value[0][13],
                        value[0][14], value[0][15], value[0][9], value[0][12]])
+   
     return result