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;
}
}