From 5b77a5828d0e164fb6d31a520e5a76d2e88086af Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Sun, 10 Mar 2024 10:11:43 +0800 Subject: [PATCH] submitToken curd --- .../controller/SubmitTokenController.java | 58 +++++++++ .../submitToken/dto/CreateSubmitTokenDto.java | 8 ++ .../coal/submitToken/dto/SubmitTokenDto.java | 8 ++ .../submitToken/dto/UpdateSubmitTokenDto.java | 8 ++ .../submitToken/entity/SubmitTokenEntity.java | 15 +++ .../submitToken/mapper/SubmitTokenMapper.java | 20 +++ .../repository/SubmitTokenRepository.java | 24 ++++ .../service/SubmitTokenService.java | 121 ++++++++++++++++++ .../scripts/dict/enum/submitTokenDict.groovy | 17 +++ 9 files changed, 279 insertions(+) create mode 100644 src/main/java/cn/lihongjie/coal/submitToken/controller/SubmitTokenController.java create mode 100644 src/main/java/cn/lihongjie/coal/submitToken/dto/CreateSubmitTokenDto.java create mode 100644 src/main/java/cn/lihongjie/coal/submitToken/dto/SubmitTokenDto.java create mode 100644 src/main/java/cn/lihongjie/coal/submitToken/dto/UpdateSubmitTokenDto.java create mode 100644 src/main/java/cn/lihongjie/coal/submitToken/entity/SubmitTokenEntity.java create mode 100644 src/main/java/cn/lihongjie/coal/submitToken/mapper/SubmitTokenMapper.java create mode 100644 src/main/java/cn/lihongjie/coal/submitToken/repository/SubmitTokenRepository.java create mode 100644 src/main/java/cn/lihongjie/coal/submitToken/service/SubmitTokenService.java create mode 100644 src/main/resources/scripts/dict/enum/submitTokenDict.groovy diff --git a/src/main/java/cn/lihongjie/coal/submitToken/controller/SubmitTokenController.java b/src/main/java/cn/lihongjie/coal/submitToken/controller/SubmitTokenController.java new file mode 100644 index 00000000..538ad35d --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/submitToken/controller/SubmitTokenController.java @@ -0,0 +1,58 @@ +package cn.lihongjie.coal.submitToken.controller; + +import cn.lihongjie.coal.annotation.SysLog; +import cn.lihongjie.coal.base.dto.CommonQuery; +import cn.lihongjie.coal.base.dto.IdRequest; +import cn.lihongjie.coal.submitToken.dto.CreateSubmitTokenDto; +import cn.lihongjie.coal.submitToken.dto.SubmitTokenDto; +import cn.lihongjie.coal.submitToken.dto.UpdateSubmitTokenDto; +import cn.lihongjie.coal.submitToken.service.SubmitTokenService; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/submitToken") +@SysLog(module = "提交Token") +@Slf4j +public class SubmitTokenController { + @Autowired private SubmitTokenService service; + + @PostMapping("/newToken") + public String newToken() { + return this.service.newToken(); + } + + + @PostMapping("/create") + public SubmitTokenDto create(@RequestBody CreateSubmitTokenDto request) { + return this.service.create(request); + } + + @PostMapping("/update") + public SubmitTokenDto update(@RequestBody UpdateSubmitTokenDto request) { + return this.service.update(request); + } + + @PostMapping("/delete") + public Object delete(@RequestBody IdRequest request) { + this.service.delete(request); + return true; + } + + @PostMapping("/getById") + public SubmitTokenDto getById(@RequestBody IdRequest request) { + return this.service.getById(request.getId()); + } + + @PostMapping("/list") + public Page list(@RequestBody CommonQuery request) { + return this.service.list(request); + } +} diff --git a/src/main/java/cn/lihongjie/coal/submitToken/dto/CreateSubmitTokenDto.java b/src/main/java/cn/lihongjie/coal/submitToken/dto/CreateSubmitTokenDto.java new file mode 100644 index 00000000..771c4dee --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/submitToken/dto/CreateSubmitTokenDto.java @@ -0,0 +1,8 @@ +package cn.lihongjie.coal.submitToken.dto; + +import cn.lihongjie.coal.base.dto.CommonDto; + +import lombok.Data; + +@Data +public class CreateSubmitTokenDto extends CommonDto {} diff --git a/src/main/java/cn/lihongjie/coal/submitToken/dto/SubmitTokenDto.java b/src/main/java/cn/lihongjie/coal/submitToken/dto/SubmitTokenDto.java new file mode 100644 index 00000000..7b6b3bf5 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/submitToken/dto/SubmitTokenDto.java @@ -0,0 +1,8 @@ +package cn.lihongjie.coal.submitToken.dto; + +import cn.lihongjie.coal.base.dto.CommonDto; + +import lombok.Data; + +@Data +public class SubmitTokenDto extends CommonDto {} diff --git a/src/main/java/cn/lihongjie/coal/submitToken/dto/UpdateSubmitTokenDto.java b/src/main/java/cn/lihongjie/coal/submitToken/dto/UpdateSubmitTokenDto.java new file mode 100644 index 00000000..0a44774f --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/submitToken/dto/UpdateSubmitTokenDto.java @@ -0,0 +1,8 @@ +package cn.lihongjie.coal.submitToken.dto; + +import cn.lihongjie.coal.base.dto.CommonDto; + +import lombok.Data; + +@Data +public class UpdateSubmitTokenDto extends CommonDto {} diff --git a/src/main/java/cn/lihongjie/coal/submitToken/entity/SubmitTokenEntity.java b/src/main/java/cn/lihongjie/coal/submitToken/entity/SubmitTokenEntity.java new file mode 100644 index 00000000..b60c8842 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/submitToken/entity/SubmitTokenEntity.java @@ -0,0 +1,15 @@ +package cn.lihongjie.coal.submitToken.entity; + +import cn.lihongjie.coal.base.entity.CommonEntity; + +import jakarta.persistence.Entity; + +import lombok.Data; + +@Data +@Entity +public class SubmitTokenEntity extends CommonEntity { + + + +} diff --git a/src/main/java/cn/lihongjie/coal/submitToken/mapper/SubmitTokenMapper.java b/src/main/java/cn/lihongjie/coal/submitToken/mapper/SubmitTokenMapper.java new file mode 100644 index 00000000..47309b36 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/submitToken/mapper/SubmitTokenMapper.java @@ -0,0 +1,20 @@ +package cn.lihongjie.coal.submitToken.mapper; + +import cn.lihongjie.coal.base.mapper.BaseMapper; +import cn.lihongjie.coal.base.mapper.CommonEntityMapper; +import cn.lihongjie.coal.base.mapper.CommonMapper; +import cn.lihongjie.coal.submitToken.dto.CreateSubmitTokenDto; +import cn.lihongjie.coal.submitToken.dto.SubmitTokenDto; +import cn.lihongjie.coal.submitToken.dto.UpdateSubmitTokenDto; +import cn.lihongjie.coal.submitToken.entity.SubmitTokenEntity; + +import org.mapstruct.Mapper; +import org.mapstruct.control.DeepClone; + +@Mapper( + componentModel = org.mapstruct.MappingConstants.ComponentModel.SPRING, + uses = {CommonMapper.class, CommonEntityMapper.class}, + mappingControl = DeepClone.class) +public interface SubmitTokenMapper + extends BaseMapper< + SubmitTokenEntity, SubmitTokenDto, CreateSubmitTokenDto, UpdateSubmitTokenDto> {} diff --git a/src/main/java/cn/lihongjie/coal/submitToken/repository/SubmitTokenRepository.java b/src/main/java/cn/lihongjie/coal/submitToken/repository/SubmitTokenRepository.java new file mode 100644 index 00000000..d71e6ba0 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/submitToken/repository/SubmitTokenRepository.java @@ -0,0 +1,24 @@ +package cn.lihongjie.coal.submitToken.repository; + +import cn.lihongjie.coal.base.dao.BaseRepository; +import cn.lihongjie.coal.submitToken.entity.SubmitTokenEntity; + +import jakarta.persistence.LockModeType; + +import org.springframework.data.jpa.repository.Lock; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.time.LocalDateTime; +import java.util.Optional; + +@Repository +public interface SubmitTokenRepository extends BaseRepository { + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("select t from SubmitTokenEntity t where t.id = :token") + Optional findByIdLocked(String token); + + @Query("delete from SubmitTokenEntity t where t.createTime < :expireTime") + Integer expireAll(LocalDateTime expireTime); + +} diff --git a/src/main/java/cn/lihongjie/coal/submitToken/service/SubmitTokenService.java b/src/main/java/cn/lihongjie/coal/submitToken/service/SubmitTokenService.java new file mode 100644 index 00000000..e3ac62b7 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/submitToken/service/SubmitTokenService.java @@ -0,0 +1,121 @@ +package cn.lihongjie.coal.submitToken.service; + +import cn.lihongjie.coal.base.dto.CommonQuery; +import cn.lihongjie.coal.base.dto.IdRequest; +import cn.lihongjie.coal.base.service.BaseService; +import cn.lihongjie.coal.exception.BizException; +import cn.lihongjie.coal.submitToken.dto.CreateSubmitTokenDto; +import cn.lihongjie.coal.submitToken.dto.SubmitTokenDto; +import cn.lihongjie.coal.submitToken.dto.UpdateSubmitTokenDto; +import cn.lihongjie.coal.submitToken.entity.SubmitTokenEntity; +import cn.lihongjie.coal.submitToken.mapper.SubmitTokenMapper; +import cn.lihongjie.coal.submitToken.repository.SubmitTokenRepository; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.convert.ConversionService; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; + +@Service +@Slf4j +@Transactional +public class SubmitTokenService extends BaseService { + @Autowired private SubmitTokenRepository repository; + + @Autowired private SubmitTokenMapper mapper; + + @Autowired private ConversionService conversionService; + + public SubmitTokenDto create(CreateSubmitTokenDto request) { + SubmitTokenEntity entity = mapper.toEntity(request); + + this.repository.save(entity); + return getById(entity.getId()); + } + + public SubmitTokenDto update(UpdateSubmitTokenDto request) { + SubmitTokenEntity entity = this.repository.get(request.getId()); + this.mapper.updateEntity(entity, request); + + this.repository.save(entity); + + return getById(entity.getId()); + } + + public void delete(IdRequest request) { + this.repository.deleteAllById(request.getIds()); + } + + public SubmitTokenDto getById(String id) { + SubmitTokenEntity entity = repository.get(id); + + return mapper.toDto(entity); + } + + public Page list(CommonQuery query) { + Page page = + repository.findAll( + query.specification(conversionService), + PageRequest.of( + query.getPageNo(), + query.getPageSize(), + Sort.by(query.getOrders()))); + + return page.map(this.mapper::toDto); + } + + public String newToken() { + SubmitTokenEntity entity = new SubmitTokenEntity(); + entity.setStatus(0); + + this.repository.save(entity); + return entity.getId(); + } + + public void acquireToken(String token) { + + SubmitTokenEntity entity = + this.repository + .findByIdLocked(token) + .orElseThrow(() -> new BizException("token不存在: " + token)); + + if (entity.getStatus() != 0) { + throw new BizException("token已过期: " + token); + } + + entity.setStatus(1); + + this.repository.save(entity); + } + + public void releaseToken(String token) { + SubmitTokenEntity entity = + this.repository + .findByIdLocked(token) + .orElseThrow(() -> new BizException("token不存在: " + token)); + + if (entity.getStatus() != 1) { + throw new BizException("token已过期: " + token); + } + + this.repository.delete(entity); + } + + /** 删除无效的token */ + @Scheduled(cron = "0 0/1 * * * ?") + public void expireAll() { + + Integer count = this.repository.expireAll(LocalDateTime.now().minusMinutes(30)); + + log.info("删除无效token: {}", count); + + } +} diff --git a/src/main/resources/scripts/dict/enum/submitTokenDict.groovy b/src/main/resources/scripts/dict/enum/submitTokenDict.groovy new file mode 100644 index 00000000..52431731 --- /dev/null +++ b/src/main/resources/scripts/dict/enum/submitTokenDict.groovy @@ -0,0 +1,17 @@ + +package scripts.dict + +import cn.lihongjie.coal.base.dto.CommonQuery +import cn.lihongjie.coal.submitToken.controller.SubmitTokenController +import org.springframework.context.ApplicationContext + +ApplicationContext ioc = ioc + +def controller = ioc.getBean(SubmitTokenController.class) + + + + +return controller.list(new CommonQuery()) + +