Bläddra i källkod

fix: 修复商品名称展示

周玉环 1 dag sedan
förälder
incheckning
dc24df8a9f

+ 12 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/config/ProductConfig.java

@@ -0,0 +1,12 @@
+package com.slodon.b2b2c.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "product")
+@Data
+public class ProductConfig {
+    private String url;
+}

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

@@ -3,6 +3,7 @@ package com.slodon.b2b2c.model.goods;
 import com.slodon.b2b2c.core.constant.GoodsCategoryConst;
 import com.slodon.b2b2c.core.constant.GoodsConst;
 import com.slodon.b2b2c.core.constant.StoreTplConst;
+import com.slodon.b2b2c.core.constant.VendorConst;
 import com.slodon.b2b2c.core.exception.MallException;
 import com.slodon.b2b2c.core.response.PagerInfo;
 import com.slodon.b2b2c.core.util.AssertUtil;
@@ -17,6 +18,9 @@ import com.slodon.b2b2c.goods.example.GoodsExtendExample;
 import com.slodon.b2b2c.goods.pojo.Goods;
 import com.slodon.b2b2c.goods.pojo.GoodsCategory;
 import com.slodon.b2b2c.goods.pojo.GoodsExtend;
+import com.slodon.b2b2c.model.seller.VendorModel;
+import com.slodon.b2b2c.seller.example.VendorExample;
+import com.slodon.b2b2c.seller.pojo.Vendor;
 import com.slodon.b2b2c.starter.mq.entity.MessageSendVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
