diff --git a/pom.xml b/pom.xml index c1c68c9..7bfb517 100644 --- a/pom.xml +++ b/pom.xml @@ -149,6 +149,12 @@ mybatis-plus-join-boot-starter ${mpj.version} + + + org.hibernate.validator + hibernate-validator + 6.2.0.Final + diff --git a/src/main/java/com/example/takeawaysystemserver/constant/CommonConstant.java b/src/main/java/com/example/takeawaysystemserver/constant/CommonConstant.java index b080d7b..b1e4701 100644 --- a/src/main/java/com/example/takeawaysystemserver/constant/CommonConstant.java +++ b/src/main/java/com/example/takeawaysystemserver/constant/CommonConstant.java @@ -7,4 +7,11 @@ package com.example.takeawaysystemserver.constant; */ public interface CommonConstant { String TOKEN_SECRET = "sadao_idfdv_uvnbdson_wd01jsdnvcz"; + + Integer EXPIRE_TIME = 7*24*60*60*1000; + + Integer TOKEN_EXPIRE_TIME = 2*60*60*1000; + + String LOGIN_USER = "login_user"; + } diff --git a/src/main/java/com/example/takeawaysystemserver/controller/UserController.java b/src/main/java/com/example/takeawaysystemserver/controller/UserController.java new file mode 100644 index 0000000..46c4ac7 --- /dev/null +++ b/src/main/java/com/example/takeawaysystemserver/controller/UserController.java @@ -0,0 +1,59 @@ +package com.example.takeawaysystemserver.controller; + +import com.example.takeawaysystemserver.model.dto.*; +import com.example.takeawaysystemserver.service.UserService; +import com.example.takeawaysystemserver.util.R; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.*; + +/** + * @author Ethereal + * @date 2024/7/12 + * @description + */ +@RestController +@Api(tags = "用户模块") +@RequestMapping("user") +public class UserController { + + @Resource + private UserService userService; + + @PostMapping("/register") + @ApiOperation(value = "用户注册") + public R register(@RequestBody UserRegisterDTO userRegisterDTO){ + return userService.register(userRegisterDTO); + } + + @PostMapping("/login") + @ApiOperation(value = "用户登录") + public R login(@RequestBody UserLoginDTO userLoginDTO){ + return userService.login(userLoginDTO); + } + + @PostMapping("/logout") + @ApiOperation(value = "登出") + public R logout(@RequestHeader String token){ + return userService.logout(token); + } + + @PostMapping("update-userinfo") + @ApiOperation(value = "修改用户信息") + public R updateUserinfo(@RequestHeader String token, @RequestBody UserUpdateDTO userUpdateDTO){ + return userService.updateUserInfo(token, userUpdateDTO); + } + + @PostMapping("update-password") + @ApiOperation(value = "修改用户密码") + public R updatePassword(@RequestHeader String token, UserPasswordDTO userPasswordDTO){ + return userService.updatePassword(token,userPasswordDTO); + } + + @PostMapping("update-address") + @ApiOperation(value = "修改用户地址") + public R updateAddress(@RequestHeader String token, @RequestBody AddressDTO addressDTO){ + return userService.updateAddress(token, addressDTO.getAddress()); + } +} diff --git a/src/main/java/com/example/takeawaysystemserver/entity/Dish.java b/src/main/java/com/example/takeawaysystemserver/entity/Dish.java index 065fd18..73441f5 100644 --- a/src/main/java/com/example/takeawaysystemserver/entity/Dish.java +++ b/src/main/java/com/example/takeawaysystemserver/entity/Dish.java @@ -1,6 +1,9 @@ package com.example.takeawaysystemserver.entity; import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; /** @@ -12,12 +15,13 @@ public class Dish implements Serializable { /** * 主键ID */ - private String id; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; /** * shop_id */ - private String shopId; + private Integer shopId; /** * 分类名 diff --git a/src/main/java/com/example/takeawaysystemserver/entity/DishFlavor.java b/src/main/java/com/example/takeawaysystemserver/entity/DishFlavor.java index 227bb79..5b05664 100644 --- a/src/main/java/com/example/takeawaysystemserver/entity/DishFlavor.java +++ b/src/main/java/com/example/takeawaysystemserver/entity/DishFlavor.java @@ -1,6 +1,9 @@ package com.example.takeawaysystemserver.entity; import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; /** @@ -12,12 +15,13 @@ public class DishFlavor implements Serializable { /** * 主键ID */ - private String id; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; /** * 菜品ID */ - private String dishId; + private Integer dishId; /** * 口味名称 diff --git a/src/main/java/com/example/takeawaysystemserver/entity/Order.java b/src/main/java/com/example/takeawaysystemserver/entity/Order.java index f2ca97c..81de9f2 100644 --- a/src/main/java/com/example/takeawaysystemserver/entity/Order.java +++ b/src/main/java/com/example/takeawaysystemserver/entity/Order.java @@ -1,6 +1,9 @@ package com.example.takeawaysystemserver.entity; import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; /** @@ -12,17 +15,18 @@ public class Order implements Serializable { /** * 主键ID */ - private String id; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; /** * 用户ID */ - private String userId; + private Integer userId; /** * 商品ID */ - private String shopId; + private Integer shopId; /** * 价格 diff --git a/src/main/java/com/example/takeawaysystemserver/entity/OrderItem.java b/src/main/java/com/example/takeawaysystemserver/entity/OrderItem.java index b52aa9b..0eeae56 100644 --- a/src/main/java/com/example/takeawaysystemserver/entity/OrderItem.java +++ b/src/main/java/com/example/takeawaysystemserver/entity/OrderItem.java @@ -1,6 +1,9 @@ package com.example.takeawaysystemserver.entity; import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; /** @@ -12,17 +15,18 @@ public class OrderItem implements Serializable { /** * 主键ID */ - private String id; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; /** * dish_id */ - private String dishId; + private Integer dishId; /** * order_id */ - private String orderId; + private Integer orderId; /** * 购买份数 diff --git a/src/main/java/com/example/takeawaysystemserver/entity/Shop.java b/src/main/java/com/example/takeawaysystemserver/entity/Shop.java index 1aeff01..793ad5a 100644 --- a/src/main/java/com/example/takeawaysystemserver/entity/Shop.java +++ b/src/main/java/com/example/takeawaysystemserver/entity/Shop.java @@ -1,10 +1,14 @@ package com.example.takeawaysystemserver.entity; import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; /** * + * @author qiushengyu * @TableName shop */ @Data @@ -12,7 +16,8 @@ public class Shop implements Serializable { /** * 主键ID */ - private String id; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; /** * 名称 diff --git a/src/main/java/com/example/takeawaysystemserver/entity/User.java b/src/main/java/com/example/takeawaysystemserver/entity/User.java index ff5163c..83ad648 100644 --- a/src/main/java/com/example/takeawaysystemserver/entity/User.java +++ b/src/main/java/com/example/takeawaysystemserver/entity/User.java @@ -1,18 +1,28 @@ package com.example.takeawaysystemserver.entity; import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * * @TableName user */ @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class User implements Serializable { /** * 主键ID */ - private String id; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; /** * 用户名 diff --git a/src/main/java/com/example/takeawaysystemserver/mapper/DishFlavorMapper.java b/src/main/java/com/example/takeawaysystemserver/mapper/DishFlavorMapper.java index b760d1f..c89bb33 100644 --- a/src/main/java/com/example/takeawaysystemserver/mapper/DishFlavorMapper.java +++ b/src/main/java/com/example/takeawaysystemserver/mapper/DishFlavorMapper.java @@ -2,6 +2,7 @@ package com.example.takeawaysystemserver.mapper; import com.example.takeawaysystemserver.entity.DishFlavor; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; /** * @author qiushengyu @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @createDate 2024-07-11 17:12:51 * @Entity com.example.takeawaysystemserver.entity.DishFlavor */ +@Mapper public interface DishFlavorMapper extends BaseMapper { } diff --git a/src/main/java/com/example/takeawaysystemserver/mapper/DishMapper.java b/src/main/java/com/example/takeawaysystemserver/mapper/DishMapper.java index 4cabfd3..9831989 100644 --- a/src/main/java/com/example/takeawaysystemserver/mapper/DishMapper.java +++ b/src/main/java/com/example/takeawaysystemserver/mapper/DishMapper.java @@ -2,6 +2,7 @@ package com.example.takeawaysystemserver.mapper; import com.example.takeawaysystemserver.entity.Dish; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; /** * @author qiushengyu @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @createDate 2024-07-11 17:11:31 * @Entity com.example.takeawaysystemserver.entity.Dish */ +@Mapper public interface DishMapper extends BaseMapper { } diff --git a/src/main/java/com/example/takeawaysystemserver/mapper/OrderItemMapper.java b/src/main/java/com/example/takeawaysystemserver/mapper/OrderItemMapper.java index bdc39b7..3f76822 100644 --- a/src/main/java/com/example/takeawaysystemserver/mapper/OrderItemMapper.java +++ b/src/main/java/com/example/takeawaysystemserver/mapper/OrderItemMapper.java @@ -2,6 +2,7 @@ package com.example.takeawaysystemserver.mapper; import com.example.takeawaysystemserver.entity.OrderItem; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; /** * @author qiushengyu @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @createDate 2024-07-11 17:13:53 * @Entity com.example.takeawaysystemserver.entity.OrderItem */ +@Mapper public interface OrderItemMapper extends BaseMapper { } diff --git a/src/main/java/com/example/takeawaysystemserver/mapper/OrderMapper.java b/src/main/java/com/example/takeawaysystemserver/mapper/OrderMapper.java index 575bf54..52a5e16 100644 --- a/src/main/java/com/example/takeawaysystemserver/mapper/OrderMapper.java +++ b/src/main/java/com/example/takeawaysystemserver/mapper/OrderMapper.java @@ -2,6 +2,7 @@ package com.example.takeawaysystemserver.mapper; import com.example.takeawaysystemserver.entity.Order; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; /** * @author qiushengyu @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @createDate 2024-07-11 17:13:46 * @Entity com.example.takeawaysystemserver.entity.Order */ +@Mapper public interface OrderMapper extends BaseMapper { } diff --git a/src/main/java/com/example/takeawaysystemserver/mapper/ShopMapper.java b/src/main/java/com/example/takeawaysystemserver/mapper/ShopMapper.java index 0a09c7d..51bef79 100644 --- a/src/main/java/com/example/takeawaysystemserver/mapper/ShopMapper.java +++ b/src/main/java/com/example/takeawaysystemserver/mapper/ShopMapper.java @@ -2,6 +2,7 @@ package com.example.takeawaysystemserver.mapper; import com.example.takeawaysystemserver.entity.Shop; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; /** * @author qiushengyu @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @createDate 2024-07-11 17:13:56 * @Entity com.example.takeawaysystemserver.entity.Shop */ +@Mapper public interface ShopMapper extends BaseMapper { } diff --git a/src/main/java/com/example/takeawaysystemserver/mapper/UserMapper.java b/src/main/java/com/example/takeawaysystemserver/mapper/UserMapper.java index 35c8737..bf30d97 100644 --- a/src/main/java/com/example/takeawaysystemserver/mapper/UserMapper.java +++ b/src/main/java/com/example/takeawaysystemserver/mapper/UserMapper.java @@ -2,6 +2,7 @@ package com.example.takeawaysystemserver.mapper; import com.example.takeawaysystemserver.entity.User; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; /** * @author qiushengyu @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @createDate 2024-07-11 17:14:00 * @Entity com.example.takeawaysystemserver.entity.User */ +@Mapper public interface UserMapper extends BaseMapper { } diff --git a/src/main/java/com/example/takeawaysystemserver/model/dto/AddressDTO.java b/src/main/java/com/example/takeawaysystemserver/model/dto/AddressDTO.java new file mode 100644 index 0000000..33ea321 --- /dev/null +++ b/src/main/java/com/example/takeawaysystemserver/model/dto/AddressDTO.java @@ -0,0 +1,17 @@ +package com.example.takeawaysystemserver.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Ethereal + * @date 2024/7/12 + * @description + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AddressDTO { + private String address; +} diff --git a/src/main/java/com/example/takeawaysystemserver/model/dto/ShoppingCart.java b/src/main/java/com/example/takeawaysystemserver/model/dto/ShoppingCart.java index e66596f..cf3b929 100644 --- a/src/main/java/com/example/takeawaysystemserver/model/dto/ShoppingCart.java +++ b/src/main/java/com/example/takeawaysystemserver/model/dto/ShoppingCart.java @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class ShoppingCart { // 不需要用户ID,用户信息从token中获取 - private String shopId; + private Integer shopId; /** * 订单子项 */ diff --git a/src/main/java/com/example/takeawaysystemserver/model/dto/ShoppingCartItem.java b/src/main/java/com/example/takeawaysystemserver/model/dto/ShoppingCartItem.java index 7f52e7b..d5f54fa 100644 --- a/src/main/java/com/example/takeawaysystemserver/model/dto/ShoppingCartItem.java +++ b/src/main/java/com/example/takeawaysystemserver/model/dto/ShoppingCartItem.java @@ -15,7 +15,7 @@ import java.util.Map; @AllArgsConstructor @NoArgsConstructor public class ShoppingCartItem { - private String dishId; + private Integer dishId; /** * 份数 */ diff --git a/src/main/java/com/example/takeawaysystemserver/model/dto/UserLoginDTO.java b/src/main/java/com/example/takeawaysystemserver/model/dto/UserLoginDTO.java new file mode 100644 index 0000000..48a625d --- /dev/null +++ b/src/main/java/com/example/takeawaysystemserver/model/dto/UserLoginDTO.java @@ -0,0 +1,18 @@ +package com.example.takeawaysystemserver.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Ethereal + * @date 2024/7/12 + * @description + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserLoginDTO { + private String username; + private String password; +} diff --git a/src/main/java/com/example/takeawaysystemserver/model/dto/UserPasswordDTO.java b/src/main/java/com/example/takeawaysystemserver/model/dto/UserPasswordDTO.java new file mode 100644 index 0000000..0f72390 --- /dev/null +++ b/src/main/java/com/example/takeawaysystemserver/model/dto/UserPasswordDTO.java @@ -0,0 +1,18 @@ +package com.example.takeawaysystemserver.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Ethereal + * @date 2024/7/12 + * @description + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserPasswordDTO { + private String newPassword; + private String confirm; +} diff --git a/src/main/java/com/example/takeawaysystemserver/model/dto/UserRegisterDTO.java b/src/main/java/com/example/takeawaysystemserver/model/dto/UserRegisterDTO.java index 4f21258..d68ed02 100644 --- a/src/main/java/com/example/takeawaysystemserver/model/dto/UserRegisterDTO.java +++ b/src/main/java/com/example/takeawaysystemserver/model/dto/UserRegisterDTO.java @@ -1,5 +1,7 @@ package com.example.takeawaysystemserver.model.dto; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -16,17 +18,25 @@ public class UserRegisterDTO { /** * 用户名 */ + @NotBlank(message = "用户名不能为空") private String username; + /** * 密码 */ + @NotBlank(message = "密码不能为空") + @Size(min = 6, message = "密码不能小于6位") private String password; + /** * 手机号 */ + @NotBlank(message = "手机号不能为空") private String phone; + /** * 地址 */ + @NotBlank(message = "地址不能为空") private String address; } diff --git a/src/main/java/com/example/takeawaysystemserver/model/dto/UserUpdateDTO.java b/src/main/java/com/example/takeawaysystemserver/model/dto/UserUpdateDTO.java new file mode 100644 index 0000000..842dd1f --- /dev/null +++ b/src/main/java/com/example/takeawaysystemserver/model/dto/UserUpdateDTO.java @@ -0,0 +1,18 @@ +package com.example.takeawaysystemserver.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Ethereal + * @date 2024/7/12 + * @description + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserUpdateDTO { + private String username; + private String phone; +} diff --git a/src/main/java/com/example/takeawaysystemserver/service/RedisService.java b/src/main/java/com/example/takeawaysystemserver/service/RedisService.java new file mode 100644 index 0000000..cb38c91 --- /dev/null +++ b/src/main/java/com/example/takeawaysystemserver/service/RedisService.java @@ -0,0 +1,128 @@ +package com.example.takeawaysystemserver.service; + + +import org.springframework.data.domain.Sort; +import org.springframework.data.geo.Distance; +import org.springframework.data.geo.GeoResults; +import org.springframework.data.geo.Point; +import org.springframework.data.redis.connection.RedisGeoCommands; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author 慕华 + * @date 2023/7/11 + * @Version 1.0 + */ +@SuppressWarnings("all") +public interface RedisService { + + void set(String key, Object value, long time); + + void set(String key, Object value); + + Object get(String key); + + Boolean del(String key); + + Long del(List keys); + + Boolean expire(String key, long time); + + Long getExpire(String key); + + Boolean hasKey(String key); + + Long incr(String key, long delta); + + Long incrExpire(String key, long time); + + Long decr(String key, long delta); + + Object hGet(String key, String hashKey); + + Boolean hSet(String key, String hashKey, Object value, long time); + + void hSet(String key, String hashKey, Object value); + + Map hGetAll(String key); + + Boolean hSetAll(String key, Map map, long time); + + void hSetAll(String key, Map map); + + void hDel(String key, Object... hashKey); + + Boolean hHasKey(String key, String hashKey); + + Long hIncr(String key, String hashKey, Long delta); + + Long hDecr(String key, String hashKey, Long delta); + + Double zIncr(String key, Object value, Double score); + + Double zDecr(String key, Object value, Double score); + + Map zReverseRangeWithScore(String key, long start, long end); + + Double zScore(String key, Object value); + + Map zAllScore(String key); + + Set sMembers(String key); + + Long sAdd(String key, Object... values); + + Long sAddExpire(String key, long time, Object... values); + + Boolean sIsMember(String key, Object value); + + Long sSize(String key); + + Long sRemove(String key, Object... values); + + List lRange(String key, long start, long end); + + Long lSize(String key); + + Object lIndex(String key, long index); + + Long lPush(String key, Object value); + + Long lPush(String key, Object value, long time); + + Long lPushAll(String key, Object... values); + + Long lPushAll(String key, Long time, Object... values); + + Long lRemove(String key, long count, Object value); + + Boolean bitAdd(String key, int offset, boolean b); + + Boolean bitGet(String key, int offset); + + Long bitCount(String key); + + List bitField(String key, int limit, int offset); + + byte[] bitGetAll(String key); + + Long hyperAdd(String key, Object... value); + + Long hyperGet(String... key); + + void hyperDel(String key); + + Long geoAdd(String key, Double x, Double y, String name); + + List geoGetPointList(String key, Object... place); + + Distance geoCalculationDistance(String key, String placeOne, String placeTow); + + GeoResults> geoNearByPlace(String key, String place, Distance distance, long limit, Sort.Direction sort); + + List geoGetHash(String key, String... place); +} + diff --git a/src/main/java/com/example/takeawaysystemserver/service/UserService.java b/src/main/java/com/example/takeawaysystemserver/service/UserService.java index 4e0270c..245194f 100644 --- a/src/main/java/com/example/takeawaysystemserver/service/UserService.java +++ b/src/main/java/com/example/takeawaysystemserver/service/UserService.java @@ -2,7 +2,10 @@ package com.example.takeawaysystemserver.service; import com.example.takeawaysystemserver.entity.User; import com.baomidou.mybatisplus.extension.service.IService; +import com.example.takeawaysystemserver.model.dto.UserLoginDTO; +import com.example.takeawaysystemserver.model.dto.UserPasswordDTO; import com.example.takeawaysystemserver.model.dto.UserRegisterDTO; +import com.example.takeawaysystemserver.model.dto.UserUpdateDTO; import com.example.takeawaysystemserver.util.R; /** @@ -17,4 +20,41 @@ public interface UserService extends IService { * @return 注册信息 */ R register(UserRegisterDTO userRegisterDTO); + + /** + * 用户登录 + * @param userLoginDTO 登录类DTO + * @return 登录信息 + */ + R login(UserLoginDTO userLoginDTO); + + /** + * 登出 + * @param token 用户token + * @return 登出信息 + */ + R logout(String token); + + /** + * 修改用户信息 + * @param userUpdateDTO 修改类DTO + * @return 修改信息 + */ + R updateUserInfo(String token, UserUpdateDTO userUpdateDTO); + + /** + * 修改用户密码 + * @param token 用户token + * @param userPasswordDTO 密码类DTO + * @return 修改信息 + */ + R updatePassword(String token, UserPasswordDTO userPasswordDTO); + + /** + * 修改用户地址信息 + * @param token 用户token + * @param address 新地址 + * @return 修改信息 + */ + R updateAddress(String token, String address); } diff --git a/src/main/java/com/example/takeawaysystemserver/service/impl/RedisServiceImpl.java b/src/main/java/com/example/takeawaysystemserver/service/impl/RedisServiceImpl.java new file mode 100644 index 0000000..438be32 --- /dev/null +++ b/src/main/java/com/example/takeawaysystemserver/service/impl/RedisServiceImpl.java @@ -0,0 +1,328 @@ +package com.example.takeawaysystemserver.service.impl; + +import com.example.takeawaysystemserver.service.RedisService; +import jakarta.annotation.Resource; +import org.springframework.data.domain.Sort; +import org.springframework.data.geo.Distance; +import org.springframework.data.geo.GeoResults; +import org.springframework.data.geo.Point; +import org.springframework.data.redis.connection.BitFieldSubCommands; +import org.springframework.data.redis.connection.RedisGeoCommands; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ZSetOperations; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * @author Ethereal + * @date 2024/7/12 + * @description + */ +@Service +public class RedisServiceImpl implements RedisService { + + @Resource + private RedisTemplate redisTemplate; + + @Override + public void set(String key, Object value, long time) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + } + + @Override + public void set(String key, Object value) { + redisTemplate.opsForValue().set(key, value); + } + + @Override + public Object get(String key) { + return redisTemplate.opsForValue().get(key); + } + + @Override + public Boolean del(String key) { + return redisTemplate.delete(key); + } + + @Override + public Long del(List keys) { + return redisTemplate.delete(keys); + } + + @Override + public Boolean expire(String key, long time) { + return redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + + @Override + public Long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + @Override + public Boolean hasKey(String key) { + return redisTemplate.hasKey(key); + } + + @Override + public Long incr(String key, long delta) { + return redisTemplate.opsForValue().increment(key, delta); + } + + @Override + public Long incrExpire(String key, long time) { + Long count = redisTemplate.opsForValue().increment(key, 1); + if (count != null && count == 1) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return count; + } + + @Override + public Long decr(String key, long delta) { + return redisTemplate.opsForValue().increment(key, -delta); + } + + @Override + public Object hGet(String key, String hashKey) { + return redisTemplate.opsForHash().get(key, hashKey); + } + + @Override + public Boolean hSet(String key, String hashKey, Object value, long time) { + redisTemplate.opsForHash().put(key, hashKey, value); + return expire(key, time); + } + + @Override + public void hSet(String key, String hashKey, Object value) { + redisTemplate.opsForHash().put(key, hashKey, value); + } + + @Override + public Map hGetAll(String key) { + return redisTemplate.opsForHash().entries(key); + } + + @Override + public Boolean hSetAll(String key, Map map, long time) { + redisTemplate.opsForHash().putAll(key, map); + return expire(key, time); + } + + @Override + public void hSetAll(String key, Map map) { + redisTemplate.opsForHash().putAll(key, map); + } + + @Override + public void hDel(String key, Object... hashKey) { + redisTemplate.opsForHash().delete(key, hashKey); + } + + @Override + public Boolean hHasKey(String key, String hashKey) { + return redisTemplate.opsForHash().hasKey(key, hashKey); + } + + @Override + public Long hIncr(String key, String hashKey, Long delta) { + return redisTemplate.opsForHash().increment(key, hashKey, delta); + } + + @Override + public Long hDecr(String key, String hashKey, Long delta) { + return redisTemplate.opsForHash().increment(key, hashKey, -delta); + } + + @Override + public Double zIncr(String key, Object value, Double score) { + return redisTemplate.opsForZSet().incrementScore(key, value, score); + } + + @Override + public Double zDecr(String key, Object value, Double score) { + return redisTemplate.opsForZSet().incrementScore(key, value, -score); + } + + @Override + public Map zReverseRangeWithScore(String key, long start, long end) { + return redisTemplate.opsForZSet().reverseRangeWithScores(key, start, end) + .stream() + .collect(Collectors.toMap(ZSetOperations.TypedTuple::getValue, ZSetOperations.TypedTuple::getScore)); + } + + @Override + public Double zScore(String key, Object value) { + return redisTemplate.opsForZSet().score(key, value); + } + + @Override + public Map zAllScore(String key) { + return Objects.requireNonNull(redisTemplate.opsForZSet().rangeWithScores(key, 0, -1)) + .stream() + .collect(Collectors.toMap(ZSetOperations.TypedTuple::getValue, ZSetOperations.TypedTuple::getScore)); + } + + @Override + public Set sMembers(String key) { + return redisTemplate.opsForSet().members(key); + } + + @Override + public Long sAdd(String key, Object... values) { + return redisTemplate.opsForSet().add(key, values); + } + + @Override + public Long sAddExpire(String key, long time, Object... values) { + Long count = redisTemplate.opsForSet().add(key, values); + expire(key, time); + return count; + } + + @Override + public Boolean sIsMember(String key, Object value) { + return redisTemplate.opsForSet().isMember(key, value); + } + + @Override + public Long sSize(String key) { + return redisTemplate.opsForSet().size(key); + } + + @Override + public Long sRemove(String key, Object... values) { + return redisTemplate.opsForSet().remove(key, values); + } + + @Override + public List lRange(String key, long start, long end) { + return redisTemplate.opsForList().range(key, start, end); + } + + @Override + public Long lSize(String key) { + return redisTemplate.opsForList().size(key); + } + + @Override + public Object lIndex(String key, long index) { + return redisTemplate.opsForList().index(key, index); + } + + @Override + public Long lPush(String key, Object value) { + return redisTemplate.opsForList().rightPush(key, value); + } + + @Override + public Long lPush(String key, Object value, long time) { + Long index = redisTemplate.opsForList().rightPush(key, value); + expire(key, time); + return index; + } + + @Override + public Long lPushAll(String key, Object... values) { + return redisTemplate.opsForList().rightPushAll(key, values); + } + + @Override + public Long lPushAll(String key, Long time, Object... values) { + Long count = redisTemplate.opsForList().rightPushAll(key, values); + expire(key, time); + return count; + } + + @Override + public Long lRemove(String key, long count, Object value) { + return redisTemplate.opsForList().remove(key, count, value); + } + + @Override + public Boolean bitAdd(String key, int offset, boolean b) { + return redisTemplate.opsForValue().setBit(key, offset, b); + } + + @Override + public Boolean bitGet(String key, int offset) { + return redisTemplate.opsForValue().getBit(key, offset); + } + + @Override + public Long bitCount(String key) { + return redisTemplate.execute((RedisCallback) con -> con.bitCount(key.getBytes())); + } + + @Override + public List bitField(String key, int limit, int offset) { + return redisTemplate.execute((RedisCallback>) con -> + con.bitField(key.getBytes(), + BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(limit)).valueAt(offset))); + } + + @Override + public byte[] bitGetAll(String key) { + return redisTemplate.execute((RedisCallback) con -> con.get(key.getBytes())); + } + + @Override + public Long hyperAdd(String key, Object... value) { + return redisTemplate.opsForHyperLogLog().add(key, value); + } + + @Override + public Long hyperGet(String... key) { + return redisTemplate.opsForHyperLogLog().size(key); + } + + @Override + public void hyperDel(String key) { + redisTemplate.opsForHyperLogLog().delete(key); + } + + @Override + public Long geoAdd(String key, Double x, Double y, String name) { + return redisTemplate.opsForGeo().add(key, new Point(x, y), name); + } + + @Override + public List geoGetPointList(String key, Object... place) { + return redisTemplate.opsForGeo().position(key, place); + } + + @Override + public Distance geoCalculationDistance(String key, String placeOne, String placeTow) { + return redisTemplate.opsForGeo() + .distance(key, placeOne, placeTow, RedisGeoCommands.DistanceUnit.KILOMETERS); + } + + @Override + public GeoResults> geoNearByPlace(String key, String place, Distance distance, long limit, Sort.Direction sort) { + RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates(); + // 判断排序方式 + if (Sort.Direction.ASC == sort) { + args.sortAscending(); + } else { + args.sortDescending(); + } + args.limit(limit); + return redisTemplate.opsForGeo() + .radius(key, place, distance, args); + } + + @Override + public List geoGetHash(String key, String... place) { + return redisTemplate.opsForGeo() + .hash(key, place); + } + +} diff --git a/src/main/java/com/example/takeawaysystemserver/service/impl/UserServiceImpl.java b/src/main/java/com/example/takeawaysystemserver/service/impl/UserServiceImpl.java index 6d7f27e..78f00f1 100644 --- a/src/main/java/com/example/takeawaysystemserver/service/impl/UserServiceImpl.java +++ b/src/main/java/com/example/takeawaysystemserver/service/impl/UserServiceImpl.java @@ -1,13 +1,28 @@ package com.example.takeawaysystemserver.service.impl; +import com.auth0.jwt.interfaces.Claim; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.example.takeawaysystemserver.constant.CommonConstant; import com.example.takeawaysystemserver.entity.User; +import com.example.takeawaysystemserver.model.dto.UserLoginDTO; +import com.example.takeawaysystemserver.model.dto.UserPasswordDTO; import com.example.takeawaysystemserver.model.dto.UserRegisterDTO; +import com.example.takeawaysystemserver.model.dto.UserUpdateDTO; +import com.example.takeawaysystemserver.service.RedisService; import com.example.takeawaysystemserver.service.UserService; import com.example.takeawaysystemserver.mapper.UserMapper; +import com.example.takeawaysystemserver.util.DESUtil; +import com.example.takeawaysystemserver.util.JwtUtil; import com.example.takeawaysystemserver.util.R; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + /** * @author qiushengyu * @description 针对表【user】的数据库操作Service实现 @@ -17,9 +32,109 @@ import org.springframework.stereotype.Service; public class UserServiceImpl extends ServiceImpl implements UserService{ + private final DESUtil desUtil; + + private final RedisService redisService; + + public UserServiceImpl(DESUtil desUtil, RedisService redisService) { + this.desUtil = desUtil; + this.redisService = redisService; + } + @Override public R register(UserRegisterDTO userRegisterDTO) { - return null; + if (checkUser(userRegisterDTO)){ + return R.fail("用户已被注册"); + } + String password = desUtil.SHA512(userRegisterDTO.getPassword()); + User user = User.builder() + .username(userRegisterDTO.getUsername()) + .password(password) + .phone(userRegisterDTO.getPhone()) + .address(userRegisterDTO.getAddress()) + .status(1) + .build(); + int insert = baseMapper.insert(user); + if (insert == 1){ + return R.ok("注册成功"); + } + return R.ok("注册失败"); + } + + @Override + public R login(UserLoginDTO userLoginDTO) { + User user = baseMapper.selectOne(new LambdaQueryWrapper().eq(User::getUsername, userLoginDTO.getUsername())); + if (Objects.isNull(user)){ + return R.fail("未找到用户,请注册"); + } + String password = desUtil.SHA512(userLoginDTO.getPassword()); + if (!password.equals(user.getPassword())){ + return R.fail("密码错误,请重试"); + } + Map map = new HashMap<>(); + map.put("id", user.getId().toString()); + String token = JwtUtil.getToken(map, CommonConstant.TOKEN_EXPIRE_TIME); + redisService.hSet(CommonConstant.LOGIN_USER, user.getId().toString(), user, CommonConstant.EXPIRE_TIME); + return R.ok(token); + } + + @Override + public R logout(String token) { + redisService.hDel(CommonConstant.LOGIN_USER,getUserId(token)); + return R.ok("退出成功"); + } + + @Override + public R updateUserInfo(String token, UserUpdateDTO userUpdateDTO) { + Integer id = Integer.parseInt(getUserId(token)); + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() + .eq(User::getId, id) + .set(User::getUsername,userUpdateDTO.getUsername()) + .set(User::getPhone, userUpdateDTO.getPhone()); + if (baseMapper.update(wrapper) == 1){ + return R.ok("修改成功"); + } + return R.fail("修改失败"); + } + + @Override + public R updatePassword(String token, UserPasswordDTO userPasswordDTO) { + if (!userPasswordDTO.getNewPassword().equals(userPasswordDTO.getConfirm())){ + return R.fail("两次密码不一致,请重试"); + } + String password = desUtil.SHA512(userPasswordDTO.getNewPassword()); + Integer id = Integer.parseInt(getUserId(token)); + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() + .eq(User::getId, id) + .set(User::getPassword,password); + if (baseMapper.update(wrapper) == 1){ + return R.ok("修改成功"); + } + return R.fail("修改失败"); + } + + @Override + public R updateAddress(String token, String address) { + Integer id = Integer.parseInt(getUserId(token)); + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() + .eq(User::getId, id) + .set(User::getAddress, address); + if (baseMapper.update(wrapper) == 1){ + return R.ok("修改成功"); + } + return R.fail("修改失败"); + } + + private Boolean checkUser(UserRegisterDTO userRegisterDTO){ + User user = baseMapper.selectOne(new LambdaQueryWrapper() + .select(User::getUsername) + .eq(User::getUsername, userRegisterDTO.getUsername())); + return Objects.nonNull(user); + } + + private String getUserId(String token){ + Map map = JwtUtil.getPayload(token); + return map.get("id").toString().replaceAll("\"", ""); } } diff --git a/src/main/java/com/example/takeawaysystemserver/util/RedisUtil.java b/src/main/java/com/example/takeawaysystemserver/util/RedisUtil.java deleted file mode 100644 index cdd2952..0000000 --- a/src/main/java/com/example/takeawaysystemserver/util/RedisUtil.java +++ /dev/null @@ -1,1352 +0,0 @@ -package com.example.takeawaysystemserver.util; - -import org.springframework.data.redis.connection.DataType; -import org.springframework.data.redis.core.Cursor; -import org.springframework.data.redis.core.ScanOptions; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.core.ZSetOperations; - -import java.util.*; -import java.util.concurrent.TimeUnit; - -/** - * @author Ethereal - * @date 2024/3/20 - * @description - */ -public class RedisUtil { - private StringRedisTemplate redisTemplate; - - public void setRedisTemplate(StringRedisTemplate redisTemplate) { - this.redisTemplate = redisTemplate; - } - - public StringRedisTemplate getRedisTemplate() { - return this.redisTemplate; - } - - /** -------------------key相关操作--------------------- */ - - /** - * 删除key - * - * @param key - */ - public void delete(String key) { - redisTemplate.delete(key); - } - - /** - * 批量删除key - * - * @param keys - */ - public void delete(Collection keys) { - redisTemplate.delete(keys); - } - - /** - * 序列化key - * - * @param key - * @return - */ - public byte[] dump(String key) { - return redisTemplate.dump(key); - } - - /** - * 是否存在key - * - * @param key - * @return - */ - public Boolean hasKey(String key) { - return redisTemplate.hasKey(key); - } - - /** - * 设置过期时间 - * - * @param key - * @param timeout - * @param unit - * @return - */ - public Boolean expire(String key, long timeout, TimeUnit unit) { - return redisTemplate.expire(key, timeout, unit); - } - - /** - * 设置过期时间 - * - * @param key - * @param date - * @return - */ - public Boolean expireAt(String key, Date date) { - return redisTemplate.expireAt(key, date); - } - - /** - * 查找匹配的key - * - * @param pattern - * @return - */ - public Set keys(String pattern) { - return redisTemplate.keys(pattern); - } - - /** - * 将当前数据库的 key 移动到给定的数据库 db 当中 - * - * @param key - * @param dbIndex - * @return - */ - public Boolean move(String key, int dbIndex) { - return redisTemplate.move(key, dbIndex); - } - - /** - * 移除 key 的过期时间,key 将持久保持 - * - * @param key - * @return - */ - public Boolean persist(String key) { - return redisTemplate.persist(key); - } - - /** - * 返回 key 的剩余的过期时间 - * - * @param key - * @param unit - * @return - */ - public Long getExpire(String key, TimeUnit unit) { - return redisTemplate.getExpire(key, unit); - } - - /** - * 返回 key 的剩余的过期时间 - * - * @param key - * @return - */ - public Long getExpire(String key) { - return redisTemplate.getExpire(key); - } - - /** - * 从当前数据库中随机返回一个 key - * - * @return - */ - public String randomKey() { - return redisTemplate.randomKey(); - } - - /** - * 修改 key 的名称 - * - * @param oldKey - * @param newKey - */ - public void rename(String oldKey, String newKey) { - redisTemplate.rename(oldKey, newKey); - } - - /** - * 仅当 newkey 不存在时,将 oldKey 改名为 newkey - * - * @param oldKey - * @param newKey - * @return - */ - public Boolean renameIfAbsent(String oldKey, String newKey) { - return redisTemplate.renameIfAbsent(oldKey, newKey); - } - - /** - * 返回 key 所储存的值的类型 - * - * @param key - * @return - */ - public DataType type(String key) { - return redisTemplate.type(key); - } - - /** -------------------string相关操作--------------------- */ - - /** - * 设置指定 key 的值 - * @param key - * @param value - */ - public void set(String key, String value) { - redisTemplate.opsForValue().set(key, value); - } - - /** - * 获取指定 key 的值 - * @param key - * @return - */ - public String get(String key) { - return redisTemplate.opsForValue().get(key); - } - - /** - * 返回 key 中字符串值的子字符 - * @param key - * @param start - * @param end - * @return - */ - public String getRange(String key, long start, long end) { - return redisTemplate.opsForValue().get(key, start, end); - } - - /** - * 将给定 key 的值设为 value ,并返回 key 的旧值(old value) - * - * @param key - * @param value - * @return - */ - public String getAndSet(String key, String value) { - return redisTemplate.opsForValue().getAndSet(key, value); - } - - /** - * 对 key 所储存的字符串值,获取指定偏移量上的位(bit) - * - * @param key - * @param offset - * @return - */ - public Boolean getBit(String key, long offset) { - return redisTemplate.opsForValue().getBit(key, offset); - } - - /** - * 批量获取 - * - * @param keys - * @return - */ - public List multiGet(Collection keys) { - return redisTemplate.opsForValue().multiGet(keys); - } - - /** - * 设置ASCII码, 字符串'a'的ASCII码是97, 转为二进制是'01100001', 此方法是将二进制第offset位值变为value - * - * @param key 位置 - * @param value - * 值,true为1, false为0 - * @return - */ - public boolean setBit(String key, long offset, boolean value) { - return redisTemplate.opsForValue().setBit(key, offset, value); - } - - /** - * 将值 value 关联到 key ,并将 key 的过期时间设为 timeout - * - * @param key - * @param value - * @param timeout - * 过期时间 - * @param unit - * 时间单位, 天:TimeUnit.DAYS 小时:TimeUnit.HOURS 分钟:TimeUnit.MINUTES - * 秒:TimeUnit.SECONDS 毫秒:TimeUnit.MILLISECONDS - */ - public void setEx(String key, String value, long timeout, TimeUnit unit) { - redisTemplate.opsForValue().set(key, value, timeout, unit); - } - - /** - * 只有在 key 不存在时设置 key 的值 - * - * @param key - * @param value - * @return 之前已经存在返回false,不存在返回true - */ - public boolean setIfAbsent(String key, String value) { - return redisTemplate.opsForValue().setIfAbsent(key, value); - } - - /** - * 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始 - * - * @param key - * @param value - * @param offset - * 从指定位置开始覆写 - */ - public void setRange(String key, String value, long offset) { - redisTemplate.opsForValue().set(key, value, offset); - } - - /** - * 获取字符串的长度 - * - * @param key - * @return - */ - public Long size(String key) { - return redisTemplate.opsForValue().size(key); - } - - /** - * 批量添加 - * - * @param maps - */ - public void multiSet(Map maps) { - redisTemplate.opsForValue().multiSet(maps); - } - - /** - * 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在 - * - * @param maps - * @return 之前已经存在返回false,不存在返回true - */ - public boolean multiSetIfAbsent(Map maps) { - return redisTemplate.opsForValue().multiSetIfAbsent(maps); - } - - /** - * 增加(自增长), 负数则为自减 - * - * @param key - * @return - */ - public Long incrBy(String key, long increment) { - return redisTemplate.opsForValue().increment(key, increment); - } - - /** - * - * @param key - * @return - */ - public Double incrByFloat(String key, double increment) { - return redisTemplate.opsForValue().increment(key, increment); - } - - /** - * 追加到末尾 - * - * @param key - * @param value - * @return - */ - public Integer append(String key, String value) { - return redisTemplate.opsForValue().append(key, value); - } - - /** -------------------hash相关操作------------------------- */ - - /** - * 获取存储在哈希表中指定字段的值 - * - * @param key - * @param field - * @return - */ - public Object hGet(String key, String field) { - return redisTemplate.opsForHash().get(key, field); - } - - /** - * 获取所有给定字段的值 - * - * @param key - * @return - */ - public Map hGetAll(String key) { - return redisTemplate.opsForHash().entries(key); - } - - /** - * 获取所有给定字段的值 - * - * @param key - * @param fields - * @return - */ - public List hMultiGet(String key, Collection fields) { - return redisTemplate.opsForHash().multiGet(key, fields); - } - - public void hPut(String key, String hashKey, String value) { - redisTemplate.opsForHash().put(key, hashKey, value); - } - - public void hPutAll(String key, Map maps) { - redisTemplate.opsForHash().putAll(key, maps); - } - - /** - * 仅当hashKey不存在时才设置 - * - * @param key - * @param hashKey - * @param value - * @return - */ - public Boolean hPutIfAbsent(String key, String hashKey, String value) { - return redisTemplate.opsForHash().putIfAbsent(key, hashKey, value); - } - - /** - * 删除一个或多个哈希表字段 - * - * @param key - * @param fields - * @return - */ - public Long hDelete(String key, Object... fields) { - return redisTemplate.opsForHash().delete(key, fields); - } - - /** - * 查看哈希表 key 中,指定的字段是否存在 - * - * @param key - * @param field - * @return - */ - public boolean hExists(String key, String field) { - return redisTemplate.opsForHash().hasKey(key, field); - } - - /** - * 为哈希表 key 中的指定字段的整数值加上增量 increment - * - * @param key - * @param field - * @param increment - * @return - */ - public Long hIncrBy(String key, Object field, long increment) { - return redisTemplate.opsForHash().increment(key, field, increment); - } - - /** - * 为哈希表 key 中的指定字段的整数值加上增量 increment - * - * @param key - * @param field - * @param delta - * @return - */ - public Double hIncrByFloat(String key, Object field, double delta) { - return redisTemplate.opsForHash().increment(key, field, delta); - } - - /** - * 获取所有哈希表中的字段 - * - * @param key - * @return - */ - public Set hKeys(String key) { - return redisTemplate.opsForHash().keys(key); - } - - /** - * 获取哈希表中字段的数量 - * - * @param key - * @return - */ - public Long hSize(String key) { - return redisTemplate.opsForHash().size(key); - } - - /** - * 获取哈希表中所有值 - * - * @param key - * @return - */ - public List hValues(String key) { - return redisTemplate.opsForHash().values(key); - } - - /** - * 迭代哈希表中的键值对 - * - * @param key - * @param options - * @return - */ - public Cursor> hScan(String key, ScanOptions options) { - return redisTemplate.opsForHash().scan(key, options); - } - - /** ------------------------list相关操作---------------------------- */ - - /** - * 通过索引获取列表中的元素 - * - * @param key - * @param index - * @return - */ - public String lIndex(String key, long index) { - return redisTemplate.opsForList().index(key, index); - } - - /** - * 获取列表指定范围内的元素 - * - * @param key - * @param start - * 开始位置, 0是开始位置 - * @param end - * 结束位置, -1返回所有 - * @return - */ - public List lRange(String key, long start, long end) { - return redisTemplate.opsForList().range(key, start, end); - } - - /** - * 存储在list头部 - * - * @param key - * @param value - * @return - */ - public Long lLeftPush(String key, String value) { - return redisTemplate.opsForList().leftPush(key, value); - } - - /** - * - * @param key - * @param value - * @return - */ - public Long lLeftPushAll(String key, String... value) { - return redisTemplate.opsForList().leftPushAll(key, value); - } - - /** - * - * @param key - * @param value - * @return - */ - public Long lLeftPushAll(String key, Collection value) { - return redisTemplate.opsForList().leftPushAll(key, value); - } - - /** - * 当list存在的时候才加入 - * - * @param key - * @param value - * @return - */ - public Long lLeftPushIfPresent(String key, String value) { - return redisTemplate.opsForList().leftPushIfPresent(key, value); - } - - /** - * 如果pivot存在,再pivot前面添加 - * - * @param key - * @param pivot - * @param value - * @return - */ - public Long lLeftPush(String key, String pivot, String value) { - return redisTemplate.opsForList().leftPush(key, pivot, value); - } - - /** - * - * @param key - * @param value - * @return - */ - public Long lRightPush(String key, String value) { - return redisTemplate.opsForList().rightPush(key, value); - } - - /** - * - * @param key - * @param value - * @return - */ - public Long lRightPushAll(String key, String... value) { - return redisTemplate.opsForList().rightPushAll(key, value); - } - - /** - * - * @param key - * @param value - * @return - */ - public Long lRightPushAll(String key, Collection value) { - return redisTemplate.opsForList().rightPushAll(key, value); - } - - /** - * 为已存在的列表添加值 - * - * @param key - * @param value - * @return - */ - public Long lRightPushIfPresent(String key, String value) { - return redisTemplate.opsForList().rightPushIfPresent(key, value); - } - - /** - * 在pivot元素的右边添加值 - * - * @param key - * @param pivot - * @param value - * @return - */ - public Long lRightPush(String key, String pivot, String value) { - return redisTemplate.opsForList().rightPush(key, pivot, value); - } - - /** - * 通过索引设置列表元素的值 - * - * @param key - * @param index - * 位置 - * @param value - */ - public void lSet(String key, long index, String value) { - redisTemplate.opsForList().set(key, index, value); - } - - /** - * 移出并获取列表的第一个元素 - * - * @param key - * @return 删除的元素 - */ - public String lLeftPop(String key) { - return redisTemplate.opsForList().leftPop(key); - } - - /** - * 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 - * - * @param key - * @param timeout - * 等待时间 - * @param unit - * 时间单位 - * @return - */ - public String lBLeftPop(String key, long timeout, TimeUnit unit) { - return redisTemplate.opsForList().leftPop(key, timeout, unit); - } - - /** - * 移除并获取列表最后一个元素 - * - * @param key - * @return 删除的元素 - */ - public String lRightPop(String key) { - return redisTemplate.opsForList().rightPop(key); - } - - /** - * 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 - * - * @param key - * @param timeout - * 等待时间 - * @param unit - * 时间单位 - * @return - */ - public String lBRightPop(String key, long timeout, TimeUnit unit) { - return redisTemplate.opsForList().rightPop(key, timeout, unit); - } - - /** - * 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 - * - * @param sourceKey - * @param destinationKey - * @return - */ - public String lRightPopAndLeftPush(String sourceKey, String destinationKey) { - return redisTemplate.opsForList().rightPopAndLeftPush(sourceKey, - destinationKey); - } - - /** - * 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 - * - * @param sourceKey - * @param destinationKey - * @param timeout - * @param unit - * @return - */ - public String lBRightPopAndLeftPush(String sourceKey, String destinationKey, - long timeout, TimeUnit unit) { - return redisTemplate.opsForList().rightPopAndLeftPush(sourceKey, - destinationKey, timeout, unit); - } - - /** - * 删除集合中值等于value得元素 - * - * @param key - * @param index - * index=0, 删除所有值等于value的元素; index>0, 从头部开始删除第一个值等于value的元素; - * index<0, 从尾部开始删除第一个值等于value的元素; - * @param value - * @return - */ - public Long lRemove(String key, long index, String value) { - return redisTemplate.opsForList().remove(key, index, value); - } - - /** - * 裁剪list - * - * @param key - * @param start - * @param end - */ - public void lTrim(String key, long start, long end) { - redisTemplate.opsForList().trim(key, start, end); - } - - /** - * 获取列表长度 - * - * @param key - * @return - */ - public Long lLen(String key) { - return redisTemplate.opsForList().size(key); - } - - /** --------------------set相关操作-------------------------- */ - - /** - * set添加元素 - * - * @param key - * @param values - * @return - */ - public Long sAdd(String key, String... values) { - return redisTemplate.opsForSet().add(key, values); - } - - /** - * set移除元素 - * - * @param key - * @param values - * @return - */ - public Long sRemove(String key, Object... values) { - return redisTemplate.opsForSet().remove(key, values); - } - - /** - * 移除并返回集合的一个随机元素 - * - * @param key - * @return - */ - public String sPop(String key) { - return redisTemplate.opsForSet().pop(key); - } - - /** - * 将元素value从一个集合移到另一个集合 - * - * @param key - * @param value - * @param destKey - * @return - */ - public Boolean sMove(String key, String value, String destKey) { - return redisTemplate.opsForSet().move(key, value, destKey); - } - - /** - * 获取集合的大小 - * - * @param key - * @return - */ - public Long sSize(String key) { - return redisTemplate.opsForSet().size(key); - } - - /** - * 判断集合是否包含value - * - * @param key - * @param value - * @return - */ - public Boolean sIsMember(String key, Object value) { - return redisTemplate.opsForSet().isMember(key, value); - } - - /** - * 获取两个集合的交集 - * - * @param key - * @param otherKey - * @return - */ - public Set sIntersect(String key, String otherKey) { - return redisTemplate.opsForSet().intersect(key, otherKey); - } - - /** - * 获取key集合与多个集合的交集 - * - * @param key - * @param otherKeys - * @return - */ - public Set sIntersect(String key, Collection otherKeys) { - return redisTemplate.opsForSet().intersect(key, otherKeys); - } - - /** - * key集合与otherKey集合的交集存储到destKey集合中 - * - * @param key - * @param otherKey - * @param destKey - * @return - */ - public Long sIntersectAndStore(String key, String otherKey, String destKey) { - return redisTemplate.opsForSet().intersectAndStore(key, otherKey, - destKey); - } - - /** - * key集合与多个集合的交集存储到destKey集合中 - * - * @param key - * @param otherKeys - * @param destKey - * @return - */ - public Long sIntersectAndStore(String key, Collection otherKeys, - String destKey) { - return redisTemplate.opsForSet().intersectAndStore(key, otherKeys, - destKey); - } - - /** - * 获取两个集合的并集 - * - * @param key - * @param otherKeys - * @return - */ - public Set sUnion(String key, String otherKeys) { - return redisTemplate.opsForSet().union(key, otherKeys); - } - - /** - * 获取key集合与多个集合的并集 - * - * @param key - * @param otherKeys - * @return - */ - public Set sUnion(String key, Collection otherKeys) { - return redisTemplate.opsForSet().union(key, otherKeys); - } - - /** - * key集合与otherKey集合的并集存储到destKey中 - * - * @param key - * @param otherKey - * @param destKey - * @return - */ - public Long sUnionAndStore(String key, String otherKey, String destKey) { - return redisTemplate.opsForSet().unionAndStore(key, otherKey, destKey); - } - - /** - * key集合与多个集合的并集存储到destKey中 - * - * @param key - * @param otherKeys - * @param destKey - * @return - */ - public Long sUnionAndStore(String key, Collection otherKeys, - String destKey) { - return redisTemplate.opsForSet().unionAndStore(key, otherKeys, destKey); - } - - /** - * 获取两个集合的差集 - * - * @param key - * @param otherKey - * @return - */ - public Set sDifference(String key, String otherKey) { - return redisTemplate.opsForSet().difference(key, otherKey); - } - - /** - * 获取key集合与多个集合的差集 - * - * @param key - * @param otherKeys - * @return - */ - public Set sDifference(String key, Collection otherKeys) { - return redisTemplate.opsForSet().difference(key, otherKeys); - } - - /** - * key集合与otherKey集合的差集存储到destKey中 - * - * @param key - * @param otherKey - * @param destKey - * @return - */ - public Long sDifference(String key, String otherKey, String destKey) { - return redisTemplate.opsForSet().differenceAndStore(key, otherKey, - destKey); - } - - /** - * key集合与多个集合的差集存储到destKey中 - * - * @param key - * @param otherKeys - * @param destKey - * @return - */ - public Long sDifference(String key, Collection otherKeys, - String destKey) { - return redisTemplate.opsForSet().differenceAndStore(key, otherKeys, - destKey); - } - - /** - * 获取集合所有元素 - * - * @param key - * @return - */ - public Set setMembers(String key) { - return redisTemplate.opsForSet().members(key); - } - - /** - * 随机获取集合中的一个元素 - * - * @param key - * @return - */ - public String sRandomMember(String key) { - return redisTemplate.opsForSet().randomMember(key); - } - - /** - * 随机获取集合中count个元素 - * - * @param key - * @param count - * @return - */ - public List sRandomMembers(String key, long count) { - return redisTemplate.opsForSet().randomMembers(key, count); - } - - /** - * 随机获取集合中count个元素并且去除重复的 - * - * @param key - * @param count - * @return - */ - public Set sDistinctRandomMembers(String key, long count) { - return redisTemplate.opsForSet().distinctRandomMembers(key, count); - } - - /** - * - * @param key - * @param options - * @return - */ - public Cursor sScan(String key, ScanOptions options) { - return redisTemplate.opsForSet().scan(key, options); - } - - /**------------------zSet相关操作--------------------------------*/ - - /** - * 添加元素,有序集合是按照元素的score值由小到大排列 - * - * @param key - * @param value - * @param score - * @return - */ - public Boolean zAdd(String key, String value, double score) { - return redisTemplate.opsForZSet().add(key, value, score); - } - - /** - * - * @param key - * @param values - * @return - */ - public Long zAdd(String key, Set> values) { - return redisTemplate.opsForZSet().add(key, values); - } - - /** - * - * @param key - * @param values - * @return - */ - public Long zRemove(String key, Object... values) { - return redisTemplate.opsForZSet().remove(key, values); - } - - /** - * 增加元素的score值,并返回增加后的值 - * - * @param key - * @param value - * @param delta - * @return - */ - public Double zIncrementScore(String key, String value, double delta) { - return redisTemplate.opsForZSet().incrementScore(key, value, delta); - } - - /** - * 返回元素在集合的排名,有序集合是按照元素的score值由小到大排列 - * - * @param key - * @param value - * @return 0表示第一位 - */ - public Long zRank(String key, Object value) { - return redisTemplate.opsForZSet().rank(key, value); - } - - /** - * 返回元素在集合的排名,按元素的score值由大到小排列 - * - * @param key - * @param value - * @return - */ - public Long zReverseRank(String key, Object value) { - return redisTemplate.opsForZSet().reverseRank(key, value); - } - - /** - * 获取集合的元素, 从小到大排序 - * - * @param key - * @param start - * 开始位置 - * @param end - * 结束位置, -1查询所有 - * @return - */ - public Set zRange(String key, long start, long end) { - return redisTemplate.opsForZSet().range(key, start, end); - } - - /** - * 获取集合元素, 并且把score值也获取 - * - * @param key - * @param start - * @param end - * @return - */ - public Set> zRangeWithScores(String key, long start, - long end) { - return redisTemplate.opsForZSet().rangeWithScores(key, start, end); - } - - /** - * 根据Score值查询集合元素 - * - * @param key - * @param min - * 最小值 - * @param max - * 最大值 - * @return - */ - public Set zRangeByScore(String key, double min, double max) { - return redisTemplate.opsForZSet().rangeByScore(key, min, max); - } - - /** - * 根据Score值查询集合元素, 从小到大排序 - * - * @param key - * @param min - * 最小值 - * @param max - * 最大值 - * @return - */ - public Set> zRangeByScoreWithScores(String key, - double min, double max) { - return redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max); - } - - /** - * - * @param key - * @param min - * @param max - * @param start - * @param end - * @return - */ - public Set> zRangeByScoreWithScores(String key, - double min, double max, long start, long end) { - return redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max, - start, end); - } - - /** - * 获取集合的元素, 从大到小排序 - * - * @param key - * @param start - * @param end - * @return - */ - public Set zReverseRange(String key, long start, long end) { - return redisTemplate.opsForZSet().reverseRange(key, start, end); - } - - /** - * 获取集合的元素, 从大到小排序, 并返回score值 - * - * @param key - * @param start - * @param end - * @return - */ - public Set> zReverseRangeWithScores(String key, - long start, long end) { - return redisTemplate.opsForZSet().reverseRangeWithScores(key, start, - end); - } - - /** - * 根据Score值查询集合元素, 从大到小排序 - * - * @param key - * @param min - * @param max - * @return - */ - public Set zReverseRangeByScore(String key, double min, - double max) { - return redisTemplate.opsForZSet().reverseRangeByScore(key, min, max); - } - - /** - * 根据Score值查询集合元素, 从大到小排序 - * - * @param key - * @param min - * @param max - * @return - */ - public Set> zReverseRangeByScoreWithScores( - String key, double min, double max) { - return redisTemplate.opsForZSet().reverseRangeByScoreWithScores(key, - min, max); - } - - /** - * - * @param key - * @param min - * @param max - * @param start - * @param end - * @return - */ - public Set zReverseRangeByScore(String key, double min, - double max, long start, long end) { - return redisTemplate.opsForZSet().reverseRangeByScore(key, min, max, - start, end); - } - - /** - * 根据score值获取集合元素数量 - * - * @param key - * @param min - * @param max - * @return - */ - public Long zCount(String key, double min, double max) { - return redisTemplate.opsForZSet().count(key, min, max); - } - - /** - * 获取集合大小 - * - * @param key - * @return - */ - public Long zSize(String key) { - return redisTemplate.opsForZSet().size(key); - } - - /** - * 获取集合大小 - * - * @param key - * @return - */ - public Long zZCard(String key) { - return redisTemplate.opsForZSet().zCard(key); - } - - /** - * 获取集合中value元素的score值 - * - * @param key - * @param value - * @return - */ - public Double zScore(String key, Object value) { - return redisTemplate.opsForZSet().score(key, value); - } - - /** - * 移除指定索引位置的成员 - * - * @param key - * @param start - * @param end - * @return - */ - public Long zRemoveRange(String key, long start, long end) { - return redisTemplate.opsForZSet().removeRange(key, start, end); - } - - /** - * 根据指定的score值的范围来移除成员 - * - * @param key - * @param min - * @param max - * @return - */ - public Long zRemoveRangeByScore(String key, double min, double max) { - return redisTemplate.opsForZSet().removeRangeByScore(key, min, max); - } - - /** - * 获取key和otherKey的并集并存储在destKey中 - * - * @param key - * @param otherKey - * @param destKey - * @return - */ - public Long zUnionAndStore(String key, String otherKey, String destKey) { - return redisTemplate.opsForZSet().unionAndStore(key, otherKey, destKey); - } - - /** - * - * @param key - * @param otherKeys - * @param destKey - * @return - */ - public Long zUnionAndStore(String key, Collection otherKeys, - String destKey) { - return redisTemplate.opsForZSet() - .unionAndStore(key, otherKeys, destKey); - } - - /** - * 交集 - * - * @param key - * @param otherKey - * @param destKey - * @return - */ - public Long zIntersectAndStore(String key, String otherKey, - String destKey) { - return redisTemplate.opsForZSet().intersectAndStore(key, otherKey, - destKey); - } - - /** - * 交集 - * - * @param key - * @param otherKeys - * @param destKey - * @return - */ - public Long zIntersectAndStore(String key, Collection otherKeys, - String destKey) { - return redisTemplate.opsForZSet().intersectAndStore(key, otherKeys, - destKey); - } - - /** - * 匹配获取键值对,ScanOptions.NONE为获取全部键值对;ScanOptions.scanOptions().match("C").build()匹配获取键位map1的键值对,不能模糊匹配。 - * @param key - * @param options - * @return - */ - public Cursor> zScan(String key, ScanOptions options) { - return redisTemplate.opsForZSet().scan(key, options); - } -} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 0b71fb6..a47bc6e 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -8,8 +8,8 @@ spring: password: spynsql datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://1.14.105.160:6207/takeaway?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8 - username: spyn + url: jdbc:mysql://1.14.105.160:6207/takeaway?useUnicode=true&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8 + username: root password: spynsql server: