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

Commit

Permalink
product
Browse files Browse the repository at this point in the history
  • Loading branch information
itning committed Feb 13, 2020
1 parent d8ec76c commit 9a5f67f
Show file tree
Hide file tree
Showing 8 changed files with 192 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.sport.sportsmailserver.controller;

import com.sport.sportsmailserver.dto.CommodityDTO;
import com.sport.sportsmailserver.dto.LoginUser;
import com.sport.sportsmailserver.dto.RestModel;
import com.sport.sportsmailserver.security.MustAdminLogin;
import com.sport.sportsmailserver.security.MustUserLogin;
import com.sport.sportsmailserver.service.CommodityService;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -85,4 +87,35 @@ public ResponseEntity<?> search(@MustUserLogin LoginUser loginUser,
Pageable pageable) {
return RestModel.ok(commodityService.search(keyword, pageable));
}

/**
* 管理员获取所有商品
*
* @param loginUser 登录用户
* @param pageable 分页
* @return ResponseEntity
*/
@GetMapping("/admin")
public ResponseEntity<?> getAll(@MustAdminLogin LoginUser loginUser,
@PageableDefault(
size = 20, sort = {"gmtModified"},
direction = Sort.Direction.DESC
)
Pageable pageable) {
return RestModel.ok(commodityService.findAll(pageable));
}

