From ae544dca0060e8dcb130e65efc6a3c309c8949f0 Mon Sep 17 00:00:00 2001
From: xukai <1027104849@qq.com>
Date: Fri, 6 May 2022 17:20:32 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E5=AE=89=E9=93=B6=E8=A1=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/.gitignore | 8 +
.idea/em.iml | 198 ++++
.idea/misc.xml | 16 +
.idea/modules.xml | 8 +
.idea/runConfigurations.xml | 10 +
.idea/vcs.xml | 6 +
pom.xml | 250 +++++
.../lottery/LoadDataApplicationRunner.java | 85 ++
.../com/xgl/lottery/LotteryApplication.java | 17 +
.../com/xgl/lottery/LotteryConstants.java | 37 +
.../java/com/xgl/lottery/RedisKeyManager.java | 34 +
.../java/com/xgl/lottery/ReturnCodeEnum.java | 67 ++
.../com/xgl/lottery/ServletInitializer.java | 13 +
.../xgl/lottery/ThreadPoolExecutorConfig.java | 27 +
.../lottery/ThreadPoolExecutorProperties.java | 13 +
.../com/xgl/lottery/config/AccessToken.java | 15 +
.../xgl/lottery/config/CheckInterceptor.java | 100 ++
.../com/xgl/lottery/config/CorsConfig.java | 27 +
.../config/GlobalExceptionHandler.java | 97 ++
.../config/JodaDateTimeJsonDeserializer.java | 20 +
.../config/JodaDateTimeJsonSerializer.java | 15 +
.../lottery/config/RedisTemplateConfig.java | 37 +
.../java/com/xgl/lottery/config/Request.java | 39 +
.../lottery/config/RestTemplateConfig.java | 21 +
.../xgl/lottery/constants/ActivityEnum.java | 69 ++
.../xgl/lottery/constants/ReturnCodeEnum.java | 41 +
.../controller/BusinessController.java | 149 +++
.../lottery/controller/FileController.java | 135 +++
.../lottery/controller/LotteryController.java | 170 ++++
.../lottery/controller/vo/LotteryItemVo.java | 16 +
.../lottery/converter/LotteryConverter.java | 16 +
.../lottery/dal/mapper/LotteryItemMapper.java | 13 +
.../xgl/lottery/dal/mapper/LotteryMapper.java | 13 +
.../dal/mapper/LotteryPrizeMapper.java | 19 +
.../dal/mapper/LotteryRecordMapper.java | 13 +
.../com/xgl/lottery/dal/model/Lottery.java | 41 +
.../xgl/lottery/dal/model/LotteryItem.java | 53 ++
.../xgl/lottery/dal/model/LotteryPrize.java | 42 +
.../xgl/lottery/dal/model/LotteryRecord.java | 36 +
.../exception/BaseBusinessException.java | 91 ++
.../xgl/lottery/exception/BizException.java | 34 +
.../lottery/exception/RewardException.java | 35 +
.../lottery/exception/UnRewardException.java | 35 +
.../xgl/lottery/mapper/ClockRecordMapper.java | 34 +
.../com/xgl/lottery/mapper/DrawNumMapper.java | 40 +
.../mapper/LotteryUserRecordMapper.java | 23 +
.../mapper/ReceivingAddressMapper.java | 18 +
.../xgl/lottery/mapper/SportCardMapper.java | 24 +
.../xgl/lottery/mapper/UserInfoMapper.java | 24 +
.../lottery/mapper/UserSportCardMapper.java | 22 +
.../lottery/request/dto/ClockRecordDTO.java | 142 +++
.../xgl/lottery/request/dto/DrawNumDTO.java | 75 ++
.../lottery/request/dto/LotteryRecordDTO.java | 73 ++
.../request/dto/ReceivingAddressDTO.java | 112 +++
.../xgl/lottery/request/dto/SportCardDTO.java | 59 ++
.../xgl/lottery/request/dto/UserInfoDTO.java | 126 +++
.../lottery/request/dto/UserSportCardDTO.java | 73 ++
.../com/xgl/lottery/request/vo/Activity.java | 36 +
.../xgl/lottery/request/vo/ClockContinue.java | 77 ++
.../xgl/lottery/request/vo/ClockRecord.java | 141 +++
.../lottery/request/vo/ClockRecordSort.java | 72 ++
.../com/xgl/lottery/request/vo/DrawNum.java | 86 ++
.../xgl/lottery/request/vo/HelpRecord.java | 44 +
.../xgl/lottery/request/vo/LotteryRecord.java | 76 ++
.../lottery/request/vo/ReceivingAddress.java | 107 +++
.../com/xgl/lottery/request/vo/SportCard.java | 71 ++
.../com/xgl/lottery/request/vo/UserInfo.java | 162 ++++
.../xgl/lottery/request/vo/UserSportCard.java | 77 ++
.../xgl/lottery/service/BusinessService.java | 890 ++++++++++++++++++
.../lottery/service/ILotteryItemService.java | 13 +
.../lottery/service/ILotteryPrizeService.java | 13 +
.../service/ILotteryRecordService.java | 13 +
.../xgl/lottery/service/ILotteryService.java | 15 +
.../xgl/lottery/service/dto/DoDrawDto.java | 17 +
.../xgl/lottery/service/dto/ResultResp.java | 43 +
.../service/impl/AsyncLotteryRecordTask.java | 37 +
.../service/impl/LotteryItemServiceImpl.java | 17 +
.../service/impl/LotteryPrizeServiceImpl.java | 17 +
.../impl/LotteryRecordServiceImpl.java | 17 +
.../service/impl/LotteryServiceImpl.java | 137 +++
.../impl/stock/AbstractRewardProcessor.java | 54 ++
.../impl/stock/HasStockRewardProcessor.java | 45 +
.../impl/stock/NoneStockRewardProcessor.java | 34 +
.../service/impl/stock/RewardContext.java | 23 +
.../service/impl/stock/RewardProcessor.java | 7 +
.../xgl/lottery/utils/DateConvertUtil.java | 279 ++++++
.../java/com/xgl/lottery/utils/DateUtil.java | 367 ++++++++
.../com/xgl/lottery/utils/EncryptUtil.java | 193 ++++
.../com/xgl/lottery/utils/ExceptionUtil.java | 41 +
.../xgl/lottery/utils/SnowflakeIdUtil.java | 120 +++
...itional-spring-configuration-metadata.json | 23 +
src/main/resources/application-dev.yml | 96 ++
src/main/resources/application-prod.yml | 93 ++
src/main/resources/application.yml | 4 +
src/main/resources/log4j2-spring.xml | 82 ++
.../resources/mapper/ClockRecordMapper.xml | 194 ++++
src/main/resources/mapper/DrawNumMapper.xml | 158 ++++
.../resources/mapper/LotteryRecordMapper.xml | 93 ++
.../mapper/LotteryUserRecordMapper.xml | 102 ++
.../mapper/ReceivingAddressMapper.xml | 117 +++
src/main/resources/mapper/SportCardMapper.xml | 96 ++
src/main/resources/mapper/UserInfoMapper.xml | 162 ++++
.../resources/mapper/UserSportCardMapper.xml | 100 ++
103 files changed, 7687 insertions(+)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/em.iml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/runConfigurations.xml
create mode 100644 .idea/vcs.xml
create mode 100644 pom.xml
create mode 100644 src/main/java/com/xgl/lottery/LoadDataApplicationRunner.java
create mode 100644 src/main/java/com/xgl/lottery/LotteryApplication.java
create mode 100644 src/main/java/com/xgl/lottery/LotteryConstants.java
create mode 100644 src/main/java/com/xgl/lottery/RedisKeyManager.java
create mode 100644 src/main/java/com/xgl/lottery/ReturnCodeEnum.java
create mode 100644 src/main/java/com/xgl/lottery/ServletInitializer.java
create mode 100644 src/main/java/com/xgl/lottery/ThreadPoolExecutorConfig.java
create mode 100644 src/main/java/com/xgl/lottery/ThreadPoolExecutorProperties.java
create mode 100644 src/main/java/com/xgl/lottery/config/AccessToken.java
create mode 100644 src/main/java/com/xgl/lottery/config/CheckInterceptor.java
create mode 100644 src/main/java/com/xgl/lottery/config/CorsConfig.java
create mode 100644 src/main/java/com/xgl/lottery/config/GlobalExceptionHandler.java
create mode 100644 src/main/java/com/xgl/lottery/config/JodaDateTimeJsonDeserializer.java
create mode 100644 src/main/java/com/xgl/lottery/config/JodaDateTimeJsonSerializer.java
create mode 100644 src/main/java/com/xgl/lottery/config/RedisTemplateConfig.java
create mode 100644 src/main/java/com/xgl/lottery/config/Request.java
create mode 100644 src/main/java/com/xgl/lottery/config/RestTemplateConfig.java
create mode 100644 src/main/java/com/xgl/lottery/constants/ActivityEnum.java
create mode 100644 src/main/java/com/xgl/lottery/constants/ReturnCodeEnum.java
create mode 100644 src/main/java/com/xgl/lottery/controller/BusinessController.java
create mode 100644 src/main/java/com/xgl/lottery/controller/FileController.java
create mode 100644 src/main/java/com/xgl/lottery/controller/LotteryController.java
create mode 100644 src/main/java/com/xgl/lottery/controller/vo/LotteryItemVo.java
create mode 100644 src/main/java/com/xgl/lottery/converter/LotteryConverter.java
create mode 100644 src/main/java/com/xgl/lottery/dal/mapper/LotteryItemMapper.java
create mode 100644 src/main/java/com/xgl/lottery/dal/mapper/LotteryMapper.java
create mode 100644 src/main/java/com/xgl/lottery/dal/mapper/LotteryPrizeMapper.java
create mode 100644 src/main/java/com/xgl/lottery/dal/mapper/LotteryRecordMapper.java
create mode 100644 src/main/java/com/xgl/lottery/dal/model/Lottery.java
create mode 100644 src/main/java/com/xgl/lottery/dal/model/LotteryItem.java
create mode 100644 src/main/java/com/xgl/lottery/dal/model/LotteryPrize.java
create mode 100644 src/main/java/com/xgl/lottery/dal/model/LotteryRecord.java
create mode 100644 src/main/java/com/xgl/lottery/exception/BaseBusinessException.java
create mode 100644 src/main/java/com/xgl/lottery/exception/BizException.java
create mode 100644 src/main/java/com/xgl/lottery/exception/RewardException.java
create mode 100644 src/main/java/com/xgl/lottery/exception/UnRewardException.java
create mode 100644 src/main/java/com/xgl/lottery/mapper/ClockRecordMapper.java
create mode 100644 src/main/java/com/xgl/lottery/mapper/DrawNumMapper.java
create mode 100644 src/main/java/com/xgl/lottery/mapper/LotteryUserRecordMapper.java
create mode 100644 src/main/java/com/xgl/lottery/mapper/ReceivingAddressMapper.java
create mode 100644 src/main/java/com/xgl/lottery/mapper/SportCardMapper.java
create mode 100644 src/main/java/com/xgl/lottery/mapper/UserInfoMapper.java
create mode 100644 src/main/java/com/xgl/lottery/mapper/UserSportCardMapper.java
create mode 100644 src/main/java/com/xgl/lottery/request/dto/ClockRecordDTO.java
create mode 100644 src/main/java/com/xgl/lottery/request/dto/DrawNumDTO.java
create mode 100644 src/main/java/com/xgl/lottery/request/dto/LotteryRecordDTO.java
create mode 100644 src/main/java/com/xgl/lottery/request/dto/ReceivingAddressDTO.java
create mode 100644 src/main/java/com/xgl/lottery/request/dto/SportCardDTO.java
create mode 100644 src/main/java/com/xgl/lottery/request/dto/UserInfoDTO.java
create mode 100644 src/main/java/com/xgl/lottery/request/dto/UserSportCardDTO.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/Activity.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/ClockContinue.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/ClockRecord.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/ClockRecordSort.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/DrawNum.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/HelpRecord.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/LotteryRecord.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/ReceivingAddress.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/SportCard.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/UserInfo.java
create mode 100644 src/main/java/com/xgl/lottery/request/vo/UserSportCard.java
create mode 100644 src/main/java/com/xgl/lottery/service/BusinessService.java
create mode 100644 src/main/java/com/xgl/lottery/service/ILotteryItemService.java
create mode 100644 src/main/java/com/xgl/lottery/service/ILotteryPrizeService.java
create mode 100644 src/main/java/com/xgl/lottery/service/ILotteryRecordService.java
create mode 100644 src/main/java/com/xgl/lottery/service/ILotteryService.java
create mode 100644 src/main/java/com/xgl/lottery/service/dto/DoDrawDto.java
create mode 100644 src/main/java/com/xgl/lottery/service/dto/ResultResp.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/AsyncLotteryRecordTask.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/LotteryItemServiceImpl.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/LotteryPrizeServiceImpl.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/LotteryRecordServiceImpl.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/LotteryServiceImpl.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/stock/AbstractRewardProcessor.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/stock/HasStockRewardProcessor.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/stock/NoneStockRewardProcessor.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/stock/RewardContext.java
create mode 100644 src/main/java/com/xgl/lottery/service/impl/stock/RewardProcessor.java
create mode 100644 src/main/java/com/xgl/lottery/utils/DateConvertUtil.java
create mode 100644 src/main/java/com/xgl/lottery/utils/DateUtil.java
create mode 100644 src/main/java/com/xgl/lottery/utils/EncryptUtil.java
create mode 100644 src/main/java/com/xgl/lottery/utils/ExceptionUtil.java
create mode 100644 src/main/java/com/xgl/lottery/utils/SnowflakeIdUtil.java
create mode 100644 src/main/resources/META-INF/additional-spring-configuration-metadata.json
create mode 100644 src/main/resources/application-dev.yml
create mode 100644 src/main/resources/application-prod.yml
create mode 100644 src/main/resources/application.yml
create mode 100644 src/main/resources/log4j2-spring.xml
create mode 100644 src/main/resources/mapper/ClockRecordMapper.xml
create mode 100644 src/main/resources/mapper/DrawNumMapper.xml
create mode 100644 src/main/resources/mapper/LotteryRecordMapper.xml
create mode 100644 src/main/resources/mapper/LotteryUserRecordMapper.xml
create mode 100644 src/main/resources/mapper/ReceivingAddressMapper.xml
create mode 100644 src/main/resources/mapper/SportCardMapper.xml
create mode 100644 src/main/resources/mapper/UserInfoMapper.xml
create mode 100644 src/main/resources/mapper/UserSportCardMapper.xml
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..73f69e0
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/em.iml b/.idea/em.iml
new file mode 100644
index 0000000..5835f6c
--- /dev/null
+++ b/.idea/em.iml
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..5b6a5c4
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..b43a1b1
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..797acea
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..fc5cb25
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,250 @@
+
+
+ 4.0.0
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.3.10.RELEASE
+
+
+ com.xgl.lottery
+ employee-care
+ 1.0-SNAPSHOT
+ war
+
+
+ 8
+ 8
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+ provided
+
+
+
+ mysql
+ mysql-connector-java
+ runtime
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.4.3
+
+
+ com.baomidou
+ mybatis-plus-generator
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-generator
+ 3.4.1
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.72
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.1.22
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.9
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.12
+
+
+
+ org.apache.commons
+ commons-pool2
+ 2.8.0
+
+
+
+ org.mapstruct
+ mapstruct
+ 1.4.2.Final
+
+
+
+ org.mapstruct
+ mapstruct-jdk8
+ 1.4.2.Final
+
+
+
+ org.mapstruct
+ mapstruct-processor
+ 1.4.2.Final
+
+
+
+ joda-time
+ joda-time
+ 2.10.6
+
+
+
+ io.springfox
+ springfox-swagger2
+ 2.9.2
+
+
+ com.github.xiaoymin
+ swagger-bootstrap-ui
+ 1.9.6
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ 2.6.5
+
+
+ org.jetbrains
+ annotations
+ 23.0.0
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.14.0
+
+
+ org.springframework
+ spring-context-support
+ 5.3.17
+
+
+ commons-fileupload
+ commons-fileupload
+ 1.4
+
+
+ com.github.pagehelper
+ pagehelper
+ 5.3.0
+
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.0
+
+
+ org.apache.httpcomponents
+ httpmime
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+ commons-lang
+ commons-lang
+ 2.6
+
+
+
+ cn.hutool
+ hutool-all
+ 5.5.6
+
+
+
+ com.github.binarywang
+ weixin-java-open
+ 4.0.0
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/xgl/lottery/LoadDataApplicationRunner.java b/src/main/java/com/xgl/lottery/LoadDataApplicationRunner.java
new file mode 100644
index 0000000..4691d2f
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/LoadDataApplicationRunner.java
@@ -0,0 +1,85 @@
+package com.xgl.lottery;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xgl.lottery.dal.mapper.LotteryItemMapper;
+import com.xgl.lottery.dal.mapper.LotteryMapper;
+import com.xgl.lottery.dal.mapper.LotteryPrizeMapper;
+import com.xgl.lottery.dal.model.Lottery;
+import com.xgl.lottery.dal.model.LotteryItem;
+import com.xgl.lottery.dal.model.LotteryPrize;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
+
+@Slf4j
+@Component
+public class LoadDataApplicationRunner implements ApplicationRunner {
+
+
+ @Autowired
+ RedisTemplate redisTemplate;
+
+
+
+ @Resource
+ LotteryPrizeMapper lotteryPrizeMapper;
+
+ @Resource
+ LotteryItemMapper lotteryItemMapper;
+
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ log.info("=========begin ===========");
+
+ QueryWrapper lotteryItemQueryWrapper = new QueryWrapper<>();
+ lotteryItemQueryWrapper.eq("lottery_id", 1);
+ List lotteryItems = lotteryItemMapper.selectList(lotteryItemQueryWrapper);
+
+ LotteryItem defaultLotteryItem = lotteryItems.parallelStream().filter(o -> o.getDefaultItem().intValue() == 1).findFirst().orElse(null);
+
+ Map lotteryItemMap = new HashMap<>(16);
+ lotteryItemMap.put(RedisKeyManager.getLotteryItemRedisKey(1), lotteryItems);
+ lotteryItemMap.put(RedisKeyManager.getDefaultLotteryItemRedisKey(1), defaultLotteryItem);
+ redisTemplate.opsForValue().multiSet(lotteryItemMap);
+
+ QueryWrapper queryWrapper = new QueryWrapper();
+ queryWrapper.eq("lottery_id", 1);
+ List lotteryPrizes = lotteryPrizeMapper.selectList(queryWrapper);
+
+ AtomicReference defaultPrize = new AtomicReference<>();
+ lotteryPrizes.stream().forEach(lotteryPrize -> {
+ if (lotteryPrize.getId().equals(defaultLotteryItem.getPrizeId())) {
+ defaultPrize.set(lotteryPrize);
+ }
+ String key = RedisKeyManager.getLotteryPrizeRedisKey(1, lotteryPrize.getId());
+ setLotteryPrizeToRedis(key, lotteryPrize);
+ });
+ String key = RedisKeyManager.getDefaultLotteryPrizeRedisKey(1);
+ setLotteryPrizeToRedis(key, defaultPrize.get());
+ log.info("=========finish ===========");
+ }
+
+ private void setLotteryPrizeToRedis(String key, LotteryPrize lotteryPrize) {
+ redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
+ redisTemplate.opsForHash().put(key, "id", lotteryPrize.getId());
+ redisTemplate.opsForHash().put(key, "lotteryId", lotteryPrize.getLotteryId());
+ redisTemplate.opsForHash().put(key, "prizeName", lotteryPrize.getPrizeName());
+ redisTemplate.opsForHash().put(key, "prizeType", lotteryPrize.getPrizeType());
+ redisTemplate.opsForHash().put(key, "totalStock", lotteryPrize.getTotalStock());
+ redisTemplate.opsForHash().put(key, "validStock", lotteryPrize.getValidStock());
+ }
+
+
+
+}
diff --git a/src/main/java/com/xgl/lottery/LotteryApplication.java b/src/main/java/com/xgl/lottery/LotteryApplication.java
new file mode 100644
index 0000000..c85aa4f
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/LotteryApplication.java
@@ -0,0 +1,17 @@
+package com.xgl.lottery;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@SpringBootApplication
+@EnableTransactionManagement
+@MapperScan({"com.xgl.lottery.dal.mapper","com.xgl.lottery.mapper"})
+public class LotteryApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(LotteryApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/xgl/lottery/LotteryConstants.java b/src/main/java/com/xgl/lottery/LotteryConstants.java
new file mode 100644
index 0000000..3bb3dc7
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/LotteryConstants.java
@@ -0,0 +1,37 @@
+package com.xgl.lottery;
+
+public class LotteryConstants {
+
+
+ public final static String DRAWING = "DRAWING";
+
+
+ public final static String LOTTERY = "LOTTERY";
+
+
+ public final static String LOTTERY_PRIZE = "LOTTERY_PRIZE";
+
+
+ public final static String DEFAULT_LOTTERY_PRIZE = "DEFAULT_LOTTERY_PRIZE";
+
+ public enum PrizeTypeEnum {
+ THANK(-1), NORMAL(1), UNIQUE(2);
+ private int value;
+
+ private PrizeTypeEnum(int value) {
+ this.value = value;
+ }
+
+ public int getValue() {
+ return this.value;
+ }
+ }
+
+
+ public final static String LOTTERY_ITEM = "LOTTERY_ITEM";
+
+
+ public final static String DEFAULT_LOTTERY_ITEM = "DEFAULT_LOTTERY_ITEM";
+
+}
+
diff --git a/src/main/java/com/xgl/lottery/RedisKeyManager.java b/src/main/java/com/xgl/lottery/RedisKeyManager.java
new file mode 100644
index 0000000..64fbea1
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/RedisKeyManager.java
@@ -0,0 +1,34 @@
+package com.xgl.lottery;
+
+
+public class RedisKeyManager {
+
+
+ public static String getDrawingRedisKey(String accountIp) {
+ return new StringBuilder(LotteryConstants.DRAWING).append(":").append(accountIp).toString();
+ }
+
+ public static String getLotteryRedisKey(Integer id) {
+ return new StringBuilder(LotteryConstants.LOTTERY).append(":").append(id).toString();
+ }
+
+ public static String getLotteryPrizeRedisKey(Integer lotteryId) {
+ return new StringBuilder(LotteryConstants.LOTTERY_PRIZE).append(":").append(lotteryId).toString();
+ }
+
+ public static String getLotteryPrizeRedisKey(Integer lotteryId, Integer prizeId) {
+ return new StringBuilder(LotteryConstants.LOTTERY_PRIZE).append(":").append(lotteryId).append(":").append(prizeId).toString();
+ }
+
+ public static String getDefaultLotteryPrizeRedisKey(Integer lotteryId) {
+ return new StringBuilder(LotteryConstants.DEFAULT_LOTTERY_PRIZE).append(":").append(lotteryId).toString();
+ }
+
+ public static String getLotteryItemRedisKey(Integer lotteryId) {
+ return new StringBuilder(LotteryConstants.LOTTERY_ITEM).append(":").append(lotteryId).toString();
+ }
+
+ public static String getDefaultLotteryItemRedisKey(Integer lotteryId) {
+ return new StringBuilder(LotteryConstants.DEFAULT_LOTTERY_ITEM).append(":").append(lotteryId).toString();
+ }
+}
diff --git a/src/main/java/com/xgl/lottery/ReturnCodeEnum.java b/src/main/java/com/xgl/lottery/ReturnCodeEnum.java
new file mode 100644
index 0000000..5fb548b
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/ReturnCodeEnum.java
@@ -0,0 +1,67 @@
+package com.xgl.lottery;
+
+public enum ReturnCodeEnum {
+
+ SUCCESS("0000", "成功"),
+
+ FAIL("9888", "文件下载失败"),
+
+ LOTTER_NOT_EXIST("9001", "指定抽奖活动不存在"),
+
+ LOTTER_FINISH("9002", "活动已结束"),
+
+ LOTTER_REPO_NOT_ENOUGHT("9003", "当前奖品库存不足"),
+
+ LOTTER_ITEM_NOT_INITIAL("9004", "奖项数据未初始化"),
+
+ LOTTER_DRAWING("9005", "上一次抽奖还未结束"),
+
+ LOTTER_BEFORE("9006", "请完成今日打卡才可以抽奖"),
+
+ LOTTER_NUM("9007", "没有抽奖次数"),
+
+ LOTTER_COME_OVER("9008", "活动已结束"),
+
+ ADDRESS_EXIT("9009", "地址已存在"),
+
+ REQUEST_PARAM_NOT_VALID("9998", "请求参数不正确"),
+
+ REQUEST_PARAM_NOT_EXIT("9997", "请求凭证不存在"),
+
+ REQUEST_PARAM_EXIT("9996", "该用户已存在"),
+
+ REQUEST_NOT_EXIT("9910", "该用户不存在"),
+
+ SYSTEM_ERROR("9999", "系统繁忙,请稍后重试"),
+
+ DRAW_VALID("9995", "今天已抽卡,请明日再来"),
+
+ HIT_CLOCK_TIME_VALID("9994", "打卡无效,打卡开始时间和结束时间不在同一天"),
+
+ HIT_CLOCK_TIME_ONCE("9993", "打卡无效,一天只能打一次卡"),
+
+ DRAW_CARD_NOT("9994", "抽卡池未初始化"),
+
+ ILLEGAL_ARGUMENT("3001", "非法参数");
+
+ private String code;
+
+ private String msg;
+
+ private ReturnCodeEnum(String code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public String getCodeString() {
+ return getCode() + "";
+ }
+}
diff --git a/src/main/java/com/xgl/lottery/ServletInitializer.java b/src/main/java/com/xgl/lottery/ServletInitializer.java
new file mode 100644
index 0000000..ffd444b
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/ServletInitializer.java
@@ -0,0 +1,13 @@
+package com.xgl.lottery;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+public class ServletInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(LotteryApplication.class);
+ }
+
+}
diff --git a/src/main/java/com/xgl/lottery/ThreadPoolExecutorConfig.java b/src/main/java/com/xgl/lottery/ThreadPoolExecutorConfig.java
new file mode 100644
index 0000000..fb829b6
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/ThreadPoolExecutorConfig.java
@@ -0,0 +1,27 @@
+package com.xgl.lottery;
+
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@EnableAsync
+@EnableConfigurationProperties(ThreadPoolExecutorProperties.class)
+public class ThreadPoolExecutorConfig {
+
+ @Bean(name = "lotteryServiceExecutor")
+ public Executor lotteryServiceExecutor(ThreadPoolExecutorProperties poolExecutorProperties) {
+ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ executor.setCorePoolSize(poolExecutorProperties.getCorePoolSize());
+ executor.setMaxPoolSize(poolExecutorProperties.getMaxPoolSize());
+ executor.setQueueCapacity(poolExecutorProperties.getQueueCapacity());
+ executor.setThreadNamePrefix(poolExecutorProperties.getNamePrefix());
+ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return executor;
+ }
+}
diff --git a/src/main/java/com/xgl/lottery/ThreadPoolExecutorProperties.java b/src/main/java/com/xgl/lottery/ThreadPoolExecutorProperties.java
new file mode 100644
index 0000000..7a163fd
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/ThreadPoolExecutorProperties.java
@@ -0,0 +1,13 @@
+package com.xgl.lottery;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Data
+@ConfigurationProperties(prefix = "async.executor.thread")
+public class ThreadPoolExecutorProperties {
+ private int corePoolSize;
+ private int maxPoolSize;
+ private int queueCapacity;
+ private String namePrefix;
+}
diff --git a/src/main/java/com/xgl/lottery/config/AccessToken.java b/src/main/java/com/xgl/lottery/config/AccessToken.java
new file mode 100644
index 0000000..b050daa
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/config/AccessToken.java
@@ -0,0 +1,15 @@
+package com.xgl.lottery.config;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class AccessToken implements Serializable {
+ private static final long serialVersionUID = -1345910558078620805L;
+ @SerializedName("access_token")
+ private String accessToken;
+ @SerializedName("expires_in")
+ private int expires_in;
+}
diff --git a/src/main/java/com/xgl/lottery/config/CheckInterceptor.java b/src/main/java/com/xgl/lottery/config/CheckInterceptor.java
new file mode 100644
index 0000000..0337f25
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/config/CheckInterceptor.java
@@ -0,0 +1,100 @@
+package com.xgl.lottery.config;
+
+import com.alibaba.fastjson.JSON;
+import com.xgl.lottery.ReturnCodeEnum;
+import com.xgl.lottery.mapper.UserInfoMapper;
+import com.xgl.lottery.request.vo.UserInfo;
+import com.xgl.lottery.service.dto.ResultResp;
+import com.xgl.lottery.utils.EncryptUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
+
+@Configuration
+@Component
+@Slf4j
+public class CheckInterceptor implements HandlerInterceptor {
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ @Autowired
+ private UserInfoMapper userInfoMapper;
+ @Override
+ public boolean preHandle(HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object o) throws Exception {
+
+
+ String accessToken = request.getHeader("accessToken");
+ String requestURI = request.getRequestURI();
+
+ log.info("获取的url:"+requestURI);
+ if (requestURI.equals("/employee-care/doc.html")||requestURI.equals("/employee-care/docs.html")){
+ return true;
+ }
+ if (requestURI.equals("/employee-care/icon.jpg")){
+ return true;
+ }
+ if (requestURI.equals("/employee-care/oss/get/file")){
+ return true;
+ }
+ if (StringUtils.isBlank(accessToken)&& requestURI.equals("/employee-care/business/add")){
+ return true;
+ }
+ if (StringUtils.isBlank(accessToken)&& requestURI.equals("/employee-care/business/get/user")){
+ return true;
+ }
+
+ if (StringUtils.isBlank(accessToken)&& (!requestURI.equals("/employee-care/business/add"))){
+ response(response, JSON.toJSONString(ResultResp.fail(ReturnCodeEnum.REQUEST_PARAM_NOT_EXIT.getCode(),ReturnCodeEnum.REQUEST_PARAM_NOT_EXIT.getMsg())));
+ return false;
+
+ }
+ if (StringUtils.isNotBlank(accessToken)&&!requestURI.equals("/employee-care/business/add")){
+ String s = EncryptUtil.decryptByDES(accessToken);
+ UserInfo userInfo = userInfoMapper.selectByUm(s);
+ if (null==userInfo){
+ response(response, JSON.toJSONString(ResultResp.fail(ReturnCodeEnum.REQUEST_PARAM_NOT_EXIT.getCode(),ReturnCodeEnum.REQUEST_PARAM_NOT_EXIT.getMsg())));
+ return false;
+ }else {
+ return true;
+ }
+
+ }
+
+ return true;
+ }
+
+ @Override
+ public void postHandle(@NotNull HttpServletRequest httpServletRequest, @NotNull HttpServletResponse httpServletResponse, @NotNull Object o, ModelAndView modelAndView) throws Exception {
+
+ }
+
+ @Override
+ public void afterCompletion(@NotNull HttpServletRequest httpServletRequest, @NotNull HttpServletResponse httpServletResponse, @NotNull Object o, Exception e) throws Exception {
+
+ }
+
+
+
+ public static void response(HttpServletResponse response, String str) throws Exception {
+ response.setContentType("application/json; charset=utf-8");
+ PrintWriter writer = response.getWriter();
+ writer.print(str);
+ writer.close();
+ response.flushBuffer();
+ }
+
+
+
+
+}
diff --git a/src/main/java/com/xgl/lottery/config/CorsConfig.java b/src/main/java/com/xgl/lottery/config/CorsConfig.java
new file mode 100644
index 0000000..e6b0a43
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/config/CorsConfig.java
@@ -0,0 +1,27 @@
+package com.xgl.lottery.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+
+@Configuration
+public class CorsConfig {
+
+ private CorsConfiguration buildConfig() {
+ CorsConfiguration corsConfiguration = new CorsConfiguration();
+ corsConfiguration.addAllowedOrigin("*");
+ corsConfiguration.addAllowedHeader("*");
+ corsConfiguration.addAllowedMethod("*");
+ return corsConfiguration;
+ }
+
+ @Bean
+ public CorsFilter corsFilter() {
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+ source.registerCorsConfiguration("/**", buildConfig()); //注册
+ return new CorsFilter(source);
+ }
+}
diff --git a/src/main/java/com/xgl/lottery/config/GlobalExceptionHandler.java b/src/main/java/com/xgl/lottery/config/GlobalExceptionHandler.java
new file mode 100644
index 0000000..80868a0
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/config/GlobalExceptionHandler.java
@@ -0,0 +1,97 @@
+package com.xgl.lottery.config;
+
+import com.xgl.lottery.ReturnCodeEnum;
+import com.xgl.lottery.exception.BaseBusinessException;
+import com.xgl.lottery.service.dto.ResultResp;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.BindException;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import javax.validation.ValidationException;
+import java.util.stream.Collectors;
+
+
+@Slf4j
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+ /**
+ * 默认全局异常处理。
+ *
+ * @param e e
+ * @return ResponseData
+ */
+ @ExceptionHandler(Exception.class)
+ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+ public ResultResp exception(Exception e) {
+ log.error("兜底异常信息 ex={}", e.getMessage());
+ return new ResultResp(ReturnCodeEnum.SYSTEM_ERROR.getCode(), e.getMessage());
+ }
+
+ /**
+ * Assert异常
+ */
+ @ExceptionHandler({IllegalArgumentException.class, IllegalStateException.class})
+ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+ public ResultResp exception(IllegalArgumentException e) {
+ return new ResultResp(ReturnCodeEnum.ILLEGAL_ARGUMENT.getCode(), e.getMessage());
+ }
+
+
+ /**
+ * 抓取自定义异常 BaseException
+ */
+ @ExceptionHandler(BaseBusinessException.class)
+ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+ public ResultResp exception(BaseBusinessException e) {
+ return new ResultResp(e.getErrorCode(), e.getMessage());
+ }
+
+
+ /**
+ * @param e
+ * @return
+ */
+ @ExceptionHandler(value = {BindException.class, ValidationException.class, MethodArgumentNotValidException.class})
+ public ResponseEntity> handleValidatedException(Exception e) {
+ ResultResp resp = null;
+
+ if (e instanceof MethodArgumentNotValidException) {
+ // BeanValidation exception
+ MethodArgumentNotValidException ex = (MethodArgumentNotValidException) e;
+ resp = ResultResp.fail(String.valueOf(HttpStatus.BAD_REQUEST.value()),
+ ex.getBindingResult().getAllErrors().stream()
+ .map(ObjectError::getDefaultMessage)
+ .collect(Collectors.joining("; "))
+ );
+ } else if (e instanceof ConstraintViolationException) {
+ // BeanValidation GET simple param
+ ConstraintViolationException ex = (ConstraintViolationException) e;
+ resp = ResultResp.fail(String.valueOf(HttpStatus.BAD_REQUEST.value()),
+ ex.getConstraintViolations().stream()
+ .map(ConstraintViolation::getMessage)
+ .collect(Collectors.joining("; "))
+ );
+ } else if (e instanceof BindException) {
+ // BeanValidation GET object param
+ BindException ex = (BindException) e;
+ resp = ResultResp.fail(String.valueOf(HttpStatus.BAD_REQUEST.value()),
+ ex.getAllErrors().stream()
+ .map(ObjectError::getDefaultMessage)
+ .collect(Collectors.joining("; "))
+ );
+ }
+
+ log.error("参数校验异常:{}", resp.getMsg());
+ return new ResponseEntity<>(resp, HttpStatus.BAD_REQUEST);
+ }
+
+}
diff --git a/src/main/java/com/xgl/lottery/config/JodaDateTimeJsonDeserializer.java b/src/main/java/com/xgl/lottery/config/JodaDateTimeJsonDeserializer.java
new file mode 100644
index 0000000..673a023
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/config/JodaDateTimeJsonDeserializer.java
@@ -0,0 +1,20 @@
+package com.xgl.lottery.config;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import java.io.IOException;
+
+public class JodaDateTimeJsonDeserializer extends JsonDeserializer {
+ @Override
+ public DateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ String dateString = jsonParser.readValueAs(String.class);
+ DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
+ return dateTimeFormatter.parseDateTime(dateString);
+ }
+}
diff --git a/src/main/java/com/xgl/lottery/config/JodaDateTimeJsonSerializer.java b/src/main/java/com/xgl/lottery/config/JodaDateTimeJsonSerializer.java
new file mode 100644
index 0000000..a297e27
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/config/JodaDateTimeJsonSerializer.java
@@ -0,0 +1,15 @@
+package com.xgl.lottery.config;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import org.joda.time.DateTime;
+
+import java.io.IOException;
+
+public class JodaDateTimeJsonSerializer extends JsonSerializer {
+ @Override
+ public void serialize(DateTime dateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ jsonGenerator.writeString(dateTime.toString("yyyy-MM-dd HH:mm:ss"));
+ }
+}
diff --git a/src/main/java/com/xgl/lottery/config/RedisTemplateConfig.java b/src/main/java/com/xgl/lottery/config/RedisTemplateConfig.java
new file mode 100644
index 0000000..58d90f9
--- /dev/null
+++ b/src/main/java/com/xgl/lottery/config/RedisTemplateConfig.java
@@ -0,0 +1,37 @@
+package com.xgl.lottery.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import org.joda.time.DateTime;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+@Configuration
+public class RedisTemplateConfig {
+
+ @Bean
+ public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+ RedisTemplate