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; + + + + + + + +}