Browse Source

修改支持客户端多语言

multiwx
xh-pan1 1 year ago
parent
commit
72f559fb74
  1. 4
      cereshop-app/src/main/java/com/shop/cereshop/app/dao/product/CereShopProductDAO.java
  2. 67
      cereshop-app/src/main/java/com/shop/cereshop/app/page/canvas/CanvasProduct.java
  3. 66
      cereshop-app/src/main/java/com/shop/cereshop/app/page/index/Product.java
  4. 64
      cereshop-app/src/main/java/com/shop/cereshop/app/page/product/ProductSkus.java
  5. 65
      cereshop-app/src/main/java/com/shop/cereshop/app/page/product/ShareProduct.java
  6. 270
      cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereShopProductServiceImpl.java
  7. 44
      cereshop-app/src/main/resources/mybatis/mapper/product/CereShopProductDAO.xml

4
cereshop-app/src/main/java/com/shop/cereshop/app/dao/product/CereShopProductDAO.java

@ -57,9 +57,9 @@ public interface CereShopProductDAO extends BaseMapper<CereShopProduct> {
List<CanvasProduct> getCanvasProducts2(CanvasAppProductParam param);
List<Classify> findAllClassify();
List<Classify> findAllClassify(@Param("project")String project);
List<Classify> findChildsClassify();
List<Classify> findChildsClassify(@Param("project")String project);
List<Product> findSimilarProducts(@Param("classifyId") Long classifyId);

67
cereshop-app/src/main/java/com/shop/cereshop/app/page/canvas/CanvasProduct.java

@ -5,11 +5,21 @@
*/
package com.shop.cereshop.app.page.canvas;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.shop.cereshop.commons.domain.product.CereShopProductLangInfo;
import com.shop.cereshop.commons.utils.LangUtil;
import com.shop.cereshop.commons.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 画布商品数据
@ -149,4 +159,61 @@ public class CanvasProduct {
*/
@ApiModelProperty(value = "活动倒计时")
private long time;
/**
* 名称Map
*/
@ApiModelProperty(value = "名称Map")
@TableField(exist = false)
private Map<String, CereShopProductLangInfo> langInfoMap;
public void initData(){
initData(LangUtil.ZH);
}
public void initData(String defaultLangType){
if(CollectionUtils.isNotEmpty(langInfoMap)) {
if (StringUtils.isNotEmpty(defaultLangType) && langInfoMap.containsKey(defaultLangType)) {
setProductName(langInfoMap.get(defaultLangType).getProductName());
// setProductBrief(langInfoMap.get(defaultLangType).getProductBrief());
// setProductText(langInfoMap.get(defaultLangType).getProductText());
}else if (langInfoMap.containsKey(LangUtil.ZH)) {
setProductName(langInfoMap.get(LangUtil.ZH).getProductName());
// setProductBrief(langInfoMap.get(LangUtil.ZH).getProductBrief());
// setProductText(langInfoMap.get(LangUtil.ZH).getProductText());
} else if (langInfoMap.containsKey(LangUtil.EN)) {
setProductName(langInfoMap.get(LangUtil.EN).getProductName());
// setProductBrief(langInfoMap.get(LangUtil.EN).getProductBrief());
// setProductText(langInfoMap.get(LangUtil.EN).getProductText());
} else {
setProductName(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductName());
// setProductBrief(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductBrief());
// setProductText(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductText());
}
}else if(StringUtils.isNotEmpty(productName)){
langInfoMap = new HashMap<>();
CereShopProductLangInfo classifyLangInfo = new CereShopProductLangInfo();
classifyLangInfo.setProductId(getProductId());
// classifyLangInfo.setProductBrief(getProductBrief());
classifyLangInfo.setProductName(getProductName());
// classifyLangInfo.setProductText(getProductText());
classifyLangInfo.setLanguageType(LangUtil.ZH);
langInfoMap.put(LangUtil.ZH, classifyLangInfo);
}
}
public void initMap(List<CereShopProductLangInfo> cereProductClassifyLangInfoList){
if (CollectionUtils.isNotEmpty(cereProductClassifyLangInfoList)) {
List<CereShopProductLangInfo> productClassifyLangInfoList =
cereProductClassifyLangInfoList.stream().filter(item -> Objects.equals(item.getProductId(), getProductId())).collect(Collectors.toList());
Map<String, CereShopProductLangInfo> cereProductClassifyLangInfoMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(productClassifyLangInfoList)){
for (CereShopProductLangInfo cereProductClassifyLangInfo : productClassifyLangInfoList) {
cereProductClassifyLangInfoMap.put(cereProductClassifyLangInfo.getLanguageType(), cereProductClassifyLangInfo);
}
}
setLangInfoMap(cereProductClassifyLangInfoMap);
}
}
}

66
cereshop-app/src/main/java/com/shop/cereshop/app/page/index/Product.java

