OA系统:实现签到签退功能

一、思路
1.创建数据库(注:添加自增主键或者双主键,这里使用了自增主键dtid)
2.创建控制层和业务层,添加signin和signout两种方法
二、功能实现
1.创建数据库

create table duty 
(
dtid int(10) not null auto_increment,
empid varchar(10) ,
dtdate date ,
signintime varchar(100),
signouttime varchar(100),
PRIMARY key(dtid)
)

2.视图层
注意要用ajax实现页面窗口的跳转

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 






无标题文档





	


	
    
    
基本信息
  • 每天签到一次,不可重复签到
  • 可重复签退,以最后一次签退为准

注意:这里的ajax我犯了一个小bug

//当我在设置签退按钮时如果重复设置请求类型和数据类型时,按钮会失效
//实现签退功能
		$("#signout").click(function(){
			$.ajax({
				url:"servlet/DutyServlet?method=signout",
				//type:"POST",
				//dataType:"text",
				success:function(result){
					$("#result").html(result);
				}
			
			});
		});

3.控制层:

package com.facai.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.facai.entity.Employee;
import com.facai.service.DutyService;
import com.facai.service.impl.DutyServiceImpl;

public class DutyServlet extends BaseServlet {
	//签到
	public void signin(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//获得请求中的信息
		Employee emp=(Employee) request.getSession().getAttribute("emp");
		String empId=emp.getEmpId();
		//调用业务层完成业务操作
		DutyService dutyService=new DutyServiceImpl();
		int n=dutyService.signin(empId);//0失败1成功2已经签到
		//无需返回页面,只需返回响应内容
		response.getWriter().println(n);
	}
	//签退
	public void signout(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//获得请求中的信息
		Employee emp=(Employee) request.getSession().getAttribute("emp");
		String empId=emp.getEmpId();
		//调用业务层完成业务操作
		DutyService dutyService=new DutyServiceImpl();
		int n=dutyService.signout(empId);//0失败1成功2没有签到
		//无需返回页面,只需返回响应内容
		response.setContentType("text/html;charset=utf-8");//返回中午
		PrintWriter out=response.getWriter();
		if(n==0){
			out.println("签退失败");
		}else if(n==1){
			out.println("签退成功");
		}else{
			out.println("你还没有签到");
		}
		
	}
}

4.业务层

package com.facai.service.impl;



import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import oracle.sql.DATE;

import com.facai.dao.DutyDao;
import com.facai.dao.impl.DutyDaoImpl;
import com.facai.entity.Duty;
import com.facai.entity.Employee;
import com.facai.service.DutyService;

public class DutyServiceImpl implements DutyService {
	DutyDao dutyDao=new DutyDaoImpl();
	/*
	 * 签到
	 */
	@Override
	public int signin(String empId) {
		//判断用户是否已经签到
		Date now=new Date();
		java.sql.Date today=new java.sql.Date(now.getTime());//yyyy-MM-dd,hhmmss
		boolean flag=dutyDao.find(empId,today);
		int n=0;
		if(flag){//已经签到
			return 2;
		}else{
			//完成签到
			DateFormat sdf=new SimpleDateFormat("hh:mm:ss");
			String signinTime=sdf.format(now);
			Duty duty=new Duty(today, signinTime, null, empId);
			 n=this.dutyDao.save(duty);
			return n;
		}
	}
	@Override
	public int signout(String empId) {
		//判断用户是否已经签到
				Date now=new Date();
				java.sql.Date today=new java.sql.Date(now.getTime());//yyyy-MM-dd,hhmmss
				boolean flag=dutyDao.find(empId,today);
				int n=0;
				if(!flag){//还没有签到
					return 2;
				}else{
					//完成签退
					DateFormat sdf=new SimpleDateFormat("hh:mm:ss");
					String signoutTime=sdf.format(now);
					Duty duty=new Duty(today, null,signoutTime, empId);
					 n=this.dutyDao.out(duty);
					return n;
				}
	}

}

5.Dao层

package com.facai.dao.impl;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.facai.dao.DutyDao;
import com.facai.entity.Department;
import com.facai.entity.Duty;
import com.facai.entity.Employee;
import com.facai.util.DBUtil;

public class DutyDaoImpl implements DutyDao{

	@Override
	public boolean find(String empId, Date today) {
		//声明jdbc对象
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		//声明变量
		Department dept=null;
		boolean flag=false;//默认没有签到
		try {
			//创建连接
			conn=DBUtil.getConnection();
			//创建SQL语句
			String sql="select * from duty where empid=? and dtdate=?";
			//创建SQL语句对象
			ps=conn.prepareStatement(sql);
			ps.setString(1, empId);
			ps.setDate(2, today);
			//执行SQL命令
			rs=ps.executeQuery();
			if(rs.next()){
				flag=true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//关闭资源
			DBUtil.closeAll(rs, ps, conn);
		}
		//返回集合
		return flag;
	}

	@Override
	public int save(Duty duty) {
		String sql="insert into duty (empid,dtdate,signintime,signouttime) values(?,?,?,null)";
		Object[] params={
				duty.getEmpId(),
				duty.getDtDate(),
				duty.getSigninTime(),
		};
		return DBUtil.executeDML(sql, params);
	}

	@Override
	public int out(Duty duty) {
		String sql="update duty set signouttime=? where empid=? and dtdate=?";
		Object[] params={
				duty.getSignoutTime(),
				duty.getEmpId(),
				duty.getDtDate(),
		};
		return DBUtil.executeDML(sql, params);
	}


}

三、运行图

你可能感兴趣的:(OA系统,笔记)