Bläddra i källkod

Merge remote-tracking branch 'origin/master'

hurx 18 timmar sedan
förälder
incheckning
5add9aed60
16 ändrade filer med 339 tillägg och 8 borttagningar
  1. 83 1
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/ZhongChePushController.java
  2. 1 1
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/handler/impl/ZhongChePushStrategy.java
  3. 4 2
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/service/IExternalProductService.java
  4. 16 3
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/service/impl/ExternalProductServiceImpl.java
  5. 10 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProductBase.java
  6. 10 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProductBaseAudit.java
  7. 16 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProductPriceInventory.java
  8. 46 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ProductBaseAuditBo.java
  9. 26 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ProductBaseBo.java
  10. 17 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ProductPriceInventoryBo.java
  11. 10 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/ProductBaseAuditVo.java
  12. 25 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/ProductBaseVo.java
  13. 18 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/ProductPriceInventoryVo.java
  14. 1 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteProductServiceImpl.java
  15. 47 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseAuditServiceImpl.java
  16. 9 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseServiceImpl.java

+ 83 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/ZhongChePushController.java

@@ -7,6 +7,7 @@ import cn.hutool.core.util.ReUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -25,8 +26,10 @@ import org.dromara.external.api.zhongche.domain.bo.*;
 import org.dromara.external.api.zhongche.domain.vo.*;
 import org.dromara.external.api.zhongche.domain.Catalog;
 import org.dromara.external.controller.zhongche.handle.MallMessageDispatcher;
+import org.dromara.external.domain.ExternalItem;
 import org.dromara.external.domain.ExternalProduct;
 import org.dromara.external.domain.ExternalProductCategory;
+import org.dromara.external.service.IExternalItemService;
 import org.dromara.external.service.IExternalProductCategoryService;
 import org.dromara.external.service.IExternalProductService;
 import org.dromara.external.util.SM2SignatureUtils;
