SSM框架下打卡签到增加积分功能的实现
jsp页面
ssm框架在之前的文章里已经介绍过了这里说一下打卡功能的实现
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!-- 首页,用户已登陆 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta charset="UTF-8">
<title>签到打卡</title>
</head>
<body>
<div >
<style type="text/css">
*{margin:0;padding:0;list-style-type:none;}
a,img{border:0;text-decoration:none;}
/*今日签到*/
.singer{border:1px solid #DCDBDB;padding:10px;height:45px;line-height:45px;width:290px;margin:20px auto;}
.singer_l_cont, .singer_r_img{float:left;}
.singer_l_cont{width:145px;background:url(../../images/sing_per.gif) no-repeat left 12px;text-indent:23px;font-size:12px;}
.singer_r_img{display:block;width:114px;height:52px;background:url(../../images/sing_week.gif) right 2px no-repeat;vertical-align:middle;float:right;*margin-bottom:-10px;}
.singer_r_img:hover{background-position:right -53px;text-decoration:none;}
.singer_r_img span{margin-left:14px;font-size:16px;font-family:'Hiragino Sans GB','Microsoft YaHei',sans-serif !important;font-weight:700;color:#165379;}
.singer_r_img.current{background:url(../../images/sing_sing.gif) no-repeat 0 2px;}
</style>
<table >
<tr><td> <div class="singer">
<div class="singer_l_cont">
<span>每天签到赢取PK币</span>
</div>
<div class="singer_r_r">
<a class="singer_r_img" href="#">
<span id="sing_for_number"></span>
</a>
</div>
</div><!--singer end--></td>
<td><div class="tcoin">
<span ><font color="#ffd700" id="jingbi">金币:${money}</font></span>
</div></td></tr>
</table>
<script type="text/javascript" src="../../js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
/*签到模块日期捕捉:*/
function week(){
var objDate= new Date();
var week = objDate.getDay();
switch(week)
{
case 0:
week="周日";
break;
case 1:
week="周一";
break;
case 2:
week="周二";
break;
case 3:
week="周三";
break;
case 4:
week="周四";
break;
case 5:
week="周五";
break;
case 6:
week="周六";
break;
}
$("#sing_for_number").html( week );
}
$(document).ready(function(){
week();
$(".singer_r_img").click(function(){
$(this).addClass("current");
//这里使用了Ajax使得签到后还保持登录状态
var url="<%=request.getContextPath()%>/daka.html"; // 请求的url
$.post(
url,
{'name':${name}},
function (data)
{
if(data=="true")
{
alert("已签到,请不要重复签到")
}
else {
location.reload();//刷新页面,因为签到后金币数量改变需要刷新页面才能正确显示
alert("签到成功")
}
}
);
})
})
</script>
</div>
</body>
</html>
Controller层
package com.mooke.controller;
import com.mooke.entity.User;
import com.mooke.service.Impl.UserServiceImpl;
import com.mooke.service.UserService;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.io.File;
import java.util.UUID;
@Controller
public class IndexController {
@Autowired
private UserServiceImpl userService;
//签到验证
@RequestMapping("daka.html")
@ResponseBody
public String daka (HttpServletRequest request, HttpServletResponse response, Model model) {
// 接收前端输入的用户名
String name = request.getParameter("name");
User userEntiy = new User();
userEntiy.setName(name);
//这里将今天的日期和数据库存在的上次签到日期进行比对如果今天日期等于上次签到日期返回ture,使得无法再次签到,如果不等于则可以签到
Boolean userName=userService.daka("UsrMapper.daka",userEntiy);
if(userName){
return "true";
}
//在比对时间后返回false,此处更新打卡日期及金币数量,此时实体类中金币数量已经更改
userService.updatedaka("UsrMapper.updatedaka",userEntiy);
return "false";
}
}
Service层
目录结构
UserService代码
package com.mooke.service;
import com.mooke.entity.User;
import java.util.Map;
import java.util.List;
public interface UserService {
boolean updatedaka(String id, User userEntity);
boolean daka(String id, User userEntity);
}
UserServiceImpl代码
package com.mooke.service.Impl;
import com.mooke.dao.Impl.registeredDaoImpl;
import com.mooke.entity.User;
import com.mooke.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private registeredDaoImpl registeredDao;
@Override
public boolean daka(String id, User userEntity){
return registeredDao.daka(id,userEntity);
};
@Override
public boolean updatedaka(String id, User userEntity){
return registeredDao.updatedaka(id,userEntity);
};
}
Dao层
registeredDao 代码
package com.mooke.dao;
import com.mooke.entity.User;
import java.util.List;
import java.util.Map;
public interface registeredDao {
boolean daka(String id, User userEntity);
boolean updatedaka(String id, User userEntity);
}
registeredDaoImpl 代码
package com.mooke.dao.Impl;
import com.mooke.dao.registeredDao;
import com.mooke.entity.User;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
public class registeredDaoImpl extends SqlSessionDaoSupport implements registeredDao {
@Autowired
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory)
{
super.setSqlSessionFactory(sqlSessionFactory);
}
@Override
public boolean daka(String id,User userEntity){
if( getSqlSession().selectOne(id, userEntity)!=null) return true;
return false;
};
@Override
public boolean updatedaka(String id, User userEntity){
if( getSqlSession().update(id, userEntity)>0)return true;
return false;
};
}
Mapper代码
目录结构
代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UsrMapper">
<select id="daka" parameterType="com.mooke.entity.User" resultType="com.mooke.entity.User">
select
*
from user
where
name =#{name}
AND
qiandao = CURDATE()
</select>
<update id="updatedaka" parameterType="com.mooke.entity.User" >
update user
set
qiandao = CURDATE(),
money = money+5
where
name = #{name}
</update>
</mapper>
仍有疑问可以加QQ275375496讨论