办公车辆管理系统的实现(内附项目源码)

办公车辆管理系统的设计实现

    • 1. 一个简单的SpringBoot项目实现
    • 2.后台主要代码展示
    • 3.环境相关配置
    • 4. github源码链接

1. 一个简单的SpringBoot项目实现

  • 目前的功能大概有这些
    办公车辆管理系统的实现(内附项目源码)_第1张图片
  • 小组校内实习,分工合作完成,项目结构如下(内附sql文件,红色波浪线请自动忽略,项目没有刷新成功的问题)
    办公车辆管理系统的实现(内附项目源码)_第2张图片

2.后台主要代码展示

  • 登录过滤实现,阻止未登录越权访问
@Component
@WebFilter(filterName = "LoginFilter",urlPatterns = "/*")
@Order(1)  //Order(1)在定义多个Filter时,用于决定执行顺序的,数字越小,越先执行。
public class LoginFilter implements Filter {
    private static final String [] ALLOWEDPATH = {"/login","/register",".ico",".js",".css",".jpg",".png","/fonts/"};
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
      // 这样在每个Servlet执行的时候都会先进行这个
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        if(needLogin(request)) {
            // 需要登录则跳转到登录Controller
            String userName = (String)((HttpServletRequest) request).getSession().getAttribute("username");
            System.out.println(userName);
            if(Optional.ofNullable(userName).map(String::length).orElse(0) <= 0){
                //response.sendRedirect("login.html");
                response.sendRedirect(request.getContextPath()+"/login.html");
                //throw new ZcException(ExceptionEnums.NOT_LOGGED_IN);
            }
            filterChain.doFilter(servletRequest, servletResponse);
            return;
        }else{
        }
        //因为有可能不止这一个过滤器,所以需要将所有的过滤器执行
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }

    private boolean needLogin(HttpServletRequest request) {
        //进行是否需要登录的判断操作
        String path = request.getRequestURI().substring(request.getContextPath().length()).replaceAll("[/]+$", "");
        System.out.println(path);
        boolean allowedPath = false;
        for (String url : ALLOWEDPATH) {
            if(path.contains(url)){
                allowedPath = true;
                break;
            }
        }
        return !allowedPath;
    }
}

  • 配置切面异常处理,枚举异常,异常结果封装(advice、enums、exception、vo)
    办公车辆管理系统的实现(内附项目源码)_第3张图片
@ControllerAdvice
public class CommonExceptionHandler {

    @ExceptionHandler(ZcException.class)
    public ResponseEntity handleException(ZcException e){
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ExceptionResult(e.getExceptionEnums()));
    }
}
@AllArgsConstructor
public enum  ExceptionEnums {

    UNIMPLEMENTED(1, "Not yet implemented."),
    UNEXPECTED(2, "Unexpected error."),
    REGISTER_FAILED(3, "Register failed."),
    FORMAT_CORRUPTED(4, "Format corrupted."),
    NOT_FOUND(5, "Not found."),
    INCORRECT_STATE(6, "Incorrect state."),
    RESTRICTED(7, "Operation is not allowed."),
    CANCELLED(8, "Operation has been cancelled."),
    NOTALLOWED(9, "not allowed."),
    CONFLICT(10, "Conflicts detected."),
    UNSUPPORTED(11, "Operation is not supported."),
    NOT_LOGGED_IN(12, "Not logged in."),
    UNDEFINED(Integer.MAX_VALUE, "Undefined error.");

    @Getter private int errorCode;
    @Getter private String error;
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class ZcException extends RuntimeException {

    private ExceptionEnums exceptionEnums;

}
@Data
public class ExceptionResult {
    private int errorCode;
    private String error;

    public ExceptionResult(ExceptionEnums em){
        this.errorCode = em.getErrorCode();
        this.error = em.getError();
    }

}

