diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/common/exception/LightSecurityExceptionHandler.java b/ruoyi-api/src/main/java/com/ruoyi/app/common/exception/LightSecurityExceptionHandler.java
index edef85e..1868a30 100644
--- a/ruoyi-api/src/main/java/com/ruoyi/app/common/exception/LightSecurityExceptionHandler.java
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/common/exception/LightSecurityExceptionHandler.java
@@ -11,6 +11,9 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
/**
* @ClassName 全局异常处理
@@ -27,13 +30,23 @@ public class LightSecurityExceptionHandler {
* @return 发生异常时的返回
*/
@ExceptionHandler(value = {LightSecurityException.class})
- @ResponseStatus(HttpStatus.UNAUTHORIZED)
+ //@ResponseStatus(HttpStatus.UNAUTHORIZED)
@ResponseBody
- public R error(LightSecurityException exception) {
- return R.error(401,"授权失败");
+ public R error(HttpServletRequest request, LightSecurityException exception, HttpServletResponse response) {
+ //System.out.println(request.getMethod());
+ //System.out.println(exception.getMessage());
+ String str1 = "com.itmuch.lightsecurity.exception.LightSecurityException: 没有找到名为Authorization的header";
+ String str2 = "com.itmuch.lightsecurity.exception.LightSecurityException: Token invalided.";
+ if (exception.getMessage().equals(str1) || exception.getMessage().equals(str2)) {
+ response.setStatus(401);
+ return R.error(401, "授权失败");
+ }
+ return R.error(4000, exception.getMessage());
+
}
+
@ExceptionHandler(value = {Exception.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecGoodsPriceMapper.java b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecGoodsPriceMapper.java
index b47e1d4..392094c 100644
--- a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecGoodsPriceMapper.java
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecGoodsPriceMapper.java
@@ -1,7 +1,12 @@
package com.ruoyi.app.common.persistence.dao;
import com.ruoyi.app.common.persistence.model.StoreSpecGoodsPrice;
-import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.app.modular.shop.service.dto.ItemDTO;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+import java.util.Map;
/**
*
@@ -13,4 +18,15 @@ import com.baomidou.mybatisplus.mapper.BaseMapper;
*/
public interface StoreSpecGoodsPriceMapper extends BaseMapper {
+ @Select("select GROUP_CONCAT(`key` ORDER BY store_count desc SEPARATOR '_') as keystr" +
+ " from store_spec_goods_price where goods_id=#{goodsId}")
+ String goodsSpecKey(int goodsId);
+
+ @Select("")
+ List goodsSpec(List keys);
+
}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecItemMapper.java b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecItemMapper.java
index b3edd1f..08018fa 100644
--- a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecItemMapper.java
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecItemMapper.java
@@ -1,7 +1,7 @@
package com.ruoyi.app.common.persistence.dao;
import com.ruoyi.app.common.persistence.model.StoreSpecItem;
-import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
*
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecMapper.java b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecMapper.java
index 015fa29..0c1ddb3 100644
--- a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecMapper.java
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/dao/StoreSpecMapper.java
@@ -1,7 +1,7 @@
package com.ruoyi.app.common.persistence.dao;
import com.ruoyi.app.common.persistence.model.StoreSpec;
-import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
*
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/model/StoreSpecGoodsPrice.java b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/model/StoreSpecGoodsPrice.java
index 2f08b52..d228bde 100644
--- a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/model/StoreSpecGoodsPrice.java
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/model/StoreSpecGoodsPrice.java
@@ -35,6 +35,7 @@ public class StoreSpecGoodsPrice extends Model {
/**
* 规格键名
*/
+ @TableField("`key`")
private String key;
/**
* 规格键名中文
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/MallController.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/MallController.java
index 985a956..a9fbf35 100644
--- a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/MallController.java
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/MallController.java
@@ -2,21 +2,22 @@ package com.ruoyi.app.modular.shop.controller;
import com.itmuch.lightsecurity.jwt.UserOperator;
import com.ruoyi.app.common.R;
+import com.ruoyi.app.common.exception.BadRequestException;
+import com.ruoyi.app.common.persistence.model.StoreSpecGoodsPrice;
import com.ruoyi.app.modular.shop.service.dto.CateDTO;
import com.ruoyi.app.modular.shop.service.dto.GoodsDTO;
+import com.ruoyi.app.modular.shop.service.dto.SpecItemDTO;
import com.ruoyi.app.modular.shop.service.impl.CateServiceImpl;
import com.ruoyi.app.modular.shop.service.impl.GoodsServiceImpl;
import com.ruoyi.app.modular.shop.service.mapper.GoodsMapper;
+import com.ruoyi.app.modular.shop.service.vo.CollectVO;
import com.ruoyi.app.modular.shop.service.vo.PageVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
@@ -72,4 +73,27 @@ public class MallController {
map.put("list",goods);
return R.success(map);
}
+
+ @GetMapping("/shop/mall-goods-detail")
+ @ApiOperation(value = "商品详情",notes = "商品详情")
+ public R goodsDetail(@RequestParam(value = "goods_id",defaultValue = "0") int goodsId){
+ Map specPrice = goodsService.goodsSpecPrice(goodsId);
+ GoodsDTO goodsDetail = goodsMapper.toDto(goodsService.getById(goodsId));
+ Map specs = goodsService.goodsSpec(goodsId);
+
+ Map map = new HashMap<>();
+ map.put("detail",goodsDetail);
+ map.put("spec_price",specPrice);
+ map.put("specs",specs);
+ return R.success(map);
+ }
+
+ @PostMapping("/shop/mall-add-collect")
+ public R addCollect(@Validated @RequestBody CollectVO collectVO){
+ int userId = userOperator.getUser().getId();
+ //throw new BadRequestException("已经收藏过");
+ goodsService.addOrCancelCollect(collectVO.getGoodsId(),userId,1);
+
+ return null;
+ }
}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/IGoodsService.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/IGoodsService.java
index 37483a8..f4600a2 100644
--- a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/IGoodsService.java
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/IGoodsService.java
@@ -5,9 +5,11 @@ package com.ruoyi.app.modular.shop.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.app.common.persistence.model.StoreGoods;
+import com.ruoyi.app.common.persistence.model.StoreSpecGoodsPrice;
import com.ruoyi.app.modular.shop.service.dto.GoodsDTO;
import java.util.List;
+import java.util.Map;
public interface IGoodsService extends IService {
@@ -17,4 +19,8 @@ public interface IGoodsService extends IService {
public boolean isCollect(int goodsId,int userId);
public List collectGoods(int page,int limit,int userId);
+
+ public Map goodsSpecPrice(int goodsId);
+
+ public boolean addOrCancelCollect(int goodsId,int userId,int type);
}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/dto/ItemDTO.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/dto/ItemDTO.java
new file mode 100644
index 0000000..39620f8
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/dto/ItemDTO.java
@@ -0,0 +1,17 @@
+package com.ruoyi.app.modular.shop.service.dto;
+
+import lombok.Data;
+
+/**
+ * @ClassName ItemDTO
+ * @Author hupeng <610796224@qq.com>
+ * @Date 2019/9/9
+ **/
+
+@Data
+public class ItemDTO {
+ private String name;
+ private int id;
+ private int specId;
+ private String item;
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/dto/SpecItemDTO.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/dto/SpecItemDTO.java
new file mode 100644
index 0000000..08716f8
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/dto/SpecItemDTO.java
@@ -0,0 +1,15 @@
+package com.ruoyi.app.modular.shop.service.dto;
+
+import lombok.Data;
+
+/**
+ * @ClassName SpecItemDTO
+ * @Author hupeng <610796224@qq.com>
+ * @Date 2019/9/9
+ **/
+
+@Data
+public class SpecItemDTO {
+ private int itemId;
+ private String item;
+}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/impl/GoodsServiceImpl.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/impl/GoodsServiceImpl.java
index 841ba6a..0d13cea 100644
--- a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/impl/GoodsServiceImpl.java
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/impl/GoodsServiceImpl.java
@@ -9,19 +9,28 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.itmuch.lightsecurity.exception.LightSecurityException;
+import com.ruoyi.app.common.exception.BadRequestException;
import com.ruoyi.app.common.persistence.dao.StoreGoodsCollectMapper;
import com.ruoyi.app.common.persistence.dao.StoreGoodsMapper;
+import com.ruoyi.app.common.persistence.dao.StoreSpecGoodsPriceMapper;
import com.ruoyi.app.common.persistence.model.StoreGoods;
import com.ruoyi.app.common.persistence.model.StoreGoodsCollect;
+import com.ruoyi.app.common.persistence.model.StoreSpecGoodsPrice;
import com.ruoyi.app.modular.shop.service.IGoodsService;
import com.ruoyi.app.modular.shop.service.dto.GoodsDTO;
+import com.ruoyi.app.modular.shop.service.dto.ItemDTO;
+import com.ruoyi.app.modular.shop.service.dto.SpecItemDTO;
import com.ruoyi.app.modular.shop.service.mapper.GoodsMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
@Service
@@ -31,6 +40,7 @@ public class GoodsServiceImpl extends ServiceImpl
private final GoodsMapper goodsMapper;
private final StoreGoodsMapper storeGoodsMapper;
private final StoreGoodsCollectMapper storeGoodsCollectMapper;
+ private final StoreSpecGoodsPriceMapper storeSpecGoodsPriceMapper;
/**
@@ -102,4 +112,43 @@ public class GoodsServiceImpl extends ServiceImpl
//System.out.println(list);
return list;
}
+
+
+ @Override
+ public Map goodsSpecPrice(int goodsId) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("goods_id",goodsId);
+ List specGoodsPriceList = storeSpecGoodsPriceMapper
+ .selectList(wrapper);
+ Map listMap = specGoodsPriceList.stream().collect(
+ Collectors.toMap(StoreSpecGoodsPrice::getKey,o->o));
+
+ return listMap;
+ }
+
+ public Map goodsSpec(int goodsId){
+
+ String keys = storeSpecGoodsPriceMapper.goodsSpecKey(goodsId);
+ String[] strArr = keys.split("_");
+ Map itemMap = new HashMap<>();
+ List items = storeSpecGoodsPriceMapper.goodsSpec(Arrays.asList(strArr));
+ for (ItemDTO itemDTO : items) {
+ SpecItemDTO specItemDTO = new SpecItemDTO();
+ specItemDTO.setItemId(itemDTO.getId());
+ specItemDTO.setItem(itemDTO.getItem());
+ itemMap.put(itemDTO.getName(),specItemDTO);
+ }
+ return itemMap;
+ }
+
+
+ @Override
+ public boolean addOrCancelCollect(int goodsId, int userId, int type) {
+ if(type == 1){//1-添加 2-取消
+ boolean isCollect = isCollect(goodsId,userId);
+ if(isCollect) throw new LightSecurityException("已经收藏过");
+ System.out.println("======");
+ }
+ return false;
+ }
}
diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/vo/CollectVO.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/vo/CollectVO.java
new file mode 100644
index 0000000..40c5e50
--- /dev/null
+++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/service/vo/CollectVO.java
@@ -0,0 +1,20 @@
+package com.ruoyi.app.modular.shop.service.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+
+
+@Data
+public class CollectVO {
+
+ @Min(message = "商品id必须为数值",value = 0)
+ private int goodsId;
+
+
+
+
+
+
+
+}