@@ -73,6 +76,8 @@ public class ZhongChePushController {
 
     private final IExternalProductService externalProductService;
 
+    private final IExternalItemService externalItemService;
+
     //电商私钥
     private final static String DEVELOPER_PRIVATE_KEY = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgQu0H97EPqkgz1YS5LkzZNmkG3mS5Er8rJ2LSoJtuOlGgCgYIKoEcz1UBgi2hRANCAARP6NYwTHpW2QTL8A2f2hpgunEpDVkJBhErBQPLqNS/Si5Q+9I9wUpCYdk1EvB5Hw6yzkE4bYk5IZM1j+/SnNFn";
     //企采公钥
@@ -258,6 +263,24 @@ public class ZhongChePushController {
         return ZCR.ok(respDataBase64, respSign);
     }
 
+    @GetMapping("testQueryGoodsStock")
+    public R<List<Stocks>> testQueryGoodsStock() {
+        AreaStockBo areaStockBo = new AreaStockBo();
+        areaStockBo.setAreaId("1");
+        List<Goods> goods = new ArrayList<>();
+        Goods goods1 = new Goods();
+        goods1.setGoodsId("002171765");
+        goods1.setGoodsNum(2);
+        goods.add(goods1);
+        Goods goods2 = new Goods();
+        goods2.setGoodsId("002171772");
+        goods2.setGoodsNum(2);
+        goods.add(goods2);
+        areaStockBo.setGoods(goods);
+        List<Stocks> stocks = queryGoodsStock(areaStockBo);
+        return R.ok(stocks);
+    }
+
     /**
      * 核心业务:查询商品库存,映射文档返回格式(包含库存状态、剩余数量等规则)
      */
@@ -271,8 +294,67 @@ public class ZhongChePushController {
             goodsMap.put(goodsId, goodsNum); // 对应Dubbo服务要求:key=商品ID,value=所需库存
         }
 
+
         // 3. 调用Dubbo服务,获取库存结果(你的remoteProductService)
-        StocksResultDto stocksResultDto = remoteProductService.queryProductStock(goodsMap, areaId);
+        StocksResultDto stocksResultDto = new StocksResultDto();
+        stocksResultDto.setStocks(new ArrayList<>());
+
+        // 2. 提取商品ID列表,准备查询库存
+        List<String> goodsIds = goodsMap.keySet().stream().collect(Collectors.toList());
+        ExternalItem one = externalItemService.getOne(Wrappers.lambdaQuery(ExternalItem.class).eq(ExternalItem::getItemKey, "zhongche").last("LIMIT 1"));
+        List<ExternalProduct> externalProducts = externalProductService.queryProductStock(one.getId(),goodsIds);
+        // 5. 遍历查询结果,封装返回数据
+        externalProducts.forEach(product -> {
+            // 5.1 提取商品核心信息
+            String productIdStr = product.getProductNo();
+            Integer nowInventory = product.getAvailableInventory();
+            Integer goodsNum = goodsMap.get(productIdStr); // 入参的所需库存数量
+            //可用库存
+
+
+            // 5.2 初始化单个商品库存结果
+            StocksResult stocksResult = new StocksResult();
+            stocksResult.setGoodsId(productIdStr);
+            stocksResult.setAreaId(areaId == null ? "" : areaId); // 地区id为空时赋值空字符串,保证格式统一
+
+            if (nowInventory > 0){
+                //有货
+                stocksResult.setStockState("1");
+                stocksResult.setStockStateDesc("下单立即发货");
+                if (goodsNum < 50){
+                    stocksResult.setRemainNum(nowInventory.intValue());
+                }else if (goodsNum <= 100){
+                    stocksResult.setRemainNum(-1);
+                }else {
+                    stocksResult.setRemainNum(goodsNum);
+                }
+            }else {
+                //无货
+                stocksResult.setStockState("5");
+                stocksResult.setStockStateDesc("无货");
+                stocksResult.setRemainNum(-999);
+            }
+            // 5.6 添加到结果列表(已提前初始化,无需判断null)
+            stocksResultDto.getStocks().add(stocksResult);
+        });
+
+        // 6. 补充:处理「未查询到库存」的商品(即 goods 中有,但 productPriceInventories 中没有的商品)
+        // 提取已查询到的商品ID
+        Set<String> queriedGoodsIds = externalProducts.stream()
+            .map(p -> p.getProductNo())
+            .collect(Collectors.toSet());
+        // 遍历入参goods,补充未查询到的商品,返回 remainNum=-1
+        goodsMap.keySet().stream()
+            .filter(goodsId -> !queriedGoodsIds.contains(goodsId))
+            .forEach(goodsId -> {
+                StocksResult noStockResult = new StocksResult();
+                noStockResult.setGoodsId(goodsId);
+                noStockResult.setAreaId(areaId == null ? "" : areaId);
+                noStockResult.setStockState(""); // 未查询到,库存状态为空
+                noStockResult.setStockStateDesc("未查询到商品库存");
+                noStockResult.setRemainNum(-1); // 文档规定:未查询到返回 -1
+                stocksResultDto.getStocks().add(noStockResult);
+            });
 
         List<Stocks> goodsStockRespList = new ArrayList<>();
         if (stocksResultDto != null || stocksResultDto.getStocks() != null || !stocksResultDto.getStocks().isEmpty()) {

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/handler/impl/ZhongChePushStrategy.java

@@ -340,7 +340,7 @@ public class ZhongChePushStrategy implements ProductPushStrategy {
                 goodsImageUpdateItem.setUpc(item.getBarCoding());
                 goodsImageUpdateItem.setMoq(BigDecimal.valueOf(item.getMinOrderQuantity()));
                 goodsImageUpdateItem.setIsSelfOperated(1);
-                goodsImageUpdateItem.setGoodsUrl(item.getReferenceLink());
+                goodsImageUpdateItem.setGoodsUrl("https://item.xiaoluwebsite.xyz/item?productNo="+item.getProductNo());
                 goodsImageUpdateItem.setThirdUrl(item.getReferenceLink());
                 goodsImageUpdateItem.setTaxCode("107022301");
                 goodsImageUpdateItem.setTax(BigDecimal.valueOf(0.13));

+ 4 - 2
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/service/IExternalProductService.java

@@ -108,6 +108,8 @@ public interface IExternalProductService extends IService<ExternalProduct> {
     boolean saveExternalBatch(Long itemId, List<ProductVo> boList);
 
 
-
-
+    /**
+    * 获取商品库存
+    * */
+    List<ExternalProduct> queryProductStock(Long itemId,List<String> goodsIds);
 }

+ 16 - 3
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/service/impl/ExternalProductServiceImpl.java

@@ -256,10 +256,10 @@ public class ExternalProductServiceImpl  extends ServiceImpl<ExternalProductMapp
         if (ObjectUtil.isNotEmpty(productIds)) {
             //获取需要推送的商品数据
             List<ProductVo> productDetails = remoteProductService.getProductDetails(productIds);
-            strategy.updatePrice(itemId,productDetails);
             strategy.updateDetail(itemId,productDetails);
-            strategy.updateProperties(itemId,productDetails);
-            strategy.updateImages(itemId,productDetails);
+//            strategy.updatePrice(itemId,productDetails);
+//            strategy.updateProperties(itemId,productDetails);
+//            strategy.updateImages(itemId,productDetails);
         }
         return baseMapper.update(Wrappers.lambdaUpdate(ExternalProduct.class)
             .set(ExternalProduct::getPushStatus, 1)
@@ -454,4 +454,17 @@ public class ExternalProductServiceImpl  extends ServiceImpl<ExternalProductMapp
         }
         return true;
     }
+
+    /**
+     * 获取商品库存
+     *
+     * @param goodsIds
+     */
+    @Override
+    public List<ExternalProduct> queryProductStock(Long itemId,List<String> goodsIds) {
+        return baseMapper.selectList(new LambdaQueryWrapper<ExternalProduct>()
+            .eq(ExternalProduct::getItemId, itemId)
+            .in(ExternalProduct::getProductNo, goodsIds)
+        );
+    }
 }

+ 10 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProductBase.java

@@ -34,6 +34,16 @@ public class ProductBase extends TenantEntity {
      */
     private String productNo;
 
+    /**
+     * 创建人类型 0=默认,1=供应商,2=伙伴商
+     */
+    private Integer createByType;
+
+    /**
+     * 创建者id,根据类型不同存的不同
+     */
+    private Long createById;
+
     /**
      * 项目名称
      */

+ 10 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProductBaseAudit.java

@@ -34,6 +34,16 @@ public class ProductBaseAudit extends TenantEntity {
      */
     private Long productId;
 
+    /**
+     * 创建人类型 0=默认,1=供应商,2=伙伴商
+     */
+    private Integer createByType;
+
+    /**
+     * 创建者id,根据类型不同存的不同
+     */
+    private Long createById;
+
     /**
      * 审核状态 0=待提交,1=待审核,2=审核通过,3=审核驳回,4=营销审核,5运营审核
      */

+ 16 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProductPriceInventory.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import java.math.BigDecimal;
 
 import java.io.Serial;
+import java.util.Date;
 
 /**
  * 产品价格与库存信息对象 product_price_inventory
@@ -73,6 +74,21 @@ public class ProductPriceInventory extends TenantEntity {
      */
     private Long minOrderQuantity;
 
+    /**
+     * 供应价
+     */
+    private BigDecimal supplyPrice;
+
+    /**
+     * 供应有效时间
+     */
+    private Date supplyValidityPeriod;
+
+    /**
+     * 是否包邮 0 不包邮,1包邮
+     */
+    private Integer supplyPostStatus;
+
     /**
      * 税率
      */

+ 46 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ProductBaseAuditBo.java

@@ -1,5 +1,8 @@
 package org.dromara.product.domain.bo;
 
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
 import org.dromara.product.domain.ProductBaseAudit;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.common.core.validate.AddGroup;
@@ -33,6 +36,16 @@ public class ProductBaseAuditBo extends BaseEntity {
     //@NotNull(message = "商品id不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long productId;
 
+    /**
+     * 创建人类型 0=默认,1=供应商,2=伙伴商
+     */
+    private Integer createByType;
+
+    /**
+     * 创建者id,根据类型不同存的不同
+     */
+    private Long createById;
+
     /**
      * 审核状态 0=待提交,1=待审核,2=审核通过,3=审核驳回,4=营销审核,5运营审核
      */
@@ -75,5 +88,38 @@ public class ProductBaseAuditBo extends BaseEntity {
     //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
+    /**
+     * 产品编号
+     */
+    private String productNo;
+
+    /**
+     * 项目名称
+     */
+    private String itemName;
 
+    /**
+     * 品牌id
+     */
+    private Long brandId;
+
+    /**
+     * 是否自营(1=是,0=否)
+     */
+    private Integer isSelf;
+
+    /**
+     * 顶级分类id
+     */
+    private Long topCategoryId;
+
+    /**
+     * 中级分类id
+     */
+    private Long mediumCategoryId;
+
+    /**
+     * 底层分类id
+     */
+    private Long bottomCategoryId;
 }

+ 26 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ProductBaseBo.java

@@ -14,6 +14,7 @@ import org.dromara.common.translation.constant.TransConstant;
 import org.dromara.product.domain.ProductClassificationDiy;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -43,6 +44,16 @@ public class ProductBaseBo extends BaseEntity {
     //@NotBlank(message = "产品编号不能为空", groups = {AddGroup.class, EditGroup.class})
     private String productNo;
 
+    /**
+     * 创建人类型 0=默认,1=供应商,2=伙伴商
+     */
+    private Integer createByType;
+
+    /**
+     * 创建者id,根据类型不同存的不同
+     */
+    private Long createById;
+
     /**
      * 产品编号
      */
@@ -289,6 +300,21 @@ public class ProductBaseBo extends BaseEntity {
      * 暂估采购价
      */
     private java.math.BigDecimal estimatedPurchasePrice;
+
+    /**
+     * 供应价
+     */
+    private BigDecimal supplyPrice;
+
+    /**
+     * 供应有效时间
+     */
+    private Date supplyValidityPeriod;
+
+    /**
+     * 是否包邮 0 不包邮,1包邮
+     */
+    private Integer supplyPostStatus;
     /**
      * 总库存
      */

+ 17 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ProductPriceInventoryBo.java

@@ -10,6 +10,8 @@ import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
 import java.math.BigDecimal;
 
+import java.util.Date;
+
 /**
  * 产品价格与库存信息业务对象 product_price_inventory
  *
@@ -76,6 +78,21 @@ public class ProductPriceInventoryBo extends BaseEntity {
      */
     private Long minOrderQuantity;
 
+    /**
+     * 供应价
+     */
+    private BigDecimal supplyPrice;
+
+    /**
+     * 供应有效时间
+     */
+    private Date supplyValidityPeriod;
+
+    /**
+     * 是否包邮 0 不包邮,1包邮
+     */
+    private Integer supplyPostStatus;
+
     /**
      * 税率
      */

+ 10 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/ProductBaseAuditVo.java

@@ -42,6 +42,16 @@ public class ProductBaseAuditVo implements Serializable {
     @ExcelProperty(value = "商品id")
     private Long productId;
 
+    /**
+     * 创建人类型 0=默认,1=供应商,2=伙伴商
+     */
+    private Integer createByType;
+
+    /**
+     * 创建者id,根据类型不同存的不同
+     */
+    private Long createById;
+
     /**
      * 审核状态 0=待提交,1=待审核,2=审核通过,3=审核驳回,4=营销审核,5运营审核
      */

+ 25 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/ProductBaseVo.java

@@ -46,6 +46,16 @@ public class ProductBaseVo implements Serializable {
     @ExcelProperty(value = "产品编号")
     private String productNo;
 
+    /**
+     * 创建人类型 0=默认,1=供应商,2=伙伴商
+     */
+    private Integer createByType;
+
+    /**
+     * 创建者id,根据类型不同存的不同
+     */
+    private Long createById;
+
     /**
      * 产品名称
      */
@@ -219,6 +229,21 @@ public class ProductBaseVo implements Serializable {
     @ExcelProperty(value = "采购价格")
     private BigDecimal purchasingPrice;
 
+    /**
+     * 供应价
+     */
+    private BigDecimal supplyPrice;
+
+    /**
+     * 供应有效时间
+     */
+    private Date supplyValidityPeriod;
+
+    /**
+     * 是否包邮 0 不包邮,1包邮
+     */
+    private Integer supplyPostStatus;
+
 
     /**
     * 暂估毛利率

+ 18 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/ProductPriceInventoryVo.java

@@ -89,6 +89,24 @@ public class ProductPriceInventoryVo implements Serializable {
     @ExcelProperty(value = "最小起订数量")
     private Long minOrderQuantity;
 
+    /**
+     * 供应价
+     */
+    @ExcelProperty(value = "供应价")
+    private BigDecimal supplyPrice;
+
+    /**
+     * 供应有效时间
+     */
+    @ExcelProperty(value = "供应有效时间")
+    private Date supplyValidityPeriod;
+
+    /**
+     * 是否包邮 0 不包邮,1包邮
+     */
+    @ExcelProperty(value = "是否包邮")
+    private Integer supplyPostStatus;
+
     /**
      * 税率
      */

+ 1 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteProductServiceImpl.java

@@ -207,6 +207,7 @@ public class RemoteProductServiceImpl implements RemoteProductService {
     }
 
 
+
     @Override
     public StocksResultDto queryProductStock(Map<String, Integer> goods, String areaId) {
         // 1. 入参防护:避免goods为null导致后续异常

+ 47 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseAuditServiceImpl.java

@@ -2,6 +2,7 @@ package org.dromara.product.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -11,6 +12,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.NumberGeneratorUtil;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -22,6 +24,7 @@ import org.dromara.product.domain.bo.ProductBaseBo;
 import org.dromara.product.domain.vo.*;
 import org.dromara.product.mapper.ProductBaseAuditMapper;
 import org.dromara.product.service.*;
+import org.dromara.system.api.model.LoginUser;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -135,6 +138,37 @@ public class ProductBaseAuditServiceImpl extends ServiceImpl<ProductBaseAuditMap
         lqw.eq(StringUtils.isNotBlank(bo.getProductData()), ProductBaseAudit::getProductData, bo.getProductData());
         lqw.eq(bo.getType() != null, ProductBaseAudit::getType, bo.getType());
         lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), ProductBaseAudit::getPlatformCode, bo.getPlatformCode());
+        
+        // 对 productData JSON 字段进行查询
+        // 产品编号
+        if (StringUtils.isNotBlank(bo.getProductNo())) {
+            lqw.apply("JSON_UNQUOTE(JSON_EXTRACT(product_data, '$.productNo')) LIKE {0}", "%" + bo.getProductNo() + "%");
+        }
+        // 项目名称
+        if (StringUtils.isNotBlank(bo.getItemName())) {
+            lqw.apply("JSON_UNQUOTE(JSON_EXTRACT(product_data, '$.itemName')) LIKE {0}", "%" + bo.getItemName() + "%");
+        }
+        // 品牌ID
+        if (bo.getBrandId() != null) {
+            lqw.apply("JSON_EXTRACT(product_data, '$.brandId') = {0}", bo.getBrandId());
+        }
+        // 是否自营
+        if (bo.getIsSelf() != null) {
+            lqw.apply("JSON_EXTRACT(product_data, '$.isSelf') = {0}", bo.getIsSelf());
+        }
+        // 顶级分类ID
+        if (bo.getTopCategoryId() != null) {
+            lqw.apply("JSON_EXTRACT(product_data, '$.topCategoryId') = {0}", bo.getTopCategoryId());
+        }
+        // 中级分类ID
+        if (bo.getMediumCategoryId() != null) {
+            lqw.apply("JSON_EXTRACT(product_data, '$.mediumCategoryId') = {0}", bo.getMediumCategoryId());
+        }
+        // 底层分类ID
+        if (bo.getBottomCategoryId() != null) {
+            lqw.apply("JSON_EXTRACT(product_data, '$.bottomCategoryId') = {0}", bo.getBottomCategoryId());
+        }
+        
         return lqw;
     }
 
@@ -147,6 +181,19 @@ public class ProductBaseAuditServiceImpl extends ServiceImpl<ProductBaseAuditMap
     @Override
     public Boolean insertByBo(ProductBaseAuditBo bo) {
         ProductBaseAudit add = MapstructUtils.convert(bo, ProductBaseAudit.class);
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        if(ObjectUtil.isNotEmpty(loginUser.getSupplierId())){
+            add.setCreateById(loginUser.getSupplierId());
+            add.setCreateByType(1);
+        }
+        if(ObjectUtil.isNotEmpty(loginUser.getPartnerId())){
+            add.setCreateById(loginUser.getPartnerId());
+            add.setCreateByType(2);
+        }
+        if(ObjectUtil.isEmpty(loginUser.getSupplierId()) && ObjectUtil.isEmpty(loginUser.getPartnerId())){
+            add.setCreateById(loginUser.getUserId());
+            add.setCreateByType(0);
+        }
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {

+ 9 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseServiceImpl.java

@@ -282,6 +282,9 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
             vo.setTotalInventory(priceInventory.getTotalInventory());
             vo.setNowInventory(priceInventory.getNowInventory());
             vo.setVirtualInventory(priceInventory.getVirtualInventory());
+            vo.setSupplyPrice(priceInventory.getSupplyPrice());
+            vo.setSupplyValidityPeriod(priceInventory.getSupplyValidityPeriod());
+            vo.setSupplyPostStatus(priceInventory.getSupplyPostStatus());
         }
 
         // 4. 查询并填充商品属性(product_classification表)
@@ -810,6 +813,9 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
         priceInventory.setTaxRate(bo.getTaxRate());
         priceInventory.setMinOrderQuantity(bo.getMinOrderQuantity());
         priceInventory.setTaxationId(bo.getTaxationId());
+        priceInventory.setSupplyPrice(bo.getSupplyPrice());
+        priceInventory.setSupplyValidityPeriod(bo.getSupplyValidityPeriod());
+        priceInventory.setSupplyPostStatus(bo.getSupplyPostStatus());
         // 设置默认库存值
         priceInventory.setTotalInventory(0L);
         priceInventory.setNowInventory(0L);
@@ -904,7 +910,9 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
             if(bo.getTotalInventory() != null) existing.setTotalInventory(bo.getVirtualInventory()+existing.getNowInventory());
             if(bo.getNowInventory() != null) existing.setNowInventory(bo.getNowInventory());
             if(bo.getVirtualInventory() != null) existing.setVirtualInventory(bo.getVirtualInventory());
-
+            if (bo.getSupplyPrice() != null) existing.setSupplyPrice(bo.getSupplyPrice());
+            if (bo.getSupplyValidityPeriod() != null) existing.setSupplyValidityPeriod(bo.getSupplyValidityPeriod());
+            if (bo.getSupplyPostStatus() != null) existing.setSupplyPostStatus(bo.getSupplyPostStatus());
             priceInventoryMapper.updateById(existing);
         } else {
             // 创建新记录