Jelajahi Sumber

询盘管理修改

Gaosheng 4 hari lalu
induk
melakukan
08444ad16b
14 mengubah file dengan 145 tambahan dan 84 penghapusan
  1. 1 1
      xinkeaboard-server/b2b2c-core/src/main/resources/i18n_en.properties
  2. 3 0
      xinkeaboard-server/b2b2c-entity/src/main/java/com/slodon/b2b2c/goods/dto/GoodsRankListDTO.java
  3. 1 1
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/member/front/advich/MemberEmailActiveController.java
  4. 2 2
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/sso/front/FrontAuthController.java
  5. 6 6
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/admin/SearchInitController.java
  6. 4 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/dao/read/goods/GoodsExtendReadMapper.java
  7. 15 5
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/job/GoodsJob.java
  8. 85 64
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/ESGoodsModel.java
  9. 3 0
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/GoodsExtendModel.java
  10. 2 2
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/member/advich/MemberRegisterActiveModel.java
  11. 1 1
      xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/SellerStoreCompanyShowModel.java
  12. 4 1
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/goods/GoodsBindRankReadMapper.xml
  13. 5 0
      xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/goods/GoodsExtendReadMapper.xml
  14. 13 1
      xinkeaboard-server/doc/DDL/update.sql

+ 1 - 1
xinkeaboard-server/b2b2c-core/src/main/resources/i18n_en.properties

@@ -1809,7 +1809,7 @@ admin账号不可删除=admin account can not be deleted
 更新直播和短视频设置表失败,请重试=Live updates and short video settings table failed, please try again
 退出成功=exit successfully
 用户名或密码错误=wrong user name or password
-会员账号或密码错误=wrong member email or password
+会员账号或密码错误=wrong member account or password
 系统开小差了=System deserted
 账号已被冻结=Account has been frozen
 账号不可用=Account unavailable

+ 3 - 0
xinkeaboard-server/b2b2c-entity/src/main/java/com/slodon/b2b2c/goods/dto/GoodsRankListDTO.java

@@ -30,4 +30,7 @@ public class GoodsRankListDTO {
 
     @ApiModelProperty("创建时间")
     private Date createTime;
+
+    @ApiModelProperty("商品Id")
+    private Long goodsId;
 }

+ 1 - 1
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/member/front/advich/MemberEmailActiveController.java

