由于微信app的广泛使用,为了贴近现实,用户端采取微信小程序的方式进行开发。
1.微信登录功能的实现(controller)
@PostMapping("/login")
@ApiOperation("微信登录")
public Result<UserLoginVO> login(@RequestBody UserLoginDTO userLoginDTO) {
log.info("微信用户登录:{}", userLoginDTO.getCode());
//微信登录
User user = userService.wxLogin(userLoginDTO);
//为微信用户生成jwt令牌
Map<String, Object> claims = new HashMap<>();
claims.put(JwtClaimsConstant.USER_ID, user.getId());
String token = JwtUtil.createJWT(jwtProperties.getUserSecretKey(), jwtProperties.getUserTtl(), claims);
UserLoginVO userLoginVO = UserLoginVO.builder()
.id(user.getId())
.openid(user.getOpenid())
.token(token)
.build();
return Result.success(userLoginVO);
}
2.java后端获取微信小程序端发出的登录请求,后端拿到数据对用户进行判断,如果用户为新用户,则保存,并且将数据返回给微信端。(service)
public User wxLogin(UserLoginDTO userLoginDTO) {
String openid = getOpenId(userLoginDTO.getCode());
//判断openid是否为空
if (openid == null) {
throw new LoginFailedException(MessageConstant.LOGIN_FAILED);
}
//判断当前用户是否新用户
User user = userMapper.getByOpenid(openid);
if (user == null) {
//如果是 自动完成注册
user = User.builder()
.openid(openid)
.createTime(LocalDateTime.now())
.build();
userMapper.insert(user);
}
//返回这个用户
return user;
}
下面是数据库操作(mysql)
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into user (openid, name, phone, sex, id_number, avatar, create_time)
values (#{openid},#{name},#{phone},#{sex},#{idNumber},#{avatar},#{createTime})
</insert>
3.购物车操作
线上的的购物车可以理解为就是我们生活中的购物车,将购物车数据单独放在一个表中,对其进行增删改查。
添加购物车时,只需检查购物车中是否已有该数据,如果有的话,就只用对其数量+1,如果没有的话,判断加入的套餐还是商品,根据其内容对相应的数据库表进行新增操作。
下面是业务实现代码
//添加购物车
@PostMapping("/add")
public Result add(@RequestBody ShoppingCartDTO shoppingCartDTO){
shoppingCarService.addShoppingCar(shoppingCartDTO);
return Result.success();
}
/**
* 添加购物车
* @param shoppingCartDTO
*/
void addShoppingCar(ShoppingCartDTO shoppingCartDTO);
/**
* 添加购物车
*
* @param shoppingCartDTO
*/
public void addShoppingCar(ShoppingCartDTO shoppingCartDTO) {
//判断当前商品是否已经在购物车中存在
ShoppingCart shoppingCart = new ShoppingCart();
BeanUtils.copyProperties(shoppingCartDTO, shoppingCart);
Long userId = BaseContext.getCurrentId();
shoppingCart.setId(userId);
List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);
if (list != null || list.size() > 0) {
ShoppingCart cart = list.get(0);
cart.setNumber(cart.getNumber() + 1);// update shopping_cart set number ? where id = ?
shoppingCartMapper.updateNumberById(cart);
} else {
//不存在 插入一条商品数据
//判断本次添加到购物车的是菜品还是套餐
Long dishId = shoppingCartDTO.getDishId();
if (dishId != null) {
//本次添加到购物车的是菜品
Dish dish = dishMapper.getById(dishId);
shoppingCart.setName(dish.getName());
shoppingCart.setImage(dish.getImage());
shoppingCart.setAmount(dish.getPrice());
} else {
//本次添加到购物车的是套餐
Long setmealId = shoppingCartDTO.getSetmealId();
Setmeal setmeal = setmealMapper.getById(setmealId);
shoppingCart.setName(setmeal.getName());
shoppingCart.setImage(setmeal.getImage());
shoppingCart.setAmount(setmeal.getPrice());
}
shoppingCart.setNumber(1);
shoppingCart.setCreateTime(LocalDateTime.now());
shoppingCartMapper.insert(shoppingCart);
}
/**
* 动态条件查询
*
* @param shoppingCart
* @return
*/
List<ShoppingCart> list(ShoppingCart shoppingCart);
/**
* 根基id修改商品数量
*
* @param shoppingCart
*/
@Update("update shopping_cart set number = #{number} where id = #{id}")
void updateNumberById(ShoppingCart shoppingCart);
/**
* 插入购物车数据
* @param shoppingCart
*/
@Insert("insert into shopping_cart(name, image, user_id, dish_id, setmeal_id, dish_flavor, amount, create_time) " +
"values (#{name},#{image},#{userId},#{dishId},#{setmealId},#{dishFlavor},#{Amount},#{createTime})")
void insert(ShoppingCart shoppingCart);
查看购物车和删除代码开发,这一块相对而言还是比较简单,只需要一个get和delete请求即可,对购物车的数据进行查询或者删除。
//查询购物车数据
@GetMapping("/list")
public Result<List<ShoppingCart>> list(){
List<ShoppingCart> list= shoppingCarService.showShoppingCart();
return Result.success(list);
}
//删除购物车
@DeleteMapping("/clean")
public Result clean(){
shoppingCarService.cleanShoppingCart();
return Result.success();
}
/**
* 查看购物车
* @return
*/
List<ShoppingCart> showShoppingCart();
/**
* 清空购物车
*/
void cleanShoppingCart();
/**
* 查看购物车
*
* @return
*/
public List<ShoppingCart> showShoppingCart() {
Long userId = BaseContext.getCurrentId();
ShoppingCart shoppingCart = ShoppingCart.builder()
.userId(userId)
.build();
List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);
return list;
}
/**
* 清空购物车
*/
public void cleanShoppingCart() {
Long userId = BaseContext.getCurrentId();
shoppingCartMapper.deleteByUserId(userId);
}