Spring MVC. Logika aplikacji.

0

Hej. kilka dni temu założyłem temat związany z brakiem przekierowania z formularza, udało mi się znaleźć błąd i już wszystko działa. Jako ostatnią rzecz do zrobienia zostawiłem sobie obliczenie składki ubezpieczenia (ubezpieczenie samochodu).

Pomyślałem, że składka będzie wyliczana na podstawie jakichś współczynników, na przykład mam takie pole w formularzu jak "Kierowcy poniżej 26 roku życia" oznaczające czy pojazd będzie kierowany przez osoby poniżej tego wieku, są w nim dwie możliwości wyboru "Tak" i "Nie" powiedzmy że jeżeli użytkownik zaznaczy "Tak" współczynnik przyjmie wartość X która potem podstawiona do wzoru da większą wartość składki ubezpieczenia (według statystyk kierowcy poniżej tego wieku powodują większą ilość kolizji / stłuczek) a jeżeli "Nie" to Y analogicznie dająca mniejszą wartość. Kilka wybranych pól z formularza będzie miało swoje współczynniki które potem zostaną użyte we wzorze a w wynik zostanie przypisany do wartości składki ubezpieczenia.

Chciałbym dowiedzieć się jak to wykonać, rozwiązania nie muszą być profesjonalnym podejściem do problemu.

Jeżeli ktoś zna coś podobnego na czym można się powzorować i jest zrobione w springu prosiłbym o link.

Pytanie 1: Obliczanie składki ubezpieczenia będzie zawierać się w Kontrolerze?

Klasa kontrolera:

