【项目实战】服创:小微企业跨组织人才管理系统

【项目实战】服创:小微企业跨组织人才管理系统这是大一大二的时候参加的服务外包创新创业大赛,第一次参赛,那时候也啥都没写,自己带着组员磕磕碰碰的一路走过,特此记录一下;

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

引言

本项目是基于第十二届服创的A01赛题,内容还是比较简单的,记录一下经过吧,

前期由于偷懒,把赛题分析交给了文本的同学,造成了分析不到位以及有点偏题了,所幸问题不大,

前期打算用 ssm 为架构完成,在中期时发现某书上有个用 jsp 写的模板,就直接 copy 了,

在后期为了增加 ajax,拦截器以及文件上传下载等功能,又增上了 SpringMVC 架构,

因此造就了这个四不像,有着 SpringMVC 架构,却用着 JDBC..,

总而言之还是经验不足,见风使舵了!

 

项目展示

项目演示地址

特此感谢睿姐配音![鞠躬]  

项目目录

【项目实战】服创:小微企业跨组织人才管理系统

因为是基于服创的,所以是组队开发合并的,一开始就是前后端分离,因此造成了部分文件出现了中文命名,dddd, 在这里插入图片描述

 

项目代码

以下将展示部分代码,源代码可在此处下载,

1. 拦截器

本意是为了防止通过直接输入地址进行访问和分级权限管理的,结果吧,没有用上,但还是写着了…

public class LoginInterceptor implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
        // 如果是登陆页面则放行
        System.out.println("uri: " + request.getRequestURI());
        if (request.getRequestURI().contains("login")) {
            return true;
        }

        if (request.getRequestURI().contains("validate")) {
            return true;
        }

        HttpSession session = request.getSession();

        // 如果用户已登陆也放行
        if(((String)session.getAttribute("validated")).equals("ok")) {
            return true;
        }

        return false;
    }
}

2. 文件上传与下载

本来想着根据当前员工的编号,程序自动更改上传文件的文件名再进行存储,这样的话,浏览或下载文件也可以直接根据以员工编号为文件名进行查找即可,不过为了方便起见,这里并没有体现出来,只是正常的文件上传和下载功能,

文件上传

@RequestMapping("/chengguo")
public String  fileUpload2(@RequestParam("chengguo") CommonsMultipartFile file, HttpServletRequest request) throws IOException {

    //上传路径保存设置
    String path = request.getServletContext().getRealPath("/工作成果");
    File realPath = new File(path);
    if (!realPath.exists()){
        realPath.mkdir();
    }
    //上传文件地址
    System.out.println("上传文件保存地址:"+realPath);

    //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
    file.transferTo(new File(realPath +"/"+ file.getOriginalFilename()));

    return "<script Language='JavaScript'>window.alert('上传成功!')</script>" +
            "<script language='JavaScript'>history.back()</script>";
}

文件下载

@RequestMapping(value="/downloadCG")
public String downloads1(HttpServletResponse response , HttpServletRequest request) throws Exception{
    //要下载的图片地址
    String  path = request.getServletContext().getRealPath("/工作成果");
    String  fileName = "1234567.pdf";

    //1、设置response 响应头
    response.reset(); //设置页面不缓存,清空buffer
    response.setCharacterEncoding("UTF-8"); //字符编码
    response.setContentType("multipart/form-data"); //二进制传输数据
    //设置响应头
    response.setHeader("Content-Disposition",
            "attachment;fileName="+ URLEncoder.encode(fileName, "UTF-8"));

    File file = new File(path,fileName);
    //2、 读取文件--输入流
    InputStream input=new FileInputStream(file);
    //3、 写出文件--输出流
    OutputStream out = response.getOutputStream();

    byte[] buff =new byte[1024];
    int index=0;
    //4、执行 写出操作
    while((index= input.read(buff))!= -1){
        out.write(buff, 0, index);
        out.flush();
    }
    out.close();
    input.close();
    return null;
}

3. 增删改查

这里本来有SSM架构的话,数据库应该使用mybatis写比较方便,但是用了模板,所以就用JDBC了,造成了大量的代码冗余吧,以下仅选取片段展示,这是写在jsp中的代码块,

