Ver Fonte

pdf优化测试完成

fangjiasheng há 3 anos atrás
pai
commit
11d78f1a76

+ 3 - 3
format_convert/convert.py

@@ -2605,11 +2605,11 @@ else:
         _path = os.path.dirname(os.path.abspath(__file__))
 if __name__ == '__main__':
     if get_platform() == "Windows":
-        file_path = "C:/Users/Administrator/Desktop/error7.jpg"
+        file_path = "C:/Users/Administrator/Desktop/error6.jpg"
         # file_path = "D:/BIDI_DOC/比地_文档/2022/Test_Interface/1622529434414.rar"
-        # file_path = "D:/BIDI_DOC/比地_文档/2022/Test_ODPS/1624934320560.pdf"
+        # file_path = "D:/BIDI_DOC/比地_文档/2022/Test_ODPS/1624325845476.pdf"
     else:
-        file_path = "1.doc"
+        file_path = "error14.pdf"
 
     with open(file_path, "rb") as f:
         file_bytes = f.read()

+ 66 - 0
format_convert/convert_image.py

@@ -13,6 +13,62 @@ from format_convert.convert_need_interface import from_otr_interface, from_ocr_i
 
 def image_process(image_np, image_path, use_ocr=True):
     from format_convert.convert_tree import _Table, _Sentence
+
+    def get_cluster(t_list, b_list, axis):
+        zip_list = list(zip(t_list, b_list))
+        if len(zip_list[0]) > 0:
+            zip_list.sort(key=lambda x: x[1][axis][1])
+        cluster_list = []
+        margin = 5
+        for text, bbox in zip_list:
+            _find = 0
+            for cluster in cluster_list:
+                if abs(cluster[1] - bbox[axis][1]) <= margin:
+                    cluster[0].append([text, bbox])
+                    cluster[1] = bbox[axis][1]
+                    _find = 1
+                    break
+            if not _find:
+                cluster_list.append([[[text, bbox]], bbox[axis][1]])
+
+        new_text_list = []
+        new_bbox_list = []
+        for cluster in cluster_list:
+            # print("=============convert_image")
+            # print("cluster_list", cluster)
+            center_y = 0
+            for text, bbox in cluster[0]:
+                center_y += bbox[axis][1]
+            center_y = int(center_y / len(cluster[0]))
+            for text, bbox in cluster[0]:
+                bbox[axis][1] = center_y
+                new_text_list.append(text)
+                new_bbox_list.append(bbox)
+            # print("cluster_list", cluster)
+        return new_text_list, new_bbox_list
+
+    def merge_textbox(textbox_list, in_objs):
+        delete_obj = []
+        threshold = 5
+        for k in range(len(textbox_list)):
+            tb1 = textbox_list[k]
+            if tb1 not in in_objs and tb1 not in delete_obj:
+                for m in range(k+1, len(textbox_list)):
+                    tb2 = textbox_list[m]
+                    if abs(tb1.bbox[1]-tb2.bbox[1]) <= threshold \
+                            and abs(tb1.bbox[3]-tb2.bbox[3]) <= threshold:
+                        if tb1.bbox[0] <= tb2.bbox[0]:
+                            tb1.text = tb1.text + tb2.text
+                        else:
+                            tb1.text = tb2.text + tb1.text
+                        tb1.bbox[0] = min(tb1.bbox[0], tb2.bbox[0])
+                        tb1.bbox[2] = max(tb1.bbox[2], tb2.bbox[2])
+                        delete_obj.append(tb2)
+        for _obj in delete_obj:
+            if _obj in textbox_list:
+                textbox_list.remove(_obj)
+        return textbox_list
+
     logging.info("into image_preprocess")
     try:
         # 图片倾斜校正,写入原来的图片路径
@@ -52,6 +108,12 @@ def image_process(image_np, image_path, use_ocr=True):
         if judge_error_code(text_list):
             return text_list
 
+        # 对文字框的y进行聚类
+        text_list, bbox_list = get_cluster(text_list, bbox_list, 0)
+        # text_list, bbox_list = get_cluster(text_list, bbox_list, 1)
+        text_list, bbox_list = get_cluster(text_list, bbox_list, 2)
+        # text_list, bbox_list = get_cluster(text_list, bbox_list, 3)
+
         # 调用现成方法形成表格
         try:
             from format_convert.convert_tree import TableLine
@@ -65,9 +127,13 @@ def image_process(image_np, image_path, use_ocr=True):
                 b_text = text_list[i]
                 list_text_boxes.append(TextBox([bbox[0][0], bbox[0][1],
                                                 bbox[2][0], bbox[2][1]], b_text))
+
             lt = LineTable()
             tables, obj_in_table, _ = lt.recognize_table(list_text_boxes, list_lines, False)
 
+            # 合并同一行textbox
+            list_text_boxes = merge_textbox(list_text_boxes, obj_in_table)
+
             obj_list = []
             for table in tables:
                 obj_list.append(_Table(table["table"], table["bbox"]))

+ 15 - 7
format_convert/convert_pdf.py

@@ -688,7 +688,7 @@ class PDFConvert:
                     if isinstance(y, LTImage):
                         lt_image_list.append(y)
                         image_count += 1
-        lt_text_list = self.delete_water_mark(lt_text_list)
+        lt_text_list = self.delete_water_mark(lt_text_list, layout.bbox, 15)
         print("convert_pdf page", page_no)
         print("len(lt_image_list), len(lt_text_list)", len(lt_image_list), len(lt_text_list))
 
@@ -892,19 +892,27 @@ class PDFConvert:
             return self._doc.error_code
         return self._doc.get_html()
 
-    def delete_water_mark(self, lt_text_list, times=8):
+    def delete_water_mark(self, lt_text_list, page_bbox, times=5):
         # 删除过多重复字句,为水印
         duplicate_dict = {}
         for _obj in lt_text_list:
             t = _obj.get_text()
             if t in duplicate_dict.keys():
-                duplicate_dict[t] += 1
+                duplicate_dict[t][0] += 1
+                duplicate_dict[t][1].append(_obj)
             else:
-                duplicate_dict[t] = 1
+                duplicate_dict[t] = [1, [_obj]]
         delete_text = []
         for t in duplicate_dict.keys():
-            if duplicate_dict[t] >= times:
-                delete_text.append(t)
+            if duplicate_dict[t][0] >= times:
+                obj_list = duplicate_dict[t][1]
+                obj_list.sort(key=lambda x: x.bbox[3])
+                obj_distance_h = abs(obj_list[-1].bbox[3] - obj_list[0].bbox[1])
+                obj_list.sort(key=lambda x: x.bbox[2])
+                obj_distance_w = abs(obj_list[-1].bbox[2] - obj_list[0].bbox[0])
+                if obj_distance_h >= abs(page_bbox[1] - page_bbox[3]) * 0.7 \
+                        and obj_distance_w >= abs(page_bbox[0] - page_bbox[2]) * 0.7:
+                    delete_text.append(t)
         temp_text_list = []
         for _obj in lt_text_list:
             t = _obj.get_text()
@@ -983,7 +991,7 @@ class ParseUtils:
 
             _linetext = _textboxs[0].get_text()
             for _i in range(1, len(_textboxs)):
-                if abs(_textboxs[_i].bbox[0]-_textboxs[_i-1].bbox[0])>30:
+                if abs(_textboxs[_i].bbox[0]-_textboxs[_i-1].bbox[2])>60:
                     if _linetext[-1] not in (",", ",", "。", ".", "、", ";"):
                         _linetext += "=,="
                 _linetext += _textboxs[_i].get_text()

+ 31 - 29
format_convert/utils.py

@@ -114,7 +114,7 @@ def get_sequential_data(text_list, bbox_list, html=False):
             return ""
 
         # 根据bbox的坐标对输出排序
-        order_list.sort(key=lambda x: (x[3], x[1]))
+        order_list.sort(key=lambda x: (x[3], x[1], x[0]))
 
         # 根据bbox分行分列
         # col_list = []
@@ -540,7 +540,7 @@ class LineTable:
             _ta = self.rect2table(list_textbox,l_rect,in_objs,sourceP_LB=sourceP_LB)
             if _ta:
                 list_tables.append(_ta)
-        self._plot(list_line, list_textbox)
+        # self._plot(list_line, list_textbox)
         return list_tables, in_objs, list_l_rect
 
     def recognize_table_by_rect(self, list_textbox, list_rect, margin=2):
@@ -692,27 +692,27 @@ class LineTable:
                         _line = LTLine(1,(min_x,min_y),(min_x,max_y))
                         list_line.append(_line)
                         l_lines.append(_line.bbox)
-                        print("add=====",_line.bbox)
+                        # print("add=====",_line.bbox)
 
 
                     if abs(max_x-points[-1]["point"][0])>30:
                         _line = LTLine(1,(max_x,min_y),(max_x,max_y))
                         list_line.append(_line)
                         l_lines.append(_line.bbox)
-                        print("add=====1",_line.bbox)
+                        # print("add=====1",_line.bbox)
 
                     points.sort(key=lambda x:x["point"][1])
                     if abs(min_y-points[0]["point"][1])>30:
                         _line = LTLine(1,(min_x,min_y),(max_x,min_y))
                         list_line.append(_line)
                         l_lines.append(_line.bbox)
