springboot 写一个签到和连续签到的业务逻辑接口
时间: 2024-05-02 12:16:22 浏览: 14
好的,下面是一个基于SpringBoot的签到和连续签到的业务逻辑接口的实现。
首先,我们定义一个签到记录的实体类,包含用户ID、签到日期和是否连续签到等属性:
```java
@Entity
@Table(name = "sign_record")
public class SignRecord {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private Integer userId;
private LocalDate date;
private boolean isContinued;
// 省略getter和setter
}
```
接下来,我们定义一个签到服务的接口,包含签到和获取签到记录等方法:
```java
public interface SignService {
/**
* 签到
* @param userId 用户ID
* @return 签到记录
*/
SignRecord signIn(Integer userId);
/**
* 获取用户签到记录
* @param userId 用户ID
* @return 签到记录列表
*/
List<SignRecord> getSignRecords(Integer userId);
}
```
然后,我们实现这个接口:
```java
@Service
public class SignServiceImpl implements SignService {
@Autowired
private SignRecordRepository signRecordRepository;
@Override
public SignRecord signIn(Integer userId) {
LocalDate today = LocalDate.now();
Optional<SignRecord> lastRecordOptional = signRecordRepository.findTopByUserIdOrderByDateDesc(userId);
if (lastRecordOptional.isPresent()) {
SignRecord lastRecord = lastRecordOptional.get();
if (lastRecord.getDate().equals(today)) {
// 已经签到过了
return lastRecord;
} else if (lastRecord.getDate().plusDays(1).equals(today)) {
// 连续签到
lastRecord.setContinued(true);
} else {
// 非连续签到
lastRecord.setContinued(false);
}
lastRecord.setDate(today);
signRecordRepository.save(lastRecord);
return lastRecord;
} else {
// 第一次签到
SignRecord record = new SignRecord();
record.setUserId(userId);
record.setDate(today);
record.setContinued(false);
signRecordRepository.save(record);
return record;
}
}
@Override
public List<SignRecord> getSignRecords(Integer userId) {
return signRecordRepository.findByUserIdOrderByDateDesc(userId);
}
}
```
在签到接口中,我们首先获取用户最近一次的签到记录,如果今天已经签到了,则直接返回该记录;如果今天是连续签到,则更新记录的连续签到标记并保存;否则,更新记录为非连续签到并保存。如果没有找到用户的签到记录,说明这是用户的第一次签到,则新建一条签到记录并保存。
最后,我们还需要定义一个签到记录的仓库接口:
```java
public interface SignRecordRepository extends JpaRepository<SignRecord, Integer> {
Optional<SignRecord> findTopByUserIdOrderByDateDesc(Integer userId);
List<SignRecord> findByUserIdOrderByDateDesc(Integer userId);
}
```
这个仓库接口继承了Spring Data JPA的`JpaRepository`,并定义了两个查询方法,分别用于查找用户最近一次的签到记录和用户所有的签到记录。
以上就是一个简单的签到和连续签到的业务逻辑接口的实现。