@ -5,11 +5,21 @@
*/
package com.shop.cereshop.app.page.index;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.shop.cereshop.commons.domain.product.CereShopProductLangInfo;
import com.shop.cereshop.commons.utils.LangUtil;
import com.shop.cereshop.commons.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 搜索商品数据
@ -101,4 +111,60 @@ public class Product {
*/
@ApiModelProperty(value = "活动限制总数")
private Integer total;
/**
* 名称Map
*/
@ApiModelProperty(value = "名称Map")
@TableField(exist = false)
private Map<String, CereShopProductLangInfo> langInfoMap;
public void initData(){
initData(LangUtil.ZH);
}
public void initData(String defaultLangType){
if(CollectionUtils.isNotEmpty(langInfoMap)) {
if (StringUtils.isNotEmpty(defaultLangType) && langInfoMap.containsKey(defaultLangType)) {
setProductName(langInfoMap.get(defaultLangType).getProductName());
setProductBrief(langInfoMap.get(defaultLangType).getProductBrief());
// setProductText(langInfoMap.get(defaultLangType).getProductText());
}else if (langInfoMap.containsKey(LangUtil.ZH)) {
setProductName(langInfoMap.get(LangUtil.ZH).getProductName());
setProductBrief(langInfoMap.get(LangUtil.ZH).getProductBrief());
// setProductText(langInfoMap.get(LangUtil.ZH).getProductText());
} else if (langInfoMap.containsKey(LangUtil.EN)) {
setProductName(langInfoMap.get(LangUtil.EN).getProductName());
setProductBrief(langInfoMap.get(LangUtil.EN).getProductBrief());
// setProductText(langInfoMap.get(LangUtil.EN).getProductText());
} else {
setProductName(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductName());
setProductBrief(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductBrief());
// setProductText(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductText());
}
}else if(StringUtils.isNotEmpty(productName)){
langInfoMap = new HashMap<>();
CereShopProductLangInfo classifyLangInfo = new CereShopProductLangInfo();
classifyLangInfo.setProductId(getProductId());
classifyLangInfo.setProductBrief(getProductBrief());
classifyLangInfo.setProductName(getProductName());
// classifyLangInfo.setProductText(getProductText());
classifyLangInfo.setLanguageType(LangUtil.ZH);
langInfoMap.put(LangUtil.ZH, classifyLangInfo);
}
}
public void initMap(List<CereShopProductLangInfo> cereProductClassifyLangInfoList){
if (CollectionUtils.isNotEmpty(cereProductClassifyLangInfoList)) {
List<CereShopProductLangInfo> productClassifyLangInfoList =
cereProductClassifyLangInfoList.stream().filter(item -> Objects.equals(item.getProductId(), getProductId())).collect(Collectors.toList());
Map<String, CereShopProductLangInfo> cereProductClassifyLangInfoMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(productClassifyLangInfoList)){
for (CereShopProductLangInfo cereProductClassifyLangInfo : productClassifyLangInfoList) {
cereProductClassifyLangInfoMap.put(cereProductClassifyLangInfo.getLanguageType(), cereProductClassifyLangInfo);
}
}
setLangInfoMap(cereProductClassifyLangInfoMap);
}
}
}

64
cereshop-app/src/main/java/com/shop/cereshop/app/page/product/ProductSkus.java

@ -5,15 +5,23 @@
*/
package com.shop.cereshop.app.page.product;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.shop.cereshop.commons.domain.product.CereShopProductLangInfo;
import com.shop.cereshop.commons.domain.product.Sku;
import com.shop.cereshop.commons.domain.product.SkuName;
import com.shop.cereshop.commons.utils.LangUtil;
import com.shop.cereshop.commons.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 商品所有规格属性数据
@ -110,4 +118,60 @@ public class ProductSkus {
* 活动数据
*/
private SkuTool skuTool;
/**
* 名称Map
*/
@ApiModelProperty(value = "名称Map")
@TableField(exist = false)
private Map<String, CereShopProductLangInfo> langInfoMap;
public void initData(){
initData(LangUtil.ZH);
}
public void initData(String defaultLangType){
if(CollectionUtils.isNotEmpty(langInfoMap)) {
if (StringUtils.isNotEmpty(defaultLangType) && langInfoMap.containsKey(defaultLangType)) {
setProductName(langInfoMap.get(defaultLangType).getProductName());
// setProductBrief(langInfoMap.get(defaultLangType).getProductBrief());
// setText(langInfoMap.get(defaultLangType).getProductText());
}else if (langInfoMap.containsKey(LangUtil.ZH)) {
setProductName(langInfoMap.get(LangUtil.ZH).getProductName());
// setProductBrief(langInfoMap.get(LangUtil.ZH).getProductBrief());
// setText(langInfoMap.get(LangUtil.ZH).getProductText());
} else if (langInfoMap.containsKey(LangUtil.EN)) {
setProductName(langInfoMap.get(LangUtil.EN).getProductName());
// setProductBrief(langInfoMap.get(LangUtil.EN).getProductBrief());
// setText(langInfoMap.get(LangUtil.EN).getProductText());
} else {
setProductName(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductName());
// setProductBrief(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductBrief());
// setText(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductText());
}
}else if(StringUtils.isNotEmpty(productName)){
langInfoMap = new HashMap<>();
CereShopProductLangInfo classifyLangInfo = new CereShopProductLangInfo();
classifyLangInfo.setProductId(getProductId());
// classifyLangInfo.setProductBrief(getProductBrief());
classifyLangInfo.setProductName(getProductName());
// classifyLangInfo.setProductText(getText());
classifyLangInfo.setLanguageType(LangUtil.ZH);
langInfoMap.put(LangUtil.ZH, classifyLangInfo);
}
}
public void initMap(List<CereShopProductLangInfo> cereProductClassifyLangInfoList){
if (CollectionUtils.isNotEmpty(cereProductClassifyLangInfoList)) {
List<CereShopProductLangInfo> productClassifyLangInfoList =
cereProductClassifyLangInfoList.stream().filter(item -> Objects.equals(item.getProductId(), getProductId())).collect(Collectors.toList());
Map<String, CereShopProductLangInfo> cereProductClassifyLangInfoMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(productClassifyLangInfoList)){
for (CereShopProductLangInfo cereProductClassifyLangInfo : productClassifyLangInfoList) {
cereProductClassifyLangInfoMap.put(cereProductClassifyLangInfo.getLanguageType(), cereProductClassifyLangInfo);
}
}
setLangInfoMap(cereProductClassifyLangInfoMap);
}
}
}