<%
    String bh = (String)session.getAttribute("zgbh");
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        String url = "jdbc:mysql://localhost:3307/rsgl?useSSL=false&useUnicode=true&characterEncoding=UTF-8";
        String user = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, user, password);
        String sql = "select * from zgb,bmb,jlb,users" +
                " where zgb.bm = bmb.bmbh and zgb.bh=jlb.zgbh and zgb.bh=users.username and bh=?" +
                "order by bh";
        String sql1 = "insert into checkb(bh,xm,xb,bm,csrq,jbgz,gwjt,gwpj,jzjl,zwpj,password,usertype) " +
                "values(?,?,?,?,?,?,?,?,?,?,?,?)";
        String sql2 = "delete from zgb where bh=?";
        String sql3 = "delete from jlb where zgbh=?";
        String sql4 = "delete from users where username=?";

        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1,bh);
        ResultSet rs0 = pstmt.executeQuery();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        rs0.next();
        String xm0 = rs0.getString("xm").trim();
        String xb0 = rs0.getString("xb").trim();
        String bm0 = rs0.getString("bmmc").trim();
        String csrq0 = sdf.format(rs0.getDate("csrq"));
        String jbgz0 = String.valueOf(rs0.getFloat("jbgz"));
        String gwjt0 = String.valueOf(rs0.getFloat("gwjt"));
        String jzjl0 = rs0.getString("jzjl").trim();
        String gwpj0 = rs0.getString("gwpj").trim();
        String zwpj0 = rs0.getString("zwpj").trim();
        String pwd0 = rs0.getString("password").trim();
        String type0 = rs0.getString("usertype").trim();
        rs0.close();

        pstmt = conn.prepareStatement(sql1);
        pstmt.setString(1,bh);
        pstmt.setString(2,xm0);
        pstmt.setString(3,xb0);
        pstmt.setString(4,bm0);
        pstmt.setString(5,csrq0);
        pstmt.setString(6,jbgz0);
        pstmt.setString(7,gwjt0);
        pstmt.setString(8,gwpj0);
        pstmt.setString(9,jzjl0);
        pstmt.setString(10,zwpj0);
        pstmt.setString(11,pwd0);
        pstmt.setString(12,type0);
        pstmt.executeUpdate();

        pstmt = conn.prepareStatement(sql2);
        pstmt.setString(1,bh);
        int n1 = pstmt.executeUpdate();

        pstmt = conn.prepareStatement(sql3);
        pstmt.setString(1,bh);
        int n2 = pstmt.executeUpdate();

        pstmt = conn.prepareStatement(sql4);
        pstmt.setString(1,bh);
        int n3 = pstmt.executeUpdate();
        if (n1>0 && n2>0 && n3>0){
%>
            <script Language='JavaScript'>window.alert('职工记录删除成功!')</script>
            <script>window.location="${pageContext.request.contextPath}/hr/allList"</script>
<%
        }else {
%>
            <script Language='JavaScript'>window.alert('职工记录删除失败!')</script>
            <script language="JavaScript">history.back()</script>
<%
            }
        pstmt.close();
        conn.close();
    } catch (Exception e){
        out.print(e.toString());
    }
%>

上述代码的主要功能就是,HR选择删除员工时,先将该员工的所有资料插入到一个表checkb中,这个表中的人员都是被HR所辞退的,最终都会出现在领导的管理系统中,如果领导不同意辞退该员工的话,则他的数据将会被重新插入到原有的所有表中,即实现恢复员工的功能,同时删除checkb表中该员工的记录,如果领导同意辞退,则直接在checkb表中删除该记录即可,

之所以用了3个delete语句是因为一句delete删除三个表一直给我报错,为了不纠结这个问题,就分开写了,all in all,博主是小菜鸡,

 

问题解决

搭建了SpringMVC架构之后,出现了index.jsp界面的css显示不出来的问题, 在这里插入图片描述

然后网上搜寻了一番之后,找到了一个在这里可行的方法,增加静态资源过滤,即在web.xml中添加如下代码:

<!-- static resources -->
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>

就是将你所用到的资源文件都过滤一遍,不会被拦截即可显示, 在这里插入图片描述 

总结

不速之客五个人小队第一次参加服务外包创新大赛,由于经验不足,一路磕磕碰碰,但所幸我们小队都走过来了,坚持下来了,

由于知识储备不足,以完成项目为第一要务,因此选择了A01赛题,当做完的时候才察觉有些简单,不过这都无伤大雅,

最后,十分感谢队员的理解与支持,作为队长,由于经验不足,造成了战略性错误,深感抱歉,但是队友不抱怨,用行动以表理解真的让我很感动,这五个月感谢有你们!

今天的文章【项目实战】服创:小微企业跨组织人才管理系统分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15492.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注