From e5f05825dea7077935b648d461da26e64c6feeed Mon Sep 17 00:00:00 2001 From: gaojiuqi Date: Fri, 25 Feb 2022 17:12:38 +0800 Subject: [PATCH] ...... --- pom.xml | 12 +- .../{nft2022 => nft}/NftApplication.java | 2 +- .../com/szxgl/nft/config/RedisConfig.java | 53 ++ .../controller/NFTPhotoController.java | 59 +- .../szxgl/nft/controller/UserController.java | 99 +++ .../VerificationCodeController.java | 59 ++ .../entity/NftPhotoDO.java} | 14 +- .../com/szxgl/nft/entity/RedisKeyName.java | 10 + .../szxgl/{nft2022 => nft}/entity/UserDO.java | 12 +- .../com/szxgl/nft/entity/UserNftPhoto.java | 29 + .../exception/MyAjaxExceptionHandler.java | 6 +- .../exception/ParameterException.java | 2 +- .../filter/WebAuthFilter.java | 10 +- .../com/szxgl/nft/mapper/NftPhotoMapper.java | 18 + .../{nft2022 => nft}/mapper/UserMapper.java | 4 +- .../szxgl/nft/mapper/UserNftPhotoMapper.java | 11 + .../szxgl/nft/service/NftPhotoService.java | 14 + .../nft/service/UserNftPhotoService.java | 7 + .../com/szxgl/nft/service/UserService.java | 14 + .../nft/service/impl/NftPhotoServiceImpl.java | 51 ++ .../service/impl/UserNftPhotoServiceImpl.java | 9 + .../nft/service/impl/UserServiceImpl.java | 45 ++ .../utils/AliyunSmsUtils.java | 13 +- .../szxgl/{nft2022 => nft}/utils/BCrypt.java | 2 +- .../java/com/szxgl/nft/utils/CookieUtil.java | 25 + .../{nft2022 => nft}/utils/EncryptUtil.java | 2 +- .../utils/HttpClientUtil.java | 2 +- .../com/szxgl/{nft2022 => nft}/utils/R.java | 2 +- .../java/com/szxgl/nft/utils/RedisUtil.java | 707 ++++++++++++++++++ .../szxgl/{nft2022 => nft}/utils/URIUtil.java | 3 +- .../szxgl/{nft2022 => nft}/utils/Utility.java | 2 +- .../szxgl/nft2022/mapper/NftPhotoMapper.java | 9 - .../nft2022/service/NftPhotoService.java | 9 - .../szxgl/nft2022/service/UserService.java | 11 - .../service/impl/NftPhotoServiceImpl.java | 22 - .../nft2022/service/impl/UserServiceImpl.java | 28 - src/main/resources/application-dev.yml | 14 + src/main/resources/application.yml | 4 +- src/main/resources/log4j2-spring.xml | 10 +- src/main/resources/mapper/NftPhotoMapper.xml | 50 ++ 40 files changed, 1317 insertions(+), 138 deletions(-) rename src/main/java/com/szxgl/{nft2022 => nft}/NftApplication.java (91%) create mode 100644 src/main/java/com/szxgl/nft/config/RedisConfig.java rename src/main/java/com/szxgl/{nft2022 => nft}/controller/NFTPhotoController.java (61%) create mode 100644 src/main/java/com/szxgl/nft/controller/UserController.java create mode 100644 src/main/java/com/szxgl/nft/controller/VerificationCodeController.java rename src/main/java/com/szxgl/{nft2022/entity/NftPhoto.java => nft/entity/NftPhotoDO.java} (71%) create mode 100644 src/main/java/com/szxgl/nft/entity/RedisKeyName.java rename src/main/java/com/szxgl/{nft2022 => nft}/entity/UserDO.java (66%) create mode 100644 src/main/java/com/szxgl/nft/entity/UserNftPhoto.java rename src/main/java/com/szxgl/{nft2022 => nft}/exception/MyAjaxExceptionHandler.java (82%) rename src/main/java/com/szxgl/{nft2022 => nft}/exception/ParameterException.java (79%) rename src/main/java/com/szxgl/{nft2022 => nft}/filter/WebAuthFilter.java (97%) create mode 100644 src/main/java/com/szxgl/nft/mapper/NftPhotoMapper.java rename src/main/java/com/szxgl/{nft2022 => nft}/mapper/UserMapper.java (69%) create mode 100644 src/main/java/com/szxgl/nft/mapper/UserNftPhotoMapper.java create mode 100644 src/main/java/com/szxgl/nft/service/NftPhotoService.java create mode 100644 src/main/java/com/szxgl/nft/service/UserNftPhotoService.java create mode 100644 src/main/java/com/szxgl/nft/service/UserService.java create mode 100644 src/main/java/com/szxgl/nft/service/impl/NftPhotoServiceImpl.java create mode 100644 src/main/java/com/szxgl/nft/service/impl/UserNftPhotoServiceImpl.java create mode 100644 src/main/java/com/szxgl/nft/service/impl/UserServiceImpl.java rename src/main/java/com/szxgl/{nft2022 => nft}/utils/AliyunSmsUtils.java (96%) rename src/main/java/com/szxgl/{nft2022 => nft}/utils/BCrypt.java (99%) create mode 100644 src/main/java/com/szxgl/nft/utils/CookieUtil.java rename src/main/java/com/szxgl/{nft2022 => nft}/utils/EncryptUtil.java (99%) rename src/main/java/com/szxgl/{nft2022 => nft}/utils/HttpClientUtil.java (99%) rename src/main/java/com/szxgl/{nft2022 => nft}/utils/R.java (96%) create mode 100644 src/main/java/com/szxgl/nft/utils/RedisUtil.java rename src/main/java/com/szxgl/{nft2022 => nft}/utils/URIUtil.java (97%) rename src/main/java/com/szxgl/{nft2022 => nft}/utils/Utility.java (99%) delete mode 100644 src/main/java/com/szxgl/nft2022/mapper/NftPhotoMapper.java delete mode 100644 src/main/java/com/szxgl/nft2022/service/NftPhotoService.java delete mode 100644 src/main/java/com/szxgl/nft2022/service/UserService.java delete mode 100644 src/main/java/com/szxgl/nft2022/service/impl/NftPhotoServiceImpl.java delete mode 100644 src/main/java/com/szxgl/nft2022/service/impl/UserServiceImpl.java create mode 100644 src/main/resources/mapper/NftPhotoMapper.xml diff --git a/pom.xml b/pom.xml index a823ea1..ba81303 100644 --- a/pom.xml +++ b/pom.xml @@ -8,12 +8,12 @@ 2.6.3 - com.szxgl.nft2022 - pars-nft2022 + com.szxgl.nft + pars-nft 0.0.1-SNAPSHOT war - pars-nft2022 - pars-nft2022 + pars-nft + pars-nft 1.8 3.4.2 @@ -111,6 +111,10 @@ 1.1.0 + + org.springframework.boot + spring-boot-starter-data-redis + diff --git a/src/main/java/com/szxgl/nft2022/NftApplication.java b/src/main/java/com/szxgl/nft/NftApplication.java similarity index 91% rename from src/main/java/com/szxgl/nft2022/NftApplication.java rename to src/main/java/com/szxgl/nft/NftApplication.java index ea82629..9e86968 100644 --- a/src/main/java/com/szxgl/nft2022/NftApplication.java +++ b/src/main/java/com/szxgl/nft/NftApplication.java @@ -1,4 +1,4 @@ -package com.szxgl.nft2022; +package com.szxgl.nft; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/src/main/java/com/szxgl/nft/config/RedisConfig.java b/src/main/java/com/szxgl/nft/config/RedisConfig.java new file mode 100644 index 0000000..f3d91b3 --- /dev/null +++ b/src/main/java/com/szxgl/nft/config/RedisConfig.java @@ -0,0 +1,53 @@ +package com.szxgl.nft.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +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; + +import java.net.UnknownHostException; + +@Configuration +@SuppressWarnings("all") +//镇压所有警告 +public class RedisConfig { + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + RedisTemplate template = new RedisTemplate<>(); +// 默认的连接配置 + template.setConnectionFactory(redisConnectionFactory); + +// 序列化配置 +// new 一个Jackson序列化对象,用于后面的设置 + Jackson2JsonRedisSerializer objectJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); +// 用于转义 + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + + objectJackson2JsonRedisSerializer.setObjectMapper(objectMapper); +// 创建string的序列化 + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + +// string的key和hash的key都采用string的序列化 +// value都采用Jackson的序列化 + + //key采用string序列化方式 + template.setKeySerializer(stringRedisSerializer); + //hash的key采用string序列化方式 + template.setHashKeySerializer(stringRedisSerializer); + //value采用Jackson序列化方式 + template.setValueSerializer(objectJackson2JsonRedisSerializer); + //hash的value采用Jackson序列化方式 + template.setHashValueSerializer(objectJackson2JsonRedisSerializer); + + + return template; + } +} diff --git a/src/main/java/com/szxgl/nft2022/controller/NFTPhotoController.java b/src/main/java/com/szxgl/nft/controller/NFTPhotoController.java similarity index 61% rename from src/main/java/com/szxgl/nft2022/controller/NFTPhotoController.java rename to src/main/java/com/szxgl/nft/controller/NFTPhotoController.java index 8af95cd..c2d80ba 100644 --- a/src/main/java/com/szxgl/nft2022/controller/NFTPhotoController.java +++ b/src/main/java/com/szxgl/nft/controller/NFTPhotoController.java @@ -1,20 +1,21 @@ -package com.szxgl.nft2022.controller; +package com.szxgl.nft.controller; import com.alibaba.fastjson.JSONObject; -import com.szxgl.nft2022.entity.NftPhoto; -import com.szxgl.nft2022.exception.ParameterException; -import com.szxgl.nft2022.service.NftPhotoService; -import com.szxgl.nft2022.utils.EncryptUtil; -import com.szxgl.nft2022.utils.HttpClientUtil; -import com.szxgl.nft2022.utils.R; +import com.szxgl.nft.entity.UserNftPhoto; +import com.szxgl.nft.exception.ParameterException; +import com.szxgl.nft.service.NftPhotoService; +import com.szxgl.nft.utils.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; -@Controller +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +@RestController @RequestMapping("/nft") @Slf4j public class NFTPhotoController { @@ -32,11 +33,11 @@ public class NFTPhotoController { if(StringUtils.isBlank(seed)){ log.error("seed不能为空:"+seed); - throw new ParameterException("seed不能为空"); + return R.error("手机号不能为空"); } - NftPhoto nftPhoto = nftPhotoService.getNftPhoto(seed); - if(nftPhoto == null ){ + UserNftPhoto userNftPhoto = nftPhotoService.getNftPhoto(seed); + if(userNftPhoto == null ){ //手机号加密 String phone = encrypt(seed); phone = String.format("{'phone':'%s'}",phone); @@ -49,6 +50,13 @@ public class NFTPhotoController { return R.ok(); } + /** + * 领取数字产品 + * @param seed + * @param walletAddr + * @param paintingHash + * @return + */ @PostMapping("/addNFTs") public R addNFTs(String seed,String walletAddr,String paintingHash){ if(StringUtils.isBlank(walletAddr)){ @@ -65,6 +73,33 @@ public class NFTPhotoController { return R.ok(json); } + /** + * 领取数字产品展示页面 + * @return + */ + @PostMapping("/getNftPhoto") + public R getNftPhoto(String openid,HttpServletRequest request){ +// String openid = CookieUtil.getCookie(request.getCookies()); +// if(StringUtils.isBlank(openid)){ +// log.error("openid为空:"+openid); +// throw new ParameterException("openid为空"); +// } + Map map = nftPhotoService.getNftPhotoUrl(openid); + int status = (int)map.get("status"); + String name = (String) map.get("name"); + if(status == 1 ){ + name = String.format("https://cdn.xglpa.com/pars-nft/directional200/%s.png",name); + }else if(status == 2){ + name = String.format("https://cdn.xglpa.com/pars-nft/scene200/%s.png",name); + }else if(status == 3 ){ + name = String.format("https://cdn.xglpa.com/pars-nft/nonDirectional500/%s.png",name); + } + map.remove("status"); + map.put("name",name); + return R.ok(map); + } + + //字符串加密 public String encrypt(String seed){ String phone = ""; diff --git a/src/main/java/com/szxgl/nft/controller/UserController.java b/src/main/java/com/szxgl/nft/controller/UserController.java new file mode 100644 index 0000000..6fefe39 --- /dev/null +++ b/src/main/java/com/szxgl/nft/controller/UserController.java @@ -0,0 +1,99 @@ +package com.szxgl.nft.controller; + +import com.szxgl.nft.entity.RedisKeyName; +import com.szxgl.nft.entity.UserDO; +import com.szxgl.nft.service.NftPhotoService; +import com.szxgl.nft.service.UserService; +import com.szxgl.nft.utils.R; +import com.szxgl.nft.utils.RedisUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/user") +@Slf4j +public class UserController { + + @Autowired + private UserService userService; + + @Autowired + private NftPhotoService nftPhotoService; + + @Autowired + private RedisUtil redisUtil; + + private static final String openidCode = RedisKeyName.getOpenidCode(); + + /** + * 用户登录 + * @param code 验证码 + * @return + */ + @PostMapping("/login") + public R login(String openid,String seed,String code, HttpServletRequest request,Integer flag){ +// String openid = CookieUtil.getCookie(request.getCookies()); +// if(StringUtils.isBlank(openid)){ +// log.error("openid为空:"+openid); +// throw new ParameterException("openid为空"); +// } + if(StringUtils.isBlank(code)){ + log.error("验证码不能为空!"); + return R.error("验证码不能为空!"); + } + + if(!redisUtil.hasKey(openidCode+openid)){ + log.error("redis缓存中的key不存在:"+openidCode+openid); + return R.error("验证码错误或者已过期!"); + } + String s = redisUtil.get(openidCode + openid).toString(); + if(s.equals(code)){ + //用户绑定手机号 + userService.addPhone(seed,openid); + //用户绑定NFT图片Hash值 + nftPhotoService.addPhonePaintingHash(openid,seed,flag); + }else { + return R.error("验证码错误或者已过期!"); + } + + return R.ok(); + } + + + /** + * 是否绑定手机号 + * @param request + * @return 有值表示已绑定手机号 walletAddr如果有值表示 + */ + @PostMapping("/getPhone") + public R getPhone(String openid,HttpServletRequest request){ +// String openid = CookieUtil.getCookie(request.getCookies()); +// if(StringUtils.isBlank(openid)){ +// log.error("openid为空:"+openid); +// throw new ParameterException("openid为空"); +// } + UserDO userDO = userService.getPhone(openid); + Map map = new HashMap<>(); + if(userDO != null){ + //手机号已绑定 + map.put("walletAddr",userDO.getWalletAddr()); + map.put("flag",true); + return R.ok(map); + }else { + //手机号未绑定 + map.put("walletAddr",""); + map.put("flag",false); + return R.ok(map); + } + + } + +} diff --git a/src/main/java/com/szxgl/nft/controller/VerificationCodeController.java b/src/main/java/com/szxgl/nft/controller/VerificationCodeController.java new file mode 100644 index 0000000..469863a --- /dev/null +++ b/src/main/java/com/szxgl/nft/controller/VerificationCodeController.java @@ -0,0 +1,59 @@ +package com.szxgl.nft.controller; + +import com.aliyuncs.exceptions.ClientException; +import com.szxgl.nft.entity.RedisKeyName; +import com.szxgl.nft.utils.AliyunSmsUtils; +import com.szxgl.nft.utils.R; +import com.szxgl.nft.utils.RedisUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@RestController +@RequestMapping("/code") +@Slf4j +public class VerificationCodeController { + + @Autowired + private RedisUtil redisUtil; + + private static final String openidCode = RedisKeyName.getOpenidCode(); + + /** + * 获取验证码 + * @param seed 手机号 + * @return + */ + @PostMapping("/getCode") + public R getCode(String openid, String seed, HttpServletRequest request){ +// String openid = CookieUtil.getCookie(request.getCookies()); +// if(StringUtils.isBlank(openid)){ +// log.error("openid为空:"+openid); +// throw new ParameterException("openid为空"); +// } + //判断手机号是否为空 + if(StringUtils.isBlank(seed)){ + log.error("手机号为空:"+seed); + return R.error("手机号为空"); + } + //获取验证码 + String code = Integer.toString(AliyunSmsUtils.getNewcode()); + log.info("发送的验证码为:"+code); + try { + //使用阿里云发送短信 + AliyunSmsUtils.sendSms(seed,code); + } catch (ClientException e) { + e.printStackTrace(); + } + //把验证码存入redis中 + redisUtil.set(openidCode + openid, code, 300); + return R.ok(code); + } + + +} diff --git a/src/main/java/com/szxgl/nft2022/entity/NftPhoto.java b/src/main/java/com/szxgl/nft/entity/NftPhotoDO.java similarity index 71% rename from src/main/java/com/szxgl/nft2022/entity/NftPhoto.java rename to src/main/java/com/szxgl/nft/entity/NftPhotoDO.java index 0804559..68cec8d 100644 --- a/src/main/java/com/szxgl/nft2022/entity/NftPhoto.java +++ b/src/main/java/com/szxgl/nft/entity/NftPhotoDO.java @@ -1,4 +1,4 @@ -package com.szxgl.nft2022.entity; +package com.szxgl.nft.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -7,7 +7,7 @@ import java.util.Date; @Data @TableName("nft_photo") -public class NftPhoto { +public class NftPhotoDO { private Long id; @@ -21,16 +21,6 @@ public class NftPhoto { */ private String paintingHash; - /** - * 手机号 - */ - private String phone; - - /** - * 钱包地址 - */ - private String walletAddr; - /** * 状态(1、定向 2、现场 3、非定向) */ diff --git a/src/main/java/com/szxgl/nft/entity/RedisKeyName.java b/src/main/java/com/szxgl/nft/entity/RedisKeyName.java new file mode 100644 index 0000000..fdfce32 --- /dev/null +++ b/src/main/java/com/szxgl/nft/entity/RedisKeyName.java @@ -0,0 +1,10 @@ +package com.szxgl.nft.entity; + +public class RedisKeyName { + + private static final String OPENID_CODE = "pars-nft2022:code:"; + + public static String getOpenidCode() { + return OPENID_CODE; + } +} diff --git a/src/main/java/com/szxgl/nft2022/entity/UserDO.java b/src/main/java/com/szxgl/nft/entity/UserDO.java similarity index 66% rename from src/main/java/com/szxgl/nft2022/entity/UserDO.java rename to src/main/java/com/szxgl/nft/entity/UserDO.java index 5c22760..ab86e15 100644 --- a/src/main/java/com/szxgl/nft2022/entity/UserDO.java +++ b/src/main/java/com/szxgl/nft/entity/UserDO.java @@ -1,4 +1,4 @@ -package com.szxgl.nft2022.entity; +package com.szxgl.nft.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -16,6 +16,16 @@ public class UserDO { */ private String openid; + /** + * 手机号 + */ + private String phone; + + /** + * 钱包地址 + */ + private String walletAddr; + /** * 创建时间 */ diff --git a/src/main/java/com/szxgl/nft/entity/UserNftPhoto.java b/src/main/java/com/szxgl/nft/entity/UserNftPhoto.java new file mode 100644 index 0000000..86caac5 --- /dev/null +++ b/src/main/java/com/szxgl/nft/entity/UserNftPhoto.java @@ -0,0 +1,29 @@ +package com.szxgl.nft.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("user_nft_photo") +public class UserNftPhoto { + + private Long id; + + /** + * 微信用户唯一标识 + */ + private String phone; + + /** + * nft图片id + */ + private Long nftPhotoId; + + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/src/main/java/com/szxgl/nft2022/exception/MyAjaxExceptionHandler.java b/src/main/java/com/szxgl/nft/exception/MyAjaxExceptionHandler.java similarity index 82% rename from src/main/java/com/szxgl/nft2022/exception/MyAjaxExceptionHandler.java rename to src/main/java/com/szxgl/nft/exception/MyAjaxExceptionHandler.java index 4e62636..e450364 100644 --- a/src/main/java/com/szxgl/nft2022/exception/MyAjaxExceptionHandler.java +++ b/src/main/java/com/szxgl/nft/exception/MyAjaxExceptionHandler.java @@ -1,11 +1,9 @@ -package com.szxgl.nft2022.exception; +package com.szxgl.nft.exception; -import com.szxgl.nft2022.utils.R; +import com.szxgl.nft.utils.R; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; -import javax.servlet.http.HttpServletRequest; - @ControllerAdvice public class MyAjaxExceptionHandler { diff --git a/src/main/java/com/szxgl/nft2022/exception/ParameterException.java b/src/main/java/com/szxgl/nft/exception/ParameterException.java similarity index 79% rename from src/main/java/com/szxgl/nft2022/exception/ParameterException.java rename to src/main/java/com/szxgl/nft/exception/ParameterException.java index 2e2f99c..0f12747 100644 --- a/src/main/java/com/szxgl/nft2022/exception/ParameterException.java +++ b/src/main/java/com/szxgl/nft/exception/ParameterException.java @@ -1,4 +1,4 @@ -package com.szxgl.nft2022.exception; +package com.szxgl.nft.exception; public class ParameterException extends RuntimeException { diff --git a/src/main/java/com/szxgl/nft2022/filter/WebAuthFilter.java b/src/main/java/com/szxgl/nft/filter/WebAuthFilter.java similarity index 97% rename from src/main/java/com/szxgl/nft2022/filter/WebAuthFilter.java rename to src/main/java/com/szxgl/nft/filter/WebAuthFilter.java index dd8db5e..6da8c7d 100644 --- a/src/main/java/com/szxgl/nft2022/filter/WebAuthFilter.java +++ b/src/main/java/com/szxgl/nft/filter/WebAuthFilter.java @@ -1,11 +1,11 @@ -package com.szxgl.nft2022.filter; +package com.szxgl.nft.filter; import com.alibaba.fastjson.JSONObject; -import com.szxgl.nft2022.entity.UserDO; -import com.szxgl.nft2022.service.UserService; -import com.szxgl.nft2022.utils.URIUtil; -import com.szxgl.nft2022.utils.Utility; +import com.szxgl.nft.entity.UserDO; +import com.szxgl.nft.service.UserService; +import com.szxgl.nft.utils.URIUtil; +import com.szxgl.nft.utils.Utility; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; diff --git a/src/main/java/com/szxgl/nft/mapper/NftPhotoMapper.java b/src/main/java/com/szxgl/nft/mapper/NftPhotoMapper.java new file mode 100644 index 0000000..af0ac7d --- /dev/null +++ b/src/main/java/com/szxgl/nft/mapper/NftPhotoMapper.java @@ -0,0 +1,18 @@ +package com.szxgl.nft.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.szxgl.nft.entity.NftPhotoDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +@Mapper +public interface NftPhotoMapper extends BaseMapper { + + Long getRandomHash(Integer flag); + + void addNftPhoto(@Param("id") Long id,@Param("seed") String seed); + + Map getNftPhotoUrl(String openid); +} diff --git a/src/main/java/com/szxgl/nft2022/mapper/UserMapper.java b/src/main/java/com/szxgl/nft/mapper/UserMapper.java similarity index 69% rename from src/main/java/com/szxgl/nft2022/mapper/UserMapper.java rename to src/main/java/com/szxgl/nft/mapper/UserMapper.java index 6edda81..7f98d3a 100644 --- a/src/main/java/com/szxgl/nft2022/mapper/UserMapper.java +++ b/src/main/java/com/szxgl/nft/mapper/UserMapper.java @@ -1,7 +1,7 @@ -package com.szxgl.nft2022.mapper; +package com.szxgl.nft.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.szxgl.nft2022.entity.UserDO; +import com.szxgl.nft.entity.UserDO; import org.apache.ibatis.annotations.Mapper; @Mapper diff --git a/src/main/java/com/szxgl/nft/mapper/UserNftPhotoMapper.java b/src/main/java/com/szxgl/nft/mapper/UserNftPhotoMapper.java new file mode 100644 index 0000000..0652f72 --- /dev/null +++ b/src/main/java/com/szxgl/nft/mapper/UserNftPhotoMapper.java @@ -0,0 +1,11 @@ +package com.szxgl.nft.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.szxgl.nft.entity.UserNftPhoto; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserNftPhotoMapper extends BaseMapper { + + +} diff --git a/src/main/java/com/szxgl/nft/service/NftPhotoService.java b/src/main/java/com/szxgl/nft/service/NftPhotoService.java new file mode 100644 index 0000000..3251212 --- /dev/null +++ b/src/main/java/com/szxgl/nft/service/NftPhotoService.java @@ -0,0 +1,14 @@ +package com.szxgl.nft.service; + +import com.szxgl.nft.entity.UserNftPhoto; + +import java.util.Map; + +public interface NftPhotoService { + + UserNftPhoto getNftPhoto(String phone); + + void addPhonePaintingHash(String seed,String openid,Integer flag); + + Map getNftPhotoUrl(String seed); +} diff --git a/src/main/java/com/szxgl/nft/service/UserNftPhotoService.java b/src/main/java/com/szxgl/nft/service/UserNftPhotoService.java new file mode 100644 index 0000000..964ba2f --- /dev/null +++ b/src/main/java/com/szxgl/nft/service/UserNftPhotoService.java @@ -0,0 +1,7 @@ +package com.szxgl.nft.service; + + + +public interface UserNftPhotoService { + +} diff --git a/src/main/java/com/szxgl/nft/service/UserService.java b/src/main/java/com/szxgl/nft/service/UserService.java new file mode 100644 index 0000000..7903956 --- /dev/null +++ b/src/main/java/com/szxgl/nft/service/UserService.java @@ -0,0 +1,14 @@ +package com.szxgl.nft.service; + +import com.szxgl.nft.entity.UserDO; + +public interface UserService { + + UserDO getUserDo(String openid); + + void addUser(UserDO userDO); + + void addPhone(String seed, String openid); + + UserDO getPhone(String openid); +} diff --git a/src/main/java/com/szxgl/nft/service/impl/NftPhotoServiceImpl.java b/src/main/java/com/szxgl/nft/service/impl/NftPhotoServiceImpl.java new file mode 100644 index 0000000..c5759ef --- /dev/null +++ b/src/main/java/com/szxgl/nft/service/impl/NftPhotoServiceImpl.java @@ -0,0 +1,51 @@ +package com.szxgl.nft.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.szxgl.nft.entity.UserNftPhoto; +import com.szxgl.nft.mapper.NftPhotoMapper; +import com.szxgl.nft.mapper.UserNftPhotoMapper; +import com.szxgl.nft.service.NftPhotoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.annotation.Transient; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +public class NftPhotoServiceImpl implements NftPhotoService { + + @Autowired + private NftPhotoMapper nftPhotoMapper; + + @Autowired + private UserNftPhotoMapper userNftPhotoMapper; + + @Override + public UserNftPhoto getNftPhoto(String phone) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("phone",phone); + return userNftPhotoMapper.selectOne(wrapper); + } + + @Override + @Transient + public void addPhonePaintingHash(String seed,String openid,Integer flag) { + UserNftPhoto userNftPhoto = getNftPhoto(seed); + //非定向人群 + if(userNftPhoto == null ){ + //随机获取图片id(图片没有被占用) + Long id = nftPhotoMapper.getRandomHash(flag); + //库存充裕 + if(id != null ){ + //图片绑定手机号 + nftPhotoMapper.addNftPhoto(id,seed); + } + } + } + + @Override + public Map getNftPhotoUrl(String openid) { + return nftPhotoMapper.getNftPhotoUrl(openid); + } + +} diff --git a/src/main/java/com/szxgl/nft/service/impl/UserNftPhotoServiceImpl.java b/src/main/java/com/szxgl/nft/service/impl/UserNftPhotoServiceImpl.java new file mode 100644 index 0000000..8dc6fe2 --- /dev/null +++ b/src/main/java/com/szxgl/nft/service/impl/UserNftPhotoServiceImpl.java @@ -0,0 +1,9 @@ +package com.szxgl.nft.service.impl; + +import com.szxgl.nft.service.UserNftPhotoService; +import org.springframework.stereotype.Service; + +@Service +public class UserNftPhotoServiceImpl implements UserNftPhotoService { + +} diff --git a/src/main/java/com/szxgl/nft/service/impl/UserServiceImpl.java b/src/main/java/com/szxgl/nft/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..1090513 --- /dev/null +++ b/src/main/java/com/szxgl/nft/service/impl/UserServiceImpl.java @@ -0,0 +1,45 @@ +package com.szxgl.nft.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.szxgl.nft.entity.UserDO; +import com.szxgl.nft.mapper.UserMapper; +import com.szxgl.nft.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + + @Autowired + private UserMapper userMapper; + + + @Override + public UserDO getUserDo(String openid) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("openid",openid); + return userMapper.selectOne(wrapper); + } + + @Override + public void addUser(UserDO userDO) { + + } + + @Override + public void addPhone(String seed, String openid) { + UserDO userDo = getUserDo(openid); + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.set("phone",seed); + wrapper.eq("openid",openid); + userMapper.update(userDo,wrapper); + } + + @Override + public UserDO getPhone(String openid) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("openid",openid); + return userMapper.selectOne(wrapper); + } +} diff --git a/src/main/java/com/szxgl/nft2022/utils/AliyunSmsUtils.java b/src/main/java/com/szxgl/nft/utils/AliyunSmsUtils.java similarity index 96% rename from src/main/java/com/szxgl/nft2022/utils/AliyunSmsUtils.java rename to src/main/java/com/szxgl/nft/utils/AliyunSmsUtils.java index 2507584..e3203fa 100644 --- a/src/main/java/com/szxgl/nft2022/utils/AliyunSmsUtils.java +++ b/src/main/java/com/szxgl/nft/utils/AliyunSmsUtils.java @@ -1,4 +1,4 @@ -package com.szxgl.nft2022.utils; +package com.szxgl.nft.utils; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; @@ -7,11 +7,14 @@ import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; +import com.szxgl.nft.exception.ParameterException; +import lombok.extern.slf4j.Slf4j; /** * 阿里云短信服务: * 注意:需要 签名名称、模版CODE 以及 RAM访问控制中的 AccessKeyID 和 AccessKeySecret */ +@Slf4j public class AliyunSmsUtils { //产品名称:云通信短信API产品,开发者无需替换 @@ -61,9 +64,10 @@ public class AliyunSmsUtils { //hint 此处可能会抛出异常,注意catch SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); if(sendSmsResponse.getCode()!= null && sendSmsResponse.getCode().equals("OK")){ - System.out.println("短信发送成功!"); + log.info("短信发送成功!"); }else { - System.out.println("短信发送失败!"); + log.error("短信发送失败!"); + throw new ParameterException("短信发送失败!"); } return sendSmsResponse; } @@ -100,6 +104,7 @@ public class AliyunSmsUtils { //以下为测试代码,随机生成验证码 private static int newcode; public static int getNewcode() { + setNewcode(); return newcode; } public static void setNewcode(){ @@ -108,7 +113,7 @@ public class AliyunSmsUtils { public static void main(String[] args) throws ClientException, InterruptedException { - setNewcode(); + //setNewcode(); String code = Integer.toString(getNewcode()); System.out.println("发送的验证码为:"+code); //发短信 diff --git a/src/main/java/com/szxgl/nft2022/utils/BCrypt.java b/src/main/java/com/szxgl/nft/utils/BCrypt.java similarity index 99% rename from src/main/java/com/szxgl/nft2022/utils/BCrypt.java rename to src/main/java/com/szxgl/nft/utils/BCrypt.java index ac10b41..fa177ad 100644 --- a/src/main/java/com/szxgl/nft2022/utils/BCrypt.java +++ b/src/main/java/com/szxgl/nft/utils/BCrypt.java @@ -12,7 +12,7 @@ // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -package com.szxgl.nft2022.utils; +package com.szxgl.nft.utils; import java.io.UnsupportedEncodingException; import java.security.SecureRandom; diff --git a/src/main/java/com/szxgl/nft/utils/CookieUtil.java b/src/main/java/com/szxgl/nft/utils/CookieUtil.java new file mode 100644 index 0000000..2bc099f --- /dev/null +++ b/src/main/java/com/szxgl/nft/utils/CookieUtil.java @@ -0,0 +1,25 @@ +package com.szxgl.nft.utils; + +import com.szxgl.nft.exception.ParameterException; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.Cookie; + +@Slf4j +public class CookieUtil { + + public static String getCookie(Cookie[] cookies){ + if(cookies == null || cookies.length == 0){ + log.error("cookies为空"); + throw new ParameterException("cookies为空"); + } + String value = ""; + for (Cookie cookie : cookies) { + if("openid".equals(cookie.getName())){ + value = cookie.getValue(); + } + } + return value; + } + +} diff --git a/src/main/java/com/szxgl/nft2022/utils/EncryptUtil.java b/src/main/java/com/szxgl/nft/utils/EncryptUtil.java similarity index 99% rename from src/main/java/com/szxgl/nft2022/utils/EncryptUtil.java rename to src/main/java/com/szxgl/nft/utils/EncryptUtil.java index 3a2f942..7c6fcc3 100644 --- a/src/main/java/com/szxgl/nft2022/utils/EncryptUtil.java +++ b/src/main/java/com/szxgl/nft/utils/EncryptUtil.java @@ -1,4 +1,4 @@ -package com.szxgl.nft2022.utils; +package com.szxgl.nft.utils; import javax.crypto.Cipher; import java.security.Key; diff --git a/src/main/java/com/szxgl/nft2022/utils/HttpClientUtil.java b/src/main/java/com/szxgl/nft/utils/HttpClientUtil.java similarity index 99% rename from src/main/java/com/szxgl/nft2022/utils/HttpClientUtil.java rename to src/main/java/com/szxgl/nft/utils/HttpClientUtil.java index d7533de..d7eeabe 100644 --- a/src/main/java/com/szxgl/nft2022/utils/HttpClientUtil.java +++ b/src/main/java/com/szxgl/nft/utils/HttpClientUtil.java @@ -1,4 +1,4 @@ -package com.szxgl.nft2022.utils; +package com.szxgl.nft.utils; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; diff --git a/src/main/java/com/szxgl/nft2022/utils/R.java b/src/main/java/com/szxgl/nft/utils/R.java similarity index 96% rename from src/main/java/com/szxgl/nft2022/utils/R.java rename to src/main/java/com/szxgl/nft/utils/R.java index e5d6566..e312be4 100644 --- a/src/main/java/com/szxgl/nft2022/utils/R.java +++ b/src/main/java/com/szxgl/nft/utils/R.java @@ -1,4 +1,4 @@ -package com.szxgl.nft2022.utils; +package com.szxgl.nft.utils; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/com/szxgl/nft/utils/RedisUtil.java b/src/main/java/com/szxgl/nft/utils/RedisUtil.java new file mode 100644 index 0000000..77b39fc --- /dev/null +++ b/src/main/java/com/szxgl/nft/utils/RedisUtil.java @@ -0,0 +1,707 @@ +package com.szxgl.nft.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ZSetOperations; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * redisTemplate封装 + * + * @author MrYshen + */ +@Component +public class RedisUtil { + + @Autowired + private RedisTemplate redisTemplate; + + + + + public RedisUtil(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + * @return + */ + public boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据key 获取过期时间 + * + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除缓存 + * + * @param key 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + redisTemplate.delete((Collection) CollectionUtils.arrayToList(key)); + } + } + } + + //============================String============================= + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 普通缓存放入 + * + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 递增 + * + * @param key 键 + * @param delta 要增加几(大于0) + * @return + */ + public long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * 递减 + * + * @param key 键 + * @param delta 要减少几(小于0) + * @return + */ + public long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递减因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + //================================Map================================= + /** + * HashGet + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * HashSet 并设置时间 + * + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time) { + try { + redisTemplate.opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除hash表中的值 + * + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + /** + * 判断hash表中是否有该项的值 + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + //============================set============================= + /** + * 根据key获取Set中的所有值 + * + * @param key 键 + * @return + */ + public Set sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将数据放入set缓存 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0) { + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取set缓存的长度 + * + * @param key 键 + * @return + */ + public long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除值为value的 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + //===============================list================================= + /** + * 获取list缓存的内容 + * + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取list缓存的长度 + * + * @param key 键 + * @return + */ + public long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSetMIn(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + expire(key, 60); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSetList(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSetList(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * + * @param key 键 + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引弹出list中的首条数据 + * + * @param key 键 + * @param index 等待时间(秒) + * @return + */ + public Object lPop(String key, long index) { + try { + Object o = redisTemplate.opsForList().leftPop(key, index, TimeUnit.SECONDS); + return o; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 移除N个值为value + * + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + //Zset 根据 socre 排序 不重复 每个元素附加一个 socre double类型的属性(double 可以重复) + /** + * 添加 ZSet 元素 + * @param key + * @param value + * @param score + */ + public boolean addZSet(String key,Object value,double score){ + return redisTemplate.opsForZSet().add(key, value, score); + } + + /** + * 批量添加 Zset
+ * Set> tuples = new HashSet<>();
+ * TypedTuple objectTypedTuple1 = new DefaultTypedTuple("zset-5",9.6);
+ * tuples.add(objectTypedTuple1); + * @param key + * @param tuples + * @return + */ + public Long AddAllZset(String key,Set> tuples){ + return redisTemplate.opsForZSet().add(key, tuples); + } + + /** + * Zset 删除一个或多个元素 + * @param key + * @param values + * @return + */ + public Long removeZset(String key,Object ...values){ + return redisTemplate.opsForZSet().remove(key, values); + } + + /** + * 获取 key 中指定 value 的排名(从0开始,从小到大排序) + * @param key + * @param value + * @return + */ + public Long rank(String key,Object value){ + return redisTemplate.opsForZSet().rank(key, value); + } + + /** + * 获取 key 中指定 value 的排名(从0开始,从大到小排序) + * @param key + * @param value + * @return + */ + public Long reverseRank(String key,Object value){ + return redisTemplate.opsForZSet().reverseRank(key, value); + } + + /** + * 获取索引区间内的排序结果集合(从0开始,从小到大,带上分数) + * @param key + * @param start + * @param end + * @return + */ + public Set> rangeWithScores(String key, long start, long end){ + return redisTemplate.opsForZSet().rangeWithScores(key, start, end); + } + + /** + * 获取索引区间内的排序结果集合(从0开始,从大到小,带上分数) + * @param key + * @param start + * @param end + * @return + */ + public Set> reverseRangeWithScores(String key, long start, long end){ + return redisTemplate.opsForZSet().reverseRangeWithScores(key, start, end); + } + + /** + * score的增加or减少 zincrby + * + * @param key + * @param value + * @param score + */ + public Double incrScore(String key,String value, double score){ + return redisTemplate.opsForZSet().incrementScore(key, value, score); + } + + /** + * 获取指定成员的 score 值 + * @param key + * @param value + * @return + */ + public Double score(String key,Object value){ + return redisTemplate.opsForZSet().score(key, value); + } + + +} \ No newline at end of file diff --git a/src/main/java/com/szxgl/nft2022/utils/URIUtil.java b/src/main/java/com/szxgl/nft/utils/URIUtil.java similarity index 97% rename from src/main/java/com/szxgl/nft2022/utils/URIUtil.java rename to src/main/java/com/szxgl/nft/utils/URIUtil.java index 9d3f30d..1208d80 100644 --- a/src/main/java/com/szxgl/nft2022/utils/URIUtil.java +++ b/src/main/java/com/szxgl/nft/utils/URIUtil.java @@ -3,7 +3,7 @@ // (powered by FernFlower decompiler) // -package com.szxgl.nft2022.utils; +package com.szxgl.nft.utils; import org.apache.commons.lang3.StringUtils; @@ -54,4 +54,5 @@ public class URIUtil { return o.toString(); } + } diff --git a/src/main/java/com/szxgl/nft2022/utils/Utility.java b/src/main/java/com/szxgl/nft/utils/Utility.java similarity index 99% rename from src/main/java/com/szxgl/nft2022/utils/Utility.java rename to src/main/java/com/szxgl/nft/utils/Utility.java index 397b82b..c885f48 100644 --- a/src/main/java/com/szxgl/nft2022/utils/Utility.java +++ b/src/main/java/com/szxgl/nft/utils/Utility.java @@ -1,4 +1,4 @@ -package com.szxgl.nft2022.utils; +package com.szxgl.nft.utils; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.UnixCrypt; diff --git a/src/main/java/com/szxgl/nft2022/mapper/NftPhotoMapper.java b/src/main/java/com/szxgl/nft2022/mapper/NftPhotoMapper.java deleted file mode 100644 index badb979..0000000 --- a/src/main/java/com/szxgl/nft2022/mapper/NftPhotoMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.szxgl.nft2022.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.szxgl.nft2022.entity.NftPhoto; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface NftPhotoMapper extends BaseMapper { -} diff --git a/src/main/java/com/szxgl/nft2022/service/NftPhotoService.java b/src/main/java/com/szxgl/nft2022/service/NftPhotoService.java deleted file mode 100644 index a542fd7..0000000 --- a/src/main/java/com/szxgl/nft2022/service/NftPhotoService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.szxgl.nft2022.service; - -import com.szxgl.nft2022.entity.NftPhoto; - -public interface NftPhotoService { - - NftPhoto getNftPhoto(String phone); - -} diff --git a/src/main/java/com/szxgl/nft2022/service/UserService.java b/src/main/java/com/szxgl/nft2022/service/UserService.java deleted file mode 100644 index e951506..0000000 --- a/src/main/java/com/szxgl/nft2022/service/UserService.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.szxgl.nft2022.service; - -import com.szxgl.nft2022.entity.UserDO; - -public interface UserService { - - UserDO getUserDo(String openid); - - void addUser(UserDO userDO); - -} diff --git a/src/main/java/com/szxgl/nft2022/service/impl/NftPhotoServiceImpl.java b/src/main/java/com/szxgl/nft2022/service/impl/NftPhotoServiceImpl.java deleted file mode 100644 index 745d37b..0000000 --- a/src/main/java/com/szxgl/nft2022/service/impl/NftPhotoServiceImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.szxgl.nft2022.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.szxgl.nft2022.entity.NftPhoto; -import com.szxgl.nft2022.mapper.NftPhotoMapper; -import com.szxgl.nft2022.service.NftPhotoService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class NftPhotoServiceImpl implements NftPhotoService { - - @Autowired - private NftPhotoMapper nftPhotoMapper; - - @Override - public NftPhoto getNftPhoto(String phone) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("phone",phone); - return nftPhotoMapper.selectOne(wrapper); - } -} diff --git a/src/main/java/com/szxgl/nft2022/service/impl/UserServiceImpl.java b/src/main/java/com/szxgl/nft2022/service/impl/UserServiceImpl.java deleted file mode 100644 index 83effac..0000000 --- a/src/main/java/com/szxgl/nft2022/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.szxgl.nft2022.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.szxgl.nft2022.entity.UserDO; -import com.szxgl.nft2022.mapper.UserMapper; -import com.szxgl.nft2022.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class UserServiceImpl implements UserService { - - @Autowired - private UserMapper userMapper; - - - @Override - public UserDO getUserDo(String openid) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("openid",openid); - return userMapper.selectOne(wrapper); - } - - @Override - public void addUser(UserDO userDO) { - - } -} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 70695e2..597118f 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -36,6 +36,20 @@ spring: max-file-size: 500MB max-request-size: 500MB + redis: + database: 0 + host: 39.108.110.167 + port: 8266 + password: 'Qiween@4531871' # 密码 + timeout: 6000ms # 连接超时时长(毫秒) + jedis: + pool: + max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) + max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) + max-idle: 10 # 连接池中的最大空闲连接 + min-idle: 5 # 连接池中的最小空闲连接 + + wx: appid: wx35766a64d73d08a9 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e346761..8e67df0 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,13 +1,13 @@ server: port: 8660 servlet: - context-path: /pars-nft2022 + context-path: /pars-nft spring: # # 允许预检请求 # mvc: # dispatch-options-request: true jmx: - default-domain: nft2022 + default-domain: nft profiles: active: dev # mvc: diff --git a/src/main/resources/log4j2-spring.xml b/src/main/resources/log4j2-spring.xml index 0c2f8e4..1fd1965 100644 --- a/src/main/resources/log4j2-spring.xml +++ b/src/main/resources/log4j2-spring.xml @@ -8,9 +8,9 @@ - + - + @@ -23,12 +23,12 @@ - + - + @@ -42,7 +42,7 @@ - + diff --git a/src/main/resources/mapper/NftPhotoMapper.xml b/src/main/resources/mapper/NftPhotoMapper.xml new file mode 100644 index 0000000..e3a6366 --- /dev/null +++ b/src/main/resources/mapper/NftPhotoMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + insert into user_nft_photo + ( + phone, + nft_photo_id, + create_time + ) + values + ( + #{seed}, + #{id}, + now() + ) + + + + + + + \ No newline at end of file