65
cereshop-app/src/main/java/com/shop/cereshop/app/page/product/ShareProduct.java

@ -5,12 +5,21 @@
*/
package com.shop.cereshop.app.page.product;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.shop.cereshop.commons.domain.product.CereShopProductLangInfo;
import com.shop.cereshop.commons.utils.LangUtil;
import com.shop.cereshop.commons.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 分享商品数据
@ -90,4 +99,60 @@ public class ShareProduct {
@ApiModelProperty(value = "小程序码")
private String shareImage;
/**
* 名称Map
*/
@ApiModelProperty(value = "名称Map")
@TableField(exist = false)
private Map<String, CereShopProductLangInfo> langInfoMap;
public void initData(){
initData(LangUtil.ZH);
}
public void initData(String defaultLangType){
if(CollectionUtils.isNotEmpty(langInfoMap)) {
if (StringUtils.isNotEmpty(defaultLangType) && langInfoMap.containsKey(defaultLangType)) {
setProductName(langInfoMap.get(defaultLangType).getProductName());
// setProductBrief(langInfoMap.get(defaultLangType).getProductBrief());
// setText(langInfoMap.get(defaultLangType).getProductText());
}else if (langInfoMap.containsKey(LangUtil.ZH)) {
setProductName(langInfoMap.get(LangUtil.ZH).getProductName());
// setProductBrief(langInfoMap.get(LangUtil.ZH).getProductBrief());
// setText(langInfoMap.get(LangUtil.ZH).getProductText());
} else if (langInfoMap.containsKey(LangUtil.EN)) {
setProductName(langInfoMap.get(LangUtil.EN).getProductName());
// setProductBrief(langInfoMap.get(LangUtil.EN).getProductBrief());
// setText(langInfoMap.get(LangUtil.EN).getProductText());
} else {
setProductName(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductName());
// setProductBrief(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductBrief());
// setText(langInfoMap.entrySet().stream().findFirst().get().getValue().getProductText());
}
}else if(StringUtils.isNotEmpty(productName)){
langInfoMap = new HashMap<>();
CereShopProductLangInfo classifyLangInfo = new CereShopProductLangInfo();
classifyLangInfo.setProductId(getProductId());
// classifyLangInfo.setProductBrief(getProductBrief());
classifyLangInfo.setProductName(getProductName());
// classifyLangInfo.setProductText(getText());
classifyLangInfo.setLanguageType(LangUtil.ZH);
langInfoMap.put(LangUtil.ZH, classifyLangInfo);
}
}
public void initMap(List<CereShopProductLangInfo> cereProductClassifyLangInfoList){
if (CollectionUtils.isNotEmpty(cereProductClassifyLangInfoList)) {
List<CereShopProductLangInfo> productClassifyLangInfoList =
cereProductClassifyLangInfoList.stream().filter(item -> Objects.equals(item.getProductId(), getProductId())).collect(Collectors.toList());
Map<String, CereShopProductLangInfo> cereProductClassifyLangInfoMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(productClassifyLangInfoList)){
for (CereShopProductLangInfo cereProductClassifyLangInfo : productClassifyLangInfoList) {
cereProductClassifyLangInfoMap.put(cereProductClassifyLangInfo.getLanguageType(), cereProductClassifyLangInfo);
}
}
setLangInfoMap(cereProductClassifyLangInfoMap);
}
}
}

270
cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereShopProductServiceImpl.java

