model:
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Data;
@Data
@Entity
@Table(name = "usersign")
@EntityListeners(AuditingEntityListener.class)
@DynamicUpdate
public class UserSign {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;//签到ID
@Column(name = "uid")
private int uid;//用户ID
@Column(name = "uname")
private String uname;//用户姓名
@Column(name = "status",columnDefinition = "tinyint default 0")
private int status;//签到状态(0 为签到 1为签退)
@Column(name = "iscancle",columnDefinition = "tinyint default 0")
private int isCancle;//是否取消签到(0 为不是 1为是)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@CreatedDate
@Column(name = "signtime")
private Date signTime;//签到时间
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@CreatedDate
@Column(name = "signouttime")
private Date signOutTime;//取消签到时间
}
dto:
package com.sxd.crm.dto;
import java.util.Date;
import com.sxd.crm.model.UserSign;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class UserSignDto extends UserSign {
private int page = 1;
private int size = 10;
private Date startSignTime;
private Date endSignTime;
}
dao:
package com.sxd.crm.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import com.sxd.crm.model.UserSign;
public interface IUserSignDao extends JpaRepository<UserSign, Integer>,JpaSpecificationExecutor<UserSign>{
//根据用户ID查询信息
@Query(value = "select * from usersign where uid=:uid order by signtime desc limit 1",nativeQuery = true)
UserSign findByUid(int uid);
}
Iservice接口:
package com.sxd.crm.service;
import java.util.Map;
import com.sxd.crm.dto.UserSignDto;
import com.sxd.crm.model.UserSign;
public interface IUserSignService {
//根据条件查询用户签到
Map<String, Object> findAll(UserSignDto dto);
//签到
String sign(UserSign u);
//签退
String signOut(UserSign u);
//根据UID查询信息
UserSign findByUid(int uid);
}
sercive:
package com.sxd.crm.service;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import com.sxd.crm.dao.IUserSignDao;
import com.sxd.crm.dto.UserSignDto;
import com.sxd.crm.model.UserSign;
@Service
@Transactional
public class UserSignService implements IUserSignService{
@Resource
private IUserSignDao usersigndao;
@Override
public Map<String, Object> findAll(UserSignDto dto) {
Map<String, Object> map=new HashMap<String, Object>();
Pageable pageable = PageRequest.of(dto.getPage()-1, dto.getSize(), Sort.by(Direction.DESC, "signTime"));
Page<UserSign> page = usersigndao.findAll(getWhereClause(dto), pageable);
map.put("code", 0);
map.put("count", usersigndao.count(getWhereClause(dto)));
map.put("data", page.getContent());
return map;
}
private Specification<UserSign> getWhereClause(UserSignDto dto){
return new Specification<UserSign>() {
@Override
public Predicate toPredicate(Root<UserSign> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
List<Predicate> list=new ArrayList<Predicate>();
if(dto.getUname()!=null&&""!=dto.getUname()) {
list.add(criteriaBuilder.like(root.get("uname").as(String.class), "%"+dto.getUname()+"%"));
}
if(dto.getStartSignTime()!=null) {
list.add(criteriaBuilder.greaterThanOrEqualTo(root.get("signtime").as(Date.class), dto.getStartSignTime()));
}
if(dto.getEndSignTime()!=null) {
list.add(criteriaBuilder.lessThanOrEqualTo(root.get("signtime").as(Date.class), dto.getEndSignTime()));
}
if(dto.getStatus()>0) {
list.add(criteriaBuilder.lt(root.get("status"), dto.getStatus()));
}
Predicate[] pre=new Predicate[list.size()];
return query.where(list.toArray(pre)).getRestriction();
}};
}
@Override
public String sign(UserSign u) {
UserSign us=usersigndao.findByUid(u.getUid());
Calendar cal=Calendar.getInstance();//实例化
cal.setTime(new Date());//进去时间为当前签到时间
u.setSignTime(new Date());
cal.add(Calendar.MINUTE, 10);//系统自动设置时间未签到添加10分钟
u.setSignOutTime(cal.getTime());
u.setUname(us.getUname());
u.setStatus(0);
usersigndao.save(u);
return "success";
}
@Override
public UserSign findByUid(int uid) {
return usersigndao.findByUid(uid);
}
@Override
public String signOut(UserSign u) {
UserSign us=usersigndao.findByUid(u.getUid());
u.setSignOutTime(new Date());
u.setSignTime(us.getSignTime());
u.setUname(us.getUname());
u.setStatus(1);
usersigndao.save(u);
return "success";
}
}
controller:
package com.sxd.crm.controller;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.sxd.crm.dto.UserSignDto;
import com.sxd.crm.model.UserSign;
import com.sxd.crm.service.IUserSignService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@RestController
@Api(tags = "用户签到管理模块")
@RequestMapping("/usersign")
public class UserSignController {
@Resource
private IUserSignService usersignservice;
@ApiOperation(value = "查询签到用户",notes = "查询所有签到用户")
@PostMapping("/findAll")
public Map<String, Object> findAll(UserSignDto dto){
return usersignservice.findAll(dto);
}
@ApiOperation(value = "查询用户信息",notes = "根据用户ID查询信息")
@PostMapping("/findByUid")
public UserSign findByUid(int uid){
return usersignservice.findByUid(uid);
}
@ApiOperation(value = "模拟签到",notes = "用户签到")
@PostMapping("/sign")
public String sign(UserSign u) {
String str="success";
if(u.getStatus()>0) {
return str = usersignservice.signOut(u);
}
return str;
}
@ApiOperation(value = "模拟签退",notes = "用户签退")
@PostMapping("/signOut")
public String signOut(UserSign u) {
return usersignservice.signOut(u);
}
}
问题::
不报错,但就是实现不了???
另外实体类自动创建时间也出不来效果,改为时间戳(timestamp)也没有用??
望哪个大神赐教,拜托拜托!!!
不知道你这个问题是否已经解决, 如果还没有解决的话: