Thank you Xander,
I am still did not get it,  now my scenario is changed I am only have one section now, and no spacing
    x_start = 2523853.5  
    y_start = 7124354.1  
    rect_width = 10.0
    rect_height = 5.0
    num_blocks_h = 7
    num_blocks_v = 7
    num_rect_in_block_h = 4
    num_rect_in_block_v = 8
    spacing_h = 0.0
    spacing_v = 0.0
 and here is the complete code, but I have some logic errors, see the Red in the Results (Repeating row no)
def main():
    import arcpy
    import os
    
    fc_out = r'C:\HH\ce\cemeterypy.gdb\result05'
    fld_lbl = r'RectangleID'
    sr = arcpy.SpatialReference(2276)  
    x_start = 2523853.5  
    y_start = 7124354.1  
    rect_width = 10.0
    rect_height = 5.0
    num_blocks_h = 7
    num_blocks_v = 7
    num_rect_in_block_h = 4
    num_rect_in_block_v = 8
    spacing_h = 0.0
    spacing_v = 0.0
    
    arcpy.env.overwriteOutput = True
    fc_ws, fc_name = os.path.split(fc_out)
    arcpy.CreateFeatureclass_management(fc_ws, fc_name, "POLYGON", None, None, None, sr)
    
    arcpy.AddField_management(fc_out, fld_lbl, "TEXT", None, None, 10)
    
    flds = ("SHAPE@", fld_lbl)
    cnt = 0
    with arcpy.da.InsertCursor(fc_out, flds) as curs:
        
        for block_h in range(num_blocks_h):
            for block_v in range(num_blocks_v):
                
                for rect_h in range(num_rect_in_block_h):
                    for rect_v in range(num_rect_in_block_v):
                        x_min = x_start + block_h * spacing_h + block_h * num_rect_in_block_h * rect_width + rect_h * rect_width
                        y_min = y_start + block_v * spacing_v + block_v * num_rect_in_block_v * rect_height + rect_v * rect_height
                        x_max = x_min + rect_width
                        y_max = y_min + rect_height
                        rectangle = CreateRactangle(x_min, y_min, x_max, y_max, sr)
                        label = GetLabel(block_h, block_v, rect_h, rect_v)
                        cnt += 1
                        if cnt % 50 == 0:
                            print("Processing rectangle: {}".format(cnt))
                        curs.insertRow((rectangle, label, ))
    print("Finished processing {} rectangles".format(cnt))
def CreateRactangle(x_min, y_min, x_max, y_max, sr):
    coords = [[x_min, y_min], [x_min, y_max], [x_max, y_max],
              [x_max, y_min], [x_min, y_min]]
    return arcpy.Polygon(arcpy.Array([arcpy.Point(*coord) for coord in coords]), sr)
def GetLabel(block_h, block_v, rect_h, rect_v):
    
     
    
    
    
     
    even = rect_h % 2 == 0
     
    if rect_v < 4:
        
        if even:
              
               
            part3 = rect_v + 1
        else:
              
            part3 = rect_v + 5
          
          
          
          
        quad_row = 1 + 14 * block_v
          
        if rect_h <2:
              
            quad_col = block_h * 2
        else:
            
            quad_col = 1 + block_h * 2
    else:
         
        if even:
            part3 = rect_v - 3
        else:
            part3 = rect_v + 1
        quad_row = 15 + 14 * block_v
        if rect_h <2:
            quad_col = block_h * 2
        else:
            
            quad_col = 1 + block_h * 2
    
    part2 = quad_row +  quad_col
    if block_h < 7:
         
        part1 = "A"
    else:
         
        part1 = "B"
        part2 = part2 - 7
    
    return "{}-{}-{}".format(part1, part2, part3)
if __name__ == '__main__':
    main()
Result

Thank  you