/**
* 修改商品信息
*
* @param loginUser 登录用户
* @param commodity 商品
* @return ResponseEntity
*/
@PatchMapping("/admin")
public ResponseEntity<?> modify(@MustAdminLogin LoginUser loginUser,
@RequestBody CommodityDTO commodity) {
commodityService.modify(commodity);
return RestModel.noContent();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.sport.sportsmailserver.dto.LoginUser;
import com.sport.sportsmailserver.dto.RestModel;
import com.sport.sportsmailserver.security.MustAdminLogin;
import com.sport.sportsmailserver.security.MustLogin;
import com.sport.sportsmailserver.security.MustUserLogin;
import com.sport.sportsmailserver.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -63,14 +64,15 @@ public ResponseEntity<?> getAllOrders(@MustUserLogin LoginUser loginUser,
}

/**
* 用户删除订单
* 删除订单
*
* @param loginUser 登录用户
* @param id 订单ID
* @return ResponseEntity
*/
@DeleteMapping("/order/{id}")
public ResponseEntity<?> delOrder(@MustUserLogin LoginUser loginUser, @PathVariable String id) {
public ResponseEntity<?> delOrder(@MustLogin(role = {MustLogin.ROLE.ADMIN, MustLogin.ROLE.USER}) LoginUser loginUser,
@PathVariable String id) {
orderService.delOrder(loginUser, id);
return RestModel.noContent();
}
Expand Down
54 changes: 54 additions & 0 deletions src/main/java/com/sport/sportsmailserver/dto/CommodityDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.sport.sportsmailserver.dto;

import com.sport.sportsmailserver.entity.CommodityType;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;

/**
* @author itning
* @date 2020/2/13 22:08
*/
@Data
public class CommodityDTO implements Serializable {
/**
* <p>商品ID 区分每个商品
* <p>自动主键生成
*/
private String id;
/**
* 商品名
*/
private String name;
/**
* 库存,默认为 1
*/
private Integer stock;
/**
* <p>单价
* <p>小数位数2位(角,分)
*/
private BigDecimal price;
/**
* 商品图片地址(主图片)
*/
private String imgMain;
/**
* <p>其它图片地址(使用英文分号进行分隔)
* <p>主要用于详情展示
*/
private String imgSecond;
/**
* 推荐商品(会展示在首页)
*/
private Boolean recommended;
/**
* 商品已下架?
*/
private Boolean takeOff;
/**
* 商品分类
*/
private CommodityType commodityType;
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,13 @@ public interface CommodityRepository extends JpaRepository<Commodity, String> {
* @return 有返回<code>true</code>
*/
boolean existsByCommodityType(CommodityType commodityType);

/**
* 查询所有商品
*
* @param takeOff 已下架?
* @param pageable 分页
* @return 商品集合
*/
Page<Commodity> findAllByTakeOff(boolean takeOff, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sport.sportsmailserver.service;

import com.sport.sportsmailserver.dto.CommodityDTO;
import com.sport.sportsmailserver.entity.Commodity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
Expand Down Expand Up @@ -43,4 +44,19 @@ public interface CommodityService {
* @return 商品集合
*/
Page<Commodity> search(String keyword, Pageable pageable);

/**
* 获取所有商品
*
* @param pageable 分页
* @return 商品集合
*/
Page<Commodity> findAll(Pageable pageable);

/**
* 修改商品
*
* @param commodity 商品
*/
void modify(CommodityDTO commodity);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sport.sportsmailserver.service.impl;

import com.sport.sportsmailserver.dto.CommodityDTO;
import com.sport.sportsmailserver.entity.Commodity;
import com.sport.sportsmailserver.entity.CommodityType;
import com.sport.sportsmailserver.exception.IdNotFoundException;
Expand All @@ -16,6 +17,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.List;

/**
Expand Down Expand Up @@ -64,4 +66,57 @@ public Page<Commodity> search(String keyword, Pageable pageable) {
}
return commodityRepository.findAllByTakeOffAndNameLike(false, "%" + keyword + "%", pageable);
}

@Override
public Page<Commodity> findAll(Pageable pageable) {
return commodityRepository.findAllByTakeOff(false, pageable);
}

@Override
public void modify(CommodityDTO commodity) {
if (StringUtils.isBlank(commodity.getId())) {
throw new NullFiledException("商品ID为空");
}
Commodity saved = commodityRepository.findById(commodity.getId()).orElseThrow(() -> new IdNotFoundException("商品不存在"));
// 1.库存变
if (commodity.getStock() != null) {
saved.setStock(commodity.getStock());
}
// 2.价格变
if (commodity.getPrice() != null) {
saved.setPrice(commodity.getPrice());
}
// 3.标题变
if (StringUtils.isNotBlank(commodity.getName())) {
saved.setName(commodity.getName());
}
// 4.主图片变
if (StringUtils.isNotBlank(commodity.getImgMain())) {
saved.setImgMain(commodity.getImgMain());
}
// 5.推荐变
if (commodity.getRecommended() != null) {
saved.setRecommended(commodity.getRecommended());
}
// 6.商品下架?
if (commodity.getTakeOff() != null) {
saved.setTakeOff(commodity.getTakeOff());
}
// 7.副图片变
if (commodity.getImgSecond() != null) {
try {
String[] split = commodity.getImgSecond().split(";");
System.out.println(Arrays.toString(split));
} catch (Exception e) {
throw new SecurityServerException("副图片格式错误", HttpStatus.BAD_REQUEST);
}
saved.setImgSecond(commodity.getImgSecond());
}
// 8.商品分类变
if (commodity.getCommodityType() != null && commodity.getCommodityType().getId() != null) {
CommodityType commodityType = commodityTypeRepository.findById(commodity.getCommodityType().getId()).orElseThrow(() -> new IdNotFoundException("商品分类没找到"));
saved.setCommodityType(commodityType);
}
commodityRepository.save(saved);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
import com.sport.sportsmailserver.dto.LoginUser;
import com.sport.sportsmailserver.entity.Commodity;
import com.sport.sportsmailserver.entity.Order;
import com.sport.sportsmailserver.entity.Role;
import com.sport.sportsmailserver.entity.User;
import com.sport.sportsmailserver.exception.IdNotFoundException;
import com.sport.sportsmailserver.exception.SecurityServerException;
import com.sport.sportsmailserver.repository.CommodityRepository;
import com.sport.sportsmailserver.repository.OrderRepository;
import com.sport.sportsmailserver.repository.UserRepository;
import com.sport.sportsmailserver.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
Expand All @@ -34,11 +36,13 @@
public class OrderServiceImpl implements OrderService {
private final OrderRepository orderRepository;
private final CommodityRepository commodityRepository;
private final UserRepository userRepository;

@Autowired
public OrderServiceImpl(OrderRepository orderRepository, CommodityRepository commodityRepository) {
public OrderServiceImpl(OrderRepository orderRepository, CommodityRepository commodityRepository, UserRepository userRepository) {
this.orderRepository = orderRepository;
this.commodityRepository = commodityRepository;
this.userRepository = userRepository;
}

@Override
Expand Down Expand Up @@ -92,13 +96,22 @@ public Page<Order> getAll(LoginUser loginUser, int[] status, Pageable pageable)
@Override
public void delOrder(LoginUser loginUser, String orderId) {
Order order = orderRepository.findById(orderId).orElseThrow(() -> new IdNotFoundException("订单不存在"));
if (!order.getUser().getUsername().equals(loginUser.getUsername())) {
throw new SecurityServerException("操作失败", HttpStatus.FORBIDDEN);
}
if (order.getStatus() == Order.STATUS.DEL_BY_ADMIN.getStatus()) {
order.setStatus(Order.STATUS.DEL_ALL.getStatus());
User user = userRepository.findById(loginUser.getUsername()).orElseThrow(() -> new IdNotFoundException("用户不存在"));
if (user.getRole().getId().equals(Role.ROLE_ADMIN_ID)) {
if (order.getStatus() == Order.STATUS.DEL_BY_USER.getStatus()) {
order.setStatus(Order.STATUS.DEL_ALL.getStatus());
} else {
order.setStatus(Order.STATUS.DEL_BY_ADMIN.getStatus());
}
} else {
order.setStatus(Order.STATUS.DEL_BY_USER.getStatus());
if (!order.getUser().getUsername().equals(loginUser.getUsername())) {
throw new SecurityServerException("操作失败", HttpStatus.FORBIDDEN);
}
if (order.getStatus() == Order.STATUS.DEL_BY_ADMIN.getStatus()) {
order.setStatus(Order.STATUS.DEL_ALL.getStatus());
} else {
order.setStatus(Order.STATUS.DEL_BY_USER.getStatus());
}
}
orderRepository.save(order);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static String buildJwt(Object o) throws JsonProcessingException {
//SECRET_KEY是加密算法对应的密钥,这里使用额是HS256加密算法
.signWith(SignatureAlgorithm.HS256, PRIVATE_KEY)
//expTime是过期时间
.setExpiration(new Date(System.currentTimeMillis() + 60 * 60 * 1000))
.setExpiration(new Date(System.currentTimeMillis() + 240 * 60 * 1000))
.claim(LOGIN_USER, MAPPER.writeValueAsString(o))
//令牌的发行者
.setIssuer("itning")
Expand Down

0 comments on commit 9a5f67f

Please sign in to comment.