Вывод объектов из базы данных в произвольном порядке и без воспроизведения - PullRequest
0 голосов
/ 08 июня 2019

Необходимо реализовать веб-приложение с голосованием с использованием весны.Кандидаты загружаются в базу данных через специальную форму.Когда вы начинаете голосование, отображается пара кандидатов и так далее, пока все участники не закончат.Они не должны повторяться и должны появляться в произвольном порядке для каждого пользователя.В конце вверху отображаются результаты голосования всех пользователей.На данный момент кандидаты повторяются, и вы не можете загрузить менее или более 10 участников, я не могу решить проблему в течение нескольких дней, я решил связаться здесь.

Я отображаю кандидатов на 5 разныхстраницы.Нужно вывести по одному (одним способом) и тогда проблемы с повторением должны исчезнуть, но я не знаю, как это сделать.

Голосование контроллера

@Controller
@RequestMapping("/votePage")
public class VoteController {

@Autowired
CatRepo catRepo;

@Autowired
ListService service;

@RequestMapping("/vote1")
public String votePageOne(Model model) {
    model.addAttribute("cat1", service.listAll().get(0));
    model.addAttribute("cat2", service.listAll().get(1));
    return "vote1";
}

@RequestMapping("/voteFor1")
public String voteForOne(@RequestParam Long id) {
    Cat cat = catRepo.findById((long) id);
    cat.setCount(cat.getCount() + 1);
    catRepo.save(cat);
    return "redirect:/votePage/vote2";
}

@RequestMapping("/vote2")
public String votePageTwo(Model model) {
    model.addAttribute("cat3", service.listAll().get(2));
    model.addAttribute("cat4", service.listAll().get(3));
    return "vote2";
}

@RequestMapping("/voteFor2")
public String voteForTwo(@RequestParam Long id) {
    Cat cat = catRepo.findById((long) id);
    cat.setCount(cat.getCount() + 1);
    catRepo.save(cat);
    return "redirect:/votePage/vote3";
}

@RequestMapping("/vote3")
public String votePageThree(Model model) {
    model.addAttribute("cat5", service.listAll().get(4));
    model.addAttribute("cat6", service.listAll().get(5));
    return "vote3";
}

@RequestMapping("/voteFor3")
public String voteForThree(@RequestParam Long id) {
    Cat cat = catRepo.findById((long) id);
    cat.setCount(cat.getCount() + 1);
    catRepo.save(cat);
    return "redirect:/votePage/vote4";
}

@RequestMapping("/vote4")
public String votePageFour(Model model) {
    model.addAttribute("cat7", service.listAll().get(6));
    model.addAttribute("cat8", service.listAll().get(7));
    return "vote4";
}

@RequestMapping("/voteFor4")
public String voteForFour(@RequestParam Long id) {
    Cat cat = catRepo.findById((long) id);
    cat.setCount(cat.getCount() + 1);
    catRepo.save(cat);
    return "redirect:/votePage/vote5";
}

@RequestMapping("/vote5")
public String votePageFive(Model model) {
    model.addAttribute("cat9", service.listAll().get(8));
    model.addAttribute("cat10", service.listAll().get(9));
    return "vote5";
}

@RequestMapping("/voteFor5")
public String voteForFive(@RequestParam Long id) {
    Cat cat = catRepo.findById((long) id);
    cat.setCount(cat.getCount() + 1);
    catRepo.save(cat);
    return "redirect:/votePage/result";
}

@RequestMapping("/result")
public String result(Model model) {
    List<Integer> numbers = new ArrayList<>();
    for (int i = 0; i < numbers.size(); i++) {
        numbers.add(i);
    }
    model.addAttribute("cats", service.sortList());
    model.addAttribute("numbers", numbers);

    return "result";
}
}

Модель

@Entity
@Data
@Table(name = "cats")
public class Cat implements Serializable, Comparable<Cat> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private Integer count;

private String filename;

public Cat() { }

public Cat(String name) {
    this.name = name;
}

@Override
public int compareTo(Cat that) {
    return Long.compare(this.count, that.count);
}
}

Сервис

@Service
public class ListService {

@Autowired
CatRepo catRepo;

public List<Cat> sortList() {
    return StreamSupport
            .stream(
                    Spliterators.spliteratorUnknownSize(catRepo.findAll().iterator(), Spliterator.NONNULL),
                    false)
            .sorted(Comparator.reverseOrder())
            .collect(Collectors.toList());
}

public List<Cat> listAll() {
    List<Cat> cats = new ArrayList<>();
    catRepo.findAll().forEach(cats::add);
    Collections.shuffle(cats);
    return cats;
}
}

Добавить контроллер

@Controller
@RequestMapping("/add")
public class AddController {

@Autowired
CatRepo catRepo;

@Value("${upload.path}")
private String uploadPath;

@GetMapping("/addCandidate")
public String getAdd() {
    return "upload";
}

@PostMapping("/addCandidate")
public String add(
        @RequestParam String name,
        @RequestParam("file") MultipartFile file,
        Model model
) throws IOException {
    Cat cat = new Cat(name);
    if (file != null && !file.getOriginalFilename().isEmpty()) {
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdir();
        }
        String uuidFile = UUID.randomUUID().toString();
        String resultFilename = uuidFile + "." + file.getOriginalFilename();
        file.transferTo(new File(uploadPath + "/" + resultFilename));
        cat.setFilename(resultFilename);
    }
    catRepo.save(cat);
    return "upload";
}
}
...