-                        print("add=====2",_line.bbox)
+                        # print("add=====2",_line.bbox)
 
                     if abs(max_y-points[-1]["point"][1])>30:
                         _line = LTLine(1,(min_x,max_y),(max_x,max_y))
                         list_line.append(_line)
                         l_lines.append(_line.bbox)
-                        print("add=====2",_line.bbox)
+                        # print("add=====2",_line.bbox)
 
 
 
@@ -723,14 +723,14 @@ class LineTable:
                         exists,point = self.cross_point(line1,line2)
                         if exists:
                             list_crosspoints.append(point)
-                from matplotlib import pyplot as plt
-                plt.figure()
-                for _line in l_lines:
-                    x0,y0,x1,y1 = _line
-                    plt.plot([x0,x1],[y0,y1])
-                for point in list_crosspoints:
-                    plt.scatter(point.get("point")[0],point.get("point")[1])
-                plt.show()
+                # from matplotlib import pyplot as plt
+                # plt.figure()
+                # for _line in l_lines:
+                #     x0,y0,x1,y1 = _line
+                #     plt.plot([x0,x1],[y0,y1])
+                # for point in list_crosspoints:
+                #     plt.scatter(point.get("point")[0],point.get("point")[1])
+                # plt.show()
 
         # print(list_crosspoints)
         # print("points num",len(list_crosspoints))
@@ -953,9 +953,9 @@ class LineTable:
         for l_cr in clusters_rects:
             l_cr.sort(key=lambda x:x.get("bbox")[0])
 
-        print("=============:")
-        for l_r in clusters_rects:
-            print(len(l_r))
+        # print("=============:")
+        # for l_r in clusters_rects:
+        #     print(len(l_r))
 
         for _line in clusters_rects:
             for _rect in _line:
@@ -1076,7 +1076,7 @@ class LineTable:
         list_x.sort(key=lambda x:x)
         list_y.sort(key=lambda x:x,reverse=sourceP_LB)
 
-        print("clusters_rects", len(clusters_rects))
+        # print("clusters_rects", len(clusters_rects))
         if sourceP_LB:
             clusters_rects.sort(key=lambda x:x[0].bbox[3],reverse=sourceP_LB)
         else:
@@ -1121,13 +1121,14 @@ class LineTable:
 
         list_textbox.sort(key=lambda x:x.bbox[0])
         list_textbox.sort(key=lambda x:x.bbox[3],reverse=sourceP_LB)
+        # print("list_textbox", list_textbox)
         for textbox in list_textbox:
             (x0,y0,x1,y1) = textbox.bbox
             _text = textbox.get_text()
             _find = False
             for table_line in _table:
                 for _cell in table_line:
-                    if self.inbox(textbox.bbox,_cell["bbox"]):
+                    if self.inbox(textbox.bbox, _cell["bbox"], textbox.get_text()):
                         _cell["text"] += _text
                         in_objs.add(textbox)
                         _find = True
@@ -1152,7 +1153,7 @@ class LineTable:
                         _cell["rowspan"] = 1
                         for i in range(1,_rospan):
                             if l_i+i<=len(_table)-1:
-                                print(len(_table),l_i+i)
+                                # print(len(_table),l_i+i)
                                 _table[l_i+i].insert(c_i,_cell)
 
         if fixRect:
@@ -1209,7 +1210,7 @@ class LineTable:
                     _find = False
                     for table_line in _table:
                         for _cell in table_line:
-                            if self.inbox(textbox.bbox,_cell["bbox"]):
+                            if self.inbox(textbox.bbox,_cell["bbox"], textbox.get_text()):
                                 _cell["text"] += _text
                                 in_objs.add(textbox)
                                 _find = True
@@ -1222,12 +1223,12 @@ class LineTable:
 
 
 
