Example #1
0
    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)
Example #4
0
    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()
Example #5
0
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
Example #6
0
    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)