基于javaweb+mysql的ssm+maven在线点餐系统(java+ssm+jsp+mysql+maven)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SSM+Maven在线点餐系统(java+ssm+jsp+mysql+maven)
一、项目简述
功能包括: 在线点餐,评论,购物车,下单,支付,管理员,店家多 商家管理,后台评论管理,订单管理,商品管理等等。
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。
/**
* 订单模块controller
*/
@Controller
@RequestMapping("/order")
public class OrderController {
@Autowired
OrderService orderService;
@Autowired
OrderItemService orderItemService;
/**
* 所有订单
* @param model
* @param page
* @return
*/
@RequestMapping("/list")
public String list(Model model, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());
List<Order> os= orderService.list();
int total = (int) new PageInfo<>(os).getTotal();
page.setTotal(total);
//为订单添加订单项数据
orderItemService.fill(os);
model.addAttribute("os", os);
model.addAttribute("page", page);
model.addAttribute("totals", total);
return "ordermodule/order-list";
}
/**
* 订单发货
* @param o
* @return
*/
@RequestMapping("/orderDelivery")
public String delivery(Order o){
o.setStatus(2);
orderService.update(o);
return "redirect:list";
}
/**
* 查看当前订单的订单项
* 2. 获取uri
* 3. 去掉前缀/fore
* 4. 如果访问的地址是/fore开头
* 4.1 取出fore后面的字符串,比如是forecart,那么就取出cart
* 4.2 判断cart是否是在noNeedAuthPage
* 4.2 如果不在,那么就需要进行是否登录验证
* 4.3 从session中取出"cst"对象
* 4.4 如果对象不存在,就客户端跳转到login.jsp
* 4.5 否则就正常执行
*/
HttpSession session = request.getSession();
String contextPath=session.getServletContext().getContextPath()+"/fore";
//准备字符串数组 noNeedAuthPage,存放哪些不需要登录也能访问的路径
String[] noNeedAuthPage = new String[]{
"Index", //首页
"DetailUI", //商品详情页
"RegisterUI", //注册页
"Register", //注册
"LoginUI", //登陆页
"Login", //登陆
"IsLogin", //判断是否登陆
"MtLogin", //模态登陆验证
"CstLoginOut", //退出
"DelOrderItem",//删除购物车项
"CreateOrder", //提交订单
"Payed", //支付成功
"NameLike", //模糊搜索商品
"FindCategory", //查看分类下的商品
"Zixunadd", //添加资讯
"LoginMsg", //登陆返回信息
};
//获取uri
String uri = request.getRequestURI(); //访问首页 /fore/foreIndex
//去掉前缀/fore
uri = uri.substring(5,uri.length()); //去掉前缀后 /foreIndex
//如果访问的地址是/fore开头
if(uri.startsWith("/fore")){
//判断是否是在noNeedAuthPage
String method = StringUtils.substringAfterLast(uri,"/fore" ); // 取出/fore后的字符串:Index
//如果不在,那么就需要进行是否登录验证
if(!Arrays.asList(noNeedAuthPage).contains(method)){
Customer customer =(Customer) session.getAttribute("cst");
if(null==customer){
response.sendRedirect("foreLoginUI");
return false;
}
}
}
return true;
}
/**
try {
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
fileStream = iterator.next();
if (!fileStream.isFormField())
break;
fileStream = null;
}
if (fileStream == null) {
return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA);
}
String savePath = (String) conf.get("savePath");
String originFileName = fileStream.getName();
String suffix = FileType.getSuffixByFilename(originFileName);
originFileName = originFileName.substring(0,
originFileName.length() - suffix.length());
savePath = savePath + suffix;
long maxSize = ((Long) conf.get("maxSize")).longValue();
if (!validType(suffix, (String[]) conf.get("allowFiles"))) {
return new BaseState(false, AppInfo.NOT_ALLOW_FILE_TYPE);
}
savePath = PathFormat.parse(savePath, originFileName);
String physicalPath = (String) conf.get("rootPath") + savePath;
InputStream is = fileStream.openStream();
State storageState = StorageManager.saveFileByInputStream(is,
physicalPath, maxSize);
is.close();
if (storageState.isSuccess()) {
storageState.putInfo("url", PathFormat.format(savePath));
storageState.putInfo("type", suffix);
storageState.putInfo("original", originFileName + suffix);
}
return storageState;
} catch (FileUploadException e) {
return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);
if(products.size()>5){
List<Product> products1 = new ArrayList<Product>();
for(int i=0;i<=4;i++){
products1.add(products.get(i));
}
c.setProducts(products1);
}else{
c.setProducts(products);
}
}
model.addAttribute("categories",categories);
session.setAttribute("categories",categories1); //保存在session 使其他页面也能获取到分类列表 而不用每次都去查询
return "forepage/index2";
}
/**
* 商品详情跳转
* @param id
* @param model
* @return
*/
@RequestMapping("/foreDetailUI")
public String detailUI(@RequestParam(value = "id")int id, Model model){
Product product = productService.get(id);
if(product==null) return "forepage/noPro";
User user = productService.getUserByBid(product.getBid());
Category category = productService.getCategoryByCid(product.getCid());
product.setCategory(category);
product.setUser(user);
List<Product> fivePro = foreService.getFivePro();
model.addAttribute("product",product);
model.addAttribute("fivePro",fivePro);
List<Review> list = reviewService.getReviewListByPid(id);
model.addAttribute("reviews",list);
model.addAttribute("rs",list.size());
return "forepage/proDetail";
}
public String zixunshenhe(int zid){
ziXunService.shenhe(zid);
return "success";
}
@RequestMapping("/del")
public String del(int id){
ziXunService.del(id);
return "redirect:list";
}
}
/**
* 评论模块controller
*/
@Controller
@RequestMapping("/review")
public class ReviewController {
@Autowired
private ReviewService reviewService;
@Autowired
private ProductService productService;
@RequestMapping("/list")
public String list(Model model, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());//分页查询
List<Review> list= reviewService.list();
int total = (int) new PageInfo<>(list).getTotal();//总条数
page.setTotal(total);
model.addAttribute("totals",list.size());
model.addAttribute("list",list);
return "pinglunpage/pinglun";
}
@RequestMapping("/del")
public String del(int id){
reviewService.del(id);
}
@RequestMapping("/adminAdd")
public String adminadd(Model model){
List<Role> list = roleService.list();
model.addAttribute("rolelist",list);
return "syspage/admin-add";
}
@RequestMapping("/listUser")
public String list(Model model, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());//分页查询
List<User> us= userService.list();
int total = (int) new PageInfo<>(us).getTotal();//总条数
page.setTotal(total);
model.addAttribute("us", us);//所有用户
model.addAttribute("total",total);
Map<User,List<Role>> user_roles = new HashMap<>();
//每个用户对应的权限
for (User user : us) {
List<Role> roles=roleService.listRoles(user);
user_roles.put(user, roles);
}
model.addAttribute("user_roles", user_roles);
return "syspage/admin-list";
}
/**
* 修改管理员角色
* @param model
* @param id
* @return
*/
@RequestMapping("/editUser")
public String edit(Model model, Long id){
List<Role> rs = roleService.list();
model.addAttribute("rs", rs);
User user =userService.get(id);
model.addAttribute("user", user);
* @param model
* @return
*/
@RequestMapping("/forePayed")
public String payed(int oid, float total, Model model) {
Order order = orderService.get(oid);
order.setStatus(1);
orderService.update(order);
model.addAttribute("total", total);
return "forepage/forePayed";
}
/**
* 我的订单 根据session查看当前用户的订单
* @param model
* @param session
* @return
*/
@RequestMapping("/forebought")
public String forebought(Model model, HttpSession session){
Customer customer = (Customer) session.getAttribute("cst");
List<Order> os= orderService.list(customer.getId());
//给每个订单的订单项设置属性值,如orderitem、product
orderItemService.fill(os);
model.addAttribute("os", os);
return "forepage/foreBought";
}
/**
* 搜索商品
* @param model
* @param pName
* @return
*/
@RequestMapping("/foreNameLike")
public String foreNameLike(Model model, String pName, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());//分页查询
if(pName!=null) PNAME = pName;
List<Product> products = productService.findByName(PNAME);
int total = (int) new PageInfo<Product>(products).getTotal();//总条数
page.setTotal(total);
model.addAttribute("products",products);
model.addAttribute("total",total);
model.addAttribute("page", page);
model.addAttribute("proSize",products.size());
/**
* 权限模块controller
*/
@Controller
@RequestMapping("/config")
public class PermissionController {
@Autowired
PermissionService permissionService;
/**
* 添加权限页面
* @return
*/
@RequestMapping("/adminPerAddUI")
public String addUI(){
return "syspage/admin-permission-add";
}
/**
* 权限列表
* @param model
* @param page
* @return
*/
@RequestMapping("/listPermission")
public String list(Model model, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());//分页查询
List<Permission> ps= permissionService.list();
int total = (int) new PageInfo<>(ps).getTotal();//总条数
page.setTotal(total);
model.addAttribute("ps", ps);
model.addAttribute("perCount",ps.size());
return "syspage/admin-permission";
}
@RequestMapping("/editPermission")
public String list(Model model, long id){
Permission permission =permissionService.get(id);
model.addAttribute("permission", permission);
return "syspage/admin-permission-edit";
}
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@Autowired
private UserService userService;
@Autowired
private CategoryService categoryService;
@RequestMapping("/list")
public String list(Model model, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());//分页查询
List<Product> list= productService.list();
int total = (int) new PageInfo<>(list).getTotal();//总条数
page.setTotal(total);
model.addAttribute("list",list);
model.addAttribute("total",total);
model.addAttribute("page", page);
return "productmodule/product-list";
}
@RequestMapping("/enableStatus")
@ResponseBody
public String enableStatus(@RequestParam(value = "name") String name){
return productService.enableStatus(name);
}
@RequestMapping("/stopStatus")
@ResponseBody
public String stopStatus(@RequestParam(value = "name") String name){
return productService.stopStatus(name);
}
@RequestMapping("/productAddUI")
public String addUI(Model model){
List<Category> categoryList = categoryService.list();
List<User> userList = userService.list();
model.addAttribute("categoryList",categoryList);
*/
@Controller
@RequestMapping("")
public class LoginController {
@Autowired
UserService userService;
@RequestMapping(value="/login",method= RequestMethod.POST)
public String login(Model model, String name, String password){//throws ParseException
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(name,password);
try {
subject.login(token);
User us = userService.getByName(name);
String lastLoginTime = "";
if(us!=null){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//上次时间
Date time = us.getLasttime();
lastLoginTime = sdf.format(time);
//新时间
String format = sdf.format(new Date());
//string转date 不处理时间格式会不理想
ParsePosition pos = new ParsePosition(0);
Date strtodate = sdf.parse(format, pos);
us.setLasttime(strtodate);
userService.update(us);
}
if (us.getStatus()==1){
Session session=subject.getSession();
session.setAttribute("subject", subject);
session.setAttribute("lastLoginTime",lastLoginTime);
return "redirect:index";
}else {
model.addAttribute("error", "账号已被停用!");
return "/login";
}
} catch (AuthenticationException e) {
model.addAttribute("error", "验证失败!");
return "/login";
}
}
}
if ( !validCallbackName( callbackName ) ) {
return new BaseState( false, AppInfo.ILLEGAL ).toJSONString();
}
return callbackName+"("+this.invoke()+");";
} else {
return this.invoke();
}
}
public String invoke() {
if ( actionType == null || !ActionMap.mapping.containsKey( actionType ) ) {
return new BaseState( false, AppInfo.INVALID_ACTION ).toJSONString();
}
if ( this.configManager == null || !this.configManager.valid() ) {
return new BaseState( false, AppInfo.CONFIG_ERROR ).toJSONString();
}
State state = null;
int actionCode = ActionMap.getType( this.actionType );
Map<String, Object> conf = null;
switch ( actionCode ) {
case ActionMap.CONFIG:
return this.configManager.getAllConfig().toString();
case ActionMap.UPLOAD_IMAGE:
case ActionMap.UPLOAD_SCRAWL:
case ActionMap.UPLOAD_VIDEO:
case ActionMap.UPLOAD_FILE:
conf = this.configManager.getConfig( actionCode );
state = new Uploader( request, conf ).doExec();
break;
case ActionMap.CATCH_IMAGE:
conf = configManager.getConfig( actionCode );
String[] list = this.request.getParameterValues( (String)conf.get( "fieldName" ) );
state = new ImageHunter( conf ).capture( list );
break;
case ActionMap.LIST_IMAGE:
case ActionMap.LIST_FILE:
conf = configManager.getConfig( actionCode );
int start = this.getStartIndex();
state = new FileManager( conf ).listFile( start );
break;
/**
* 评论模块controller
*/
@Controller
@RequestMapping("/review")
public class ReviewController {
@Autowired
private ReviewService reviewService;
@Autowired
private ProductService productService;
@RequestMapping("/list")
public String list(Model model, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());//分页查询
List<Review> list= reviewService.list();
int total = (int) new PageInfo<>(list).getTotal();//总条数
page.setTotal(total);
model.addAttribute("totals",list.size());
model.addAttribute("list",list);
return "pinglunpage/pinglun";
}
@RequestMapping("/del")
public String del(int id){
reviewService.del(id);
return "redirect:list";
}
}
/**
* 全局异常类
*/
}
/**
* ajax判断客户是否登陆
* @param session
* @return
*/
@RequestMapping("/foreIsLogin")
@ResponseBody
public String isLogin(HttpSession session){
Customer cst = (Customer) session.getAttribute("cst");
return cst==null?"false":"true";
}
/**
* 注册
* @param customer
* @return
*/
@RequestMapping("/foreRegister")
public String register(Customer customer){
customer.setStatus(0);
customerService.save(customer);
return "forepage/registerSuccess";
}
/**
* 客户登陆
* @param customer
* @param session
* @return
*/
@RequestMapping("/foreLogin")
public String foreLogin(Customer customer, HttpSession session, Model model){
Customer cst = customerService.foreLogin(customer);
if (cst!=null){
session.setAttribute("cst",cst);
return "redirect:foreIndex";
}else {
return "redirect:foreLoginMsg";
}
}
/**
* 用户登陆返回信息
* @return
*/
@RequestMapping("/foreLoginMsg")
public String foreLoginMsg(HttpServletRequest request){
request.setAttribute("msg","true");
Customer customer = (Customer) session.getAttribute("cst");
List<Order> os= orderService.list(customer.getId());
//给每个订单的订单项设置属性值,如orderitem、product
orderItemService.fill(os);
model.addAttribute("os", os);
return "forepage/foreBought";
}
/**
* 搜索商品
* @param model
* @param pName
* @return
*/
@RequestMapping("/foreNameLike")
public String foreNameLike(Model model, String pName, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());//分页查询
if(pName!=null) PNAME = pName;
List<Product> products = productService.findByName(PNAME);
int total = (int) new PageInfo<Product>(products).getTotal();//总条数
page.setTotal(total);
model.addAttribute("products",products);
model.addAttribute("total",total);
model.addAttribute("page", page);
model.addAttribute("proSize",products.size());
return "forepage/proSeach";
}
/**
* 显示分类下的商品
* @param model
* @param cid
* @return
*/
@RequestMapping("/foreFindCategory")
public String foreFindCategory(Model model, @RequestParam(value = "id") int cid){
List<Product> ps = productService.findByCid(cid);
Category category = categoryService.get(cid);
if(ps.size()>8){
List<Product> ps1 = new ArrayList<Product>();
for(int i=0;i<8;i++){
ps1.add(ps.get(i));
}
}else {
return "redirect:foreLoginMsg";
}
}
/**
* 用户登陆返回信息
* @return
*/
@RequestMapping("/foreLoginMsg")
public String foreLoginMsg(HttpServletRequest request){
request.setAttribute("msg","true");
return "forepage/forelogin";
}
/**
* 客户注销
* @param session
* @return
*/
@RequestMapping("/foreCstLoginOut")
public String cstLoginOut(HttpSession session){
session.setAttribute("cst",null);
return "redirect:foreIndex";
}
/**
* 立即购买
* @param session
* @param pid 商品id
* @param number 商品数量
* @return 重定向到支付 , 传入订单项id
*/
@RequestMapping("/forebuyone")
public String forebuyone(HttpSession session, int pid, int number, float totalPrice){
Customer cst = (Customer) session.getAttribute("cst");
Product product = productService.get(pid);
int oiid = 0;
boolean find = false;
List<OrderItem> orderItems = orderItemService.listByCustomer(cst.getId());//获得订单项表中该用户的所有订单id为空的订单项
for (OrderItem oi : orderItems) {
String password=user.getPassword();
//如果在修改的时候没有设置密码,就表示不改动密码
if(user.getPassword().length()!=0) {
String salt = new SecureRandomNumberGenerator().nextBytes().toString();
int times = 2;
String algorithmName = "md5";
String encodedPassword = new SimpleHash(algorithmName,password,salt,times).toString();
user.setSalt(salt);
user.setPassword(encodedPassword);
user.setPassword(password);
}
else
user.setPassword(null);
userService.update(user);
return "redirect:listUser";
}
@RequestMapping("addUser")
public String add(User user,long[] roleIds){
String salt = new SecureRandomNumberGenerator().nextBytes().toString();//生成随机数
int times = 2;
String algorithmName = "md5";
String encodedPassword = new SimpleHash(algorithmName,user.getPassword(),salt,times).toString();
User u = new User();
u.setName(user.getName());
u.setPassword(encodedPassword);
u.setPassword(user.getPassword());
u.setSalt(salt);
u.setStatus(1);
u.setAddress(user.getAddress());
u.setPhone(user.getPhone());
userService.add(u);
userRoleService.setRoles(u,roleIds);
return "redirect:listUser";
}
}
}
}
/**
* 用户模块controller
*/
@Controller
@RequestMapping("/customer")
public class CustomerController {
@Autowired
private CustomerService customerService;
@RequestMapping("/list")
public String list(Model model, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());//分页查询
List<Customer> list= customerService.list();
int total = (int) new PageInfo<Customer>(list).getTotal();//总条数
page.setTotal(total);
model.addAttribute("list",list);
model.addAttribute("totals",total);
return "cstpage/cst-list";
}
/**
* 设置会员
* @param id
* @return
*/
@RequestMapping("/shezhihuiyuan")
@ResponseBody
public String shezhihuiyuan(int id){
customerService.shezhihuiyuan(id);