@@ -339,7 +339,7 @@ public class MemberEmailActiveController extends BaseController {
             AssertUtil.emailCheck(email);
         } else if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(webSite)) {
             if (StringUtil.isEmpty(mobile)) {
-                return ValidationResult.invalid(Language.translate("手机不能为空", Language.EN_LANGUAGE_TYPE));
+                return ValidationResult.invalid(Language.translate("手机不能为空", Language.EN_LANGUAGE_TYPE));
             }
             if (StringUtil.isEmpty(verificationCode)) {
                 return ValidationResult.invalid(Language.translate("验证码不能为空", Language.EN_LANGUAGE_TYPE));

+ 2 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/sso/front/FrontAuthController.java

@@ -129,11 +129,11 @@ public class FrontAuthController {
                 } else {
                     AssertUtil.notEmpty(memberList, Language.translate("会员账号或密码错误",Language.EN_LANGUAGE_TYPE));
                     if (ssoType != null && ssoType == 1) {
-                        AssertUtil.isTrue(!memberList.get(0).getLoginPwd().equals(password), Language.translate("会员邮箱或密码错误",Language.EN_LANGUAGE_TYPE));
+                        AssertUtil.isTrue(!memberList.get(0).getLoginPwd().equals(password), Language.translate("会员账号或密码错误",Language.EN_LANGUAGE_TYPE));
                     } else {
                         oneClickLoginModel.checkGpSystemUserIsExist(request, username, password, "PC", webSite);
                         memberList = memberModel.getMemberList(memberExample, null);
-                        AssertUtil.isTrue(!memberList.get(0).getLoginPwd().equals(Md5.getMd5String(password)), Language.translate("会员邮箱或密码错误",Language.EN_LANGUAGE_TYPE));
+                        AssertUtil.isTrue(!memberList.get(0).getLoginPwd().equals(Md5.getMd5String(password)), Language.translate("会员账号或密码错误",Language.EN_LANGUAGE_TYPE));
                     }
                 }
             } else {

+ 6 - 6
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/system/admin/SearchInitController.java

@@ -36,11 +36,11 @@ public class SearchInitController {
     @ApiOperation("初始化es索引")
     @OperationLogger(option = "初始化es索引")
     @GetMapping("esInit")
-    public JsonResult esInit() throws IOException {
+    public JsonResult esInit(String webSite) throws IOException {
         //删除索引
-        deleteByQuery();
+        deleteByQuery(webSite);
         //重新把索引生成
-        esGoodsModel.jobCreateIndexesES(DomainUrlUtil.SLD_ES_URL, DomainUrlUtil.SLD_ES_PORT, "init");
+        esGoodsModel.jobCreateIndexesES(DomainUrlUtil.SLD_ES_URL, DomainUrlUtil.SLD_ES_PORT, "init", webSite);
 
         return SldResponse.success("初始化成功");
     }
@@ -58,12 +58,12 @@ public class SearchInitController {
     /**
      * 删除索引
      */
-    private static void deleteByQuery() throws IOException {
+    private static void deleteByQuery(String webSite) throws IOException {
         RestHighLevelClient client = getESClient();
-        boolean indexExist = client.indices().exists(new GetIndexRequest(DomainUrlUtil.ES_INDEX_NAME), RequestOptions.DEFAULT);
+        boolean indexExist = client.indices().exists(new GetIndexRequest(DomainUrlUtil.ES_INDEX_NAME + "_" + webSite), RequestOptions.DEFAULT);
         if (indexExist) {
             //索引存在,删除索引
-            DeleteByQueryRequest request = new DeleteByQueryRequest(DomainUrlUtil.ES_INDEX_NAME);
+            DeleteByQueryRequest request = new DeleteByQueryRequest(DomainUrlUtil.ES_INDEX_NAME + "_" + webSite);
             request.setConflicts("proceed");
             request.setQuery(QueryBuilders.matchAllQuery());
             client.deleteByQuery(request, RequestOptions.DEFAULT);

+ 4 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/dao/read/goods/GoodsExtendReadMapper.java

@@ -3,6 +3,10 @@ package com.slodon.b2b2c.dao.read.goods;
 import com.slodon.b2b2c.core.database.BaseReadMapper;
 import com.slodon.b2b2c.goods.example.GoodsExtendExample;
 import com.slodon.b2b2c.goods.pojo.GoodsExtend;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface GoodsExtendReadMapper extends BaseReadMapper<GoodsExtend, GoodsExtendExample> {
+    List<GoodsExtend> listResByExample(@Param("example") GoodsExtendExample example);
 }

+ 15 - 5
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/job/GoodsJob.java

@@ -8,7 +8,9 @@ import com.slodon.b2b2c.model.goods.ESGoodsModel;
 import com.slodon.b2b2c.model.goods.GoodsPromotionModel;
 import com.slodon.b2b2c.model.goods.GoodsRankModel;
 import com.slodon.b2b2c.model.goods.ProductModel;
+import com.slodon.b2b2c.model.system.SettingModel;
 import com.slodon.b2b2c.starter.mq.entity.MessageSendVO;
+import com.slodon.b2b2c.system.pojo.Setting;
 import lombok.extern.slf4j.Slf4j;
 import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
@@ -40,6 +42,8 @@ public class GoodsJob {
     private GoodsRankModel goodsRankModel;
     @Resource
     private RabbitTemplate rabbitTemplate;
+    @Resource
+    private SettingModel settingModel;
 
     /**
      * 系统定时更新es索引
@@ -49,11 +53,17 @@ public class GoodsJob {
     @SchedulerLock(name = "jobSearchES", lockAtMostFor = "600000", lockAtLeastFor = "540000")
     public void jobSearchES() {
         log.info("jobSearchES() start");
-        try {
-            boolean jobResult = esGoodsModel.jobCreateIndexesES(DomainUrlUtil.SLD_ES_URL, DomainUrlUtil.SLD_ES_PORT, "job");
-            AssertUtil.isTrue(!jobResult, "[jobSearchES] 系统定时任务定时生成ES索引失败");
-        } catch (Exception e) {
-            log.error("jobSearchES()", e);
+        List<Setting> webSiteList = settingModel.getSiteSetting();
+        if (!CollectionUtils.isEmpty(webSiteList)) {
+            for (Setting setting : webSiteList) {
+                log.info("jobSearchES() start");
+                try {
+                    boolean jobResult = esGoodsModel.jobCreateIndexesES(DomainUrlUtil.SLD_ES_URL, DomainUrlUtil.SLD_ES_PORT, "job", setting.getValue());
+                    AssertUtil.isTrue(!jobResult, "[jobSearchES] 系统定时任务定时生成ES索引失败");
+                } catch (Exception e) {
+                    log.error("jobSearchES()", e);
+                }
+            }
         }
         log.info("jobSearchES() end");
     }

+ 85 - 64
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/ESGoodsModel.java

@@ -18,18 +18,17 @@ import com.slodon.b2b2c.dao.read.goods.*;
 import com.slodon.b2b2c.dao.read.member.MemberFollowProductReadMapper;
 import com.slodon.b2b2c.dao.read.seller.StoreInnerLabelReadMapper;
 import com.slodon.b2b2c.dao.read.seller.StoreLabelBindGoodsReadMapper;
+import com.slodon.b2b2c.enums.WebSiteConstant;
 import com.slodon.b2b2c.goods.dto.GoodsRankListDTO;
 import com.slodon.b2b2c.goods.dto.SearchConditionDTO;
-import com.slodon.b2b2c.goods.example.GoodsBindAttributeValueExample;
-import com.slodon.b2b2c.goods.example.GoodsBindRankExample;
-import com.slodon.b2b2c.goods.example.GoodsExample;
-import com.slodon.b2b2c.goods.example.GoodsPromotionExample;
+import com.slodon.b2b2c.goods.example.*;
 import com.slodon.b2b2c.goods.pojo.*;
 import com.slodon.b2b2c.member.example.MemberFollowProductExample;
 import com.slodon.b2b2c.member.pojo.Member;
 import com.slodon.b2b2c.member.pojo.MemberFollowProduct;
 import com.slodon.b2b2c.model.promotion.PromotionCommonModel;
 import com.slodon.b2b2c.model.system.SettingModel;
+import com.slodon.b2b2c.seller.example.StoreInnerLabelExample;
 import com.slodon.b2b2c.seller.example.StoreLabelBindGoodsExample;
 import com.slodon.b2b2c.seller.pojo.StoreInnerLabel;
 import com.slodon.b2b2c.seller.pojo.StoreLabelBindGoods;
@@ -78,6 +77,7 @@ import javax.annotation.Resource;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.alibaba.fastjson.serializer.SerializerFeature.MapSortField;
 import static com.alibaba.fastjson.serializer.SerializerFeature.SortField;
@@ -121,11 +121,15 @@ public class ESGoodsModel {
      * @return
      */
     @SneakyThrows
-    public boolean jobCreateIndexesES(String url, Integer port, String type) {
+    public boolean jobCreateIndexesES(String url, Integer port, String type, String webSite) {
         //es索引上次更新的时间
         String esIndexUpdateTime = stringRedisTemplate.opsForValue().get("es_index_update_time");
+        if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(webSite)) {
+            esIndexUpdateTime = stringRedisTemplate.opsForValue().get("es_index_update_time" + "_" + webSite);
+        }
 
         GoodsExample example = new GoodsExample();
+        example.setWebSite(webSite);
         example.setState(GoodsConst.GOODS_STATE_UPPER);
         if ("job".equals(type)) {
             example.setUpdateTimeAfter(TimeUtil.strToDate(esIndexUpdateTime));
@@ -134,7 +138,7 @@ public class ESGoodsModel {
 
         if (!CollectionUtils.isEmpty(addList)) {
             List<SearchProductDTO> addGoodsList = this.getSearchProductVOs(addList);
-            BulkResponse response = this.createIndex(url, port, addGoodsList);
+            BulkResponse response = this.createIndex(url, port, addGoodsList, webSite);
             if (response.hasFailures()) {
                 //索引插入数据失败
                 log.error(response.buildFailureMessage());
@@ -144,11 +148,12 @@ public class ESGoodsModel {
         if ("job".equals(type)) {
             //下架状态的商品,执行删除索引记录操作
             example.setState(null);
+            example.setWebSite(webSite);
             example.setStateNotEquals(GoodsConst.GOODS_STATE_UPPER);
             //需要删除索引记录的商品列表
             List<Goods> deleteList = goodsReadMapper.listByExample(example);
             if (!CollectionUtils.isEmpty(deleteList)) {
-                this.deleteByQuery(url, port, deleteList);
+                this.deleteByQuery(url, port, deleteList, webSite);
             }
         }
 
@@ -156,10 +161,16 @@ public class ESGoodsModel {
         String updateTime = TimeUtil.getDateTimeString(new Date());
         Setting setting = new Setting();
         setting.setName("es_index_update_time");
+        if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(webSite)) {
+            setting.setName("es_index_update_time" + "_" + webSite);
+        }
         setting.setValue(updateTime);
         settingModel.updateSetting(setting);
         //更新redis里的配置
         stringRedisTemplate.opsForValue().set("es_index_update_time", updateTime);
+        if (WebSiteConstant.MEMBER_DISTRIBUTOR.equals(webSite)) {
+            stringRedisTemplate.opsForValue().set("es_index_update_time" + "_" + webSite, updateTime);
+        }
         return true;
     }
 
@@ -172,6 +183,25 @@ public class ESGoodsModel {
     private List<SearchProductDTO> getSearchProductVOs(List<Goods> goodsList) {
         List<SearchProductDTO> searchProductDTOS = new ArrayList<>();
         SearchProductDTO searchProductDTO;
+        GoodsCategoryExample goodsCategoryExample = new GoodsCategoryExample();
+        goodsCategoryExample.setGrade(GoodsCategoryConst.CATEGORY_GRADE_3);
+        List<GoodsCategory> categoryList = goodsCategoryReadMapper.listByExample(goodsCategoryExample);
+        List<GoodsBindAttributeValue> bindAttributeValueListAll = goodsBindAttributeValueReadMapper.listByExample(new GoodsBindAttributeValueExample());
+        List<GoodsExtend> goodsExtendList = goodsExtendModel.listByExample(new GoodsExtendExample());
+        List<StoreLabelBindGoods> labelBindGoodsListAll = storeLabelBindGoodsReadMapper.listByExample(new StoreLabelBindGoodsExample());
+        List<StoreInnerLabel> storeInnerLabelList = storeInnerLabelReadMapper.listByExample(new StoreInnerLabelExample());
+        List<GoodsRankListDTO> rankListAll = goodsBindRankReadMapper.getGoodsRankList(new GoodsBindRankExample());
+        GoodsPromotionExample promotionExample = new GoodsPromotionExample();
+        promotionExample.setIsEffective(PromotionConst.IS_EFFECTIVE_YES);
+        promotionExample.setStartTimeBefore(new Date());
+        promotionExample.setEndTimeAfter(new Date());
+        //一级活动,绑定商品
+        promotionExample.setBindType(PromotionConst.BIND_TYPE_1);
+        List<GoodsPromotion> listAll = goodsPromotionReadMapper.listByExample(promotionExample);
+        promotionExample.setBindType(PromotionConst.BIND_TYPE_2);
+        List<GoodsPromotion> secondListAll = goodsPromotionReadMapper.listByExample(promotionExample);
+        promotionExample.setBindType(PromotionConst.BIND_TYPE_3);
+        List<GoodsPromotion> thirdListAll = goodsPromotionReadMapper.listByExample(promotionExample);
         for (Goods goods : goodsList) {
             searchProductDTO = new SearchProductDTO();
             searchProductDTO.setGoodsId(goods.getGoodsId().toString());
@@ -187,8 +217,10 @@ public class ESGoodsModel {
             searchProductDTO.setCategoryId3(goods.getCategoryId3().toString());
             searchProductDTO.setGoodsMoney(goods.getGoodsMoney());
             searchProductDTO.setGoodsSummary(goods.getGoodsSummary());
-            GoodsCategory goodsCategory = goodsCategoryReadMapper.getByPrimaryKey(goods.getCategoryId3());
-            searchProductDTO.setCategoryName(goodsCategory.getCategoryName());
+            GoodsCategory goodsCategory = categoryList.stream().filter(category -> category.getCategoryId().equals(goods.getCategoryId3())).findFirst().orElse(null);
+            if (goodsCategory != null) {
+                searchProductDTO.setCategoryName(goodsCategory.getCategoryName());
+            }
             searchProductDTO.setContent(goods.getGoodsBrief());
             searchProductDTO.setDefaultProductId(goods.getDefaultProductId());
 
@@ -199,49 +231,49 @@ public class ESGoodsModel {
             searchProductDTO.setCommentsNumber(goods.getCommentNumber());
 
             //商品的系统属性
-            GoodsBindAttributeValueExample valueExample = new GoodsBindAttributeValueExample();
-            valueExample.setGoodsId(goods.getGoodsId());
-            List<GoodsBindAttributeValue> bindAttributeValueList = goodsBindAttributeValueReadMapper.listByExample(valueExample);
+            List<GoodsBindAttributeValue> bindAttributeValueList = bindAttributeValueListAll.stream().filter(bindAttributeValue -> bindAttributeValue.getGoodsId().equals(goods.getGoodsId())).collect(Collectors.toList());
             if (!CollectionUtils.isEmpty(bindAttributeValueList)) {
                 StringBuffer attributeInfo = new StringBuffer();
                 bindAttributeValueList.forEach(bindAttributeValue -> {
                     attributeInfo.append(" ").append(bindAttributeValue.getAttributeValueId());
                 });
-                searchProductDTO.setAttributeInfo(attributeInfo.toString().substring(1));
+                searchProductDTO.setAttributeInfo(attributeInfo.substring(1));
             }
 
             searchProductDTO.setSalesNum(goods.getVirtualSales() + goods.getActualSales());
             //商品扩展信息
-            GoodsExtend goodsExtend = goodsExtendModel.getGoodsExtendByGoodsId(goods.getGoodsId());
-            searchProductDTO.setClickNum(goodsExtend.getClickNumber());
-            searchProductDTO.setFollowNum(goodsExtend.getFollowNumber());
+            GoodsExtend goodsExtend = goodsExtendList.stream().filter(e -> e.getGoodsId().equals(goods.getGoodsId())).findFirst().orElse(null);
+            if (goodsExtend != null) {
+                searchProductDTO.setClickNum(goodsExtend.getClickNumber());
+                searchProductDTO.setFollowNum(goodsExtend.getFollowNumber());
+            }
             searchProductDTO.setStoreIsRecommend(goods.getStoreIsRecommend());
             searchProductDTO.setIsSelf(goods.getIsSelf());
 
 
             //查询店铺分类绑定商品表
-            StoreLabelBindGoodsExample bindGoodsExample = new StoreLabelBindGoodsExample();
-            bindGoodsExample.setGoodsId(goods.getGoodsId());
-            List<StoreLabelBindGoods> labelBindGoodsList = storeLabelBindGoodsReadMapper.listByExample(bindGoodsExample);
+            List<StoreLabelBindGoods> labelBindGoodsList = labelBindGoodsListAll.stream().filter(bindGoods -> bindGoods.getGoodsId().equals(goods.getGoodsId())).collect(Collectors.toList());
             if (!CollectionUtils.isEmpty(labelBindGoodsList)) {
                 //商家内部一级分类ID
                 StringBuilder storeInnerLabelId1 = new StringBuilder();
                 //商家内部二级分类ID
                 StringBuilder storeInnerLabelId2 = new StringBuilder();
                 for (StoreLabelBindGoods labelBindGoods : labelBindGoodsList) {
-                    StoreInnerLabel storeInnerLabel = storeInnerLabelReadMapper.getByPrimaryKey(labelBindGoods.getInnerLabelId());
-                    if (storeInnerLabel.getParentInnerLabelId() == 0) {
-                        //商品绑定的是一级内部分类
-                        storeInnerLabelId1.append(" ").append(storeInnerLabel.getInnerLabelId());
-                    } else {
-                        //商品绑定的是二级内部分类
-                        storeInnerLabelId2.append(" ").append(storeInnerLabel.getInnerLabelId());
-                        storeInnerLabelId1.append(" ").append(storeInnerLabel.getParentInnerLabelId());
+                    StoreInnerLabel storeInnerLabel = storeInnerLabelList.stream().filter(innerLabel -> innerLabel.getInnerLabelId().equals(labelBindGoods.getInnerLabelId())).findFirst().orElse(null);
+                    if (storeInnerLabel != null) {
+                        if (storeInnerLabel.getParentInnerLabelId() == 0) {
+                            //商品绑定的是一级内部分类
+                            storeInnerLabelId1.append(" ").append(storeInnerLabel.getInnerLabelId());
+                        } else {
+                            //商品绑定的是二级内部分类
+                            storeInnerLabelId2.append(" ").append(storeInnerLabel.getInnerLabelId());
+                            storeInnerLabelId1.append(" ").append(storeInnerLabel.getParentInnerLabelId());
+                        }
                     }
                 }
-                searchProductDTO.setStoreInnerLabelId1(storeInnerLabelId1.toString().substring(1));
+                searchProductDTO.setStoreInnerLabelId1(storeInnerLabelId1.substring(1));
                 if (!StringUtils.isEmpty(storeInnerLabelId2.toString())) {
-                    searchProductDTO.setStoreInnerLabelId2(storeInnerLabelId2.toString().substring(1));
+                    searchProductDTO.setStoreInnerLabelId2(storeInnerLabelId2.substring(1));
                 }
             }
             searchProductDTO.setOnlineTime(goods.getOnlineTime().getTime());
@@ -249,7 +281,7 @@ public class ESGoodsModel {
             //商品排行查询
             GoodsBindRankExample goodsBindRankExample = new GoodsBindRankExample();
             goodsBindRankExample.setGoodsId(goods.getGoodsId());
-            List<GoodsRankListDTO> rankList = goodsBindRankReadMapper.getGoodsRankList(goodsBindRankExample);
+            List<GoodsRankListDTO> rankList = rankListAll.stream().filter(rank -> rank.getGoodsId().equals(goods.getGoodsId())).collect(Collectors.toList());
             if (!CollectionUtils.isEmpty(rankList)) {
                 GoodsRankListDTO goodsRank = rankList.get(0);
                 searchProductDTO.setRankId(goodsRank.getRankId().toString());
@@ -260,24 +292,11 @@ public class ESGoodsModel {
             }
 
             //商品参与的活动
-            GoodsPromotionExample promotionExample = new GoodsPromotionExample();
-            promotionExample.setIsEffective(PromotionConst.IS_EFFECTIVE_YES);
-            promotionExample.setStartTimeBefore(new Date());
-            promotionExample.setEndTimeAfter(new Date());
-            //一级活动,绑定商品
-            promotionExample.setBindType(PromotionConst.BIND_TYPE_1);
-            promotionExample.setGoodsId(goods.getGoodsId());
-            List<GoodsPromotion> list = goodsPromotionReadMapper.listByExample(promotionExample);
+            List<GoodsPromotion> list = listAll.stream().filter(goodsPromotion -> goodsPromotion.getGoodsId().equals(goods.getGoodsId())).collect(Collectors.toList());
             //二级活动,绑定店铺
-            promotionExample.setGoodsId(null);
-            promotionExample.setStoreId(goods.getStoreId());
-            promotionExample.setBindType(PromotionConst.BIND_TYPE_2);
-            list.addAll(goodsPromotionReadMapper.listByExample(promotionExample));
+            list.addAll(secondListAll.stream().filter(goodsPromotion -> goodsPromotion.getStoreId().equals(goods.getStoreId())).collect(Collectors.toList()));
             //三级活动,绑定三级分类
-            promotionExample.setStoreId(null);
-            promotionExample.setGoodsCategoryId3(goods.getCategoryId3());
-            promotionExample.setBindType(PromotionConst.BIND_TYPE_3);
-            list.addAll(goodsPromotionReadMapper.listByExample(promotionExample));
+            list.addAll(thirdListAll.stream().filter(goodsPromotion -> goodsPromotion.getGoodsCategoryId3().equals(goods.getCategoryId3())).collect(Collectors.toList()));
             List<GoodsListVO.PromotionVO> vos = new ArrayList<>();
             //根据活动名称过滤重复
             Set<String> set = new HashSet<>();
@@ -325,15 +344,15 @@ public class ESGoodsModel {
      * @param goodsList
      * @throws IOException
      */
-    private BulkResponse createIndex(String url, Integer port, List<SearchProductDTO> goodsList) throws IOException {
+    private BulkResponse createIndex(String url, Integer port, List<SearchProductDTO> goodsList, String webSite) throws IOException {
         RestHighLevelClient client = null;
         BulkResponse response = null;
         try {
             client = getESClient();
-            boolean indexExist = client.indices().exists(new GetIndexRequest(DomainUrlUtil.ES_INDEX_NAME), RequestOptions.DEFAULT);
+            boolean indexExist = client.indices().exists(new GetIndexRequest(DomainUrlUtil.ES_INDEX_NAME + "_" + webSite), RequestOptions.DEFAULT);
             if (!indexExist) {
                 //索引不存在,创建索引,设置索引分词格式
-                CreateIndexRequest createIndexRequest = new CreateIndexRequest(DomainUrlUtil.ES_INDEX_NAME);
+                CreateIndexRequest createIndexRequest = new CreateIndexRequest(DomainUrlUtil.ES_INDEX_NAME + "_" + webSite);
                 createIndexRequest.settings(Settings.builder()
                         .put("index.analysis.analyzer.default.type", "ik_max_word")
                         .put("index.analysis.analyzer.default_search.type", "ik_smart"));
@@ -342,7 +361,7 @@ public class ESGoodsModel {
             BulkRequest bulkRequest = new BulkRequest();
             //插入数据
             for (SearchProductDTO g : goodsList) {
-                bulkRequest.add(new IndexRequest(DomainUrlUtil.ES_INDEX_NAME).id(g.getGoodsId()).source(JSONObject.toJSONString(g), XContentType.JSON));
+                bulkRequest.add(new IndexRequest(DomainUrlUtil.ES_INDEX_NAME + "_" + webSite).id(g.getGoodsId()).source(JSONObject.toJSONString(g), XContentType.JSON));
             }
             response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
         } catch (Exception e) {
@@ -363,13 +382,13 @@ public class ESGoodsModel {
      * @param goodsList
      * @throws IOException
      */
-    private void deleteByQuery(String url, Integer port, List<Goods> goodsList) throws IOException {
+    private void deleteByQuery(String url, Integer port, List<Goods> goodsList, String webSite) throws IOException {
         RestHighLevelClient client = null;
         try {
             client = getESClient();
             BulkRequest bulkRequest = new BulkRequest();
             for (Goods g : goodsList) {
-                bulkRequest.add(new DeleteRequest(DomainUrlUtil.ES_INDEX_NAME, g.getGoodsId().toString()));
+                bulkRequest.add(new DeleteRequest(DomainUrlUtil.ES_INDEX_NAME + "_" + webSite, g.getGoodsId().toString()));
             }
             client.bulk(bulkRequest, RequestOptions.DEFAULT);
         } catch (Exception e) {
@@ -385,11 +404,12 @@ public class ESGoodsModel {
 
     /**
      * 查询满足条件的商品对应的店铺id
+     *
      * @param categoryId 分类id
-     * @param keyword 关键词
+     * @param keyword    关键词
      * @return 店铺id集合
      */
-    public Set<Long> searchStoreIdsByEs(Integer categoryId,String keyword){
+    public Set<Long> searchStoreIdsByEs(Integer categoryId, String keyword) {
         Set<Long> result = new HashSet<>();//返回数据
         RestHighLevelClient client = getESClient();//获取es客户端
         SearchRequest searchRequest = new SearchRequest(DomainUrlUtil.ES_INDEX_NAME);
@@ -397,24 +417,24 @@ public class ESGoodsModel {
         //构造查询条件
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
         SearchConditionDTO qc = new SearchConditionDTO();
-        if (!StringUtil.isNullOrZero(categoryId)){
+        if (!StringUtil.isNullOrZero(categoryId)) {
             qc.setCategoryIds(categoryId + "");
             boolQueryBuilder.must(this.searchIndexAssembling4cate(qc));
         }
-        if (!StringUtils.isEmpty(keyword)){
+        if (!StringUtils.isEmpty(keyword)) {
             qc.setKeyword(keyword);
             boolQueryBuilder.must(this.searchIndexAssembling4keyword(qc));
         }
         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
         searchSourceBuilder.size(0);
         //聚合查询,将所有符合条件的店铺id放入list
-        searchSourceBuilder.aggregation(AggregationBuilders.filter("query",boolQueryBuilder)
+        searchSourceBuilder.aggregation(AggregationBuilders.filter("query", boolQueryBuilder)
                 .subAggregation(AggregationBuilders.terms("list").field(SearchProductDTO.STORE_ID_ + ".keyword").size(1000000)));
         searchRequest.source(searchSourceBuilder);
         try {
             //解析查询结果,拿到店铺id list
             SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
-            ParsedFilter filter = (ParsedFilter)searchResponse.getAggregations().asList().get(0);//过滤后的结果集
+            ParsedFilter filter = (ParsedFilter) searchResponse.getAggregations().asList().get(0);//过滤后的结果集
             ParsedStringTerms terms = (ParsedStringTerms) filter.getAggregations().asList().get(0);//聚合属性值id的结果集
             terms.getBuckets().forEach(buckets -> {
                 String key = (String) buckets.getKey();
@@ -440,7 +460,7 @@ public class ESGoodsModel {
      * @param keyword    关键词
      * @return 店铺商品
      */
-    public List<SearchProductDTO> getStoreGoodsList(String storeIds,Integer categoryId,String keyword){
+    public List<SearchProductDTO> getStoreGoodsList(String storeIds, Integer categoryId, String keyword) {
         List<SearchProductDTO> result = new ArrayList<>();
         RestHighLevelClient client = getESClient();
         SearchRequest searchRequest = new SearchRequest(DomainUrlUtil.ES_INDEX_NAME);
@@ -450,14 +470,14 @@ public class ESGoodsModel {
         //构造查询条件
         BoolQueryBuilder storeQuery = QueryBuilders.boolQuery();
         for (String storeId : storeIds.split(",")) {
-            storeQuery.should(QueryBuilders.matchQuery(SearchProductDTO.STORE_ID_,storeId));
+            storeQuery.should(QueryBuilders.matchQuery(SearchProductDTO.STORE_ID_, storeId));
         }
         boolQueryBuilder.must(storeQuery);
-        if (!StringUtil.isNullOrZero(categoryId)){
+        if (!StringUtil.isNullOrZero(categoryId)) {
             qc.setCategoryIds(categoryId + "");
             boolQueryBuilder.must(this.searchIndexAssembling4cate(qc));
         }
-        if (!StringUtils.isEmpty(keyword)){
+        if (!StringUtils.isEmpty(keyword)) {
             qc.setKeyword(keyword);
             boolQueryBuilder.must(this.searchIndexAssembling4keyword(qc));
         }
@@ -469,7 +489,7 @@ public class ESGoodsModel {
             SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
             SearchHits hits = searchResponse.getHits();
             for (SearchHit hit : hits.getHits()) {
-                result.add(JSON.parseObject(hit.getSourceAsString(),SearchProductDTO.class));
+                result.add(JSON.parseObject(hit.getSourceAsString(), SearchProductDTO.class));
             }
         } catch (Exception e) {
             log.error("es连接异常:", e);
@@ -486,6 +506,7 @@ public class ESGoodsModel {
     /**
      * 获取默认三级分类id
      * 获取规则:按条件查询前500条数据中,三级分类最多的即为默认分类
+     *
      * @param qc 查询条件
      * @return 默认三级分类id
      */
@@ -495,7 +516,7 @@ public class ESGoodsModel {
         SearchSourceBuilder searchSourceBuilder = this.getCountSearchSourceBuilder(qc);
         //查询前500条符合条件的记录,聚合获取条数最多的三级分类id
         searchSourceBuilder.size(500);
-        searchSourceBuilder.aggregation(AggregationBuilders.terms("list").field(SearchProductDTO.CATEGORY_ID3_+".keyword"));
+        searchSourceBuilder.aggregation(AggregationBuilders.terms("list").field(SearchProductDTO.CATEGORY_ID3_ + ".keyword"));
         searchRequest.source(searchSourceBuilder);
         try {
             SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

+ 3 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/GoodsExtendModel.java

@@ -127,4 +127,7 @@ public class GoodsExtendModel {
     }
 
 
+    public List<GoodsExtend> listByExample(GoodsExtendExample goodsExtendExample) {
+        return goodsExtendReadMapper.listResByExample(goodsExtendExample);
+    }
 }

+ 2 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/member/advich/MemberRegisterActiveModel.java

@@ -339,7 +339,7 @@ public class MemberRegisterActiveModel {
         // 阿里云发送
         Integer sendSmsType = 3;
         code.setSmsType(SMSConst.SMS_TYPE_1);
-        String templateCode = stringRedisTemplate.opsForValue().get("notification_sms_ali_register_success_sms_template");
+        String templateCode = stringRedisTemplate.opsForValue().get("notification_sms_ali_register_sms_template");
         sendSms(mobile, code, sendSmsType, templateCode, "register");
     }
 
@@ -523,7 +523,7 @@ public class MemberRegisterActiveModel {
         // 阿里云发送
         Integer sendSmsType = 3;
         code.setSmsType(SMSConst.SMS_TYPE_4);
-        String templateCode = stringRedisTemplate.opsForValue().get("notification_sms_ali_register_sms_template");
+        String templateCode = stringRedisTemplate.opsForValue().get("notification_sms_ali_register_success_sms_template");
         sendSms(mobile, code, sendSmsType, templateCode, "success");
     }
 }

+ 1 - 1
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/SellerStoreCompanyShowModel.java

@@ -81,7 +81,7 @@ public class SellerStoreCompanyShowModel {
 
         //新增入库
         StoreCompanyShowList storeCompanyShowList = new StoreCompanyShowList();
-        storeCompanyShowList.setWebSite(storeCompanyShowList.getWebSite());
+        storeCompanyShowList.setWebSite(storeCompanyShowListAddDTO.getWebSite());
         storeCompanyShowList.setStoreId(vendor.getStoreId());
         storeCompanyShowList.setName(storeCompanyShowListAddDTO.getName());
         storeCompanyShowList.setPath(storeCompanyShowListAddDTO.getPath());

+ 4 - 1
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/goods/GoodsBindRankReadMapper.xml

@@ -181,7 +181,10 @@
        	r.sort AS sort,
        	r.create_time AS createTime
     FROM `goods_bind_rank` b, goods_rank r
-    WHERE b.goods_id = #{example.goodsId} AND b.rank_id = r.rank_id AND r.state = 1
+    WHERE b.rank_id = r.rank_id AND r.state = 1
+    <if test="example.goodsId != null">
+      AND b.goods_id = #{example.goodsId}
+    </if>
     ORDER BY b.goods_rank ASC, r.sort ASC, r.create_time DESC
   </select>
 </mapper>

+ 5 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/mapper/read/goods/GoodsExtendReadMapper.xml

@@ -225,4 +225,9 @@
     </choose>
     <include refid="limit" />
   </select>
+  <select id="listResByExample" resultMap="resultMap">
+    select goods_id, click_number, follow_number
+    from goods_extend
+    ORDER BY `extend_id` DESC
+  </select>
 </mapper>

+ 13 - 1
xinkeaboard-server/doc/DDL/update.sql

@@ -274,6 +274,10 @@ VALUES(null, "国外站门户", 4, 1, 1, now(), now(), null),(null, "国内站
 UPDATE store_cms_article_category SET is_show = 0 WHERE category_name='PC商城';
 
 
+ALTER TABLE store_cms_article ADD COLUMN web_site TINYINT NOT NULL DEFAULT 1 COMMENT '站点 1:海外门户 2:国内分销门户' AFTER article_id;
+
+
+
 DROP TABLE IF EXISTS `sys_pc_first_adv`;
 CREATE TABLE `sys_pc_first_adv`
 (
@@ -323,8 +327,16 @@ ALTER TABLE sys_search_log ADD COLUMN web_site TINYINT NOT NULL DEFAULT 1 COMMEN
 
 ALTER TABLE goods_search_words ADD COLUMN web_site TINYINT NOT NULL DEFAULT 1 COMMENT '站点 1:国外站 2:国内站' AFTER words_id;
 
+INSERT INTO sys_setting (name, title, value, description,type)
+SELECT CONCAT(name, '_2') AS name,
+       title,
+       value,
+       description,
+       type
+FROM sys_setting
+WHERE name = 'es_index_update_time';
 
-
+CREATE INDEX idx_goods_click_follow ON goods_extend (goods_id, click_number, follow_number)