|
|
@@ -10,31 +10,46 @@
|
|
|
|
|
|
package com.yami.shop.api.controller;
|
|
|
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
+import com.alibaba.fastjson2.util.UUIDUtils;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.yami.shop.bean.app.dto.ProdCommDataDto;
|
|
|
import com.yami.shop.bean.app.dto.ProdCommDto;
|
|
|
import com.yami.shop.bean.app.dto.ProductDto;
|
|
|
import com.yami.shop.bean.dto.ProdByCategoryIdAndShopIdDTO;
|
|
|
+import com.yami.shop.bean.dto.SearchProdDto;
|
|
|
+import com.yami.shop.bean.model.ChannelProd;
|
|
|
import com.yami.shop.bean.model.Product;
|
|
|
import com.yami.shop.bean.model.Sku;
|
|
|
+import com.yami.shop.bean.model.UserShopBehavior;
|
|
|
import com.yami.shop.common.exception.GlobalException;
|
|
|
+import com.yami.shop.common.util.Arith;
|
|
|
import com.yami.shop.common.util.PageParam;
|
|
|
+import com.yami.shop.security.api.model.YamiUser;
|
|
|
+import com.yami.shop.security.api.util.SecurityUtils;
|
|
|
import com.yami.shop.service.ProdCommService;
|
|
|
import com.yami.shop.service.ProductService;
|
|
|
import com.yami.shop.service.SkuService;
|
|
|
+import com.yami.shop.service.UserShopBehaviorService;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiImplicitParam;
|
|
|
import io.swagger.annotations.ApiImplicitParams;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import ma.glasnost.orika.MapperFacade;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.logging.log4j.core.util.JsonUtils;
|
|
|
+import org.apache.logging.log4j.core.util.UuidUtil;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
-import java.util.Comparator;
|
|
|
-import java.util.List;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@RestController
|
|
|
@@ -42,6 +57,8 @@ import java.util.stream.Collectors;
|
|
|
@Api(tags = "商品接口")
|
|
|
public class ProdController {
|
|
|
|
|
|
+ private Logger logger = LoggerFactory.getLogger(getClass());
|
|
|
+
|
|
|
@Autowired
|
|
|
private ProductService prodService;
|
|
|
|
|
|
@@ -54,12 +71,57 @@ public class ProdController {
|
|
|
@Autowired
|
|
|
private ProdCommService prodCommService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private UserShopBehaviorService userShopBehaviorService;
|
|
|
+
|
|
|
|
|
|
@GetMapping("/prodInfo")
|
|
|
@ApiOperation(value = "商品详情信息", notes = "根据商品ID(prodId)获取商品信息")
|
|
|
@ApiImplicitParam(name = "prodId", value = "商品ID", required = true, dataType = "Long")
|
|
|
public ResponseEntity<ProductDto> prodInfo(@RequestParam("prodId") Long prodId, @RequestParam("platform") Integer platform, @RequestParam("shopId") Long shopId) {
|
|
|
|
|
|
+ YamiUser user = null;
|
|
|
+ try {
|
|
|
+ user = SecurityUtils.getUser();
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("订单详情:" + e.getMessage());
|
|
|
+ logger.error("订单详情:错误信息", e);
|
|
|
+ }
|
|
|
+ if (user != null) {
|
|
|
+ String userId = user.getUserId();
|
|
|
+ if (StringUtils.isNotEmpty(userId)) {
|
|
|
+ UserShopBehavior userShopBehavior = null;
|
|
|
+ userShopBehavior = userShopBehaviorService.findByUserIdAndProd(userId, prodId);
|
|
|
+ if (userShopBehavior == null) {
|
|
|
+ int num = userShopBehaviorService.findByUserIdCount(userId);
|
|
|
+ if (num < 6) {
|
|
|
+ userShopBehavior = new UserShopBehavior();
|
|
|
+ userShopBehavior.setId(UUID.randomUUID().toString());
|
|
|
+ userShopBehavior.setUserId(userId);
|
|
|
+ userShopBehavior.setShopId(shopId);
|
|
|
+ userShopBehavior.setProdId(prodId);
|
|
|
+ userShopBehavior.setCreateTime(new Date());
|
|
|
+ userShopBehaviorService.save(userShopBehavior);
|
|
|
+ } else {
|
|
|
+ List<UserShopBehavior> userShopBehaviors = userShopBehaviorService.findByUserId(userId, 1);
|
|
|
+ if (userShopBehaviors != null && !userShopBehaviors.isEmpty()) {
|
|
|
+ userShopBehavior = userShopBehaviors.get(0);
|
|
|
+ }
|
|
|
+ if (userShopBehavior != null) {
|
|
|
+ userShopBehavior.setProdId(prodId);
|
|
|
+ userShopBehavior.setShopId(shopId);
|
|
|
+ userShopBehavior.setCreateTime(new Date());
|
|
|
+ userShopBehaviorService.updateById(userShopBehavior);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ userShopBehavior.setCreateTime(new Date());
|
|
|
+ userShopBehaviorService.updateById(userShopBehavior);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
Product product = prodService.getProductByProdId(prodId, platform);
|
|
|
if (product == null || product.getStatus() != 1) {
|
|
|
throw new GlobalException("商品已下线");
|
|
|
@@ -150,4 +212,45 @@ public class ProdController {
|
|
|
return ResponseEntity.ok(prodService.listProdByCategoryIdAndShopId(prodByCategoryIdAndShopIdDTO));
|
|
|
}
|
|
|
|
|
|
+ @GetMapping("/prodRecommended")
|
|
|
+ @ApiOperation(value = "为你推荐", notes = "为你推荐")
|
|
|
+ public ResponseEntity<IPage<SearchProdDto>> getProdRecommended(PageParam<SearchProdDto> page) {
|
|
|
+ IPage<SearchProdDto> searchProdDtos = page;
|
|
|
+ List<ProductDto> productDtos = new ArrayList<>();
|
|
|
+ YamiUser user = null;
|
|
|
+ try {
|
|
|
+ user = SecurityUtils.getUser();
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("为你推荐:" + e.getMessage());
|
|
|
+ logger.error("为你推荐:错误信息", e);
|
|
|
+ }
|
|
|
+ if (user != null) {
|
|
|
+ String userId = user.getUserId();
|
|
|
+ if (StringUtils.isNotEmpty(userId)) {
|
|
|
+ List<UserShopBehavior> byUserId = userShopBehaviorService.findByUserId(userId, 5);
|
|
|
+ for (UserShopBehavior userShopBehavior : byUserId) {
|
|
|
+ ChannelProd channelProd = userShopBehaviorService.findByProdId(userShopBehavior.getProdId(), userShopBehavior.getShopId());
|
|
|
+ if (channelProd != null) {
|
|
|
+ BigDecimal channelProdPrice = channelProd.getChannelProdPrice();
|
|
|
+ if (channelProdPrice != null) {
|
|
|
+ BigDecimal increased = channelProdPrice.multiply(new BigDecimal("1.10"))
|
|
|
+ .setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal decreased = channelProdPrice.multiply(new BigDecimal("0.90"))
|
|
|
+ .setScale(2, RoundingMode.HALF_UP);
|
|
|
+ List<ProductDto> productDtoList = userShopBehaviorService.findByProdIdAndShopIdAndPrice(userShopBehavior.getProdId(), userShopBehavior.getShopId(), increased, decreased);
|
|
|
+ if (productDtoList != null && !productDtoList.isEmpty()) {
|
|
|
+ productDtos.addAll(productDtoList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!productDtos.isEmpty()){
|
|
|
+ searchProdDtos = userShopBehaviorService.findByProdAndShop(page,productDtos);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return ResponseEntity.ok(searchProdDtos);
|
|
|
+ }
|
|
|
}
|