-        print("=======")
-        for _line in _table:
-            for _cell in _line:
-                print(_cell,end="\t\t")
-            print("\n")
-        print("===========")
+        # print("=======")
+        # for _line in _table:
+        #     for _cell in _line:
+        #         print(_cell,end="\t\t")
+        #     print("\n")
+        # print("===========")
 
         table_bbox = (_table[0][0].get("bbox")[0],
                       _table[0][0].get("bbox")[1],
@@ -1237,9 +1238,10 @@ class LineTable:
         ta = {"bbox": table_bbox, "table": _table}
         return ta
 
-    def inbox(self, bbox0, bbox_g):
+    def inbox(self, bbox0, bbox_g, text=""):
         # if bbox_g[0]<=bbox0[0] and bbox_g[1]<=bbox0[1] and bbox_g[2]>=bbox0[2] and bbox_g[3]>=bbox0[3]:
         #     return 1
+        # print("utils inbox", text, self.getIOU(bbox0,bbox_g), bbox0, bbox_g)
         if self.getIOU(bbox0,bbox_g)>0.5:
             return 1
         return 0
@@ -1299,7 +1301,7 @@ def sort_object(obj_list, is_reverse=False):
     if len(obj_list) == 0:
         return obj_list
     if isinstance(obj_list[0], (_Table, _Sentence, _Image)):
-        obj_list.sort(key=lambda x: x.y, reverse=is_reverse)
+        obj_list.sort(key=lambda x: (x.y, x.x), reverse=is_reverse)
         return obj_list
     elif isinstance(obj_list[0], _Page):
         obj_list.sort(key=lambda x: x.page_no)

+ 1 - 1
otr/otr_interface.py

@@ -286,7 +286,7 @@ def line_detect(img_data, otr_model):
         # 调用模型
         # rows, cols = table_line(image_np, otr_model)
         start_time1 = time.time()
-        list_line = table_line(image_np, otr_model, size=(best_w, best_h), hprob=0.5, vprob=0.5)
+        list_line = table_line(image_np, otr_model, size=(best_w, best_h))
         return {"list_line": str(list_line)}
     except TimeoutError:
         raise TimeoutError

+ 345 - 30
otr/table_line.py

@@ -197,20 +197,23 @@ def table_net(input_shape=(1152, 896, 3), num_classes=1):
 model = table_net((None, None, 3), 2)
 
 
-def draw_pixel(pred, prob=0.2):
+def draw_pixel(pred, prob=0.2, is_test=1):
+    if not is_test:
+        return
     import matplotlib.pyplot as plt
     _array = []
     for _h in range(len(pred)):
         _line = []
         for _w in range(len(pred[_h])):
             _prob = pred[_h][_w]
-            if _prob[0]>prob:
-                _line.append((0,255,255))
-            elif _prob[1]>prob:
-                _line.append((255,255,0))
+            if _prob[0] > prob:
+                _line.append((0, 0, 255))
+            elif _prob[1] > prob:
+                _line.append((255, 0, 0))
             else:
-                _line.append((255,255,255))
+                _line.append((255, 255, 255))
         _array.append(_line)
+    plt.axis('off')
     plt.imshow(np.array(_array))
     plt.show()
 
@@ -438,13 +441,15 @@ def get_line_from_binary_image(image_np, point_value=1, axis=0):
     return axis_lines
 
 
-def table_line(img, model, size=(512, 1024), hprob=0.5, vprob=0.5, row=50, col=30, alph=15):
+def table_line(img, model, size=(512, 1024), is_test=0):
     sizew, sizeh = size
     img_new = cv2.resize(img, (sizew, sizeh), interpolation=cv2.INTER_AREA)
 
     pred = model.predict(np.array([img_new]))
     pred = pred[0]
 
+    # draw_pixel(pred, is_test)
+
     # 横线预测结果
     # row_pred = pred[..., 0] > hprob
     # row_pred = row_pred.astype(np.uint8)
@@ -457,6 +462,16 @@ def table_line(img, model, size=(512, 1024), hprob=0.5, vprob=0.5, row=50, col=3
 
     _time = time.time()
     list_line = points2lines(pred, False)
+    mat_plot(list_line, "points2lines", is_test)
+
+    # 清除短线
+    # print(img_new.shape)
+    list_line = delete_short_lines(list_line, img_new.shape)
+    mat_plot(list_line, "delete_short_lines", is_test)
+
+    # 清除无交点线
+    list_line = delete_no_cross_lines(list_line)
+    mat_plot(list_line, "delete_no_cross_lines", is_test)
 
     # 分成横竖线
     list_rows = []
@@ -468,31 +483,32 @@ def table_line(img, model, size=(512, 1024), hprob=0.5, vprob=0.5, row=50, col=3
             list_rows.append(line)
 
     # 删掉贴着边框的line
-    temp_list = []
-    threshold = 5
-    for line in list_rows:
-        if line[1]-0 <= threshold or size[1]-line[1] <= threshold:
-            continue
-        # 内部排序
-        if line[0] > line[2]:
-            line = [line[2], line[3], line[0], line[1]]
-        temp_list.append(line)
-    list_rows = temp_list
-    temp_list = []
-    for line in list_cols:
-        if line[0]-0 <= threshold or size[0]-line[0] <= threshold:
-            continue
-        # 内部排序
-        if line[1] > line[3]:
-            line = [line[2], line[3], line[0], line[1]]
-        temp_list.append(line)
-    list_cols = temp_list
-    if not list_rows or not list_cols:
-        return []
+    # temp_list = []
+    # threshold = 5
+    # for line in list_rows:
+    #     if line[1]-0 <= threshold or size[1]-line[1] <= threshold:
+    #         continue
+    #     # 内部排序
+    #     if line[0] > line[2]:
+    #         line = [line[2], line[3], line[0], line[1]]
+    #     temp_list.append(line)
+    # list_rows = temp_list
+    # temp_list = []
+    # for line in list_cols:
+    #     if line[0]-0 <= threshold or size[0]-line[0] <= threshold:
+    #         continue
+    #     # 内部排序
+    #     if line[1] > line[3]:
+    #         line = [line[2], line[3], line[0], line[1]]
+    #     temp_list.append(line)
+    # list_cols = temp_list
+    # if not list_rows or not list_cols:
+    #     return []
 
     # 合并错开线
     list_rows = merge_line(list_rows, axis=0)
     list_cols = merge_line(list_cols, axis=1)
+    mat_plot(list_rows+list_cols, "merge_line", is_test)
 
     # 计算交点、分割线
     cross_points = get_points(list_rows, list_cols, (img_new.shape[0], img_new.shape[1]))
@@ -501,6 +517,7 @@ def table_line(img, model, size=(512, 1024), hprob=0.5, vprob=0.5, row=50, col=3
 
     # 清掉外围的没用的线
     list_rows, list_cols = delete_outline(list_rows, list_cols, cross_points)
+    mat_plot(list_rows+list_cols, "delete_outline", is_test)
 
     # 多个表格分割线
     split_lines, split_y = get_split_line(cross_points, list_cols, img_new)
@@ -529,11 +546,16 @@ def table_line(img, model, size=(512, 1024), hprob=0.5, vprob=0.5, row=50, col=3
         cross_points = fix_inner(list_rows, list_cols, cross_points, split_y)
         if not cross_points:
             return []
+    mat_plot(list_rows+list_cols, "fix_outline", is_test)
 
     # 修复表格4个角
-    list_rows, list_cols = fix_corner(list_rows, list_cols, split_y)
+    # list_rows, list_cols = fix_corner(list_rows, list_cols, split_y)
+    # mat_plot(list_rows+list_cols, "fix_corner", is_test)
 
     list_line = list_rows + list_cols
+
+    # 打印处理后线
+    mat_plot(list_line, "all", is_test)
     return list_line
 
 
@@ -611,6 +633,72 @@ def table_line2(img, model, size=(512, 1024), hprob=0.5, vprob=0.5, row=50, col=
     return rowboxes, colboxes, img_new
 
 
+def mat_plot(list_line, name="", is_test=1):
+    if not is_test:
+        return
+    from matplotlib import pyplot as plt
+    plt.figure()
+    plt.title(name)
+    for _line in list_line:
+        x0, y0, x1, y1 = _line
+        plt.plot([x0, x1], [y0, y1])
+    plt.show()
+
+
+def cv_plot(list_line, img_shape):
+    img_print = np.zeros(img_shape, np.uint8)
+    img_print.fill(255)
+    for line in list_line:
+        cv2.line(img_print, (int(line[0]), int(line[1])), (int(line[2]), int(line[3])),
+                 (255, 0, 0))
+    cv2.imshow("cv_plot", img_print)
+    cv2.waitKey(0)
+
+
+def delete_no_cross_lines(list_lines):
+    def get_cross_point(l1, l2):
+        # https://www.zhihu.com/question/381406535/answer/1095948349
+        flag = 0
+        # 相交一定是一条横线一条竖线
+        if (l1[0] == l1[2] and l2[1] == l2[3]) or (l1[1] == l1[3] and l2[0] == l2[2]):
+            if l1[0] <= l2[0] <= l1[2] and l2[1] <= l1[1] <= l2[3]:
+                flag = 1
+            elif l2[0] <= l1[0] <= l2[2] and l1[1] <= l2[1] <= l1[3]:
+                flag = 1
+        return flag
+
+    new_list_lines = []
+    for i in range(len(list_lines)):
+        line1 = list_lines[i]
+        find_flag = 0
+        for j in range(i+1, len(list_lines)):
+            line2 = list_lines[j]
+            if get_cross_point(line1, line2):
+                # print("delete_no_cross_lines", line1, line2)
+                find_flag = 1
+                if line2 not in new_list_lines:
+                    new_list_lines.append(line2)
+        if find_flag and line1 not in new_list_lines:
+            new_list_lines.append(line1)
+    return new_list_lines
+
+
+def delete_short_lines(list_lines, image_shape, scale=40):
+    x_min_len = max(5, int(image_shape[0] / scale))
+    y_min_len = max(5, int(image_shape[1] / scale))
+    new_list_lines = []
+    for line in list_lines:
+        if line[0] == line[2]:
+            if abs(line[3] - line[1]) >= y_min_len:
+                # print("y_min_len", abs(line[3] - line[1]), y_min_len)
+                new_list_lines.append(line)
+        else:
+            if abs(line[2] - line[0]) >= x_min_len:
+                # print("x_min_len", abs(line[2] - line[0]), x_min_len)
+                new_list_lines.append(line)
+    return new_list_lines
+
+
 def get_outline(points, image_np):
     # 取出x, y的最大值最小值
     x_min = points[0][0]
@@ -1135,7 +1223,7 @@ def delete_outline(row_lines, col_lines, points):
     return row_lines, col_lines
 
 
-def fix_outline(image, row_lines, col_lines, points, split_y):
+def fix_outline2(image, row_lines, col_lines, points, split_y):
     print("split_y", split_y)
     # 分割线纵坐标
     if len(split_y) < 2:
@@ -1528,6 +1616,233 @@ def fix_outline(image, row_lines, col_lines, points, split_y):
     return new_row_lines, new_col_lines, all_longer_row_lines, all_longer_col_lines
 
 
+def fix_outline(image, row_lines, col_lines, points, split_y, scale=20):
+    x_min_len = max(10, int(image.shape[0] / scale))
+    y_min_len = max(10, int(image.shape[1] / scale))
+
+    print("split_y", split_y)
+    # 分割线纵坐标
+    if len(split_y) < 2:
+        return [], [], [], []
+
+    split_y.sort(key=lambda x: x)
+    new_split_y = []
+    for i in range(1, len(split_y), 2):
+        new_split_y.append(int((split_y[i]+split_y[i-1])/2))
+
+    split_row_list = []
+    split_col_list = []
+    split_point_list = []
+
+    for i in range(1, len(split_y)):
+        y = split_y[i]
+        last_y = split_y[i-1]
+
+        split_row = []
+        for row in row_lines:
+            if last_y <= row[3] <= y:
+                split_row.append(row)
+        split_row_list.append(split_row)
+
+        split_col = []
+        for col in col_lines:
+            if last_y <= col[1] <= y or last_y <= col[3] <= y or col[1] < last_y < y < col[3]:
+                split_col.append(col)
+        split_col_list.append(split_col)
+
+        split_point = []
+        for point in points:
+            if last_y <= point[1] <= y:
+                split_point.append(point)
+        split_point_list.append(split_point)
+
+    # 预测线取上下左右4个边(会有超出表格部分) [(), ()]
+    area_row_line = []
+    area_col_line = []
+    for area in split_row_list:
+        if not area:
+            area_row_line.append([])
+            continue
+        area.sort(key=lambda x: (x[1], x[0]))
+        up_line = area[0]
+        bottom_line = area[-1]
+        area_row_line.append([up_line, bottom_line])
+    for area in split_col_list:
+        if not area:
+            area_col_line.append([])
+            continue
+        area.sort(key=lambda x: x[0])
+        left_line = area[0]
+        right_line = area[-1]
+        area_col_line.append([left_line, right_line])
+
+    # 取每个分割区域的4条线(无超出表格部分)
+    area_row_line2 = []
+    area_col_line2 = []
+    for area in split_point_list:
+        if not area:
+            area_row_line2.append([])
+            area_col_line2.append([])
+            continue
+        area.sort(key=lambda x: (x[0], x[1]))
+        left_up = area[0]
+        right_bottom = area[-1]
+
+        up_line = [left_up[0], left_up[1], right_bottom[0], left_up[1]]
+        bottom_line = [left_up[0], right_bottom[1], right_bottom[0], right_bottom[1]]
+        left_line = [left_up[0], left_up[1], left_up[0], right_bottom[1]]
+        right_line = [right_bottom[0], left_up[1], right_bottom[0], right_bottom[1]]
+        area_row_line2.append([up_line, bottom_line])
+        area_col_line2.append([left_line, right_line])
+
+    # 判断超出部分的长度,超出一定长度就补线
+    new_row_lines = []
+    new_col_lines = []
+    longer_row_lines = []
+    longer_col_lines = []
+    all_longer_row_lines = []
+    all_longer_col_lines = []
+
+    for i in range(len(area_row_line)):
+        if not area_row_line[i] or not area_col_line[i]:
+            continue
+
+        up_line = area_row_line[i][0]
+        up_line2 = area_row_line2[i][0]
+        bottom_line = area_row_line[i][1]
+        bottom_line2 = area_row_line2[i][1]
+        left_line = area_col_line[i][0]
+        left_line2 = area_col_line2[i][0]
+        right_line = area_col_line[i][1]
+        right_line2 = area_col_line2[i][1]
+
+        # 计算单格高度宽度
+        if len(split_row_list[i]) > 1:
+            height_dict = {}
+            for j in range(len(split_row_list[i])):
+                if j + 1 > len(split_row_list[i]) - 1:
+                    break
+                height = abs(int(split_row_list[i][j][3] - split_row_list[i][j+1][3]))
+                if height in height_dict.keys():
+                    height_dict[height] = height_dict[height] + 1
+                else:
+                    height_dict[height] = 1
+            height_list = [[x, height_dict[x]] for x in height_dict.keys()]
+            height_list.sort(key=lambda x: (x[1], -x[0]), reverse=True)
+            box_height = height_list[0][0]
+        else:
+            box_height = y_min_len
+
+        if len(split_col_list[i]) > 1:
+            box_width = abs(split_col_list[i][1][2] - split_col_list[i][0][2])
+        else:
+            box_width = x_min_len
+        print("box_height", box_height, "box_width", box_width)
+
+        # 补左右两条竖线超出来的线的row
+        if (up_line[1] - left_line[1] >= y_min_len and up_line[1] - right_line[1] >= y_min_len) or \
+                (up_line[1] - left_line[1] >= y_min_len and up_line[1] - right_line[1] >= y_min_len):
+
+            if up_line[1] - left_line[1] >= up_line[1] - right_line[1]:
+                new_row_lines.append([left_line[0], left_line[1], right_line[0], left_line[1]])
+                new_col_y = left_line[1]
+                # 补了row,要将其他短的col连到row上
+                for j in range(len(split_col_list[i])):
+                    col = split_col_list[i][j]
+                    # 且距离不能相差大于一格
+                    # print("abs(new_col_y - col[1])", abs(new_col_y - col[1]))
+                    if abs(new_col_y - col[1]) <= box_height:
+                        split_col_list[i][j][1] = min([new_col_y, col[1]])
+                        longer_col_lines.append([col[0], min([new_col_y, col[1]]), col[2], col[3]])
+
+            else:
+                new_row_lines.append([left_line[0], right_line[1], right_line[0], right_line[1]])
+                new_col_y = right_line[1]
+                # 补了row,要将其他短的col连到row上
+                for j in range(len(split_col_list[i])):
+                    # 需判断该线在这个区域中
+                    # if up_line2[1]-3 <= col[1] <= col[3] <= bottom_line2[1]+3:
+                    col = split_col_list[i][j]
+                    # 且距离不能相差太大
+                    # print("abs(new_col_y - col[1])", abs(new_col_y - col[1]))
+                    if abs(new_col_y - col[1]) <= box_height:
+                        split_col_list[i][j][1] = min([new_col_y, col[1]])
+
+        if (left_line[3] - bottom_line[3] >= y_min_len and right_line[3] - bottom_line[3] >= y_min_len) or \
+                (left_line[3] - bottom_line[3] >= y_min_len and right_line[3] - bottom_line[3] >= y_min_len):
+
+            if left_line[3] - bottom_line[3] >= right_line[3] - bottom_line[3]:
+                new_row_lines.append([left_line[2], left_line[3], right_line[2], left_line[3]])
+                new_col_y = left_line[3]
+                # 补了row,要将其他短的col连到row上
+                for j in range(len(split_col_list[i])):
+                    col = split_col_list[i][j]
+                    # 且距离不能相差太大
+                    if abs(new_col_y - col[3]) <= box_height:
+                        split_col_list[i][j][3] = max([new_col_y, col[3]])
+
+            else:
+                new_row_lines.append([left_line[2], right_line[3], right_line[2], right_line[3]])
+                new_col_y = right_line[3]
+                # 补了row,要将其他短的col连到row上
+                for j in range(len(split_col_list[i])):
+                    col = split_col_list[i][j]
+                    # 且距离不能相差太大
+                    if abs(new_col_y - col[3]) <= box_height:
+                        split_col_list[i][j][3] = max([new_col_y, col[3]])
+
+        # 补上下两条横线超出来的线的col
+        if (left_line[0] - up_line[0] >= x_min_len and left_line[0] - bottom_line[0] >= x_min_len) or \
+                (left_line[0] - up_line[0] >= x_min_len and left_line[0] - bottom_line[0] >= x_min_len):
+            if left_line[0] - up_line[0] >= left_line[0] - bottom_line[0]:
+                new_col_lines.append([up_line[0], up_line[1], up_line[0], bottom_line[1]])
+                new_row_x = up_line[0]
+                # 补了col,要将其他短的row连到col上
+                for j in range(len(split_row_list[i])):
+                    row = split_row_list[i][j]
+                    # 且距离不能相差太大
+                    if abs(new_row_x - row[0]) <= box_width:
+                        split_row_list[i][j][0] = min([new_row_x, row[0]])
+            else:
+                new_col_lines.append([bottom_line[0], up_line[1], bottom_line[0], bottom_line[1]])
+                new_row_x = bottom_line[0]
+                # 补了col,要将其他短的row连到col上
+                for j in range(len(split_row_list[i])):
+                    row = split_row_list[i][j]
+                    # 且距离不能相差太大
+                    if abs(new_row_x - row[0]) <= box_width:
+                        split_row_list[i][j][0] = min([new_row_x, row[0]])
+
+        if (up_line[2] - right_line[2] >= x_min_len and bottom_line[2] - right_line[2] >= x_min_len) or \
+                (up_line[2] - right_line[2] >= x_min_len and bottom_line[2] - right_line[2] >= x_min_len):
+            if up_line[2] - right_line[2] >= bottom_line[2] - right_line[2]:
+                new_col_lines.append([up_line[2], up_line[3], up_line[2], bottom_line[3]])
+                new_row_x = up_line[2]
+                # 补了col,要将其他短的row连到col上
+                for j in range(len(split_row_list[i])):
+                    row = split_row_list[i][j]
+                    # 且距离不能相差太大
+                    if abs(new_row_x - row[2]) <= box_width:
+                        split_row_list[i][j][2] = max([new_row_x, row[2]])
+
+            else:
+                new_col_lines.append([bottom_line[2], up_line[3], bottom_line[2], bottom_line[3]])
+                new_row_x = bottom_line[2]
+                # 补了col,要将其他短的row连到col上
+                for j in range(len(split_row_list[i])):
+                    # 需判断该线在这个区域中
+                    # if up_line2[1]-3 <= row[1] <= bottom_line2[1]+3:
+                    row = split_row_list[i][j]
+                    # 且距离不能相差太大
+                    if abs(new_row_x - row[2]) <= box_width:
+                        split_row_list[i][j][2] = max([new_row_x, row[2]])
+
+        all_longer_row_lines += split_row_list[i]
+        all_longer_col_lines += split_col_list[i]
+
+    return new_row_lines, new_col_lines, all_longer_row_lines, all_longer_col_lines
+
+
 def fix_table(row_point_list, col_point_list, split_y, row_lines, col_lines):
     # 分割线纵坐标
     if len(split_y) < 2:

BIN
package_2022_03_22/convert_ocr.zip


BIN
package_2022_03_22/convert_otr.zip


+ 1114 - 105
result.html

@@ -1,151 +1,1160 @@
-<!DOCTYPE HTML><head><meta charset="UTF-8"></head><body><table border="1">
+<!DOCTYPE HTML><head><meta charset="UTF-8"></head><body><div>新港园区实验小学、实验幼儿园空调采购工程</div>
+<div>竞争性碳商文件</div>
+<div>管</div>
+<div>理有</div>
+<div>绿鼎项目</div>
+<div>E</div>
+<div>盛</div>
+<div>人</div>
+<div>项目编号:TMSD-HS-2021035</div>
+<div>采购人:黄石新港(物流)工业园区社会发展局</div>
+<div>招标代理:天马盛鼎项目管理有限公司</div>
+<div>一年六月</div>
+<div>二0</div>
+<div>碳商文件备案表</div>
+<div>工程名称:新港园区实验小学、实验幼儿园空调采购工程</div>
+<div>采购人:黄石新港(物流)工业园区社会发展局</div>
+<div>招标代理机构:天马盛鼎项目管理有限公司</div>
+<div>代理机构意见:</div>
+<div>盖章</div>
+<div>201年</div>
+<div>6月29日</div>
+<div>采购单位意见:同意</div>
+<div>盖章</div>
+<div>202年平6月</div>
+<div>月29日</div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div>1 </div>
+<div></div>
+<div>目录</div>
+<div>第一章竞争性磋商公告„„„„„„„„„„„„„„2</div>
+<div>第二章磋商须知前附表„„„„„„„„„„„„„4</div>
+<div>第三章采购项目要求„„„„„„„„„„„„„„8</div>
+<div>第四章竞争性磋商须知„„„„„„„„„„„„„„„„„„„13</div>
+<div>第五章合同书格式„„„„„„„„„„„„„„„„25</div>
+<div>第六章响应性文件格式及附件„„„„„„„„„„26</div>
+<div>,2</div>
+<div>第一章新港园区实验小学、实验幼儿园空调采购工程</div>
+<div>竞争性磋商公告</div>
+<div>项目概况</div>
+<div>新港园区实验小学、实验幼儿园空调采购工程采购项目的潜在供应商应在黄石公共资源</div>
+<div>交易信息网获取采购文件,并于2021年7月12日9点00分(北京时间)前提交响应</div>
+<div>文件。</div>
+<div>一、项目基本情况</div>
+<div>1.项目编号:TMSD-HS-2021035</div>
+<div>2.政府采购计划备案文号:新港园区财采计备【2021】B类20号</div>
+<div>3.项目名称:新港园区实验小学、实验幼儿园空调采购工程</div>
+<div>4.采购方式:□竞争性谈判竞争性磋商□询价</div>
+<div>5.预算金额:1331000元</div>
+<div>6.最高限价(如有):1331000元</div>
+<div>7.采购需求:详见清单全部内容</div>
+<div>8.质量要求:符合质量验收规范合格标准</div>
+<div>9.合同履行期限:30个日历天</div>
+<div>10.本项目不接受联合体。</div>
+<div>二、申请人的资格要求:</div>
+<table border="1">
 <tr>
-<td colspan=1 rowspan=1>9</td>
-<td colspan=1 rowspan=1>PPR90°弯头</td>
-<td colspan=1 rowspan=1>20</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>38893</td>
-<td colspan=1 rowspan=1></td>
-<td colspan=1 rowspan=1></td>
-<td colspan=1 rowspan=1></td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+</td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>10</td>
-<td colspan=1 rowspan=1>PPR90°弯头</td>
-<td colspan=1 rowspan=1>25</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>54352</td>
-<td colspan=2 rowspan=1></td>
-<td colspan=1 rowspan=1></td>
+<td colspan=1 rowspan=1>(1)具有独立承担民事责任的能力;  
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>(2)具有良好的商业信誉和健全的财务会计制度;  
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>(3)具有履行合同所必需的设备和专业技术能力;  
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>(4)有依法缴纳税收和社会保障资金的良好记录;  
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>(5)参加政府采购活动前三年内,在经营活动中没有重大违法记录;  
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>(6)法律、行政法规规定的其他条件。 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>2、供应商须具有独立承担民事责任的能力,必须具备营业执照、税务登记证、组织机
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>构代码证或三证合一的营业执照;  
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>3、投标人须具有建筑机电安装工程专业承包三级及以上资质;安全生产许可证,并在
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>人员、设备等方面具备相应的能力。 
+</td>
+</tr>
+</table>
+<div>4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)中未被列入失信被执</div>
+<div>行人、重大税收违法案件当事人名单、政府采购严重违法失信行为记录名单,提供网站查询</div>
+<div>截图(若成交供应商有以上行为,取消成交资格,查询时间以发布招标公告之后查询结果为</div>
+<div>准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大违法记录(是指因违法</div>
+<div>经营受到刑事处罚或责令停产停业、吊销许可证或执照、较大数额罚款等行政处罚)的书面</div>
+<div>声明;参与本次采购活动期间未在被禁止参加政府采购活动期限内的书面声明;</div>
+<div>5、本次招标不接受联合体投标,不允许分包、转包。</div>
+<div>三、获取采购文件</div>
+<div>1.时间:2021年6月29日至2021年7月6日23时59分止(北京时间,下同)</div>
+<div>2.地点:黄石市公共资源交易信息网</div>
+<div>3.方式:(1)凡有意参加投标者,应当在黄石市公共资源交易信息网上进行网员注册,</div>
+<div>具体操作见黄石公共资源交易信息网相关流程。</div>
+<div>,3</div>
+<div>(2)完成网员注册后,通过互联网登录“黄石公共资源交易信息网政府采购电子交易平</div>
+<div>台”,明确所投项目,下载已签章的招标文件</div>
+<div>4.售价:人民币叁佰元整(¥300.00元),售后不退。</div>
+<div>四、响应文件提交</div>
+<div>1.截止时间:2021年7月12日9点00分(北京时间)</div>
+<div>2.受新冠疫情影响,本次项目采取网上递交及网络开标的方式进行(详见招标文件),截</div>
+<div>止时间后递交的投标文件不予接收。即投标人(供应商)在竞争性磋商文件上规定的截</div>
+<div>止时间前,将竞争性磋商响应文件和首次报价表以及授权委托书转换成PDF格式并加密</div>
+<div>上传到(1578316898@qq.com)邮箱。其中投标人(供应商)递交竞争性磋商响应文件时</div>
+<div>一定要在“邮件主题”上标注参与项目的名称。</div>
+<div>3.由于本次开标采用网络开标,采用的会议软件为“会易通”,请各投标人授权代表(即</div>
+<div>参会人员)提前用带视频功能的手机或电脑下载“会易通”,并提前自行测试,防止意</div>
+<div>外出现。天马盛鼎项目管理有限公司在投标文件递交截止时间后、项目开标前12个小时,</div>
+<div>将本次开标会的会议时间、会议ID及密码以邮件回传给在规定时间内递交了投标文件的</div>
+<div>投标人(供应商)的投标邮箱。开标过程中投标人(供应商)须准备身份证原件和授权</div>
+<div>委托书,投标人(供应商)不要使用163、126邮箱(该类型邮箱下载限速,影响开标进</div>
+<div>程),也不要将文件压缩。</div>
+<div>五、开启</div>
+<div>1.时间:2021年7月12日9点00分(北京时间)</div>
+<div>2.地点:黄石市民之家(地址:黄石经济技术开发区•铁山区金山街道园博大道289号,</div>
+<div>城市规划馆旁、园博园斜对面)四楼黄石市公共资源交易中心开标室(具体见四楼电子</div>
+<div>屏场地安排及四楼各开标室门前电子屏)</div>
+<div>六、公告期限</div>
+<div>自本公告发布之日起5个工作日。</div>
+<div>七、其他补充事宜</div>
+<div>1.若采购时间、地点以及采购项目其它相关内容发生变更,代理公司将在黄石公共资源</div>
+<div>交易信息网和湖北省政府采购网上发布变更公告,请各供应商随时关注相关信息。</div>
+<div>2.逾期送达的或者未送达指定地点的,或者未按照招标文件要求密封或者加写标记的磋</div>
+<div>商文件(磋商文件、询价文件等),招标人将拒收。</div>
+<div>八、凡对本次采购提出询问,请按以下方式联系。</div>
+<div>1.采购人信息</div>
+<div>名称:黄石新港(物流)工业园区社会发展局</div>
+<div>地址:黄石新港(物流)工业园区</div>
+<div>联系人:黄主任</div>
+<div>联系方式:0714-7891056</div>
+<div>2.采购代理机构信息</div>
+<div>名称:天马盛鼎项目管理有限公司</div>
+<div>地址:黄石市下陆区团城山</div>
+<div>联系方式:13597717492</div>
+<div>3.项目联系方式</div>
+<div>项目联系人:冯工</div>
+<div>电话:13597717492</div>
+<div>,4</div>
+<div>第二章竞争性磋商须知</div>
+<div>磋商须知前附表</div>
+<table border="1">
+<tr>
+<td colspan=1 rowspan=1>项号 
+</td>
+<td colspan=1 rowspan=1>类 别 
+</td>
+<td colspan=1 rowspan=1>内          容 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>1 
+</td>
+<td colspan=1 rowspan=1>项目名称 
+</td>
+<td colspan=1 rowspan=1>新港园区实验小学、实验幼儿园空调采购工程 
+</td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>11</td>
-<td colspan=1 rowspan=1>PPR90°弯头</td>
-<td colspan=1 rowspan=1>32</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>5850</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>2 
+</td>
+<td colspan=1 rowspan=1>项目地址 
+</td>
+<td colspan=1 rowspan=1>黄石新港(物流)工业园区 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>3 
+</td>
+<td colspan=1 rowspan=1>采购范围 
+</td>
+<td colspan=1 rowspan=1>详见清单全部内容 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>4 
+</td>
+<td colspan=1 rowspan=1>投资规模 
+</td>
+<td colspan=1 rowspan=1>约 1331000
+元 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>5 
+</td>
+<td colspan=1 rowspan=1>质量目标 
+</td>
+<td colspan=1 rowspan=1>合格 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>6 
+</td>
+<td colspan=1 rowspan=1>工    期 
+</td>
+<td colspan=1 rowspan=1>30
+个日历天 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>7 
+</td>
+<td colspan=1 rowspan=1>报 价方 式  
+</td>
+<td colspan=1 rowspan=1>综 合单 价  
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>12</td>
-<td colspan=1 rowspan=1>PPR三通</td>
-<td colspan=1 rowspan=1>25*25</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>9460</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>13</td>
-<td colspan=1 rowspan=1>PPR中小三通</td>
-<td colspan=1 rowspan=1>25*20</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>8751</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>14</td>
-<td colspan=1 rowspan=1>PPR大小头</td>
-<td colspan=1 rowspan=1>25*20</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>10169</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>15</td>
-<td colspan=1 rowspan=1>PPR直接</td>
-<td colspan=1 rowspan=1>25</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>5500</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>16</td>
-<td colspan=1 rowspan=1>PPR直接</td>
-<td colspan=1 rowspan=1>20</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>1460</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>17</td>
-<td colspan=1 rowspan=1>PPR直接</td>
-<td colspan=1 rowspan=1>32</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>1020</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>18</td>
-<td colspan=1 rowspan=1>PPR过桥弯</td>
-<td colspan=1 rowspan=1>25</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>10877</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>19</td>
-<td colspan=1 rowspan=1>PPR过桥弯</td>
-<td colspan=1 rowspan=1>20</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>7350</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>20</td>
-<td colspan=1 rowspan=1>PPR45°弯头</td>
-<td colspan=1 rowspan=1>25</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>11206</td>
-<td colspan=2 rowspan=1></td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>21</td>
-<td colspan=1 rowspan=1>PPR截止阀</td>
-<td colspan=1 rowspan=1>25</td>
-<td colspan=1 rowspan=1>个</td>
-<td colspan=1 rowspan=1>1360</td>
-<td colspan=1 rowspan=1>2020年5月至2022年3月</td>
-<td colspan=1 rowspan=1>西安洛悦府项目施工现场</td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
 </tr>
 <tr>
-<td colspan=1 rowspan=1>22</td>
-<td colspan=1 rowspan=1>合计</td>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=1 rowspan=13></td>
 <td colspan=1 rowspan=1></td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>8 
+</td>
+<td colspan=1 rowspan=1>供应商资格
+要求 
+</td>
+<td colspan=1 rowspan=1>1、磋商供应商应具备《政府采购法》第二十二条规定的条件: 
+(1)具有独立承担民事责任的能力;  
+(2)具有良好的商业信誉和健全的财务会计制度;  
+(3)具有履行合同所必需的设备和专业技术能力;  
+(4)有依法缴纳税收和社会保障资金的良好记录;  
+(5)参加政府采购活动前三年内,在经营活动中没有重大违法
+记录;  
+(6)法律、行政法规规定的其他条件。 
+2、供应商须具有独立承担民事责任的能力,必须具备营业执照、
+税务登记证、组织机构代码证或三证合一的营业执照;  
+3、投标人须具有建筑机电安装工程专业承包三级及以上资质;
+安全生产许可证,并在人员、设备等方面具备相应的能力。 
+4、供应商必须是在“信用中国”网(www.creditchina.gov.cn)
+中未被列入失信被执行人、重大税收违法案件当事人名单、政府采购
+严重违法失信行为记录名单,提供网站查询截图(若成交供应商有以
+上行为,取消成交资格,查询时间以发布招标公告之后查询结果为
+准)。供应商在参加本次采购活动前三年内,在经营活动中没有重大
+违法记录(是指因违法经营受到刑事处罚或责令停产停业、吊销许可
+证或执照、较大数额罚款等行政处罚)的书面声明;参与本次采购活
+动期间未在被禁止参加政府采购活动期限内的书面声明; 
+5、本次招标不接受联合体投标,不允许分包、转包。 
+</td>
+<td colspan=3 rowspan=13></td>
+<td colspan=1 rowspan=1>9 
+</td>
+<td colspan=1 rowspan=1>投标有效期 
+</td>
+<td colspan=1 rowspan=1>60
+日历天(从递交磋商响应文件截止之日算起) 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>10 
+</td>
+<td colspan=1 rowspan=1>资格审查方
+法 
+</td>
+<td colspan=1 rowspan=1>资格后审 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>11 
+</td>
+<td colspan=1 rowspan=1>采购方式 
+</td>
+<td colspan=1 rowspan=1>竞争性磋商 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>12 
+</td>
+<td colspan=1 rowspan=1>是否采用“技
+术暗标” 
+</td>
+<td colspan=1 rowspan=1>否 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>13 
+</td>
+<td colspan=1 rowspan=1>项目控制价 
+</td>
+<td colspan=1 rowspan=1>1331000
+元,供应商磋商报价超过此控制价即为无效响应。 
+</td>
+</tr>
+</table>
+<div>,5</div>
+<table border="1">
+<tr>
+<td colspan=1 rowspan=1>14 
+</td>
+<td colspan=1 rowspan=1>付款方式 
+</td>
+<td colspan=1 rowspan=1>签订合同时双方另行具体约定 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>15 
+</td>
+<td colspan=1 rowspan=1>供应商提出
+答疑 
+</td>
+<td colspan=1 rowspan=1>磋商文件递交截止之前的前五日之前将要求答疑的问题发电子邮件
+至天马盛鼎项目管理有限公司。邮箱:1578316898@qq.com,联系电
+话:13597717492,联系人:冯工   
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>16 
+</td>
+<td colspan=1 rowspan=1>提交磋商响
+应文件的要
+求 
+</td>
+<td colspan=1 rowspan=1>1、受新冠疫情影响,本次项目采取网上递交及网络开标的方式进行
+(详见招标文件),截止时间后递交的投标文件不予接收。即投标人(供
+应商)在竞争性磋商文件上规定的截止时间前,将竞争性磋商响应文
+件和首次报价表以及授权委托书转换成
+PDF
+格式并加密上传到
+(1578316898@qq.com)邮箱。其中投标人(供应商)递交竞争性磋
+商响应文件时一定要在“邮件主题”上标注参与项目的名称。  
+2、由于本次开标采用网络开标,采用的会议软件为“会易通”,请
+各投标人授权代表(即参会人员)提前用带视频功能的手机或电脑下
+载“会易通”,并提前自行测试,防止意外出现。天马盛鼎项目管理
+有限公司在投标文件递交截止时间后、项目开标前
+12
+个小时,将本
+次开标会的会议时间、会议
+ID
+及密码以邮件回传给在规定时间内递
+交了投标文件的投标人(供应商)的投标邮箱。开标过程中投标人(供
+应商)须准备身份证原件和授权委托书,投标人(供应商)不要使用
+163、126
+邮箱(该类型邮箱下载限速,影响开标进程),也不要将
+文件压缩。 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>17 
+</td>
+<td colspan=1 rowspan=1>磋商响应文
+件递交截止
+时间及流程 
+</td>
+<td colspan=1 rowspan=1>磋商时间:2021 年 7
+月 12 日 上午 9  时 
+投标人(供应商)在开标规定时间前半小时进入会易通会议室,并将
+称呼改为“XX 公司+姓名”后参与本次视频开标。代理机构在开标前 
+15 分钟,组建本次开标会微信群,每家投标人(供应商)只允许法
+人授权委托代表“公司名称+姓名”实名进入。具体流程如下: 
+1.将开标倒计时投屏至会议界面; 
+2.宣布本次开标会开始,强调会议纪律及要求。除主持人和联合主持
+人会议麦克风打开外,其他参会人员麦克风保持静音,需发言时自行
+打开; 
+3.确认本次开标会有效投标人(供应商)。将代理机构邮箱打开并投
+屏至会议界面,根据文件递交截止时间确认有效投标人(供应商); 
+4.下载投标文件。根据邮箱中邮件递交时间顺序,依次下载投标人(供
+应商)投标文件。下载过程全程投屏至会议界面。在此过程中,投标
+人(供应商)代表应对下载其投标文件的数量通过微信群确认并告之
+解密密码。代理机构在本地电脑上新建该项目投标文件夹,再在这个
+文件夹内建立每家投标人(供应商)子文件夹,将投标文件下载至此,
+将投标人(供应商)代表告之的解密密码标注在对应的文件名上; 
+</td>
+</tr>
+</table>
+<div>,6</div>
+<table border="1">
+<tr>
 <td colspan=1 rowspan=1></td>
-<td colspan=1 rowspan=1>314402</td>
-<td colspan=1 rowspan=1>2020年5月至2022年3月</td>
-<td colspan=1 rowspan=1>西安洛悦府项目施工现场</td>
-<td colspan=2 rowspan=12></td>
 <td colspan=1 rowspan=1></td>
+<td colspan=1 rowspan=1>5、每个投标单位允许
+1
+个人进入会议系统,进入会议系统前将名片
+改为投标单位名称+代表人姓名(实名)。代理公司现场建立微信群,
+在会易通系统里将微信群二维码公布,每一个投标单位只允许授权代
+表进入微信群; 
+6.验证投标人(供应商)身份。代理机构按顺序逐个打开投标人(供
+应商)投标文件,将投标人(供应商)法人授权委托书页投屏至会议
+界面,同时对应的投标人(供应商)代表打开摄像头,左手持本人身
+份证至头部的左下方,代理机构截屏保存。如无异议,逐个确认及截
+屏; 
+7.代理公司将邮箱投屏到会易通系统里。 投标单位在微信群里将本
+单位的密码告诉代理公司工作人员, 代理公司工作人员将投标单位
+的解密的投标文件下载到开标室的电脑, 每一个投标单位的投标文
+件做一个文件夹,后缀名为加密的密码;若投标文件解密不成功,视
+为投标单位放弃投标; 
+8、代理机构再次询问各投标人(供应商)代表,对此次开标会有无
+异议。如无异议,书面手写 XXX 项目开标确认书,附法人授权委托
+人身份证原件拍照上传至本次开标会微信群; 
+9.代理公司工作人员将投标人的投标文件用 U 盘复制给评委, 评委
+进行评标; 
+10、代理公司在微信群里逐一通知投标人进行磋商。二次报价发至代
+理公司邮箱。 
+11、评委继续后续评标工作。 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1> 
+</td>
+<td colspan=1 rowspan=1>支持中小企
+业政策 
+</td>
+<td colspan=1 rowspan=1>依据财政部工业和信息化部《政府采购促进中小企业发展暂行办法》
+(财库[2020]46
+号)的规定,对参加政府采购活动的小型和微型企
+业产品的价格
+6%的扣除,用扣除后的价格参与评审;中小企业应当
+提供《中小企业声明函》(见附件),否则在评审时不享受上述评审
+优惠。中小企业划型标准详见工业和信息化部 国家统计局 国家发展
+和改革委员会 财政部《中小企业划型标准规定》(工信部联企业
+〔2011〕300
+号)。 
+依据财政部 司法部《关于政府采购支持监狱企业发展有关问题的通
+知》 (财库[2014]68 号)的规定,监狱企业视同小型、微型企业,
+享受预留份额、评审中价格扣除等促进中小企业发展的政府采购政
+策。监狱企业应当提供由省级以上监狱管理局、戒毒管理局(含新疆
+生产建设兵团)出具的属于监狱企业的证明文件。 
+依据财政部 民政部 中国残疾人联合会《关于促进残疾人就业政府采
+购政策的通知》 (财库[2017]141 号)的规定,残疾人福利性单位
+视同小型、微型企业,享受预留份额、评审中价格扣除等促进中小企
+业发展的政府采购政策。残疾人福利性单位属于小型、微型企业的,
+</td>
+</tr>
+</table>
+<div>,7</div>
+<table border="1">
+<tr>
 <td colspan=1 rowspan=1></td>
 <td colspan=1 rowspan=1></td>
+<td colspan=1 rowspan=1>不重复享受政策。符合该通知规定条件的残疾人福利性单位应当提供 
+《残疾人福利性单位声明函》 (见附件)。大中型企业与小型、微
+型企业(含监狱企业、残疾人福利性单位)组成联合体共同参加非专
+门面向中小企业的政府采购活 动,且联合体协议中约定小型、微型
+企业的协议合同金额占到联合体协议合同总金额 30%以上的,给予联
+合体
+2%的价格扣除。 
+供应商应当对《中小企业声明函》 、监狱企业证明文件、 《残疾人
+福利性单位声明函》的真实性负责, 上述材料与事实不符的依照 《政
+府采购法》第七十七条第一款的规定,处以采购金额千分之五以上千
+分之十以下的罚款,列入不良行为记录名单,在一至三年内禁止参加
+政府采购活动,有违法所得的,并处没收违法所得,情节严重的,由
+工商行政管理机关吊销营业执照;构成犯罪的,依法追究刑事责任。 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1> 
+</td>
+<td colspan=1 rowspan=1>采购节能产
+品政策 
+</td>
+<td colspan=1 rowspan=1>供应商提供的产品如属于政府强制采购节能产品范围,则该产品应在
+最新一期“节能产品政府采购清单”中。供应商所投产品如属于政府
+优先采购节能产品范围的,给予该项产品价格 1%的扣除,用扣除后
+的价格参与评审。 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1> 
+</td>
+<td colspan=1 rowspan=1>采购环保产
+品政策 
+</td>
+<td colspan=1 rowspan=1>供应商提供的产品列入最新一期“环境标志产品政府采购清单”的,
+给予该项产品价格 1%的扣除,用扣除后的价格参与评审 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>19 
+</td>
+<td colspan=1 rowspan=1>是否接受联
+合体 
+</td>
+<td colspan=1 rowspan=1>本次招标不接受联合体投标。 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>供应商应承担所有与准备和参加磋商有关的费用。不论成交的结果如何,采购人和招标代理
+公司均无义务和责任承担这些费用:招标代理服务费:参考发改价格【2011】534
+号文件计
+取。(不含评委费及场地服务费)以上费用由成交供应商领取成交通知书后一次性付清。 
+</td>
+<td colspan=1 rowspan=1>供应商应承担所有与准备和参加磋商有关的费用。不论成交的结果如何,采购人和招标代理
+公司均无义务和责任承担这些费用:招标代理服务费:参考发改价格【2011】534
+号文件计
+取。(不含评委费及场地服务费)以上费用由成交供应商领取成交通知书后一次性付清。 
+</td>
+<td colspan=1 rowspan=1>供应商应承担所有与准备和参加磋商有关的费用。不论成交的结果如何,采购人和招标代理
+公司均无义务和责任承担这些费用:招标代理服务费:参考发改价格【2011】534
+号文件计
+取。(不含评委费及场地服务费)以上费用由成交供应商领取成交通知书后一次性付清。 
+</td>
+</tr>
+</table>
+<div>,8</div>
+<div>第三章采购项目要求</div>
+<div>一、项目概述</div>
+<div>1.项目编号:TMSD-HS-2021035</div>
+<div>2.项目名称:新港园区实验小学、实验幼儿园空调采购工程</div>
+<div>3.资金预算:1331000元</div>
+<div>4.交货时间:30个日历天</div>
+<div>二、清单及参数</div>
+<table border="1">
+<tr>
+<td colspan=1 rowspan=1>小学空调清单 
+</td>
+<td colspan=1 rowspan=1>小学空调清单 
+</td>
+<td colspan=1 rowspan=1>小学空调清单 
+</td>
+<td colspan=1 rowspan=1>小学空调清单 
+</td>
+<td colspan=1 rowspan=1>小学空调清单 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>序号 
+</td>
+<td colspan=1 rowspan=1>名称 
+</td>
+<td colspan=1 rowspan=1>规格参数 
+</td>
+<td colspan=1 rowspan=1>数量 
+</td>
+<td colspan=1 rowspan=1>单
+位 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>1 
+</td>
+<td colspan=1 rowspan=1>3P
+柜机空调 
+</td>
+<td colspan=1 rowspan=1>匹数:3P 
+空调类型:柜机 
+冷暖类型:冷暖       
+定频/变频:变频 
+内机循环风量:≥1300
+㎡/h 
+额定制冷量:≥7290W    
+额定制热量:≥9660W     
+额定制冷功率:≤2040W    
+额定制热功率:≤2860W 
+全年消耗效率能效比:≥4.19 
+电辅加热:支持 
+室内机噪音:26~46dB 
+室外机噪音:≤56 dB 
+能效等级:二级或以上 
+电源规格:220V/50HZ 
+电辅加热功率:2000W    
+空开:漏电开关保护器 
+</td>
+<td colspan=1 rowspan=1>142 
+</td>
+<td colspan=1 rowspan=1>台 
+</td>
+</tr>
+<tr>
+<td colspan=1 rowspan=1>2 
+</td>
+<td colspan=1 rowspan=1>5P
+柜机空调 
+</td>
+<td colspan=1 rowspan=1>匹数:5P 
+</td>
+<td colspan=1 rowspan=1>10 
+</td>
+<td colspan=1 rowspan=1>台 
+</td>
 </tr>
 </table>
-<div>注:本次招标数量仅为估算量,以实际工程需求供应,招标文件及需求一览</div>
-<div>表中的数量仅作为投标报价时的计价依据,不作为最终结算量。中标人签订供货</div>
-<div>合同时将进一步明确供应品种、规格、数量。本次招标数量与合同中数量可能存</div>
-<div>在差异,均以现场实际交货验收合格数量为准,该数量与合同数量也可能将存在</div>
-<div>差异。中标人不得因此向招标人及合同签订买方提出任何补偿要求。</div>
-<div>3.2投标人中标后,不允许对中标物资进行生产拆包、转包、违法分包。</div>
-<div>3.3若因投资计划、征地拆迁、设计变更等原因,致使投资规模、工程量或</div>
-<div>供货品种、供货时间发生较大规模改变,采购量及采购品种相应调整,投标人应</div>
-<div>予接受,并不得以此作为调价和索赔依据。</div>
-<div>4、交货时间:工地开工至合同工期完工(计划工期48个月、详细交货规</div>
-<div>格、数量和具体供货时间由买方签约时提供,依据工地需求分批组织供应)。</div>
-<div>5、交货地点:中国水利水电第三工程局有限公司基础建筑分局西安铭悦府</div>
-<div>项目。</div>
-<div>6、质量要求:必须符合满足招标文件技术要求及国家或行业规范标准要求。</div>
-<div>,品牌要求:</div>
-<div>品牌</div>
+<div>,9</div>
+<div>6、诚信投标承诺书</div>
+<div>单位名称:</div>
+<div>法定代表人:</div>
+<div>身份证号码:</div>
+<div>手机:固定电话:</div>
+<div>为维护市场公平竞争,营造诚实守信的招投标交易环境,我在此慎重作出如下承诺:</div>
+<div>1、我单位提供的一切材料都是真实、合法、有效的;</div>
+<div>2、我单位不与采购人、其他磋商供应商及采购代理机构串通投标,损害国家利益、社</div>
+<div>会利益和他人的合法权益;</div>
+<div>3、我单位不向采购人、评标委员会成员及相关人员行贿,牟取成交;</div>
+<div>4、我单位不以他人名义投标或者其他弄虚作假的方式参与投标、骗取成交;</div>
+<div>5、我单位不出借资质,不接受任何形式的挂靠,不扰乱招投标市场秩序;</div>
+<div>6、我单位不在投标中哄抬价格或恶意压价;</div>
+<div>7、我单位不在招投标活动中虚假投诉;</div>
+<div>8、我单位在成交后不转包和非法分包;</div>
+<div>9、我单位在成交合同履行中不违背合同实质性条款;</div>
+<div>10、我单位在招投标活动中严格遵守相关法律、法规、规章、规定,诚实守信。</div>
+<div>本单位如有违反承诺内容的行为,自愿接受黄石市公共资源交易监督管理局及相关行政</div>
+<div>监督部门的处罚,自愿放弃磋商保证金要求退还的权利。同意取消“黄石市投标企业会员信</div>
+<div>息库”会员资格,记不良行为记录,并上网公示,并愿意承担因此产生的一切法律责任。</div>
+<div>供应商名称(公章):________________</div>
+<div>法人或委托代理人(签字或盖章):______________________</div>
+<div>日期:_______年_____月_____日</div>
+<div>,34</div>
+<div>承诺书((格式))</div>
+<div>致:采购人/采购代理机构:</div>
+<div>我方承诺具备《政府采购法》第二十二条规定的条件:</div>
+<div>一、具有独立承担民事责任的能力;</div>
+<div>二、具有良好的商业信誉和健全的财务会计制度;</div>
+<div>三、具有履行合同所必需的设备和专业技术能力;</div>
+<div>四、有依法缴纳税收和社会保障资金的良好记录;</div>
+<div>五、参加政府采购活动前三年内,在经营活动中没有重大违法记录;</div>
+<div>六、法律、行政法规规定的其他条件。</div>
+<div>本签字人郑重承诺我司符合上述规定要求,如有欺诈、隐瞒事实违法行</div>
+<div>为,愿接受相关部门的依法处理,并自愿承担一切后果。</div>
+<div>供应商:(公章)</div>
+<div>法定代表人:(签字)</div>
+<div>年月日</div>
+<div>,35</div>
+<div>磋商承诺书:</div>
+<div>1.按照已收到的项目编号为的采购项目竞争性磋商文</div>
+<div>件要求,经我公司认真研究竞争性磋商须知、合同条款、技术规范、资质要</div>
+<div>求和其它有关要求后,我方愿按上述合同条款、技术规范、资质要求进行竞</div>
+<div>争性磋商。我方完全接受本次竞争性磋商文件规定的所有要求,并承诺在成</div>
+<div>交后履行我方的全部义务。我方的最后竞争性磋商报价为总包价,保证不以</div>
+<div>任何理由增加报价。如有缺项、漏项部份,均由我方无条件负责补齐。</div>
+<div>2.我方成交,我方保证在签订采购合同后_______工作日内进行服务。</div>
+<div>3.我方同意所递交的响应文件在“竞争性磋商须知”规定的竞争性磋商有</div>
+<div>效期内有效,在此期间内我方的竞争性磋商如能成交,我方将受此约束。</div>
+<div>4.我方郑重声明:所提供的响应文件内容全部真实有效。</div>
+<div>5.我方接受采购文件所列须知中关于没收磋商保证金的约定。</div>
+<div>6.我方同意提供按照贵方可能另外要求的与其磋商有关的任何数据或资</div>
+<div>料。除非另外达成协议并生效,否则,成交通知书和本响应文件将构成约束</div>
+<div>双方合同的组成部分。</div>
+<div>7.我方完全理解贵方不一定接受最低价的磋商。</div>
+<div>详细地址:</div>
+<div>电话:</div>
+<div>供应商名称(公章):</div>
+<div>年月日</div>
+<div>,36</div>
+<div>延误工期的承诺</div>
+<div>我代表(供应商名称),在此作如下承诺:</div>
+<div>我司将按照磋商文件中规定的天(日历天)以内完成工期,若不能按照</div>
+<div>合同约定的竣工日期导致延误工期的,每延误1-10天,罚款2000元;延误11-20</div>
+<div>天,罚款3000元;延误21-30天,罚款5000元;延误30天以上,罚款6000</div>
+<div>元。</div>
+<div>供应商名称(公章):________________</div>
+<div>法人或委托代理人(签字或盖章):______________________</div>
+<div>日期:_______年_____月_____日</div>
+<div>,37</div>
+<div>安全事故的承诺</div>
+<div>我代表(供应商名称),在此作如下承诺:</div>
+<div>在施工过程中如果出现安全事故全部由我方单位支付。</div>
+<div>供应商名称(公章):________________</div>
+<div>法人或委托代理人(签字或盖章):______________________</div>
+<div>日期:_______年_____月_____日</div>
+<div>,38</div>
+<div>小微企业声明函</div>
+<div>本公司郑重声明,根据《政府采购促进中小企业发展暂行办法》(财库〔2020〕</div>
+<div>46号)的规定,本公司为______(请填写:中型、小型、微型)企业。即,本</div>
+<div>公司同时满足以下条件:</div>
+<div>1.根据《工业和信息化部、国家统计局、国家发展和改革委员会、财政部关</div>
+<div>于印发中小企业划型标准规定的通知》(工信部联企业〔2011〕300号)规定</div>
+<div>的划分标准,本公司为______(请填写:中型、小型、微型)企业。</div>
+<div>2.本公司参加______单位的______项目采购活动提供本企业制造的货物,由</div>
+<div>本企业承担工程、提供服务,或者提供其他______(请填写:中型、小型、微型)</div>
+<div>企业制造的货物。本条所称货物不包括使用大型企业注册商标的货物。</div>
+<div>本公司对上述声明的真实性负责。如有虚假,将依法承担相应责任。</div>
+<div>企业名称(盖章):</div>
+<div>年月日</div>
+<div>(备注:并附截图)</div>
+<div>,39</div>
+<div>残疾人福利性单位声明函</div>
+<div>本单位郑重声明,根据《财政部民政部中国残疾人联合会关于促进残疾人</div>
+<div>就业政府采购政策的通知》(财库〔2017〕141号)的规定,本单位为符合条</div>
+<div>件的残疾人福利性单位,且本单位参加______单位的______项目采购活动提供</div>
+<div>本单位制造的货物(由本单位承担工程/提供服务),或者提供其他残疾人福利</div>
+<div>性单位制造的货物(不包括使用非残疾人福利性单位注册商标的货物)。</div>
+<div>本单位对上述声明的真实性负责。如有虚假,将依法承担相应责任。</div>
+<div>供应商名称:(盖章)</div>
+<div>供应商授权代表:(签字)</div>
+<div>年月日</div>
+<div>备注:享受政府采购支持政策的残疾人福利性单位应当同时满足以下条件:</div>
+<div>(1)安置的残疾人占本单位在职职工人数的比例不低于25%(含25%),并且安置的残疾人人</div>
+<div>数不少于10人(含10人);</div>
+<div>(2)依法与安置的每位残疾人签订了一年以上(含一年)的劳动合同或服务协议;</div>
+<div>(3)为安置的每位残疾人按月足额缴纳了基本养老保险、基本医疗保险、失业保险、工伤保险</div>
+<div>和生育保险等社会保险费;</div>
+<div>(4)通过银行等金融机构向安置的每位残疾人,按月支付了不低于单位所在区县适用的经省级</div>
+<div>人民政府批准的月最低工资标准的工资;</div>
+<div>(5)提供本单位制造的货物、承担的工程或者服务(以下简称产品),或者提供其他残疾人福</div>
+<div>利性单位制造的货物(不包括使用非残疾人福利性单位注册商标的货物)。</div>
+<div>前款所称残疾人是指法定劳动年龄内,持有《中华人民共和国残疾人证》或者《中华人民共和国</div>
+<div>残疾军人证(1至8级)》的自然人,包括具有劳动条件和劳动意愿的精神残疾人。在职职工人</div>
+<div>数是指与残疾人福利性单位建立劳动关系并依法签订劳动合同或者服务协议的雇员人数。</div>
+<div>,40</div>
+<div>节能环保产品证明材料</div>
+<div>(供应商所提供产品若为节能环保产品,则应按本磋商文件第二章提供相关证明文件)</div>
+<div>监狱企业证明文件</div>
+<div>供应商如是监狱企业,提供相关证明文件</div>
+<div>,41</div>
+<div>8、供应商提供的其他文件</div>
+<div>,42</div>
+<div> </div>
+<div></div>
+<div>附件:(本表请提前准备好) </div>
+<div></div>
+<div>___                ___项目开标确认书 </div>
+<div></div>
+<div> </div>
+<div></div>
+<div>___            (代理机构名称): </div>
+<div></div>
+<div>本人对___                ___ 项目的投标、开标和唱标过程无异议。 </div>
+<div></div>
+<div> </div>
+<div></div>
+<div>(附法人授权委托人身份证原件) </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div>___                ___ 【投标人(供应商)名称】 </div>
+<div></div>
+<div>___                ___ (法人受权委托人签名) </div>
+<div></div>
+<div>    年   月    日 </div>
+<div></div>
+<div> </div>
+<div></div>
+<div>自行网络搜索会易通或扫二维码安装会易通 </div>
+<div></div>
+<div>1. 会易通下载方式 : 供应商用手机或电脑下载 “ 会易通 ” 软 件 , 保</div>
+<div></div>
+<div>证电量充足 , 确保开标时的正常使用 。 </div>
+<div></div>
+<div>2. 会易通开标时使用说明 : 因会易通不是注册版 , 投标供应商无法自行测</div>
+<div></div>
+<div>试或登录 , 天马盛鼎项目管理有限公司在投标文件递交截止时间后会邀请投</div>
+<div></div>
+<div>标供应商加入会议  ,将本次开标会的会议时间  、 会议 ID  及密码和开标过</div>
+<div></div>
+<div>程中投标供应商须准备的相关材料 , 以邮件回传给在规定时间内递交了投标</div>
+<div></div>
+<div>文件的投标供应商的投标邮箱 。 </div>
+<div></div>
+<div>https://cloudmeeting.189.cn /meetingnow.html  </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div> </div>
+<div></div>
+<div>43 </div>
+<div></div>
 </body>