OperateServiceImpl.java 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package com.smcic.api.operate.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.fasterxml.jackson.core.JsonProcessingException;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import com.smcic.api.operate.entity.KeysConst;
  6. import com.smcic.api.operate.entity.Operate;
  7. import com.smcic.api.operate.mapper.OperateMapper;
  8. import com.smcic.api.operate.service.IOperateService;
  9. import com.smcic.core.advice.APIException;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.apache.http.util.TextUtils;
  12. import org.springframework.data.redis.core.RedisTemplate;
  13. import org.springframework.stereotype.Service;
  14. import javax.annotation.Resource;
  15. import java.time.LocalDateTime;
  16. import java.time.ZoneOffset;
  17. /**
  18. * <p>
  19. * 服务实现类
  20. * </p>
  21. *
  22. * @author syj
  23. * @since 2022-12-10
  24. */
  25. @Service
  26. @Slf4j
  27. public class OperateServiceImpl extends ServiceImpl<OperateMapper, Operate> implements IOperateService {
  28. @Resource
  29. private RedisTemplate<String, String> redisTemplate;
  30. @Resource
  31. private ObjectMapper objectMapper;
  32. public void verify(Integer operateId){
  33. LocalDateTime now = LocalDateTime.now();
  34. Operate ope = getFromCache(operateId);
  35. if(null != ope.getStartTime() && ope.getStartTime().isAfter(now)){
  36. throw new APIException(400, "活动尚未开始");
  37. }
  38. if(null != ope.getEndTime() && ope.getEndTime().isBefore(now)){
  39. throw new APIException(400, "活动已经结束");
  40. }
  41. }
  42. public Operate getFromCache(Integer operateId){
  43. String ope = redisTemplate.opsForValue().get(KeysConst.OPERATE + operateId);
  44. Operate operate = new Operate();
  45. try {
  46. if(TextUtils.isEmpty(ope)){
  47. operate = getById(operateId);
  48. redisTemplate.opsForValue().set(KeysConst.OPERATE + operateId, objectMapper.writeValueAsString(operate));
  49. }else{
  50. operate = objectMapper.readValue(ope, Operate.class);
  51. }
  52. } catch (JsonProcessingException e) {
  53. log.error("获取operate失败", e);
  54. }
  55. return operate;
  56. }
  57. public Long getTTl(Integer operateId){
  58. LocalDateTime now = LocalDateTime.now();
  59. Operate ope = getById(operateId);
  60. if(null == ope.getEndTime()) return 3600 * 24 * 365L;
  61. return ope.getEndTime().isAfter(now) ? ope.getEndTime().toEpochSecond(ZoneOffset.of("+8")) - now.toEpochSecond(ZoneOffset.of("+8")) : 1L;
  62. }
  63. }