@ -7,6 +7,7 @@ package com.shop.cereshop.app.service.product.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
@ -238,6 +239,9 @@ public class CereShopProductServiceImpl implements CereShopProductService {
@Autowired
private CereSkuNameService cereSkuNameService;
@Autowired
private CereProductClassifyLangInfoService cereProductClassifyLangInfoService;
/**
* 商品详情前缀
*/
@ -345,70 +349,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
}
}
//SKU详细数据
List<Long> skuIdList = detail.getMap().values().stream().map(Sku::getSkuId).distinct().collect(Collectors.toList());
List<CereSkuName> cereSkuNameList = cereSkuNameService.list(Wrappers.<CereSkuName>lambdaQuery().in(CereSkuName::getSkuId, skuIdList));
//SKU的多语言名称
List<String> cereSkuNameLangKeyList = cereSkuNameList.stream().map(CereSkuName::getUniId).collect(Collectors.toList());
List<CereSkuNameLangInfo> cereSkuNameLangInfoList = cereSkuNameLangInfoService.list(Wrappers.<CereSkuNameLangInfo>lambdaQuery().in(CereSkuNameLangInfo::getSkuUniId, cereSkuNameLangKeyList));
Map<String,List<CereSkuName>> cereSkuNameListMap = cereSkuNameList.stream().collect(Collectors.groupingBy(CereSkuName::getNameCode, LinkedHashMap::new, Collectors.toList()));
for (CereSkuName cereSkuName : cereSkuNameList) {
cereSkuName.initMap(cereSkuNameLangInfoList);
cereSkuName.initData(ContextUtil.getLanguage());
}
List<SkuName> names = new ArrayList<>();
for (List<CereSkuName> skuNameList : cereSkuNameListMap.values()) {
CereSkuName firstSkuName = skuNameList.get(0);
SkuName skuNameParam = new SkuName();
skuNameParam.setSkuId(firstSkuName.getSkuId());
skuNameParam.setNameCode(firstSkuName.getNameCode());
skuNameParam.setSkuName(firstSkuName.getSkuName());
skuNameParam.setLangInfoMap(firstSkuName.getLangInfoMap());
List<SkuValue> values=new ArrayList<>();
for (List<CereSkuName> cereSkuNameValueList : skuNameList.stream().collect(Collectors.groupingBy(CereSkuName::getValueCode, LinkedHashMap::new, Collectors.toList())).values()) {
CereSkuName cereSkuName = cereSkuNameValueList.get(0);
SkuValue skuValueParam=new SkuValue();
skuValueParam.setValueCode(cereSkuName.getValueCode());
skuValueParam.setSkuValue(cereSkuName.getSkuValue());
skuValueParam.setSkuName(skuNameParam.getSkuName());
skuValueParam.setLangInfoMap(cereSkuName.getLangInfoMap());
values.add(skuValueParam);
}
skuNameParam.setValues(values);
names.add(skuNameParam);
}
//查询该商品所有规格名
// List<SkuName> names=cereProductSkuService.findSkuNames(param.getProductId());
// if(!EmptyUtils.isEmpty(names)){
// //查询该商品所有规格值数据
// List<SkuValue> list=cereProductSkuService.findValuesByProductId(param.getProductId());
// if(!EmptyUtils.isEmpty(list)){
// names.forEach(name -> {
// if(!EmptyUtils.isEmpty(name.getNameCode())){
// List<SkuValue> values=new ArrayList<>();
// for (int i = 0; i < list.size(); i++) {
// if(i<0){
// i=0;
// }
// if(list.get(i).getSkuName().equals(name.getSkuName())){
// values.add(list.get(i));
// list.remove(i);
// i--;
// }
// }
// name.setValues(values);
// }
// });
// }
// }
detail.setNames(names);
initDetailLangInfo(detail);
//查询商品评论信息
List<BuyerComment> comments=cereShopCommentService.findByProductId(param.getProductId());
@ -553,6 +494,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
detail.setActivityName(IntegerEnum.ACTIVITY_TYPE_NORMAL.getName());
detail.setLimitNumber(0);
}
initDetailLangInfo(detail);
return detail;
}
@ -690,6 +632,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
}
}
}
initDetailLangInfo(detail);
return detail;
}
@ -801,6 +744,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
}
}
initDetailLangInfo(detail);
return detail;
}
@ -912,12 +856,15 @@ public class CereShopProductServiceImpl implements CereShopProductService {
});
productSkus.setMap(map);
}
initProductSkusLangInfo(productSkus);
return productSkus;
}
@Override
public List<Product> getSearchProducts(SearchParam param) throws CoBusinessException {
return cereShopProductDAO.getSearchProducts(param);
List<Product> result = cereShopProductDAO.getSearchProducts(param);
initProductLangInfo(result);
return result;
}
@Override
@ -925,6 +872,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
//查询商品数据
ShareProduct shareProduct=cereShopProductDAO.findShareProduct(shareParam.getSkuId());
if(shareProduct!=null){
initShareProductLangInfo(shareProduct);
shareProduct.setName(user.getWechatName());
shareProduct.setHeadImage(user.getHeadImage());
//生成小程序码
@ -1007,6 +955,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
}
}*/
}
initCanvasProductLangInfo(list);
}
PageInfo<CanvasProduct> pageInfo=new PageInfo<>(list);
Page page=new Page(pageInfo.getList(),pageInfo.getTotal());
@ -1081,6 +1030,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
}
}
initCanvasProductLangInfo(list);
}
}
@ -1088,9 +1038,35 @@ public class CereShopProductServiceImpl implements CereShopProductService {
@Override
public List<Classify> getClassify() throws CoBusinessException {
//查询所有一级类目
List<Classify> list=cereShopProductDAO.findAllClassify();
List<Classify> list=cereShopProductDAO.findAllClassify(ContextUtil.getProject());
//查询所有子节点类目
List<Classify> childs=cereShopProductDAO.findChildsClassify();
List<Classify> childs=cereShopProductDAO.findChildsClassify(ContextUtil.getProject());
List<Long> classifyIdList = new ArrayList<>();
if(CollectionUtils.isNotEmpty(list)) {
classifyIdList.addAll(list.stream().map(Classify::getId).collect(Collectors.toList()));
}
if(CollectionUtils.isNotEmpty(childs)) {
classifyIdList.addAll(childs.stream().map(Classify::getId).collect(Collectors.toList()));
}
classifyIdList = classifyIdList.stream().filter(item -> item != null && item > 0).distinct().collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(classifyIdList)){
List<CereProductClassifyLangInfo> cereProductClassifyLangInfoList = cereProductClassifyLangInfoService.list(Wrappers.<CereProductClassifyLangInfo>lambdaQuery().in(CereProductClassifyLangInfo::getClassifyId,classifyIdList));
if(CollectionUtils.isNotEmpty(list)){
for (Classify classify : list) {
classify.initMap(cereProductClassifyLangInfoList);
classify.initData(ContextUtil.getLanguage());
}
}
if(CollectionUtils.isNotEmpty(childs)){
for (Classify classify : childs) {
classify.initMap(cereProductClassifyLangInfoList);
classify.initData(ContextUtil.getLanguage());
}
}
}
if(!EmptyUtils.isEmpty(list)){
Map<String,Integer> map=new HashMap<>();
list.forEach((classify -> {
@ -1144,6 +1120,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
}
try {
ProductDetail detail = getById(param,user);
initDetailLangInfo(detail);
int env = param.getTerminal();
String itemPicUrl = CollectionUtils.isNotEmpty(detail.getImages())?detail.getImages().get(0):"";
String shareHeadUrl = user.getHeadImage();
@ -1187,6 +1164,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
a.setTotal(productBo.getTotal());
}
});
initProductLangInfo(list);
}
PageInfo<Product> pageInfo=new PageInfo<>(list);
Page page=new Page(pageInfo.getList(),pageInfo.getTotal());
@ -1210,14 +1188,18 @@ public class CereShopProductServiceImpl implements CereShopProductService {
String cacheKey = CacheKeyConstants.SKU_CACHE_PREFIX + "_" + productId.toString() + "_" + skuId;
String productStr = (String)stringRedisService.get(cacheKey);
if (StringUtils.isNotBlank(productStr)) {
ProductBo productBo = JSON.parseObject(productStr, ProductBo.class);
//缓存没有超过配置的时间才可以返回否则需要重新查询
if (System.currentTimeMillis() - productBo.getLastUpdateTimestamp() <= productCacheTime) {
if (needRealtimeStock) {
assembleStock(productBo,skuId);
try {
ProductBo productBo = JSON.parseObject(productStr, ProductBo.class);
//缓存没有超过配置的时间才可以返回否则需要重新查询
if (System.currentTimeMillis() - productBo.getLastUpdateTimestamp() <= productCacheTime) {
if (needRealtimeStock) {
assembleStock(productBo,skuId);
}
//log.info("fetchProductCache byCache productId = {}, skuId = {}, use time {} mills", productId, skuId, System.currentTimeMillis() - start);
return productBo;
}
//log.info("fetchProductCache byCache productId = {}, skuId = {}, use time {} mills", productId, skuId, System.currentTimeMillis() - start);
return productBo;
} catch (Exception e) {
e.printStackTrace();
}
}
@ -1234,7 +1216,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
ProductBo productBo = new ProductBo();
BeanUtils.copyProperties(detail, productBo);
productBo.setLastUpdateTimestamp(System.currentTimeMillis());
stringRedisService.set(cacheKey, JSON.toJSONString(productBo));
stringRedisService.set(cacheKey, JSON.toJSONString(productBo, SerializerFeature.DisableCircularReferenceDetect));
//log.info("fetchProductCache byDb productId = {}, skuId = {}, use time {} mills", productId, skuId, System.currentTimeMillis() - start);
return productBo;
} catch (Exception e) {
@ -1250,7 +1232,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
}
//拼团平台秒杀平台折扣商家秒杀商家折扣 状态和价格都是对应的
List<Product> productDetailList = cereShopProductDAO.findByShopIdAndSkuIdList(shopId, skuIdList);
initProductLangInfo(productDetailList);
List<Product> normalProductList = productDetailList.stream().filter(obj
-> IntegerEnum.ACTIVITY_TYPE_NORMAL.getCode().equals(obj.getActivityType())).collect(Collectors.toList());
if (user != null) {
@ -1316,6 +1298,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
});
productSkus.setMap(map);
}
initProductSkusLangInfo(productSkus);
return productSkus;
}
@ -1743,4 +1726,139 @@ public class CereShopProductServiceImpl implements CereShopProductService {
}
return null;
}
private void initCanvasProductLangInfo(List<CanvasProduct> productList){
List<Long> classifyIdList = new ArrayList<>();
classifyIdList.addAll(productList.stream().map(CanvasProduct::getProductId).collect(Collectors.toList()));
classifyIdList = classifyIdList.stream().filter(item -> item != null && item > 0).distinct().collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(classifyIdList)){
List<CereShopProductLangInfo> cereProductClassifyLangInfoList = shopProductLangInfoService.list(Wrappers.<CereShopProductLangInfo>lambdaQuery().in(CereShopProductLangInfo::getProductId,classifyIdList));
if(CollectionUtils.isNotEmpty(productList)){
for (CanvasProduct classify : productList) {
classify.initMap(cereProductClassifyLangInfoList);
classify.initData(ContextUtil.getLanguage());
}
}
}
}
private void initProductLangInfo(List<Product> productList){
List<Long> classifyIdList = new ArrayList<>();
classifyIdList.addAll(productList.stream().map(Product::getProductId).collect(Collectors.toList()));
classifyIdList = classifyIdList.stream().filter(item -> item != null && item > 0).distinct().collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(classifyIdList)){
List<CereShopProductLangInfo> cereProductClassifyLangInfoList = shopProductLangInfoService.list(Wrappers.<CereShopProductLangInfo>lambdaQuery().in(CereShopProductLangInfo::getProductId,classifyIdList));
if(CollectionUtils.isNotEmpty(productList)){
for (Product classify : productList) {
classify.initMap(cereProductClassifyLangInfoList);
classify.initData(ContextUtil.getLanguage());
}
}
}
}
private void initDetailLangInfo(ProductDetail productDetail){
if(productDetail != null){
List<CereShopProductLangInfo> cereProductClassifyLangInfoList = shopProductLangInfoService.list(Wrappers.<CereShopProductLangInfo>lambdaQuery().in(CereShopProductLangInfo::getProductId,Collections.singletonList(productDetail.getProductId())));
productDetail.initMap(cereProductClassifyLangInfoList);
productDetail.initData(ContextUtil.getLanguage());
}
//SKU详细数据
List<Long> skuIdList = productDetail.getMap().values().stream().map(Sku::getSkuId).distinct().collect(Collectors.toList());
List<CereSkuName> cereSkuNameList = cereSkuNameService.list(Wrappers.<CereSkuName>lambdaQuery().in(CereSkuName::getSkuId, skuIdList));
//SKU的多语言名称
List<String> cereSkuNameLangKeyList = cereSkuNameList.stream().map(CereSkuName::getUniId).collect(Collectors.toList());
List<CereSkuNameLangInfo> cereSkuNameLangInfoList = cereSkuNameLangInfoService.list(Wrappers.<CereSkuNameLangInfo>lambdaQuery().in(CereSkuNameLangInfo::getSkuUniId, cereSkuNameLangKeyList));
for (CereSkuName cereSkuName : cereSkuNameList) {
cereSkuName.initMap(cereSkuNameLangInfoList);
cereSkuName.initData(ContextUtil.getLanguage());
}
Map<String,List<CereSkuName>> cereSkuNameListMap = cereSkuNameList.stream().collect(Collectors.groupingBy(CereSkuName::getNameCode, LinkedHashMap::new, Collectors.toList()));
List<SkuName> names = new ArrayList<>();
for (List<CereSkuName> skuNameList : cereSkuNameListMap.values()) {
CereSkuName firstSkuName = skuNameList.get(0);
SkuName skuNameParam = new SkuName();
skuNameParam.setSkuId(firstSkuName.getSkuId());
skuNameParam.setNameCode(firstSkuName.getNameCode());
skuNameParam.setSkuName(firstSkuName.getSkuName());
skuNameParam.setLangInfoMap(firstSkuName.getLangInfoMap());
List<SkuValue> values=new ArrayList<>();
for (List<CereSkuName> cereSkuNameValueList : skuNameList.stream().collect(Collectors.groupingBy(CereSkuName::getValueCode, LinkedHashMap::new, Collectors.toList())).values()) {
CereSkuName cereSkuName = cereSkuNameValueList.get(0);
SkuValue skuValueParam=new SkuValue();
skuValueParam.setValueCode(cereSkuName.getValueCode());
skuValueParam.setSkuValue(cereSkuName.getSkuValue());
skuValueParam.setSkuName(skuNameParam.getSkuName());
skuValueParam.setLangInfoMap(cereSkuName.getLangInfoMap());
values.add(skuValueParam);
}
skuNameParam.setValues(values);
names.add(skuNameParam);
}
productDetail.setNames(names);
}
private void initProductSkusLangInfo(ProductSkus productDetail){
if(productDetail != null){
List<CereShopProductLangInfo> cereProductClassifyLangInfoList = shopProductLangInfoService.list(Wrappers.<CereShopProductLangInfo>lambdaQuery().in(CereShopProductLangInfo::getProductId,Collections.singletonList(productDetail.getProductId())));
productDetail.initMap(cereProductClassifyLangInfoList);
productDetail.initData(ContextUtil.getLanguage());
}
//SKU详细数据
List<Long> skuIdList = productDetail.getMap().values().stream().map(Sku::getSkuId).distinct().collect(Collectors.toList());
List<CereSkuName> cereSkuNameList = cereSkuNameService.list(Wrappers.<CereSkuName>lambdaQuery().in(CereSkuName::getSkuId, skuIdList));
//SKU的多语言名称
List<String> cereSkuNameLangKeyList = cereSkuNameList.stream().map(CereSkuName::getUniId).collect(Collectors.toList());
List<CereSkuNameLangInfo> cereSkuNameLangInfoList = cereSkuNameLangInfoService.list(Wrappers.<CereSkuNameLangInfo>lambdaQuery().in(CereSkuNameLangInfo::getSkuUniId, cereSkuNameLangKeyList));
for (CereSkuName cereSkuName : cereSkuNameList) {
cereSkuName.initMap(cereSkuNameLangInfoList);
cereSkuName.initData(ContextUtil.getLanguage());
}
Map<String,List<CereSkuName>> cereSkuNameListMap = cereSkuNameList.stream().collect(Collectors.groupingBy(CereSkuName::getNameCode, LinkedHashMap::new, Collectors.toList()));
List<SkuName> names = new ArrayList<>();
for (List<CereSkuName> skuNameList : cereSkuNameListMap.values()) {
CereSkuName firstSkuName = skuNameList.get(0);
SkuName skuNameParam = new SkuName();
skuNameParam.setSkuId(firstSkuName.getSkuId());
skuNameParam.setNameCode(firstSkuName.getNameCode());
skuNameParam.setSkuName(firstSkuName.getSkuName());
skuNameParam.setLangInfoMap(firstSkuName.getLangInfoMap());
List<SkuValue> values=new ArrayList<>();
for (List<CereSkuName> cereSkuNameValueList : skuNameList.stream().collect(Collectors.groupingBy(CereSkuName::getValueCode, LinkedHashMap::new, Collectors.toList())).values()) {
CereSkuName cereSkuName = cereSkuNameValueList.get(0);
SkuValue skuValueParam=new SkuValue();
skuValueParam.setValueCode(cereSkuName.getValueCode());
skuValueParam.setSkuValue(cereSkuName.getSkuValue());
skuValueParam.setSkuName(skuNameParam.getSkuName());
skuValueParam.setLangInfoMap(cereSkuName.getLangInfoMap());
values.add(skuValueParam);
}
skuNameParam.setValues(values);
names.add(skuNameParam);
}
productDetail.setNames(names);
}
private void initShareProductLangInfo(ShareProduct productDetail){
if(productDetail != null){
List<CereShopProductLangInfo> cereProductClassifyLangInfoList = shopProductLangInfoService.list(Wrappers.<CereShopProductLangInfo>lambdaQuery().in(CereShopProductLangInfo::getProductId,Collections.singletonList(productDetail.getProductId())));
productDetail.initMap(cereProductClassifyLangInfoList);
productDetail.initData(ContextUtil.getLanguage());
}
}
}

