package com.example.demo.controller; import com.example.demo.Constants; import com.example.demo.model.*; import com.example.demo.repository.DiancanDetailRespository; import com.example.demo.repository.DiancanRespository; import com.example.demo.repository.MenuRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.persistence.criteria.Predicate; import javax.servlet.http.HttpServletResponse; import javax.transaction.Transactional; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @Controller @RequestMapping("/api") public class WebController { @Autowired private MenuRepository menuRepository; @Autowired private DiancanRespository diancanRespository; @Autowired private DiancanDetailRespository diancanDetailRespository; private Logger logger= LoggerFactory.getLogger(WebController.class); @RequestMapping("/index") public String index(Model model,Diancan diancan){ List diancans= diancanRespository.findAll((root,query,cb)->{ List predicates = new ArrayList<>(); if(!StringUtils.isEmpty(diancan.getZhuohao())){ predicates.add(cb.like(root.get("zhuohao"),"%"+diancan.getZhuohao()+"%")); } if(!StringUtils.isEmpty(diancan.getXingming())){ predicates.add(cb.like(root.get("xingming"),"%"+diancan.getXingming()+"%")); } if(!StringUtils.isEmpty(diancan.getTel())){ predicates.add(cb.equal(root.get("tel"),diancan.getTel())); } if(diancan.getYuding()!=null){ predicates.add(cb.equal(root.get("yuding"),diancan.getYuding())); } return query.where(predicates.toArray(new Predicate[0])).getRestriction(); }); model.addAttribute(Constants.LIST,diancans); if(diancan.getYuding()==null){ diancan.setYuding(true); } model.addAttribute(Constants.QUERY,diancan); return "index"; } @RequestMapping("/order/del/{id}") @Transactional public void del(Model model, @PathVariable String id, HttpServletResponse response) throws IOException { diancanRespository.deleteById(id); diancanDetailRespository.deleteByZhuohao(id); response.sendRedirect("/api/index"); } @GetMapping("/order") public String getOrder(Model model){ model.addAttribute(Constants.SPAN_NAME,"点餐画面"); model.addAttribute(Constants.ACTION_NAME,"/api/order"); model.addAttribute(Constants.FENLEI,menuRepository.getFenlei()); Diancan diancan= new Diancan(); diancan.setRenshu(1); model.addAttribute(Constants.QUERY,diancan); return "order"; } @PostMapping("/order") @Transactional public void postOrder(Model model, HttpServletResponse response, DiancanForm diancanForm) throws IOException, ParseException { Diancan diancan=new Diancan(); diancan.setZhuohao(diancanForm.getZhuohao()); diancan.setXingming(diancanForm.getXingming()); diancan.setYuding(true); if("2".equals(diancanForm.getBirthday())&&!StringUtils.isEmpty(diancanForm.getShijian())) { Date date= new SimpleDateFormat("yyyyMMdd HHmm").parse(diancanForm.getShijian()); diancan.setBirthday(date); } diancan.setRenshu(diancanForm.getRenshu()); diancan.setTel(diancanForm.getTel()); diancan.setJine(diancanForm.getJine()); diancan.setBeizhu(diancanForm.getBeizhu()); diancanRespository.save(diancan); for (CaiDan caiDan:diancanForm.getDiancans()){ DiancanDetail diancanDetail=new DiancanDetail(); diancanDetail.setZhuohao(diancan.getZhuohao()); diancanDetail.setSum(caiDan.getSum()); diancanDetail.setMenuId(caiDan.getCailiao()); diancanDetailRespository.save(diancanDetail); } response.sendRedirect("/api/index"); } @GetMapping("/order/{id}") public String getEditOrder(Model model,@PathVariable String id){ model.addAttribute(Constants.SPAN_NAME,"修改画面"); model.addAttribute(Constants.ACTION_NAME,"/api/order/"+id); Diancan diancan=diancanRespository.getOne(id); model.addAttribute(Constants.QUERY,diancan); List diancanDetails=diancanDetailRespository.findByZhuohao(diancan.getZhuohao()); model.addAttribute(Constants.QUERYDETAIL,diancanDetails); model.addAttribute(Constants.FENLEI,menuRepository.getFenlei()); return "order"; } @PostMapping("/order/{id}") @Transactional public void postEditOrder(Model model,@PathVariable String id,HttpServletResponse response, DiancanForm diancanForm) throws IOException, ParseException { Diancan diancan=diancanRespository.getOne(diancanForm.getZhuohao()); diancan.setZhuohao(diancanForm.getZhuohao()); diancan.setXingming(diancanForm.getXingming()); diancan.setYuding(true); if("2".equals(diancanForm.getBirthday())&&!StringUtils.isEmpty(diancanForm.getShijian())) { Date date= new SimpleDateFormat("yyyyMMdd HHmm").parse(diancanForm.getShijian()); diancan.setBirthday(date); } diancan.setRenshu(diancanForm.getRenshu()); diancan.setTel(diancanForm.getTel()); diancan.setJine(diancanForm.getJine()); diancan.setBeizhu(diancanForm.getBeizhu()); diancanRespository.save(diancan); diancanDetailRespository.deleteByZhuohao(diancan.getZhuohao()); for (CaiDan caiDan:diancanForm.getDiancans()){ DiancanDetail diancanDetail=new DiancanDetail(); diancanDetail.setZhuohao(diancan.getZhuohao()); diancanDetail.setSum(caiDan.getSum()); diancanDetail.setMenuId(caiDan.getCailiao()); diancanDetailRespository.save(diancanDetail); } response.sendRedirect("/api/index"); } @GetMapping("/order/detail/{id}") public String getDetailOrder(Model model,@PathVariable String id){ model.addAttribute(Constants.SPAN_NAME,"详细画面"); Diancan diancan=diancanRespository.getOne(id); model.addAttribute(Constants.QUERY,diancan); List diancanDetails=diancanDetailRespository.findByZhuohao(diancan.getZhuohao()); model.addAttribute(Constants.QUERYDETAIL,diancanDetails); model.addAttribute(Constants.FENLEI,menuRepository.getFenlei()); return "order"; } @GetMapping("/order/pay/{id}") public String getPayOrder(Model model,@PathVariable String id){ model.addAttribute(Constants.SPAN_NAME,"支付画面"); Diancan diancan=diancanRespository.getOne(id); model.addAttribute(Constants.QUERY,diancan); List diancanDetails=diancanDetailRespository.findByZhuohao(diancan.getZhuohao()); model.addAttribute(Constants.QUERYDETAIL,diancanDetails); model.addAttribute(Constants.FENLEI,menuRepository.getFenlei()); return "order"; } @GetMapping(path = "/getPinMu",produces = {"application/json;charset=UTF-8"}) @ResponseBody public List getPinMu(Menu menu){ logger.info("根据分类:"+menu.getFenlei()+"查询品目信息"); if( !StringUtils.isEmpty(menu.getFenlei())){ List result= menuRepository.getPinmuByFenlei(menu.getFenlei()); logger.info("根据分类:"+menu.getFenlei()+"查询出"+result.size()+"个品目信息"); return result; }else{ return new ArrayList<>(); } } @GetMapping(path = "/getMenu",produces = {"application/json;charset=UTF-8"}) @ResponseBody public List getMenu(Menu menu){ if( !StringUtils.isEmpty(menu.getFenlei())&&!StringUtils.isEmpty(menu.getPinmu())){ return menuRepository.findByFenleiAndPinmu(menu.getFenlei(),menu.getPinmu()); }else{ return new ArrayList<>(); } } @GetMapping(path = "/hasYuding",produces = {"application/json;charset=UTF-8"}) @ResponseBody public Boolean hasYuding(Diancan diancan){ if(!StringUtils.isEmpty(diancan.getZhuohao())){ return diancanRespository.countByZhuohao(diancan.getZhuohao())==1; }else{ return false; } } }