From 2c4f806ea25b5dfcf8219a39bb4620d8c67ad8a5 Mon Sep 17 00:00:00 2001 From: taozi <9108791@qq.com> Date: Sun, 18 Apr 2021 19:21:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8B=BC=E5=9B=A2=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=E6=95=B0=E3=80=81=E5=95=86=E5=93=81=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=94=BE=E5=BC=80=E4=BB=A5=E5=8F=8A=E5=85=B6?= =?UTF-8?q?=E5=AE=83bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../co/yixiang/common/bean/LocalUser.java | 29 +++++++++++ .../product/rest/StoreProductController.java | 6 +-- .../modules/activity/domain/YxStoreVisit.java | 19 +++++-- .../activity/service/YxStoreVisitService.java | 7 +++ .../service/impl/YxStorePinkServiceImpl.java | 8 +++ .../service/impl/YxStoreVisitServiceImpl.java | 37 ++++++++++++- .../impl/YxUserExtractServiceImpl.java | 2 + .../mapper/YxStoreCombinationMapper.java | 10 ++++ .../service/mapper/YxStoreVisitMapper.java | 10 ++++ .../service/YxStoreProductService.java | 2 +- .../impl/YxStoreProductServiceImpl.java | 52 ++++++++++--------- .../mapper/YxStoreProductRelationMapper.java | 2 +- .../vo/YxStoreProductRelationQueryVo.java | 3 ++ 13 files changed, 154 insertions(+), 33 deletions(-) diff --git a/yshop-app/src/main/java/co/yixiang/common/bean/LocalUser.java b/yshop-app/src/main/java/co/yixiang/common/bean/LocalUser.java index 904c4d28..7c666faa 100644 --- a/yshop-app/src/main/java/co/yixiang/common/bean/LocalUser.java +++ b/yshop-app/src/main/java/co/yixiang/common/bean/LocalUser.java @@ -9,10 +9,17 @@ package co.yixiang.common.bean; +import co.yixiang.api.ApiCode; +import co.yixiang.api.UnAuthenticatedException; +import co.yixiang.common.util.JwtToken; +import co.yixiang.common.util.RequestUtils; import co.yixiang.modules.user.domain.YxUser; +import com.auth0.jwt.interfaces.Claim; +import org.apache.commons.lang3.StringUtils; import java.util.HashMap; import java.util.Map; +import java.util.Optional; /** * 全局user @@ -44,4 +51,26 @@ public class LocalUser { Integer scope = (Integer)map.get("scope"); return scope; } + + public static Long getUidByToken(){ + String bearerToken = RequestUtils.getRequest().getHeader("Authorization"); + if (StringUtils.isEmpty(bearerToken)) { + return 0L; + } + + if (!bearerToken.startsWith("Bearer")) { + return 0L; + } + String[] tokens = bearerToken.split(" "); + if (!(tokens.length == 2)) { + return 0L; + } + String token = tokens[1]; + + Optional> optionalMap = JwtToken.getClaims(token); + Map map = optionalMap + .orElseThrow(() -> new UnAuthenticatedException(ApiCode.UNAUTHORIZED)); + + return map.get("uid").asLong(); + } } diff --git a/yshop-app/src/main/java/co/yixiang/modules/product/rest/StoreProductController.java b/yshop-app/src/main/java/co/yixiang/modules/product/rest/StoreProductController.java index 769adcdb..611818df 100644 --- a/yshop-app/src/main/java/co/yixiang/modules/product/rest/StoreProductController.java +++ b/yshop-app/src/main/java/co/yixiang/modules/product/rest/StoreProductController.java @@ -208,8 +208,8 @@ public class StoreProductController { /** * 普通商品详情 */ - @AppLog(value = "普通商品详情", type = 1) - @AuthCheck + //@AppLog(value = "普通商品详情", type = 1) + //@AuthCheck @GetMapping("/product/detail/{id}") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品ID", paramType = "query", dataType = "long",required = true), @@ -222,7 +222,7 @@ public class StoreProductController { @RequestParam(value = "",required=false) String latitude, @RequestParam(value = "",required=false) String longitude, @RequestParam(value = "",required=false) String from) { - long uid = LocalUser.getUser().getUid(); + long uid = LocalUser.getUidByToken(); storeProductService.incBrowseNum(id); ProductVo productDTO = storeProductService.goodsDetail(id,uid,latitude,longitude); return ApiResult.ok(productDTO); diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreVisit.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreVisit.java index 19653f75..709c2043 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreVisit.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/domain/YxStoreVisit.java @@ -7,9 +7,16 @@ package co.yixiang.modules.activity.domain; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; import java.io.Serializable; @@ -18,15 +25,19 @@ import java.io.Serializable; * @date 2020-05-13 */ @Data +@EqualsAndHashCode(callSuper = false) +@Builder +@AllArgsConstructor +@NoArgsConstructor @TableName("yx_store_visit") public class YxStoreVisit implements Serializable { @TableId - private Integer id; + private Long id; /** 产品ID */ - private Integer productId; + private Long productId; /** 产品类型 */ @@ -42,7 +53,7 @@ public class YxStoreVisit implements Serializable { /** 用户ID */ - private Integer uid; + private Long uid; /** 访问次数 */ @@ -54,6 +65,8 @@ public class YxStoreVisit implements Serializable { /** 添加时间 */ + @TableField(fill= FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Integer addTime; diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/YxStoreVisitService.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/YxStoreVisitService.java index 73de180f..9ee993e1 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/YxStoreVisitService.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/YxStoreVisitService.java @@ -40,6 +40,13 @@ public interface YxStoreVisitService extends BaseService{ */ List queryAll(YxStoreVisitQueryCriteria criteria); + /** + * 添加用户访问拼团记录 + * @param uid 用户id + * @param productId 产品id + */ + void addStoreVisit(Long uid,Long productId); + /** * 导出数据 * @param all 待导出的数据 diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStorePinkServiceImpl.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStorePinkServiceImpl.java index 8f67cea1..b4c2f8ce 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStorePinkServiceImpl.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxStorePinkServiceImpl.java @@ -22,6 +22,7 @@ import co.yixiang.modules.activity.domain.YxStoreCombination; import co.yixiang.modules.activity.domain.YxStorePink; import co.yixiang.modules.activity.service.YxStoreCombinationService; import co.yixiang.modules.activity.service.YxStorePinkService; +import co.yixiang.modules.activity.service.YxStoreVisitService; import co.yixiang.modules.activity.service.dto.PinkAllDto; import co.yixiang.modules.activity.service.dto.PinkDto; import co.yixiang.modules.activity.service.dto.PinkUserDto; @@ -91,6 +92,9 @@ public class YxStorePinkServiceImpl extends BaseServiceImpl implements YxStoreVisitService { private final IGenerator generator; + private final YxStoreProductService yxStoreProductService; + private final YxStoreVisitMapper yxStoreVisitMapper; @Override //@Cacheable @@ -59,7 +66,6 @@ public class YxStoreVisitServiceImpl extends BaseServiceImpl all, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); @@ -77,4 +83,33 @@ public class YxStoreVisitServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(YxStoreVisit::getUid, uid).eq(YxStoreVisit::getProductId, productId); + YxStoreVisit storeVisit = this.baseMapper.selectOne(wrapper); + + if (ObjectUtil.isNull(storeVisit)) { + //查询产品分类 + YxStoreProduct yxStoreProduct = yxStoreProductService.getProductInfo(productId); + + YxStoreVisit yxStoreVisit = YxStoreVisit.builder() + .productId(productId) + .productType(ProductTypeEnum.COMBINATION.getValue()) + .cateId(Integer.valueOf(yxStoreProduct.getCateId())) + .type(ProductTypeEnum.COMBINATION.getValue()) + .uid(uid) + .count(1) + .build(); + this.saveOrUpdate(yxStoreVisit); + } + + } } diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxUserExtractServiceImpl.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxUserExtractServiceImpl.java index a029624f..58448078 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxUserExtractServiceImpl.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/impl/YxUserExtractServiceImpl.java @@ -75,6 +75,7 @@ public class YxUserExtractServiceImpl extends BaseServiceImpl " FROM yx_store_combination c " + " WHERE c.id = #{id} and c.is_del = 0 ") YxStoreProductQueryVo combinatiionInfo(Long id); + + /** + * 商品浏览量 + * @param productId + * @return + */ + @Update("update yx_store_combination set browse=browse+1 " + + "where id=#{productId}") + int incBrowseNum(@Param("productId") Long productId); } diff --git a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/mapper/YxStoreVisitMapper.java b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/mapper/YxStoreVisitMapper.java index d915c7be..6b32a138 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/activity/service/mapper/YxStoreVisitMapper.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/activity/service/mapper/YxStoreVisitMapper.java @@ -10,6 +10,8 @@ package co.yixiang.modules.activity.service.mapper; import co.yixiang.common.mapper.CoreMapper; import co.yixiang.modules.activity.domain.YxStoreVisit; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import org.springframework.stereotype.Repository; /** @@ -19,4 +21,12 @@ import org.springframework.stereotype.Repository; @Repository public interface YxStoreVisitMapper extends CoreMapper { + /** + * 拼团浏览量 + * @param productId + * @return + */ + @Update("update yx_store_visit set count=count+1 " + + "where uid=#{uid} AND id=#{productId}") + int incBrowseNum(@Param("uid") Long uid,@Param("productId") Long productId); } diff --git a/yshop-mall/src/main/java/co/yixiang/modules/product/service/YxStoreProductService.java b/yshop-mall/src/main/java/co/yixiang/modules/product/service/YxStoreProductService.java index c8426e03..54e81fd6 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/product/service/YxStoreProductService.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/product/service/YxStoreProductService.java @@ -45,7 +45,7 @@ public interface YxStoreProductService extends BaseService{ */ void decProductStock(int num, Long productId, String unique,Long activityId,String type); - YxStoreProduct getProductInfo(int id); + YxStoreProduct getProductInfo(Long id); /** * 获取单个商品 diff --git a/yshop-mall/src/main/java/co/yixiang/modules/product/service/impl/YxStoreProductServiceImpl.java b/yshop-mall/src/main/java/co/yixiang/modules/product/service/impl/YxStoreProductServiceImpl.java index b62f640a..11a96385 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/product/service/impl/YxStoreProductServiceImpl.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/product/service/impl/YxStoreProductServiceImpl.java @@ -168,7 +168,7 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(YxStoreProduct::getIsShow, 1).eq(YxStoreProduct::getId, id); YxStoreProduct storeProduct = this.baseMapper.selectOne(wrapper); @@ -314,15 +314,16 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl 0) { + //设置VIP价格 + double vipPrice = userService.setLevelPrice( + storeProductQueryVo.getPrice().doubleValue(), uid); + storeProductQueryVo.setVipPrice(BigDecimal.valueOf(vipPrice)); + //收藏 + boolean isCollect = relationService.isProductRelation(id, uid); + storeProductQueryVo.setUserCollect(isCollect); + } //总条数 int totalCount = replyService.productReplyCount(id); productVo.setReplyCount(totalCount); @@ -362,21 +363,24 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl() - .eq(YxStoreProductRelation::getUid, uid) - .eq(YxStoreProductRelation::getProductId, storeProductQueryVo.getId()) - .eq(YxStoreProductRelation::getType, "foot")); - if (ObjectUtil.isNotNull(foot)) { - foot.setCreateTime(new Date()); - relationService.saveOrUpdate(foot); - } else { - YxStoreProductRelation storeProductRelation = new YxStoreProductRelation(); - storeProductRelation.setProductId(storeProductQueryVo.getId()); - storeProductRelation.setUid(uid); - storeProductRelation.setCreateTime(new Date()); - storeProductRelation.setType("foot"); - relationService.save(storeProductRelation); + if (uid.longValue() > 0) { + //添加足迹 + YxStoreProductRelation foot = relationService.getOne(new LambdaQueryWrapper() + .eq(YxStoreProductRelation::getUid, uid) + .eq(YxStoreProductRelation::getProductId, storeProductQueryVo.getId()) + .eq(YxStoreProductRelation::getType, "foot")); + + if (ObjectUtil.isNotNull(foot)) { + foot.setCreateTime(new Date()); + relationService.saveOrUpdate(foot); + } else { + YxStoreProductRelation storeProductRelation = new YxStoreProductRelation(); + storeProductRelation.setProductId(storeProductQueryVo.getId()); + storeProductRelation.setUid(uid); + storeProductRelation.setCreateTime(new Date()); + storeProductRelation.setType("foot"); + relationService.save(storeProductRelation); + } } return productVo; diff --git a/yshop-mall/src/main/java/co/yixiang/modules/product/service/mapper/YxStoreProductRelationMapper.java b/yshop-mall/src/main/java/co/yixiang/modules/product/service/mapper/YxStoreProductRelationMapper.java index bd648cc4..cd912947 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/product/service/mapper/YxStoreProductRelationMapper.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/product/service/mapper/YxStoreProductRelationMapper.java @@ -30,7 +30,7 @@ import java.util.List; @Repository public interface YxStoreProductRelationMapper extends CoreMapper { - @Select("select B.id pid,A.type as category,B.store_name as storeName,B.price," + + @Select("select B.id pid,A.type as category,B.store_name as storeName,B.price,B.is_integral as isIntegral," + "B.ot_price as otPrice,B.sales,B.image,B.is_show as isShow" + " from yx_store_product_relation A left join yx_store_product B " + "on A.product_id = B.id where A.type=#{type} and A.uid=#{uid} and A.is_del = 0 and B.is_del = 0 order by A.create_time desc") diff --git a/yshop-mall/src/main/java/co/yixiang/modules/product/vo/YxStoreProductRelationQueryVo.java b/yshop-mall/src/main/java/co/yixiang/modules/product/vo/YxStoreProductRelationQueryVo.java index 07e4a7d5..97991425 100644 --- a/yshop-mall/src/main/java/co/yixiang/modules/product/vo/YxStoreProductRelationQueryVo.java +++ b/yshop-mall/src/main/java/co/yixiang/modules/product/vo/YxStoreProductRelationQueryVo.java @@ -62,4 +62,7 @@ public class YxStoreProductRelationQueryVo implements Serializable { @ApiModelProperty(value = "商品名称") private String storeName; + @ApiModelProperty(value = "是否开启积分兑换") + private Integer isIntegral; + }