Необходимо реализовать web приложение с голосованием используя spring. Кандидаты загружаются в базу данных через специальную форму. При запуске голосования выводится пара кандидатов и так пока не закончатся все участники. Они не должны повторяться и обязаны появляться в случайном порядке для каждого пользователя. В конце выводится топ по результатам голосования всех пользователей. В данный момент кандидаты повторяются и нельзя загрузить меньше или больше 10 участников, проблему не могу решить уже несколько дней, решил обратиться сюда.
Контроллер голосования:
@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";
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть проект "написанный" в Buildbox и импортированный в Android StudioВ самой студии была создана Activity с кнопкой, при нажатии на которую открывается...
Мне нужен метод, который бы остановил программу на неопределенный или определенный срок(Заморозить), подобно методу Threadsleep() , только у чужой...