44
cereshop-app/src/main/resources/mybatis/mapper/product/CereShopProductDAO.xml

@ -396,6 +396,7 @@
where a.product_id=b.product_id GROUP BY a.product_id) c ON a.product_id=c.product_id
LEFT JOIN cere_platform_shop d ON a.shop_id=d.shop_id
LEFT JOIN cere_product_classify e ON a.classify_id=e.classify_id
LEFT JOIN cere_product_classify cpcb ON a.classify_business_id=cpcb.classify_id
LEFT JOIN (SELECT SUM(number) number,sku_id,order_id from cere_order_product GROUP BY sku_id) f ON b.sku_id=f.sku_id
LEFT JOIN cere_shop_order g ON f.order_id=g.order_id and g.state in (2,3,4)
LEFT JOIN (SELECT a.sku_id,a.image from cere_sku_name a,cere_product_sku b where a.sku_id=b.sku_id LIMIT 1) h ON b.sku_id=h.sku_id
@ -411,7 +412,8 @@
and a.shelve_state=#{shelveState}
</if>
<if test="classifyId!=null">
and (a.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%'))
and (a.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%')
OR a.classify_business_id=#{classifyId} OR cpcb.classify_level_hierarchy like concat('%/',#{classifyId},'%'))
</if>
<if test="ids!=null and ids.size()>0">
and a.product_id in (
@ -426,8 +428,9 @@
<select id="getCanvasProducts2" parameterType="com.shop.cereshop.app.param.canvas.CanvasAppProductParam" resultType="com.shop.cereshop.app.page.canvas.CanvasProduct">
SELECT a.shop_id,d.shop_name,d.shop_logo,a.product_id,a.product_name,a.fictitious_number
from cere_shop_product a
LEFT JOIN cere_platform_shop d ON a.shop_id=d.shop_id
INNER JOIN cere_platform_shop d ON a.shop_id=d.shop_id
LEFT JOIN cere_product_classify e ON a.classify_id=e.classify_id
LEFT JOIN cere_product_classify cpcb ON a.classify_business_id=cpcb.classify_id
where a.shelve_state=1 and d.state=1
<if test="search!=null and search!=''">
and (d.shop_name like concat('%',#{search},'%') OR
@ -438,7 +441,10 @@
and a.shelve_state=#{shelveState}
</if>
<if test="classifyId!=null">
and (a.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%'))
and (
a.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%')
OR a.classify_business_id=#{classifyId} OR cpcb.classify_level_hierarchy like concat('%/',#{classifyId},'%')
)
</if>
<if test="ids!=null and ids.size()>0">
and a.product_id in (
@ -589,14 +595,20 @@
</select>
<select id="getGroupWorkProducts" parameterType="com.shop.cereshop.app.param.canvas.CanvasAppProductParam" resultType="com.shop.cereshop.app.page.canvas.CanvasProduct">
SELECT b.shop_id,d.shop_name,d.shop_logo,a.product_id,b.product_name, ifnull(x.users, 0) + b.fictitious_number as users, h.start_time,h.end_time,h.state,
SELECT b.shop_id,d.shop_name,d.shop_logo,
a.product_id,b.product_name,
ifnull(x.users, 0) + b.fictitious_number as users,
h.start_time,h.end_time,h.state,
IF(m.image IS NULL OR m.image='',c.product_image,m.image) image,h.if_enable,h.enable_time,
a.price,a.sku_id,n.price original_price,IF(f.number IS NULL, b.fictitious_number, f.number + b.fictitious_number) number,n.stock_number FROM cere_shop_group_work_detail a
LEFT JOIN cere_shop_product b ON a.product_id=b.product_id
a.price,a.sku_id,n.price original_price,IF(f.number IS NULL, b.fictitious_number, f.number + b.fictitious_number) number,
n.stock_number
FROM cere_shop_group_work_detail a
INNER JOIN cere_shop_product b ON a.product_id=b.product_id
LEFT JOIN (SELECT a.product_id,a.product_image from cere_product_image a,cere_shop_product b
where a.product_id=b.product_id GROUP BY a.product_id) c ON a.product_id=c.product_id
LEFT JOIN cere_platform_shop d ON b.shop_id=d.shop_id
INNER JOIN cere_platform_shop d ON b.shop_id=d.shop_id
LEFT JOIN cere_product_classify e ON b.classify_id=e.classify_id
LEFT JOIN cere_product_classify cpcb ON b.classify_business_id=cpcb.classify_id
LEFT JOIN (SELECT SUM(number) number,sku_id,order_id from cere_order_product GROUP BY sku_id) f ON a.sku_id=f.sku_id
LEFT JOIN cere_shop_order g ON f.order_id=g.order_id and g.state in (2,3,4)
LEFT JOIN (SELECT COUNT(a.buyer_user_id) users,a.product_id FROM (SELECT b.buyer_user_id,a.product_id FROM cere_order_product a,cere_shop_order b
@ -617,7 +629,8 @@
and b.shelve_state=#{shelveState}
</if>
<if test="classifyId!=null">
and (b.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%'))
and (b.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%')
OR b.classify_business_id=#{classifyId} OR cpcb.classify_level_hierarchy like concat('%/',#{classifyId},'%'))
</if>
<if test="ids!=null and ids.size()>0">
and a.product_id in (
@ -639,6 +652,7 @@
where a.product_id=b.product_id GROUP BY a.product_id) c ON a.product_id=c.product_id
LEFT JOIN cere_platform_shop d ON b.shop_id=d.shop_id
LEFT JOIN cere_product_classify e ON b.classify_id=e.classify_id
LEFT JOIN cere_product_classify cpcb ON b.classify_business_id=cpcb.classify_id
LEFT JOIN (SELECT SUM(number) number,sku_id,order_id from cere_order_product GROUP BY sku_id) f ON a.sku_id=f.sku_id
LEFT JOIN cere_shop_order g ON f.order_id=g.order_id and g.state in (2,3,4)
LEFT JOIN (SELECT COUNT(a.buyer_user_id) users,a.product_id FROM (SELECT b.buyer_user_id,a.product_id FROM cere_order_product a,cere_shop_order b
@ -659,7 +673,8 @@
and b.shelve_state=#{shelveState}
</if>
<if test="classifyId!=null">
and (b.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%'))
and (b.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%')
OR b.classify_business_id=#{classifyId} OR cpcb.classify_level_hierarchy like concat('%/',#{classifyId},'%'))
</if>
<if test="ids!=null and ids.size()>0">
and a.product_id in (
@ -681,6 +696,7 @@
where a.product_id=b.product_id GROUP BY a.product_id) c ON a.product_id=c.product_id
LEFT JOIN cere_platform_shop d ON b.shop_id=d.shop_id
LEFT JOIN cere_product_classify e ON b.classify_id=e.classify_id
LEFT JOIN cere_product_classify cpcb ON b.classify_business_id=cpcb.classify_id
LEFT JOIN (SELECT SUM(number) number,sku_id,order_id from cere_order_product GROUP BY sku_id) f ON a.sku_id=f.sku_id
LEFT JOIN cere_shop_order g ON f.order_id=g.order_id and g.state in (2,3,4)
LEFT JOIN (SELECT COUNT(a.buyer_user_id) users,a.product_id FROM (SELECT b.buyer_user_id,a.product_id FROM cere_order_product a,cere_shop_order b
@ -701,7 +717,8 @@
and b.shelve_state=#{shelveState}
</if>
<if test="classifyId!=null">
and (b.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%'))
and (b.classify_id=#{classifyId} OR e.classify_level_hierarchy like concat('%/',#{classifyId},'%')
OR b.classify_business_id=#{classifyId} OR cpcb.classify_level_hierarchy like concat('%/',#{classifyId},'%'))
</if>
<if test="ids!=null and ids.size()>0">
and a.product_id in (
@ -716,12 +733,12 @@
<select id="findAllClassify" resultType="com.shop.cereshop.commons.domain.product.Classify">
SELECT classify_id id,classify_pid parentId,classify_name categoryName,classify_level depth,classify_image
FROM cere_product_classify where classify_level=1
FROM cere_product_classify where classify_level=1 AND project=#{project}
</select>
<select id="findChildsClassify" resultType="com.shop.cereshop.commons.domain.product.Classify">
SELECT classify_id id,classify_pid parentId,classify_name categoryName,classify_level depth,classify_image
FROM cere_product_classify where classify_level<![CDATA[!= ]]>1
FROM cere_product_classify where classify_level<![CDATA[!= ]]>1 AND project=#{project}
</select>
<select id="findSimilarProducts" parameterType="java.lang.Object" resultType="com.shop.cereshop.app.page.index.Product">
@ -737,7 +754,7 @@
where a.order_id=b.order_id and b.state in (2,3,4) GROUP BY a.product_id,b.buyer_user_id) a GROUP BY a.product_id) g ON a.product_id=g.product_id
where d.state=1 and a.shelve_state=1
<if test="classifyId!=null">
and a.classify_id=#{classifyId}
and (a.classify_id=#{classifyId} OR a.classify_business_id=#{classifyId})
</if>
ORDER BY (f.number + a.fictitious_number) DESC LIMIT 4
</select>
@ -759,7 +776,6 @@
LEFT JOIN (SELECT a.product_id,a.product_image from cere_product_image a,cere_shop_product b
where a.product_id=b.product_id GROUP BY a.product_id) c ON a.product_id=c.product_id
LEFT JOIN cere_platform_shop d ON a.shop_id=d.shop_id
LEFT JOIN cere_product_classify e ON a.classify_id=e.classify_id
LEFT JOIN (SELECT SUM(number) number,sku_id,order_id from cere_order_product GROUP BY sku_id) f ON b.sku_id=f.sku_id
where a.shelve_state=1 and d.state=1
ORDER BY aes_encrypt(a.product_id, #{timestamp}), a.update_time DESC, a.create_time DESC

Loading…
Cancel
Save