Skip to content
This repository has been archived by the owner on Mar 4, 2022. It is now read-only.

Commit

Permalink
order
Browse files Browse the repository at this point in the history
  • Loading branch information
itning committed Feb 12, 2020
1 parent 592592b commit 50238af
Show file tree
Hide file tree
Showing 9 changed files with 245 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.sport.sportsmailserver.controller;

import com.sport.sportsmailserver.dto.LoginUser;
import com.sport.sportsmailserver.dto.RestModel;
import com.sport.sportsmailserver.security.MustUserLogin;
import com.sport.sportsmailserver.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
* @author itning
* @date 2020/2/12 16:44
*/
@RestController
public class CartController {
private final CartService cartService;

@Autowired
public CartController(CartService cartService) {
this.cartService = cartService;
}

/**
* 添加到购物车
*
* @param loginUser 登录用户
* @param commodityId 商品ID
* @param num 数量
* @param cumulative 累加
* @return 添加的商品
*/
@PostMapping("/cart")
public ResponseEntity<?> addToCart(@MustUserLogin LoginUser loginUser,
@RequestParam String commodityId,
@RequestParam(defaultValue = "1") int num,
@RequestParam(defaultValue = "true") boolean cumulative) {
return RestModel.created(cartService.addToCart(loginUser, commodityId, num, cumulative));
}

/**
* 获取某用户所有购物车
*
* @param loginUser 登录用户
* @param pageable 分页
* @return ResponseEntity
*/
@GetMapping("carts")
public ResponseEntity<?> getCarts(@MustUserLogin LoginUser loginUser,
@PageableDefault(
size = 20, sort = {"gmtModified"},
direction = Sort.Direction.DESC
)
Pageable pageable) {
return RestModel.ok(cartService.getAll(loginUser, pageable));
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.sport.sportsmailserver.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.sport.sportsmailserver.dto.LoginUser;
import com.sport.sportsmailserver.dto.RestModel;
import com.sport.sportsmailserver.entity.User;
import com.sport.sportsmailserver.security.MustUserLogin;
import com.sport.sportsmailserver.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

/**
* @author itning
Expand Down Expand Up @@ -35,4 +36,18 @@ public ResponseEntity<?> login(@RequestParam String username,
@RequestParam String password) throws JsonProcessingException {
return RestModel.ok(userService.login(username, password));
}

/**
* 修改用户信息
*
* @param loginUser 登录用户
* @param user 新用户信息
* @return ResponseEntity
*/
@PatchMapping("/user")
public ResponseEntity<?> modifyUserInfo(@MustUserLogin LoginUser loginUser,
@RequestBody User user) {
userService.modifyUser(loginUser, user);
return RestModel.noContent();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.UpdateTimestamp;

import javax.persistence.*;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
* 商品分类
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,22 @@

import com.sport.sportsmailserver.entity.Cart;
import com.sport.sportsmailserver.entity.CartPrimaryKey;
import com.sport.sportsmailserver.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

/**
* @author itning
* @date 2020/2/11 21:12
*/
public interface CartRepository extends JpaRepository<Cart, CartPrimaryKey> {
/**
* 查找某个用户的购物车信息
*
* @param user 用户
* @param pageable 分页
* @return 购物车集合
*/
Page<Cart> findAllByUser(User user, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,11 @@
* @date 2020/2/11 20:17
*/
public interface UserRepository extends JpaRepository<User, String> {
/**
* 查询邮箱是否存在
*
* @param email 邮箱
* @return 存在?
*/
boolean existsByEmail(String email);
}
35 changes: 35 additions & 0 deletions src/main/java/com/sport/sportsmailserver/service/CartService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.sport.sportsmailserver.service;

import com.sport.sportsmailserver.dto.LoginUser;
import com.sport.sportsmailserver.entity.Cart;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

/**
* 购物车服务
*
* @author itning
* @date 2020/2/12 16:45
*/
public interface CartService {
/**
* <p>商品加入购物车
* <p>每调用一次商品数量变为num
*
* @param loginUser 登录用户
* @param commodityId 商品ID
* @param num 数量
* @param cumulative 累加
* @return 加入的购物车
*/
Cart addToCart(LoginUser loginUser, String commodityId, int num, boolean cumulative);

/**
* 获取所有购物车
*
* @param loginUser 登录用户
* @param pageable 分页
* @return 购物车集合
*/
Page<Cart> getAll(LoginUser loginUser, Pageable pageable);
}
10 changes: 10 additions & 0 deletions src/main/java/com/sport/sportsmailserver/service/UserService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.sport.sportsmailserver.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.sport.sportsmailserver.dto.LoginUser;
import com.sport.sportsmailserver.entity.User;

/**
* 用户服务
Expand All @@ -18,4 +20,12 @@ public interface UserService {
* @throws JsonProcessingException JWT构建失败
*/
String login(String username, String password) throws JsonProcessingException;

/**
* 修改用户信息
*
* @param loginUser 登录用户
* @param user 新用户信息
*/
void modifyUser(LoginUser loginUser, User user);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.sport.sportsmailserver.service.impl;

import com.sport.sportsmailserver.dto.LoginUser;
import com.sport.sportsmailserver.entity.Cart;
import com.sport.sportsmailserver.entity.CartPrimaryKey;
import com.sport.sportsmailserver.entity.Commodity;
import com.sport.sportsmailserver.entity.User;
import com.sport.sportsmailserver.exception.IdNotFoundException;
import com.sport.sportsmailserver.exception.SecurityServerException;
import com.sport.sportsmailserver.repository.CartRepository;
import com.sport.sportsmailserver.repository.CommodityRepository;
import com.sport.sportsmailserver.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Optional;

/**
* @author itning
* @date 2020/2/12 16:46
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class CartServiceImpl implements CartService {
private final CartRepository cartRepository;
private final CommodityRepository commodityRepository;

@Autowired
public CartServiceImpl(CartRepository cartRepository, CommodityRepository commodityRepository) {
this.cartRepository = cartRepository;
this.commodityRepository = commodityRepository;
}

@Override
public Cart addToCart(LoginUser loginUser, String commodityId, int num, boolean cumulative) {
Commodity cc = commodityRepository.findById(commodityId).orElseThrow(() -> new IdNotFoundException("商品不存在"));
if (cc.isTakeOff()) {
throw new SecurityServerException("商品已下架", HttpStatus.NOT_FOUND);
}
CartPrimaryKey cartPrimaryKey = new CartPrimaryKey();
cartPrimaryKey.setUser(loginUser.getUsername());
cartPrimaryKey.setCommodity(commodityId);
Optional<Cart> cartOptional = cartRepository.findById(cartPrimaryKey);
Cart cart;
if (cartOptional.isPresent()) {
// 商品已经在购物车里了
cart = cartOptional.get();
if (cumulative) {
cart.setCountNum(cart.getCountNum() + num);
} else {
cart.setCountNum(num);
}
} else {
User user = new User();
user.setUsername(loginUser.getUsername());

cart = new Cart();
cart.setCountNum(num);
cart.setUser(user);
cart.setCommodity(cc);
}
return cartRepository.save(cart);
}

@Override
public Page<Cart> getAll(LoginUser loginUser, Pageable pageable) {
User user = new User();
user.setUsername(loginUser.getUsername());
return cartRepository.findAllByUser(user, pageable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.sport.sportsmailserver.exception.IdNotFoundException;
import com.sport.sportsmailserver.exception.NullFiledException;
import com.sport.sportsmailserver.exception.SecurityServerException;
import com.sport.sportsmailserver.exception.TokenException;
import com.sport.sportsmailserver.repository.RoleRepository;
import com.sport.sportsmailserver.repository.UserRepository;
import com.sport.sportsmailserver.service.UserService;
Expand Down Expand Up @@ -56,4 +57,25 @@ public String login(String username, String password) throws JsonProcessingExcep
LoginUser loginUser = OrikaUtils.a2b(user, LoginUser.class);
return JwtUtils.buildJwt(loginUser);
}

@Override
public void modifyUser(LoginUser loginUser, User user) {
User savedUser = userRepository.findById(loginUser.getUsername()).orElseThrow(() -> new TokenException("用户不存在", HttpStatus.BAD_REQUEST));
if (StringUtils.isNotBlank(user.getPassword())) {
savedUser.setPassword(user.getPassword());
}
if (StringUtils.isNotBlank(user.getAddress())) {
savedUser.setAddress(user.getAddress());
}
if (StringUtils.isNotBlank(user.getEmail())) {
if (userRepository.existsByEmail(user.getEmail())) {
throw new NullFiledException("该邮箱已经被注册");
}
savedUser.setEmail(user.getEmail());
}
if (StringUtils.isNotBlank(user.getTel())) {
savedUser.setTel(user.getTel());
}
userRepository.save(savedUser);
}
}

0 comments on commit 50238af

Please sign in to comment.