import java.util.ArrayList;
	import java.util.Arrays;
	import java.util.LinkedHashMap;
	import java.util.List;
	import java.util.Map;

	import javax.servlet.http.HttpServletRequest;

	import org.slf4j.Logger;
	import org.slf4j.LoggerFactory;
	import org.springframework.beans.factory.annotation.Autowired;
	import org.springframework.dao.EmptyResultDataAccessException;
	import org.springframework.stereotype.Controller;
	import org.springframework.ui.Model;
	import org.springframework.validation.BindingResult;
	import org.springframework.validation.annotation.Validated;
	import org.springframework.web.bind.WebDataBinder;
	import org.springframework.web.bind.annotation.ExceptionHandler;
	import org.springframework.web.bind.annotation.InitBinder;
	import org.springframework.web.bind.annotation.ModelAttribute;
	import org.springframework.web.bind.annotation.PathVariable;
	import org.springframework.web.bind.annotation.RequestMapping;
	import org.springframework.web.bind.annotation.RequestMethod;
	import org.springframework.web.servlet.ModelAndView;
	import org.springframework.web.servlet.mvc.support.RedirectAttributes;

	import com.mkyong.form.model.UbezpieczenieSamochodu;
	import com.mkyong.form.service.UbezpieczenieSamochoduService;
	import com.mkyong.form.validator.UbezpieczenieSamochoduFormValidator;

	@Controller
	public class UbezpieczenieSamochoduController {

	private final Logger logger = LoggerFactory.getLogger(UbezpieczenieSamochoduController.class);

	@Autowired
	UbezpieczenieSamochoduFormValidator ubezpieczenieSamochoduFormValidator;

	@InitBinder
	protected void initBinder(WebDataBinder binder) {
		binder.setValidator(ubezpieczenieSamochoduFormValidator);
	}

	private UbezpieczenieSamochoduService ubezpieczenieSamochoduService;

	@Autowired
	public void setUbezpieczenieSamochoduService(UbezpieczenieSamochoduService ubezpieczenieSamochoduService) {
		this.ubezpieczenieSamochoduService = ubezpieczenieSamochoduService;
	}

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String index(Model model) {
		logger.debug("index()");
		return "redirect:/ubezpieczenia";
	}

	@RequestMapping(value = "/ubezpieczenia", method = RequestMethod.GET)
	public String showMainPage(Model model) {
		logger.debug("ShowMainPage()");
		model.addAttribute("users", ubezpieczenieSamochoduService.findAll());
		return "users/stronaGlowna";

	}
	
	@RequestMapping(value = "/ubezpieczenia/lista", method = RequestMethod.GET)
	public String showListPage(Model model) {
		logger.debug("ShowMainList()");
		model.addAttribute("ubezpieczeniaSamochodu", ubezpieczenieSamochoduService.findAll());
		return "users/ss";

	}

	@RequestMapping(value = "/ubezpieczenia/dodaj", method = RequestMethod.GET)
	public String showAddUbezpiecznieSamochoduForm(Model model) {

		logger.debug("showAddUbezpieczenieSamochoduForm");

		UbezpieczenieSamochodu ubezpieczenieSamochodu = new UbezpieczenieSamochodu();

		ubezpieczenieSamochodu.setRokProdukcji(1994);
		ubezpieczenieSamochodu.setMarka("Audi");
		ubezpieczenieSamochodu.setModel("80");
		ubezpieczenieSamochodu.setPojemnoscSilnika("od_0.9_do_1.2");
		ubezpieczenieSamochodu.setWersjaNadwozia("Sedan");
		ubezpieczenieSamochodu.setZakresUbezpieczenia("OC");
		ubezpieczenieSamochodu.setKierowcyPonizej26RokuZycia("Nie");
		ubezpieczenieSamochodu.setLiczbaLatJazdyBezszkod("2");
		ubezpieczenieSamochodu.setLiczbaSzkodOst5Lat("0");
		ubezpieczenieSamochodu.setSredniRocznyPrzebiegKm("od_5001_do_10000");
		ubezpieczenieSamochodu.setStanCywilny("Kawaler/Panna");
		ubezpieczenieSamochodu.setTelefon(723485375);
		ubezpieczenieSamochodu.setDataUrodzenia("20-09-1994");
		ubezpieczenieSamochodu.setDataRozpoczeciaUbezpieczenia("30-06-2017");

		model.addAttribute("ubezpieczenieSamochoduForm", ubezpieczenieSamochodu);

		populateDefaultModel(model);

		return "users/ubezpieczenieSamochoduForm";
	}

	@RequestMapping(value = "/ubezpieczenia", method = RequestMethod.POST)
	public String saveOrUpdateUbezpieczenieSamochodu(
			@ModelAttribute("ubezpieczenieSamochoduForm") @Validated UbezpieczenieSamochodu ubezpieczenieSamochodu,
			BindingResult result, Model model, final RedirectAttributes redirectAttributes) {

		logger.debug("saveOrUpdateUbezpieczenieSamochodu() : {}", ubezpieczenieSamochodu);

		if (result.hasErrors()) {
			populateDefaultModel(model);
			return "users/ubezpieczenieSamochoduForm";
		} else {
			  redirectAttributes.addFlashAttribute("cdc","complete!");
			  
			  if (ubezpieczenieSamochodu.isNew())
			  redirectAttributes.addFlashAttribute(
			  "wiadomosc","uzytkownik dodany"); else {
			  redirectAttributes.addFlashAttribute(
			  "wiadomosc2","uzytkownik zaktualizowany"); }
			 
			ubezpieczenieSamochoduService.saveOrUpdate(ubezpieczenieSamochodu);

			// + ubezpieczenieSamochodu.getId();
			return "redirect:/ubezpieczenia";
		}
	}

	private void populateDefaultModel(Model model) {
		
		Integer wspolczynnikA;
		
		

		Map<String, String> pojemnoscSilnika = new LinkedHashMap<String, String>();
		pojemnoscSilnika.put("od_0.9_do_1.2","od 0.9 do 1.2");
		pojemnoscSilnika.put("od_1.2_do_1.6","od 1.2 do 1.6");
		pojemnoscSilnika.put("od_1.6_do_2.0","od 1.6 do 2.0");
		pojemnoscSilnika.put("od_2.0_do_3.0","od 2.0 do 3.0");
		pojemnoscSilnika.put("Powyzej_3.0","Powyżej 3.0");
		model.addAttribute("pojemnoscSilnika", pojemnoscSilnika);

		Map<String, String> wersjaNadwozia = new LinkedHashMap<String, String>();
		wersjaNadwozia.put("Sedan","Sedan");
		wersjaNadwozia.put("Kombi","Kombi");
		wersjaNadwozia.put("Hatchback","Hatchback");
		wersjaNadwozia.put("SUV","SUV");
		wersjaNadwozia.put("Coupe","Coupe");
		wersjaNadwozia.put("Cabriolet","Cabriolet");
		model.addAttribute("wersjaNadwozia", wersjaNadwozia);

		Map<String, String> zakresUbezpieczenia = new LinkedHashMap<String, String>();
		zakresUbezpieczenia.put("OC","OC");
		zakresUbezpieczenia.put("OCiAC","OC i AC");
		model.addAttribute("zakresUbezpieczenia", zakresUbezpieczenia);

		Map<String, String> kierowcyPonizej26RokuZycia = new LinkedHashMap<String, String>();
		kierowcyPonizej26RokuZycia.put("Tak","Tak");
		kierowcyPonizej26RokuZycia.put("Nie","Nie");
		model.addAttribute("kierowcyPonizej26RokuZycia", kierowcyPonizej26RokuZycia);

		Map<String, String> liczbaLatJazdyBezszkod = new LinkedHashMap<String, String>();
		liczbaLatJazdyBezszkod.put("1","1");
		liczbaLatJazdyBezszkod.put("2","2");
		liczbaLatJazdyBezszkod.put("3","3");
		liczbaLatJazdyBezszkod.put("4","4");
		liczbaLatJazdyBezszkod.put("5","5");
		model.addAttribute("liczbaLatJazdyBezszkod", liczbaLatJazdyBezszkod);

		Map<String, String> liczbaSzkodOst5Lat = new LinkedHashMap<String, String>();
		liczbaSzkodOst5Lat.put("0","0");
		liczbaSzkodOst5Lat.put("1","1");
		liczbaSzkodOst5Lat.put("2","2");
		liczbaSzkodOst5Lat.put("3","3");
		liczbaSzkodOst5Lat.put("wiecejNiz3","więcej niż 3");
		model.addAttribute("liczbaSzkodOst5Lat", liczbaSzkodOst5Lat);

		
		Map<String, String> sredniRocznyPrzebiegKm = new LinkedHashMap<String, String>();
		sredniRocznyPrzebiegKm.put("Ponizej_5000","Poniżej 5000");
		sredniRocznyPrzebiegKm.put("od_5001_do_10000","5001-10000");
		sredniRocznyPrzebiegKm.put("od_10001_do_20000","10001-20000");
		sredniRocznyPrzebiegKm.put("od_20001_do_4000","20001-40000");
		sredniRocznyPrzebiegKm.put("Wiecej_niz_40000","Więcej niż 40000");
		model.addAttribute("sredniRocznyPrzebiegKm", sredniRocznyPrzebiegKm);

		
		Map<String, String> stanCywilny = new LinkedHashMap<String, String>();
		stanCywilny.put("Kawaler/Panna","Kawaler/Panna");
		stanCywilny.put("Żonaty/Zamężna","Żonaty/Zamężna");
		stanCywilny.put("Rozwodnik/Rozwódka","Rozwodnik/Rozwódka");
		stanCywilny.put("Wdowiec/Wdowa","Wdowiec/Wdowa");
		model.addAttribute("stanCywilny", stanCywilny);
	}

	@ExceptionHandler(EmptyResultDataAccessException.class)
	public ModelAndView handleEmptyData(HttpServletRequest req, Exception ex) {

		logger.debug("handleEmptyData()");
		logger.error("Request: {}, error ", req.getRequestURL(), ex);

		ModelAndView model = new ModelAndView();
		model.setViewName("users/show");
		model.addObject("msg", "nie znaleziono");

		return model;

	}

}
0

Nie. Metody controllera powinny mieć z góra 5-6 lini a najlepiej jedną :). Z kontrollera wywołujesz serwisy w których masz logikę i serwisy wywołują obiekty repository/dao oraz na nich masz transkacje.
Czyli wysyłasz żądanie do controllera, controller wywołuje serwis który np. może pobrać coś z bazy danych albo zapisać :)

0

Dzięki za odpowiedź, czyli będę musiał stworzyć serwis w którym będą obliczenia dotyczące wartości składki ubezpieczenia. W kontrolerze nie powinno być też map ani setterów wartości domyślnych w formularzu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1