@@ -53,6 +57,10 @@ public class GoodsModel {
     private StringRedisTemplate stringRedisTemplate;
     @Resource
     private GoodsCategoryReadMapper goodsCategoryReadMapper;
+    @Resource
+    private ProductModel productModel;
+    @Resource
+    private VendorModel vendorModel;
 
     /**
      * 新增商品公共信息表(SPU)
@@ -243,9 +251,24 @@ public class GoodsModel {
             // 立即上架待审核的商品 状态 改为GOODS_STATE_UPPER
             goodsUpdate.setState(GoodsConst.GOODS_STATE_UPPER);
             example.setState(GoodsConst.GOODS_STATE_SELL_NOW_TO_AUDIT);
+
+            //查出立即上架待审核的商品列表
+            List<Goods> goodsList =goodsReadMapper.listByExample(example);
+
             goodsUpdate.setOnlineTime(new Date());
             goodsUpdate.setUpdateTime(new Date());
             number += goodsWriteMapper.updateByExampleSelective(goodsUpdate, example);
+
+            goodsList.forEach(goods -> {
+                VendorExample vendorExample = new VendorExample();
+                vendorExample.setStoreId(goods.getStoreId());
+                vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+                List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
+                AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+                //设置状态为上架
+                goods.setState(GoodsConst.GOODS_STATE_UPPER);
+                productModel.upsertProduct(goods, vendorList.get(0));
+            });
         }
         return number;
     }

+ 46 - 2
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/goods/GoodsSellerModel.java

@@ -1,5 +1,7 @@
 package com.slodon.b2b2c.model.goods;
 
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.slodon.b2b2c.core.constant.*;
 import com.slodon.b2b2c.core.uid.GoodsIdGenerator;
@@ -27,8 +29,10 @@ import com.slodon.b2b2c.goods.pojo.*;
 import com.slodon.b2b2c.member.example.GoodsAnnexExample;
 import com.slodon.b2b2c.model.seller.StoreModel;
 import com.slodon.b2b2c.model.seller.StoreNameModel;
+import com.slodon.b2b2c.model.seller.VendorModel;
 import com.slodon.b2b2c.seller.example.StoreLabelBindGoodsExample;
 import com.slodon.b2b2c.seller.example.StoreNameExample;
+import com.slodon.b2b2c.seller.example.VendorExample;
 import com.slodon.b2b2c.seller.pojo.*;
 import com.slodon.b2b2c.system.pojo.SysSeo;
 import io.swagger.annotations.ApiModelProperty;
@@ -111,6 +115,9 @@ public class GoodsSellerModel {
     @Resource
     private StoreNameModel storeNameModel;
 
+    @Resource
+    private VendorModel vendorModel;
+
     //region 发布商品
 
     /**
@@ -152,6 +159,9 @@ public class GoodsSellerModel {
         //-保存商品图片表
         this.insertGoodsPicture(insertDTO.getSpecInfoList(), insertDTO.getImageList(), goods, vendor);
 
+        //三方产品创建/更新
+        productModel.upsertProduct(goods, vendor);
+
         //-保存新的商品附件表(goods_annex) insertDTO.getGoodsAnnexList()拿到前台的获取到的附件名称/附件路径的list
         this.insertGoodsAnnex(insertDTO.getGoodsAnnexList(),goods,vendor);
 
@@ -632,6 +642,7 @@ public class GoodsSellerModel {
             this.updateGoodsAnnex(insertDTO.getGoodsAnnexList(),updateGoods,vendor);
 //        }
 
+         productModel.upsertProduct(updateGoods, vendor);
 
         //-保存商品绑定店铺内部分类表
         this.updateGoodsBindStoreInnerLabels(insertDTO.getStoreInnerLabelList(), updateGoods.getGoodsId(), vendor);
@@ -1127,7 +1138,18 @@ public class GoodsSellerModel {
         example.setGoodsIdIn(goodsIds);
         example.setStateIn(GoodsConst.GOODS_STATE_WAREHOUSE_NO_AUDIT + "," + GoodsConst.GOODS_STATE_WAREHOUSE_AUDIT_PASS + "," + GoodsConst.GOODS_STATE_LOWER_BY_STORE);
         example.setStoreId(storeId);
-        return goodsModel.updateGoodsByExample(goodsUpdate, example);
+        List<Goods> goodsList = goodsModel.getGoodsList(example, null);
+        int num = goodsModel.updateGoodsByExample(goodsUpdate, example);
+        goodsList.forEach(goods -> {
+            VendorExample vendorExample = new VendorExample();
+            vendorExample.setStoreId(goods.getStoreId());
+            vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+            List<Vendor> vendorList  =vendorModel.getVendorList(vendorExample, null);
+            AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+            goods.setState(GoodsConst.GOODS_STATE_UPPER);
+            productModel.upsertProduct(goods, vendorList.get(0));
+        });
+        return num;
     }
 
     /**
@@ -1145,8 +1167,17 @@ public class GoodsSellerModel {
         example.setGoodsIdIn(goodsIds);
         example.setState(GoodsConst.GOODS_STATE_UPPER);
         example.setStoreId(storeId);
+        List<Goods> goodsList = goodsModel.getGoodsList(example, null);
         int number = goodsModel.updateGoodsByExample(goodsUpdate, example);
-
+        goodsList.forEach(goods -> {
+            VendorExample vendorExample = new VendorExample();
+            vendorExample.setStoreId(goods.getStoreId());
+            vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+            List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
+            AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+            goods.setState(GoodsConst.GOODS_STATE_LOWER_BY_STORE);
+            productModel.upsertProduct(goods, vendorList.get(0));
+        });
         return number;
     }
 
@@ -1169,7 +1200,20 @@ public class GoodsSellerModel {
         example.setGoodsIdIn(goodsIds);
 //        example.setStateIn(GoodsConst.GOODS_STATE_WAREHOUSE_NO_AUDIT + "," + GoodsConst.GOODS_STATE_LOWER_BY_STORE + "," + GoodsConst.GOODS_STATE_LOWER_BY_SYSTEM);
         example.setStoreId(storeId);
+        //先查询出待删除的商品列表
+        List<Goods> goodsList = goodsModel.getGoodsList(example, null);
+
         number = goodsModel.updateGoodsByExample(goodsUpdate, example);
+        goodsList.forEach(goods -> {
+            VendorExample vendorExample = new VendorExample();
+            vendorExample.setStoreId(storeId);
+            vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+            List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
+            AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+            //设置状态为删除
+            goods.setState(GoodsConst.GOODS_STATE_DELETE);
+            productModel.upsertProduct(goods, vendorList.get(0));
+        });
         return number;
     }
 

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

@@ -1,14 +1,24 @@
 package com.slodon.b2b2c.model.goods;
 
+import cn.hutool.json.JSONObject;
+import com.slodon.b2b2c.config.ProductConfig;
 import com.slodon.b2b2c.core.constant.GoodsConst;
 import com.slodon.b2b2c.core.exception.MallException;
 import com.slodon.b2b2c.core.response.PagerInfo;
 import com.slodon.b2b2c.core.util.AssertUtil;
+import com.slodon.b2b2c.core.util.FileUrlUtil;
+import com.slodon.b2b2c.core.util.HttpClientUtil;
 import com.slodon.b2b2c.core.util.StringUtil;
 import com.slodon.b2b2c.dao.read.goods.ProductReadMapper;
 import com.slodon.b2b2c.dao.write.goods.ProductWriteMapper;
+import com.slodon.b2b2c.goods.example.GoodsPictureExample;
 import com.slodon.b2b2c.goods.example.ProductExample;
+import com.slodon.b2b2c.goods.pojo.Goods;
+import com.slodon.b2b2c.goods.pojo.GoodsPicture;
 import com.slodon.b2b2c.goods.pojo.Product;
+import com.slodon.b2b2c.investment.constant.InvestmentConst;
+import com.slodon.b2b2c.model.seller.VendorModel;
+import com.slodon.b2b2c.seller.pojo.Vendor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -17,6 +27,7 @@ import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 @Component
@@ -28,6 +39,16 @@ public class ProductModel {
     @Resource
     private ProductWriteMapper productWriteMapper;
 
+    @Resource
+    private VendorModel vendorModel;
+
+    @Resource
+    private GoodsPictureModel goodsPictureModel;
+
+    @Resource
+    private ProductConfig productConfig;
+
+
     /**
      * 新增商品表(SKU),指定特定规格
      *
@@ -166,4 +187,53 @@ public class ProductModel {
         }
         return productList;
     }
+
+
+    @Transactional(rollbackFor = Exception.class)
+    public void upsertProduct(Goods goods, Vendor vendor) {
+        //查询商户获取token
+        vendor = vendorModel.getVendorByVendorId(vendor.getVendorId());
+
+        //查询货品
+        ProductExample productExample = new ProductExample();
+        productExample.setGoodsId(goods.getGoodsId());
+        List<Product> products = productReadMapper.listByExample(productExample);
+        AssertUtil.isTrue(CollectionUtils.isEmpty(products), "商品不存在");
+
+        //查询货品图片
+        GoodsPictureExample goodsPictureExample = new GoodsPictureExample();
+        goodsPictureExample.setGoodsId(goods.getGoodsId());
+        goodsPictureExample.setOrderBy("picture_id asc");
+        List<GoodsPicture> goodsPictureList = goodsPictureModel.getGoodsPictureList(goodsPictureExample, null);
+
+        String regex = ".*token=([^&]*).*";
+        HashMap<String, String> headers = new HashMap<>();
+        headers.put(InvestmentConst.CONTENT_TYPE, InvestmentConst.APPLICATION_JSON);
+        if (!StringUtil.isBlank(vendor.getStoreUrlBy9710())){
+            headers.put(InvestmentConst.AUTHORIZATION, "Token " + vendor.getStoreUrlBy9710().replaceFirst(regex, "$1"));
+        }
+
+        JSONObject param = new JSONObject();
+
+        //目前只有单规格
+        param.set("productId", products.get(0).getProductId().toString());
+        param.set("authName", vendor.getVendorName());
+        param.set("name", goods.getGoodsName());
+        param.set("cn_name", goods.getGoodsNameCn());
+        param.set("sku", goods.getGoodsId().toString());
+        param.set("active", GoodsConst.GOODS_STATE_UPPER == goods.getState());
+        List<String> image_urls = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(goodsPictureList)) {
+            goodsPictureList.forEach(goodsPicture -> {
+                image_urls.add(FileUrlUtil.getFileUrl(goodsPicture.getImagePath(), null));
+            });
+        }
+        param.set("image_urls", image_urls);
+        try {
+            HttpClientUtil.httpPost201(productConfig.getUrl(), param.toString(), headers);
+        } catch (Exception e) {
+            log.error("调用第三方接口创建/更新商品失败 -请求接口: {}, 请求参数: {},请求头: {}, 错误信息: {}", productConfig.getUrl(), param.toString(), com.alibaba.fastjson.JSONObject.toJSONString(headers), e.getMessage(), e);
+            throw new MallException("创建/更新商品失败,请重试");
+        }
+    }
 }

+ 17 - 0
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/model/seller/StoreModel.java

@@ -27,6 +27,7 @@ import com.slodon.b2b2c.investment.constant.InvestmentConst;
 import com.slodon.b2b2c.member.example.MemberFollowStoreExample;
 import com.slodon.b2b2c.member.pojo.MemberFollowStore;
 import com.slodon.b2b2c.model.goods.GoodsModel;
+import com.slodon.b2b2c.model.goods.ProductModel;
 import com.slodon.b2b2c.model.system.TplPcMallDecoModel;
 import com.slodon.b2b2c.seller.dto.*;
 import com.slodon.b2b2c.seller.example.*;
@@ -122,6 +123,12 @@ public class StoreModel {
     @Resource
     private StoreConfig storeConfig;
 
+    @Resource
+    private VendorModel vendorModel;
+
+    @Resource
+    private ProductModel productModel;
+
     /**
      * 新增店铺表
      *
@@ -963,6 +970,16 @@ public class StoreModel {
             goodsExtend.setOfflineComment("平台后台操作");
             goodsExtendWriteMapper.updateByExampleSelective(goodsExtend, extendExample);
 
+            list.forEach(goods1 -> {
+                VendorExample vendorExample = new VendorExample();
+                vendorExample.setStoreId(storeId);
+                vendorExample.setIsStoreAdmin(VendorConst.IS_STORE_ADMIN_1);
+                List<Vendor> vendorList = vendorModel.getVendorList(vendorExample, null);
+                AssertUtil.isTrue(CollectionUtils.isEmpty(vendorList), "获取店铺信息失败");
+                goods1.setState(GoodsConst.GOODS_STATE_LOWER_BY_SYSTEM);
+                productModel.upsertProduct(goods1, vendorList.get(0));
+            });
+
             //直播模块开启,解除视频带货绑定会员
             if ("1".equals(stringRedisTemplate.opsForValue().get("live_switch"))) {
                 rabbitTemplate.convertAndSend(MQ_EXCHANGE_NAME, MQ_QUEUE_NAME_UNBIND_VIDEO_MEMBER, storeId);

+ 5 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/application-dev.yml

@@ -71,6 +71,11 @@ dify:
   apiKey: dataset-t2bq146uJwJj00kxVyfOOWua
   difyRoute: http://52.42.176.27/v1/datasets/
 
+#创建/获取商户订单URL
 store:
   url: https://xinke.sutextech.com/api/get_store_urls/
   token: Token 7858e42dcc68d1bb090438a0baab69b085f4b57e
+
+#产品创建/更新
+product:
+  url: https://xinke.sutextech.com/api/products/upsert/

+ 5 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/application-prod.yml

@@ -70,6 +70,11 @@ dify:
   apiKey: dataset-t2bq146uJwJj00kxVyfOOWua
   difyRoute: http://52.42.176.27/v1/datasets/
 
+#创建/获取商户订单URL
 store:
   url: https://xinke.sutextech.com/api/get_store_urls/
   token: Token 7858e42dcc68d1bb090438a0baab69b085f4b57e
+
+#产品创建/更新
+product:
+  url: https://xinke.sutextech.com/api/products/upsert/

+ 5 - 0
xinkeaboard-server/b2b2c-web/src/main/resources/application-test.yml

@@ -70,6 +70,11 @@ dify:
   apiKey: dataset-t2bq146uJwJj00kxVyfOOWua
   difyRoute: http://52.42.176.27/v1/datasets/
 
+#创建/获取商户订单URL
 store:
   url: https://xinke.sutextech.com/api/get_store_urls/
   token: Token 7858e42dcc68d1bb090438a0baab69b085f4b57e
+
+#产品创建/更新
+product:
+  url: https://xinke.sutextech.com/api/products/upsert/