|
@@ -0,0 +1,136 @@
|
|
|
+import functools
|
|
|
+import sys
|
|
|
+
|
|
|
+
|
|
|
+def floor_sort_cmp(x, y):
|
|
|
+ positive = 1
|
|
|
+ negative = -1
|
|
|
+ x_name = x.get('name')[0:len(x.get('name'))-5]
|
|
|
+ y_name = y.get('name')[0:len(y.get('name'))-5]
|
|
|
+
|
|
|
+ x_m_num = 1
|
|
|
+
|
|
|
+ y_m_num = 1
|
|
|
+
|
|
|
+ x_floor_num = 1
|
|
|
+
|
|
|
+ y_floor_num = 1
|
|
|
+
|
|
|
+ if x_name.startswith('RFM'):
|
|
|
+ if y_name.startswith('RFM'):
|
|
|
+ if len(x_name) > 3:
|
|
|
+ x_m_num = int(x_name[3:])
|
|
|
+ if len(y_name) > 3:
|
|
|
+ y_m_num = int(y_name[3:])
|
|
|
+ return x_m_num - y_m_num
|
|
|
+ elif y_name.startswith('RF'):
|
|
|
+ return negative
|
|
|
+ else:
|
|
|
+ return positive
|
|
|
+ if x_name.startswith('RF'):
|
|
|
+ return positive
|
|
|
+ if x_name.startswith('F'):
|
|
|
+ if y_name.startswith('RF'):
|
|
|
+ return negative
|
|
|
+ elif y_name.startswith('F'):
|
|
|
+ if 'M' in x_name:
|
|
|
+ x_index = x_name.index('M')
|
|
|
+ x_floor_num = int(x_name[1 : x_index])
|
|
|
+ if not x_name.endswith('M'):
|
|
|
+ x_m_num = int(x_name[x_index + 1:])
|
|
|
+ else:
|
|
|
+ x_floor_num = int(x_name[1:])
|
|
|
+ if 'M' in y_name:
|
|
|
+ y_index = y_name.index('M')
|
|
|
+ y_floor_num = int(y_name[1:y_index])
|
|
|
+ if not y_name.endswith('M'):
|
|
|
+ y_m_num = int(y_name[y_index + 1:])
|
|
|
+ else:
|
|
|
+ y_floor_num = int(y_name[1:])
|
|
|
+ if x_floor_num == y_floor_num:
|
|
|
+ return x_m_num - y_m_num
|
|
|
+ else:
|
|
|
+ return x_floor_num - y_floor_num
|
|
|
+ else:
|
|
|
+ return positive
|
|
|
+ if x_name.startswith('B'):
|
|
|
+ if y_name.startswith('B'):
|
|
|
+ if 'M' in x_name:
|
|
|
+ x_index = x_name.index('M')
|
|
|
+ x_floor_num = int(x_name[1 : x_index])
|
|
|
+ if not x_name.endswith('M'):
|
|
|
+ x_m_num = int(x_name[x_index + 1:])
|
|
|
+ else:
|
|
|
+ x_floor_num = int(x_name[1:])
|
|
|
+ if 'M' in y_name:
|
|
|
+ y_index = y_name.index('M')
|
|
|
+ y_floor_num = int(y_name[1:y_index])
|
|
|
+ if not y_name.endswith('M'):
|
|
|
+ y_m_num = int(y_name[y_index + 1:])
|
|
|
+ else:
|
|
|
+ y_floor_num = int(y_name[1:])
|
|
|
+ if x_floor_num == y_floor_num:
|
|
|
+ return x_m_num - y_m_num
|
|
|
+ else:
|
|
|
+ return y_floor_num - x_floor_num
|
|
|
+ else:
|
|
|
+ return negative
|
|
|
+ return 1
|
|
|
+
|
|
|
+
|
|
|
+def check_level_reasonable(model_list, level_data):
|
|
|
+ levels = []
|
|
|
+ for model_id, level_rows in level_data.items():
|
|
|
+ if len(level_rows) == 1:
|
|
|
+ levels.append(level_rows[0])
|
|
|
+
|
|
|
+
|
|
|
+ sorted_arr = sorted(levels, key=functools.cmp_to_key(floor_sort_cmp))
|
|
|
+
|
|
|
+ last_height = -999999999
|
|
|
+ last_model_id = ''
|
|
|
+ error = set()
|
|
|
+ group = 0
|
|
|
+ for row in sorted_arr:
|
|
|
+ current_height = row.get('elevation')
|
|
|
+ current_model_id = row.get('model_id')
|
|
|
+ if current_height > last_height:
|
|
|
+ last_height = current_height
|
|
|
+ last_model_id = current_model_id
|
|
|
+ continue
|
|
|
+ else:
|
|
|
+
|
|
|
+ group += 1
|
|
|
+ error.add(last_model_id)
|
|
|
+ error.add(current_model_id)
|
|
|
+ last_height = -999999999
|
|
|
+ last_model_id = ''
|
|
|
+ continue
|
|
|
+
|
|
|
+ for floor_row in model_list:
|
|
|
+ model_id = floor_row.get('fid')
|
|
|
+ if model_id in error:
|
|
|
+ floor_row['error'] = '标高冲突'
|
|
|
+ if len(error) == 0:
|
|
|
+ return True
|
|
|
+ return False
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|