一、思路
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);
}
}
三、运行图