def test_no_bottom_level(self): shelf = Shelf(1, 1800, 600, 300) shelf.levels.append(Level(shelf, 0, 360, 300)) shelf.levels.append(Level(shelf, 1, 360, 300)) shelf.levels.append(Level(shelf, 2, 360, 300)) shelf.levels.append(Level(shelf, 3, 360, 300)) shelf.levels.append(Level(shelf, 4, 360, 300)) levelid_to_displaygoods_list = { 1: [DisplayGoods(TestGoods('c2_1', 'c3_3', '18', 150, 40, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '17', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '16', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '15', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '14', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '13', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '12', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '11', 150, 80, 10, 0, 0))], 2: [DisplayGoods(TestGoods('c2_1', 'c3_3', '21', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '22', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '23', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '24', 100, 80, 9, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '25', 100, 80, 8, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '26', 100, 80, 7, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '27', 100, 80, 6, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '28', 100, 40, 5, 0, 0))], } shelf.levels[1].display_goods_list = levelid_to_displaygoods_list[1] shelf.levels[2].display_goods_list = levelid_to_displaygoods_list[2] choose_goods_list = [] area_manager = AreaManager(shelf, levelid_to_displaygoods_list, choose_goods_list) area_manager._first_born_areas() for area in area_manager.area_list: print(area) area_manager._second_combine_areas() for area in area_manager.area_list: print(area) area_manager._prepare_area_base_data() area_manager._prepare_area_calculate_data() area_manager._print_choose_goods_info() area_manager._arrange_areas() best_candidate_shelf = area_manager.arrange_goods() level_to_display_goods_name_str = get_level_to_display_goods_name(best_candidate_shelf) self.assertEqual(level_to_display_goods_name_str[0], 'null,') self.assertEqual(level_to_display_goods_name_str[1], '11,12,13,14,15,16,17,18,') self.assertEqual(level_to_display_goods_name_str[2], '21,22,23,24,25,26,27,28,') print(shelf) print(best_candidate_shelf)
def test_special_level(self): shelf = Shelf(1, 1800, 600, 300) shelf.levels.append(Level(shelf, 0, 360, 300)) shelf.levels.append(Level(shelf, 1, 360, 300)) shelf.levels.append(Level(shelf, 2, 360, 300)) levelid_to_displaygoods_list = { 0: [ DisplayGoods(TestGoods('c2_1', 'c3_1', '1', 200, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_2', '2', 200, 80, 9, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '3', 200, 40, 8, 0, 0)) ], 1: [ DisplayGoods(TestGoods('c2_4', 'c3_6', '6', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_3', 'c3_5', '5', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_4', '4', 150, 80, 10, 0, 0)) ], 2: [ DisplayGoods(TestGoods('c2_4', 'c3_7', '7', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_5', 'c3_8', '8', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_6', 'c3_9', '9', 100, 80, 10, 0, 0)) ], } shelf.levels[0].display_goods_list = levelid_to_displaygoods_list[0] shelf.levels[1].display_goods_list = levelid_to_displaygoods_list[1] shelf.levels[2].display_goods_list = levelid_to_displaygoods_list[2] choose_goods_list = [ TestGoods('c2_1', 'c3_1', '101', 100, 80, 20, 1, 0), # 上架 ] area_manager = AreaManager(shelf, levelid_to_displaygoods_list, choose_goods_list) area_manager._first_born_areas() self.assertEqual(len(area_manager.area_list), 9) for area in area_manager.area_list: print(area) area_manager._second_combine_areas() self.assertEqual(len(area_manager.area_list), 6) # print('\n') for area in area_manager.area_list: print(area)
def test_bottom_level(self): shelf = Shelf(1, 1800, 600, 300) shelf.levels.append(Level(shelf, 0, 360, 300)) shelf.levels.append(Level(shelf, 1, 360, 300)) shelf.levels.append(Level(shelf, 2, 360, 300)) shelf.levels.append(Level(shelf, 3, 360, 300)) shelf.levels.append(Level(shelf, 4, 360, 300)) levelid_to_displaygoods_list = { 0: [ DisplayGoods(TestGoods('c2_1', 'c3_1', '1', 200, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_1', '2', 200, 80, 9, 0, 0), face_num=2), DisplayGoods(TestGoods('c2_1', 'c3_1', '3', 200, 40, 8, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_1', '4', 200, 40, 7, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_2', '5', 200, 20, 6, 0, 0), face_num=2), DisplayGoods(TestGoods('c2_1', 'c3_2', '6', 200, 40, 5, 0, 0), face_num=3), DisplayGoods(TestGoods('c2_1', 'c3_3', '7', 150, 40, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '8', 150, 40, 10, 0, 0)) ], 1: [ DisplayGoods(TestGoods('c2_1', 'c3_3', '18', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '17', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '16', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '15', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '14', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '13', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '12', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '11', 150, 40, 10, 0, 0)) ], 2: [ DisplayGoods(TestGoods('c2_1', 'c3_3', '21', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '22', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '23', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '24', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '25', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '26', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '27', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '28', 100, 40, 10, 0, 0)) ], 3: [ DisplayGoods(TestGoods('c2_2', 'c3_6', '38', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '37', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '36', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '35', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '34', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '33', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '32', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '31', 100, 40, 10, 0, 0)) ], 4: [ DisplayGoods(TestGoods('c2_2', 'c3_6', '41', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '42', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '43', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '44', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '45', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '46', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '47', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_8', '48', 100, 40, 10, 0, 0)) ], } shelf.levels[0].display_goods_list = levelid_to_displaygoods_list[0] shelf.levels[1].display_goods_list = levelid_to_displaygoods_list[1] shelf.levels[2].display_goods_list = levelid_to_displaygoods_list[2] shelf.levels[3].display_goods_list = levelid_to_displaygoods_list[3] shelf.levels[4].display_goods_list = levelid_to_displaygoods_list[4] choose_goods_list = [ TestGoods('c2_1', 'c3_1', '101', 100, 80, 20, 1, 0), # 上架 TestGoods('c2_1', 'c3_1', '102', 100, 80, 20, 1, 0), # 上架 TestGoods('c2_1', 'c3_1', '103', 100, 160, 20, 1, 0), # 上架 TestGoods('c2_1', 'c3_1', '4', 100, 40, 7, 2, 0), # 下架 TestGoods('c2_1', 'c3_2', '5', 100, 40, 6, 2, 0), # 下架 ] area_manager = AreaManager(shelf, levelid_to_displaygoods_list, choose_goods_list) area_manager._first_born_areas() self.assertEqual(len(area_manager.area_list), 8) self.assertEqual(area_manager.area_list[0].start_level_id, 0) self.assertEqual(area_manager.area_list[0].start_width, 0) self.assertEqual(area_manager.area_list[0].end_level_id, 0) self.assertEqual(area_manager.area_list[0].end_width, 320) self.assertEqual(len(area_manager.area_list[0].child_area_list), 1) self.assertEqual(area_manager.area_list[0].child_area_list[0].level_id, 0) self.assertEqual( len(area_manager.area_list[0].child_area_list[0].display_goods_list ), 4) self.assertEqual(area_manager.area_list[1].start_level_id, 0) self.assertEqual(area_manager.area_list[1].start_width, 320) self.assertEqual(area_manager.area_list[1].end_level_id, 0) self.assertEqual(area_manager.area_list[1].end_width, 480) self.assertEqual(len(area_manager.area_list[1].child_area_list), 1) self.assertEqual(area_manager.area_list[1].child_area_list[0].level_id, 0) self.assertEqual( len(area_manager.area_list[1].child_area_list[0].display_goods_list ), 2) self.assertEqual(area_manager.area_list[2].start_level_id, 0) self.assertEqual(area_manager.area_list[2].start_width, 480) self.assertEqual(area_manager.area_list[2].end_level_id, 2) self.assertEqual(area_manager.area_list[2].end_width, 160) self.assertEqual(len(area_manager.area_list[2].child_area_list), 3) self.assertEqual(area_manager.area_list[2].child_area_list[0].level_id, 0) self.assertEqual( len(area_manager.area_list[2].child_area_list[0].display_goods_list ), 2) self.assertEqual(area_manager.area_list[2].child_area_list[1].level_id, 1) self.assertEqual( len(area_manager.area_list[2].child_area_list[1].display_goods_list ), 8) self.assertEqual(area_manager.area_list[2].child_area_list[2].level_id, 2) self.assertEqual( len(area_manager.area_list[2].child_area_list[2].display_goods_list ), 2) self.assertEqual(area_manager.area_list[3].start_level_id, 2) self.assertEqual(area_manager.area_list[3].start_width, 160) self.assertEqual(area_manager.area_list[3].end_level_id, 2) self.assertEqual(area_manager.area_list[3].end_width, 480) self.assertEqual(len(area_manager.area_list[3].child_area_list), 1) self.assertEqual(area_manager.area_list[3].child_area_list[0].level_id, 2) self.assertEqual( len(area_manager.area_list[3].child_area_list[0].display_goods_list ), 4) self.assertEqual(area_manager.area_list[4].start_level_id, 2) self.assertEqual(area_manager.area_list[4].start_width, 480) self.assertEqual(area_manager.area_list[4].end_level_id, 3) self.assertEqual(area_manager.area_list[4].end_width, 120) self.assertEqual(len(area_manager.area_list[4].child_area_list), 2) self.assertEqual(area_manager.area_list[4].child_area_list[0].level_id, 2) self.assertEqual( len(area_manager.area_list[4].child_area_list[0].display_goods_list ), 2) self.assertEqual(area_manager.area_list[4].child_area_list[1].level_id, 3) self.assertEqual( len(area_manager.area_list[4].child_area_list[1].display_goods_list ), 2) self.assertEqual(area_manager.area_list[5].start_level_id, 3) self.assertEqual(area_manager.area_list[5].start_width, 120) self.assertEqual(area_manager.area_list[5].end_level_id, 4) self.assertEqual(area_manager.area_list[5].end_width, 160) self.assertEqual(len(area_manager.area_list[5].child_area_list), 2) self.assertEqual(area_manager.area_list[5].child_area_list[0].level_id, 3) self.assertEqual( len(area_manager.area_list[5].child_area_list[0].display_goods_list ), 6) self.assertEqual(area_manager.area_list[5].child_area_list[1].level_id, 4) self.assertEqual( len(area_manager.area_list[5].child_area_list[1].display_goods_list ), 2) self.assertEqual(area_manager.area_list[6].start_level_id, 4) self.assertEqual(area_manager.area_list[6].start_width, 160) self.assertEqual(area_manager.area_list[6].end_level_id, 4) self.assertEqual(area_manager.area_list[6].end_width, 560) self.assertEqual(len(area_manager.area_list[6].child_area_list), 1) self.assertEqual(area_manager.area_list[6].child_area_list[0].level_id, 4) self.assertEqual( len(area_manager.area_list[6].child_area_list[0].display_goods_list ), 5) self.assertEqual(area_manager.area_list[7].start_level_id, 4) self.assertEqual(area_manager.area_list[7].start_width, 560) self.assertEqual(area_manager.area_list[7].end_level_id, 4) self.assertEqual(area_manager.area_list[7].end_width, 600) self.assertEqual(len(area_manager.area_list[7].child_area_list), 1) self.assertEqual(area_manager.area_list[7].child_area_list[0].level_id, 4) self.assertEqual( len(area_manager.area_list[7].child_area_list[0].display_goods_list ), 1) for area in area_manager.area_list: print(area) area_manager._second_combine_areas() self.assertEqual(len(area_manager.area_list), 4) self.assertEqual(area_manager.area_list[0].start_level_id, 0) self.assertEqual(area_manager.area_list[0].start_width, 0) self.assertEqual(area_manager.area_list[0].end_level_id, 0) self.assertEqual(area_manager.area_list[0].end_width, 480) self.assertEqual(len(area_manager.area_list[0].child_area_list), 2) self.assertEqual( len(area_manager.area_list[0].child_area_list[0].display_goods_list ), 4) self.assertEqual( len(area_manager.area_list[0].child_area_list[1].display_goods_list ), 2) self.assertEqual(area_manager.area_list[1].start_level_id, 0) self.assertEqual(area_manager.area_list[1].start_width, 480) self.assertEqual(area_manager.area_list[1].end_level_id, 2) self.assertEqual(area_manager.area_list[1].end_width, 160) self.assertEqual(len(area_manager.area_list[1].child_area_list), 3) self.assertEqual( len(area_manager.area_list[1].child_area_list[0].display_goods_list ), 2) self.assertEqual( len(area_manager.area_list[1].child_area_list[1].display_goods_list ), 8) self.assertEqual( len(area_manager.area_list[1].child_area_list[2].display_goods_list ), 2) self.assertEqual(area_manager.area_list[2].start_level_id, 2) self.assertEqual(area_manager.area_list[2].start_width, 160) self.assertEqual(area_manager.area_list[2].end_level_id, 3) self.assertEqual(area_manager.area_list[2].end_width, 120) self.assertEqual(len(area_manager.area_list[2].child_area_list), 3) self.assertEqual( len(area_manager.area_list[2].child_area_list[0].display_goods_list ), 4) self.assertEqual( len(area_manager.area_list[2].child_area_list[1].display_goods_list ), 2) self.assertEqual( len(area_manager.area_list[2].child_area_list[2].display_goods_list ), 2) self.assertEqual(area_manager.area_list[3].start_level_id, 3) self.assertEqual(area_manager.area_list[3].start_width, 120) self.assertEqual(area_manager.area_list[3].end_level_id, 4) self.assertEqual(area_manager.area_list[3].end_width, 600) self.assertEqual(len(area_manager.area_list[3].child_area_list), 4) self.assertEqual( len(area_manager.area_list[3].child_area_list[0].display_goods_list ), 6) self.assertEqual( len(area_manager.area_list[3].child_area_list[1].display_goods_list ), 2) self.assertEqual( len(area_manager.area_list[3].child_area_list[2].display_goods_list ), 5) self.assertEqual( len(area_manager.area_list[3].child_area_list[3].display_goods_list ), 1) # print('\n') for area in area_manager.area_list: print(area)
def test_bottom_middle_level_same_psd_amount(self): shelf = Shelf(1, 1800, 600, 300) shelf.levels.append(Level(shelf, 0, 360, 300)) shelf.levels.append(Level(shelf, 1, 360, 300)) shelf.levels.append(Level(shelf, 2, 360, 300)) shelf.levels.append(Level(shelf, 3, 360, 300)) shelf.levels.append(Level(shelf, 4, 360, 300)) levelid_to_displaygoods_list = { 0: [ DisplayGoods(TestGoods('c2_1', 'c3_1', '1', 200, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_1', '2', 200, 80, 9, 0, 0), face_num=2), DisplayGoods(TestGoods('c2_1', 'c3_1', '3', 200, 40, 8, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_1', '4', 200, 40, 7, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_2', '5', 200, 20, 6, 0, 0), face_num=2), DisplayGoods(TestGoods('c2_1', 'c3_2', '6', 200, 40, 5, 0, 0), face_num=3), DisplayGoods(TestGoods('c2_1', 'c3_3', '7', 150, 40, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '8', 150, 40, 10, 0, 0)) ], 1: [ DisplayGoods(TestGoods('c2_1', 'c3_3', '18', 150, 40, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '17', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '16', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '15', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '14', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '13', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '12', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '11', 150, 80, 10, 0, 0)) ], 2: [ DisplayGoods(TestGoods('c2_1', 'c3_3', '21', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_3', '22', 150, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '23', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '24', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '25', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_4', '26', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '27', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '28', 100, 40, 10, 0, 0)) ], 3: [ DisplayGoods(TestGoods('c2_2', 'c3_6', '38', 100, 40, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '37', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '36', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '35', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '34', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '33', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '32', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_1', 'c3_5', '31', 100, 80, 10, 0, 0)) ], 4: [ DisplayGoods(TestGoods('c2_2', 'c3_6', '41', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_6', '42', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '43', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '44', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '45', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '46', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_7', '47', 100, 80, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_8', '48', 100, 40, 10, 0, 0)) ], } shelf.levels[0].display_goods_list = levelid_to_displaygoods_list[0] shelf.levels[1].display_goods_list = levelid_to_displaygoods_list[1] shelf.levels[2].display_goods_list = levelid_to_displaygoods_list[2] shelf.levels[3].display_goods_list = levelid_to_displaygoods_list[3] shelf.levels[4].display_goods_list = levelid_to_displaygoods_list[4] choose_goods_list = [ TestGoods('c2_1', 'c3_1', '101', 100, 80, 20, 1, 0), # 上架 TestGoods('c2_1', 'c3_4', '102', 100, 80, 20, 1, 0), # 上架 TestGoods('c2_1', 'c3_5', '103', 100, 160, 20, 1, 0), # 上架 TestGoods('c2_1', 'c3_1', '4', 100, 40, 7, 2, 0), # 下架 TestGoods('c2_1', 'c3_4', '25', 100, 40, 8, 2, 0), # 下架 ] area_manager = AreaManager(shelf, levelid_to_displaygoods_list, choose_goods_list) area_manager._first_born_areas() area_manager._second_combine_areas() area_manager._prepare_area_base_data() self.assertEqual(len(area_manager.area_list[0].choose_goods_list), 2) self.assertEqual(len(area_manager.area_list[1].choose_goods_list), 0) self.assertEqual(len(area_manager.area_list[2].choose_goods_list), 3) self.assertEqual(len(area_manager.area_list[3].choose_goods_list), 0) self.assertEqual(len(area_manager.area_list[0].up_choose_goods_list), 1) self.assertEqual( len(area_manager.area_list[0].down_display_goods_list), 1) self.assertEqual(len(area_manager.area_list[2].up_choose_goods_list), 2) self.assertEqual( len(area_manager.area_list[2].down_display_goods_list), 1) self.assertEqual(len(area_manager.down_display_goods_list), 2) self.assertEqual( len(area_manager.area_list[0].child_area_list[0]. down_display_goods_list), 1) self.assertEqual( len(area_manager.area_list[0].child_area_list[1]. down_display_goods_list), 0) self.assertEqual(area_manager.area_list[0].levelid_to_goods_width[0], 480) self.assertEqual(area_manager.area_list[0].levelid_to_remain_width[0], int(480 / 600 * 40)) self.assertEqual(area_manager.area_list[1].levelid_to_goods_width[0], 80) self.assertEqual(area_manager.area_list[1].levelid_to_remain_width[0], int(80 / 600 * 40)) area_manager._prepare_area_calculate_data() self.assertEqual( len(area_manager.area_list[0].display_goods_to_reduce_face_num), 0) self.assertEqual( len(area_manager.area_list[0].second_down_display_goods_list), 0) self.assertEqual( len(area_manager.area_list[2].display_goods_to_reduce_face_num), 0) self.assertEqual( len(area_manager.area_list[2].second_down_display_goods_list), 2) self.assertIn(levelid_to_displaygoods_list[2][2], area_manager.area_list[2].second_down_display_goods_list) self.assertIn(levelid_to_displaygoods_list[2][3], area_manager.area_list[2].second_down_display_goods_list) self.assertEqual(len(area_manager.down_display_goods_list), 4) area_manager._arrange_areas()
def init_display_data(uc_shopid, tz_id, old_display_id, base_data): """ 初始化陈列相关的台账、货架、指定分类数据,最终生成初始化好的taizhang_display对象 :param uc_shopid: ucentor系统shopid :param tz_id: :param old_display_id: :param base_data: :return: taizhang_display对象 """ taizhang_display = TaizhangDisplay(tz_id) cursor = connections['ucenter'].cursor() # 获取fx系统的shopid,台账系统的商家mch_id cursor.execute("select mch_shop_code,mch_id from uc_shop where id = {}".format(uc_shopid)) (shopid, mch_id) = cursor.fetchone() # 获取台账信息 try: cursor.execute( "select t.id, t.shelf_id, t.shelf_count from sf_taizhang t where t.id = {}".format(tz_id)) (taizhang_id, shelf_id, count) = cursor.fetchone() except: msg = '获取台账失败:{},{}'.format(uc_shopid, tz_id) print(msg) cursor.close() dingtalk.send_message(msg, 2) raise ValueError(msg) # 获取陈列信息 cursor.execute("select display_goods_info, display_shelf_info from sf_taizhang_display where id = {} and taizhang_id = {}".format(old_display_id, tz_id)) (display_goods_info, display_shelf_info) = cursor.fetchone() cursor.execute( "select t.shelf_no,s.length,s.height,s.depth from sf_shelf s, sf_shelf_type t where s.shelf_type_id=t.id and s.id={}".format( shelf_id)) (shelf_no, length, height, depth) = cursor.fetchone() display_shelf_info = json.loads(display_shelf_info) display_goods_info = json.loads(display_goods_info) cursor.close() # TODO 需要支持多个货架 shelfs = display_shelf_info['shelf'] shelf_dict = {} goods_array_dict = {} for shelf in shelfs: shelf_dict[shelf['shelfId']] = shelf['layer'] for goods_info in display_goods_info: goods_array_dict[goods_info['shelfId']] = goods_info['layerArray'] category3_list = [] for shelfId in shelf_dict.keys(): shelf_array = shelf_dict[shelfId] goods_array = goods_array_dict[shelfId] shelf = Shelf(shelf_id, height, length, depth) for i in range(len(shelf_array)): level = shelf_array[i] goods_level_array = goods_array[i] # floor_type 1:普通陈列 2:挂层 level = Level(shelf, i, round(float(level['height'])), round(float(level['depth']))) shelf.add_level(level) goods_data_to_left_top = {} goods_level_array.sort(key=lambda x:x['left']) for goods_info in goods_level_array: goods_data = find_goods(goods_info['mch_goods_code'], base_data.goods_data_list) if goods_data is None: msg = '选品表中有陈列商品不存在:{}'.format(goods_info['mch_goods_code']) print(msg) dingtalk.send_message(msg, 2) raise ValueError('选品表中有陈列商品不存在') # FIXME 修改陈列方式和长宽深 if goods_info['layout'] != 1: goods_data.width = goods_info['p_width'] goods_data.height = goods_info['p_height'] goods_data.depth = goods_info['p_depth'] goods_data.layout = goods_info['layout'] if goods_data in goods_data_to_left_top: goods_data_to_left_top[goods_data].append((goods_info['left'], goods_info['top'])) else: goods_data_to_left_top[goods_data] = [(goods_info['left'], goods_info['top'])] for goods_data in goods_data_to_left_top.keys(): left_list = [] top_list = [] for left_top in goods_data_to_left_top[goods_data]: left = int(left_top[0]) top = int(left_top[1]) if left not in left_list: left_list.append(left) if top not in top_list: # 考虑摆放误差 min_diff = goods_data.height for one_top in top_list: if abs(one_top-top) < min_diff: min_diff = abs(one_top-top) if min_diff > int(goods_data.height/2): top_list.append(top) display_goods = DisplayGoods(goods_data,face_num=len(left_list),superimpose_num=len(top_list)) level.add_display_goods(display_goods) if goods_data.category3 not in category3_list: category3_list.append(goods_data.category3) # FIXME 目前只支持一个货架 choose_goods_list = filter_goods_data(category3_list, base_data.goods_data_list) taizhang_display.init_data(shelf, category3_list, choose_goods_list) return taizhang_display
def test_no_bottom_level(self): shelf = Shelf(1, 510, 340, 300) shelf.levels.append(Level(shelf, 0, 170, 300)) shelf.levels.append(Level(shelf, 1, 170, 300)) shelf.levels.append(Level(shelf, 2, 170, 300)) levelid_to_displaygoods_list = { 0: [ DisplayGoods(TestGoods('c2_1', 'c3_1', '1', 120, 58, 10, 0, 0), face_num=2), DisplayGoods(TestGoods('c2_1', 'c3_1', '1', 120, 58, 10, 0, 0), face_num=2), DisplayGoods(TestGoods('c2_1', 'c3_2', '2', 120, 52, 10, 0, 0)) ], 1: [ DisplayGoods(TestGoods('c2_3', 'c3_4', '14', 120, 68, 10, 0, 0)), DisplayGoods(TestGoods('c2_3', 'c3_4', '13', 120, 68, 10, 0, 0)), DisplayGoods(TestGoods('c2_3', 'c3_4', '12', 120, 68, 10, 0, 0)), DisplayGoods(TestGoods('c2_2', 'c3_3', '11', 120, 62, 10, 0, 0)) ], 2: [ DisplayGoods(TestGoods('c2_3', 'c3_5', '21', 120, 70, 10, 0, 0)), DisplayGoods(TestGoods('c2_3', 'c3_5', '22', 120, 70, 10, 0, 0)), DisplayGoods(TestGoods('c2_4', 'c3_6', '23', 120, 68, 10, 0, 0)), DisplayGoods(TestGoods('c2_4', 'c3_6', '24', 120, 68, 10, 0, 0)) ], } shelf.levels[0].display_goods_list = levelid_to_displaygoods_list[0] shelf.levels[1].display_goods_list = levelid_to_displaygoods_list[1] shelf.levels[2].display_goods_list = levelid_to_displaygoods_list[2] choose_goods_list = [ TestGoods('c2_1', 'c3_1', '101', 100, 50, 20, 1, 0), # 上架 TestGoods('c2_3', 'c3_4', '102', 100, 68, 20, 1, 0), # 上架 ] area_manager = AreaManager(shelf, levelid_to_displaygoods_list, choose_goods_list) area_manager._first_born_areas() area_manager._second_combine_areas() area_manager._prepare_area_base_data() area_manager._prepare_area_calculate_data() area_manager._arrange_areas() area_manager._print_choose_goods_info() best_candidate_shelf = area_manager.arrange_goods() level_to_display_goods_name_str = get_level_to_display_goods_name( best_candidate_shelf) self.assertIn(level_to_display_goods_name_str[0], ['101,1,1,1,1,2,null,', '1,1,1,1,101,2,null,']) self.assertEqual(level_to_display_goods_name_str[1], '11,102,12,13,14,') self.assertEqual(level_to_display_goods_name_str[2], '21,22,23,24,') print(shelf) print(best_candidate_shelf)