  • Controller代码
@RestController
@RequestMapping(CAR_ZC)
public class EMController {
	/**
     * 用户登录
     * @param request
     * @param servletRequest
     * @return
     */
    @RequestMapping(value = CAR_STAFF_LOGIN ,method = POST , produces = APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity login(@RequestBody String request, ServletRequest servletRequest){
        return ResponseEntity.status(200).body(loginService.login(servletRequest,request));
    }

	/................./

	public static final String CAR_ZC = "/zccar";
    public static final String CAR_STAFF_LOGIN = "/staff/login";
    @Autowired
    private LoginService loginService;

  • 配置视图路径
@Configuration
public class DefaultController extends WebMvcConfigurerAdapter {
    @Override
    public void addViewControllers( ViewControllerRegistry registry ) {
        registry.addViewController( "/zccar" ).setViewName( "forward:/login.html" );
        registry.setOrder( Ordered.HIGHEST_PRECEDENCE );
        super.addViewControllers( registry );
    }
}

  • model实体例如用户
import lombok.Data;

@Data
public class User{
    private Integer id;
    private String username;
    private String password;
    private String name;
    private String phone;

}

  • dao演示,例如userDao
@Mapper
public interface UserDao {
    // 用作登录查询,用户名和密码是否正确
    @Select("select username,password,name from tab_user where username = #{username} and password = #{password} ")
    User findNameAndPwd(@Param("username") String name, @Param("password")String pwd);

    // 查询用户id
    @Select("select id from tab_user where username = #{username} ")
    Integer findId(@Param("username") String name);

    // 注册用户增添用户数据
    @Insert("insert into tab_user(username, password, name, phone) values(#{u.username}, #{u.password}, #{u.name}, #{u.phone}) ")
    void insertUser(@Param("u") User user);

    // 根据id查用户角色
    @Select("SELECT details FROM tab_role  WHERE id in ( SELECT roleId FROM tab_user_role WHERE userId = #{id}) ")
    String findId_Role(@Param("id") int id);

    @Insert("insert into tab_user_role(userId, roleId) values(#{id}, 3)  ")
    void insertUserRole(@Param("id") int id);

}

  • service演示,login和application
@Service
public class LoginService {

    @Autowired
    private UserDao userDao;

    public JSONObject login(ServletRequest servletRequest, String param){
        JSONObject json = Objects.requireNonNull(JSON.parseObject(param));
        String username = Objects.requireNonNull(json.getString("username"));
        String password = Objects.requireNonNull(json.getString("password"));
        val httpRequest = (HttpServletRequest)servletRequest;
        val session = httpRequest.getSession(true);

        User user = userDao.findNameAndPwd(username, password);
        if(user == null){
            throw new ZcException(ExceptionEnums.NOT_FOUND);
        }
        session.setAttribute("username",user.getUsername());
        // 根据查询用户所拥有的角色
        Integer id = userDao.findId(user.getUsername());
        String role = userDao.findId_Role(id);
        return new JSONObject().fluentPut("errorCode",0).fluentPut("error",null)
                .fluentPut("data",new JSONObject().fluentPut("name",user.getName()).fluentPut("role",role));
    }

}

@Service
public class RecordService {
    @Autowired
    private RecordDao recordDao;

    public void application(String request, ServletRequest servletRequest) {
        val p = Objects.requireNonNull(JSON.parseObject(request));
        JSONObject json = Objects.requireNonNull(p.getJSONObject("record"));
        Record record = JSONObject.toJavaObject(json, Record.class);
        //此处需要调用车辆管理的查询车辆状态方法
        int status = recordDao.findStatus(record.getVehicleId());
        if(status == 0){
            throw new ZcException(ExceptionEnums.NOTALLOWED);
        }
        val httpRequest = (HttpServletRequest)servletRequest;
        val session = httpRequest.getSession(true);
        String username = (String)session.getAttribute("username");
        record.setUsername(username);
        String name = recordDao.findName(username);
        record.setName(name);
        recordDao.uInsert(record);

    }
    ..............

  • 发送ajax填充数据
 $(document).on("click","#vehicleDisAll",function(){//获取所有数据
        $("tr").remove(".doDele");
        $.ajax({
            type:'POST',
            dataType :'JSON',
            contentType: "application/json",
            url:'http://localhost:10010/zccar/record/asearch',
            data:JSON.stringify({
                status1: 2
            }),
            crossDomain: true,
            success:function(data){
                console.log(data)
                if(data.errorCode == 0){
                    console.log(data)
                    if(data.data){
                        var str="";
                        var data=data.data;//因为返回的数据格式不确定,可能有问题,调试的时候可能需要修改
                        for(i in data){
                            str+=""+
                            ""+data[i].id+""+
                            ""+data[i].vehicleId+""+
                            ""+data[i].departDate+""+
                            ""+data[i].backDate+""+
                            ""+data[i].level+""+
                            ""+data[i].event+""+
                            ""+data[i].realDepartDate+""+
                            ""+data[i].realBackDate+""+
                            ""+data[i].timeout+""+
                            ""+data[i].username+""+
                            ""+data[i].name+"";
                            if(data[i].status1==0){
                                str+="待审核";
                            }
                            else{
                                str+="已处理"
                            }
                            str+="禁止操作";
                            str+="";
                        }
                        $("#vehicleTable").append(str);
                    }
                }
                else{
                }
    
            },
            error:function(err){
    
            }
        })
    })

3.环境相关配置

  • pom.xml导入相关的jar包


    4.0.0

    com.Internship.ds
    office-service
    1.0-SNAPSHOT
    war


    
        1.8
        1.5.6.RELEASE
    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring.version}
                pom
                import
            
        
    


    

        
        
        org.springframework.boot
        spring-boot-starter-web
        

        
        
            org.springframework.boot
            spring-boot-starter-log4j2
        

        
            org.springframework.boot
            spring-boot-starter-test
            ${spring.version}
            compile
        

        
        
            org.springframework.boot
            spring-boot-starter-jdbc
            ${spring.version}
        

        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            1.3.2
        

        
        
            mysql
            mysql-connector-java
        

        
        
            com.zaxxer
            HikariCP
            2.7.8
        

        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        

        
        
            org.apache.httpcomponents
            httpclient
            4.3
        

        
        
            com.alibaba
            fastjson
            1.2.62
        

        
        
            org.projectlombok
            lombok
            1.18.6
            provided
        

        
        
            org.springframework.boot
            spring-boot-starter-freemarker
        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        

    

    
        OfficeService
        
            
                src/main/resources
            
            
                src/main/java
                
                    **/*.xml
                
                true
            
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.7.0
                
                    ${java.version}
                    ${java.version}
                
            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.18.1
                
                    true
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                ${spring.version}
            
            
                org.apache.maven.plugins
                maven-war-plugin
                3.2.2
            
        
    



  • application.yml文件配置(datasource处处理时差问题)
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/etc_management?characterEncoding=utf-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai

    username: root
    password: root
    #   hikari数据源配置
    hikari:
        connection-test-query: SELECT 1 FROM DUAL
        connection-timeout: 30000
        maximum-pool-size: 20
        max-lifetime: 1800000
        minimum-idle: 5
server:
  port: 10010
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.internship.ds.model

4. github源码链接

https://github.com/capriciousness/vehicle-manage-end.git

你可能感兴趣的:(JAVA的框架学习,JAVA_WEB)