SSM-based fresh food e-commerce system

Get the source code at the end
Development language: Java
Java development tools: JDK1.8
Back-end framework: SSM
Front-end: Developed using JSP technology
Database: MySQL5.7 and Navicat management tools combined
Server: Tomcat8.5
Development software: IDEA / Eclipse
Maven project: yes


Table of contents

1. Project Introduction

2. System design goals

3. System project screenshots

3.1 Front page

3.2Backend management

4. Core code

4.1 Login related

4.2 File upload

4.3 Packaging


1. Project Introduction

With the rapid development of science and technology, all walks of life are striving to integrate with modern advanced technology and improve their own advantages through scientific and technological means; of course, the fresh food e-commerce system for vegetable boxes can not be excluded. With the continuous maturity of network technology , led to Caixiazi’s preferred fresh food e-commerce system, which completely changed the traditional management method in the past, not only made service management less difficult, but also improved management flexibility. This kind of personalized platform pays special attention to the mutual coordination of interaction and management, which stimulates the creativity and initiative of managers, which is very beneficial to Caixiazi's preferred fresh food e-commerce system.

The database used in this system is Mysql , which is developed using JSP technology. The operating environment uses Tomcat server. ECLIPSE is the development platform of this system. In the design process, the system code is fully guaranteed to be readable, practical, easy to expand, universal, easy to maintain later, easy to operate, and the page is concise.


2. System design goals

The fresh food e-commerce system of Caixiazi is mainly for the convenience of users to understand product information and view product classification and view order information. It is also to better store all data information and provide fast and convenient retrieval functions for administrators. Each module of the system is determined by making a reasonable analysis of many of today's developed systems to consider the user's operability, follow the principles of system optimization developed, and go through comprehensive investigation and research.

Analysis of the functions to be achieved by the system, for the convenient management of the current network, you can view product information, news information, mine, jump to the backend, shopping cart, etc. according to your own needs. This can not only save the user's time, but also eliminate the need to The traditional method requires inquiries. Due to the time constraints of many users, there is no way to go to relevant physical stores to obtain information. It is really difficult to meet the various needs of users. Therefore, the development of Caixiazi’s preferred fresh food e-commerce system can not only meet the needs of users, but also improve the work efficiency of administrators and reduce the original unnecessary workload.



3. System project screenshots

3.1 Front page

 Caixiazi is the preferred fresh food e-commerce system. In the Caixiazi preferred fresh food e-commerce system, you can view product information, news information, mine, jump to the backend, shopping cart and other contents.

Log in, register, fill in the user account, user name, password, contact number, email and other information to register.

 

Product information. On the product information page, you can view product number, price, quantity, brand, specifications and other information for immediate purchase. 

 

Add the delivery address. On the delivery address addition page, you can view your personal center, my orders, my address, my collection, etc.

 

Confirm the order. On the order confirmation page, you can view and select the delivery address, list and other information for payment.

 

3.2Backend management

The administrator logs in after filling in the user name and password, as shown in Figure 5-6 . After successfully logging in, the administrator enters the system operation interface and can perform corresponding operations on the homepage, personal center, user management, product classification management, product information management, system management, order management and other functional modules.

 

Personal information: User names and other information can be obtained through the list and deleted or modified.

 

User management: Through the list, you can obtain user account, user name, password, gender, contact number, email address, balance, points and other information, and modify or delete it.

 

Product classification management: You can obtain product classification and other information through the list, and modify or delete it.

 

Product information management: Administrators can obtain product number, product name, product category, quantity, brand, specification, cover, price, details and other information through the list, and modify or delete it.

 

Carousel map; this page is the carousel map management interface. Administrators can manage the carousel on the home page on this page. They can add new pictures to the carousel through the new operation. They can also modify previously uploaded pictures and delete pictures.

 

News information: Administrators can obtain titles, pictures, content and other information through the list, and modify or delete them.

 

Completed orders: The administrator can obtain the order id, user id, product id, product name, product picture, purchase quantity, price/points, discount price, total price/total points, total discount price, payment type, status, Address and other information, modify or delete

 

Paid order list: The administrator can obtain the order id , user id , product id , product name, product picture, purchase quantity, price / points, discount price, total price / total points, total discount price, payment type,

Status, address and other information to modify or delete

 

Completed order list: The administrator can obtain the order id , user id , product id , product name, product picture, purchase quantity, price / points, discount price, total price / total points, total discount price, payment type,

Status, address and other information to modify or delete

 


4. Core code

4.1 Login related


package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

4.2 File upload

package com.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;

/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		File path = new File(ResourceUtils.getURL("classpath:static").getPath());
		if(!path.exists()) {
		    path = new File("");
		}
		File upload = new File(path.getAbsolutePath(),"/upload/");
		if(!upload.exists()) {
		    upload.mkdirs();
		}
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(upload.getAbsolutePath()+"/"+fileName);
		file.transferTo(dest);
		FileUtils.copyFile(dest, new File("C:\\Users\\Desktop\\jiadian\\springbootl7own\\src\\main\\resources\\static\\upload"+"/"+fileName));
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public ResponseEntity<byte[]> download(@RequestParam String fileName) {
		try {
			File path = new File(ResourceUtils.getURL("classpath:static").getPath());
			if(!path.exists()) {
			    path = new File("");
			}
			File upload = new File(path.getAbsolutePath(),"/upload/");
			if(!upload.exists()) {
			    upload.mkdirs();
			}
			File file = new File(upload.getAbsolutePath()+"/"+fileName);
			if(file.exists()){
				/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
					getResponse().sendError(403);
				}*/
				HttpHeaders headers = new HttpHeaders();
			    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
			    headers.setContentDispositionFormData("attachment", fileName);    
			    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
	}
	
}

4.3 Packaging

package com.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 */
public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	
	public R() {
		put("code", 0);
	}
	
	public static R error() {
		return error(500, "未知异常,请联系管理员");
	}
	
	public static R error(String msg) {
		return error(500, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		return r;
	}

	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}
}

Guess you like

Origin blog.csdn.net/weixin_52721608/article/details/132780712