springboot - maven 项目模拟用户签到出现的问题

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)也没有用??

望哪个大神赐教,拜托拜托!!!

 

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^