Explorar o código

实物商品库存关联修改

zoujiajian %!s(int64=2) %!d(string=hai) anos
pai
achega
ea40556d62

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/mapper/stock/GoodsDonStockRecordMapper.java

@@ -2,10 +2,15 @@ package com.cyksj.mapper.stock;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.entity.GoodsDonStockRecord;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * @author chan
  * @date 2022/12/6 4:13 PM
  */
 public interface GoodsDonStockRecordMapper extends BaseMapper<GoodsDonStockRecord> {
+
+	@Select("select * from goods_don_stock_record where stock_id = #{stockId} and type = #{type} and available < num and is_undo is ${isUndo} order by stock_id limit 1")
+	GoodsDonStockRecord selectUndoRecord(@Param("stockId") Long stockId, @Param("isUndo") Boolean isUndo, @Param("type") String type);
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/stock/GoodsSkuStockRelateChangeRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.stock;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GoodsSkuStockRelateChangeRecord;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsSkuStockRelateChangeRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2023/11/2 17:34
+ */
+public interface GoodsSkuStockRelateChangeRecordMapper extends BaseMapper<GoodsSkuStockRelateChangeRecord> {
+}

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonStock.java

@@ -33,4 +33,8 @@ public class GoodsDonStock extends BaseEntity {
     @TableField(exist = false)
     private List<GoodsSkuStockRelate> relateList;
 
+    @DbIgnore
+    @TableField(exist = false)
+    private String operator;
+
 }

+ 11 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonStockRecord.java

@@ -16,13 +16,17 @@ import java.util.Date;
 @Getter
 @Setter
 @SearchBean(tables = "goods_don_stock s, goods_don_stock_record r ",
-            where = "s.id = r.stock_id "
+            where = "s.id = r.stock_id and r.is_undo is false"
 )
 public class GoodsDonStockRecord extends BaseEntity{
 
     @DbField("s.id")
     private Long stockId;
 
+    @DbField("r.id")
+    @TableField(exist = false)
+    private Long recordId;
+
     @DbField("s.title")
     @TableField(exist = false)
     private String title;
@@ -61,4 +65,10 @@ public class GoodsDonStockRecord extends BaseEntity{
     @DbField("r.created_time")
     @TableField(exist = false)
     private Date recordCreatedTime;
+
+    /**
+     * 是否撤销 默认否
+     */
+    @DbField("r.is_undo")
+    private Boolean isUndo;
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsSkuStockRelate.java

@@ -21,4 +21,6 @@ public class GoodsSkuStockRelate extends BaseEntity{
 
     private String skuTitle;
 
+    private String skuJson;
+
 }

+ 39 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsSkuStockRelateChangeRecord.java

@@ -0,0 +1,39 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsSkuStockRelateChangeRecord
+ * 创建者: JavaZou
+ * 创建时间:2023/11/2 17:32
+ */
+@Getter
+@Setter
+public class GoodsSkuStockRelateChangeRecord extends BaseEntity{
+	private Long stockId;
+
+	private Long goodsId;
+
+	private String goodsTitle;
+
+	private Long skuId;
+
+	private String skuTitle;
+
+	/**
+	 * 统一记录id
+	 */
+	private Long uniformId;
+
+	/**
+	 * 统一记录id
+	 */
+	private String type;
+
+	/**
+	 * 操作人
+	 */
+	private String operator;
+}

+ 9 - 5
netflix-dao/src/main/java/com/cyksj/model/views/StatisticsStockView.java

@@ -57,11 +57,11 @@ public class StatisticsStockView {
     @ExcelProperty("出库价值")
     private BigDecimal outPrice = BigDecimal.ZERO;
 
-    /**
-     * 不可用总数
-     */
-    @ExcelProperty("不可用总数")
-    private Integer unavailable;
+//    /**
+//     * 不可用总数
+//     */
+//    @ExcelProperty("不可用总数")
+//    private Integer unavailable;
 
     /**
      * 不可用金额
@@ -98,6 +98,10 @@ public class StatisticsStockView {
                 this.outTotal += num;
                 this.outPrice = this.outPrice.add(price);
                 break;
+            case "out":
+                this.outTotal += num;
+                this.outPrice = this.outPrice.add(price);
+                break;
             case "refund":
                 this.refundTotal += num;
                 this.refundPrice = this.refundPrice.add(price);

+ 11 - 1
netflix-service/src/main/java/com/cyksj/service/mange/stock/GoodsDonStockService.java

@@ -1,6 +1,5 @@
 package com.cyksj.service.mange.stock;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.cyksj.model.entity.GoodsDonStock;
 import com.cyksj.model.entity.GoodsDonStockRecord;
 import com.cyksj.model.request.StockUpReq;
@@ -47,4 +46,15 @@ public interface GoodsDonStockService {
      * 删除库存
      */
     void del(Long stockId);
+
+    /**
+     * 更换库存绑定商品信息
+     */
+    void updateBindGoods(GoodsDonStock stock);
+
+    /**
+     * 撤销库存变更回滚
+     */
+    void undoChange(Long recordId);
+
 }

+ 168 - 17
netflix-service/src/main/java/com/cyksj/service/mange/stock/impl/GoodsDonStockServiceImpl.java

@@ -1,18 +1,13 @@
 package com.cyksj.service.mange.stock.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.math.MathUtil;
-import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
-import com.cyksj.mapper.stock.GoodsDonStockMapper;
-import com.cyksj.mapper.stock.GoodsDonStockRecordMapper;
-import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
-import com.cyksj.mapper.stock.OrderDonStockMapper;
-import com.cyksj.model.entity.GoodsDonStock;
-import com.cyksj.model.entity.GoodsDonStockRecord;
-import com.cyksj.model.entity.GoodsSkuStockRelate;
-import com.cyksj.model.entity.OrderDonStock;
+import com.cyksj.common.snowflake.Sequence;
+import com.cyksj.mapper.stock.*;
+import com.cyksj.model.entity.*;
 import com.cyksj.model.request.StockUpReq;
 import com.cyksj.service.mange.stock.GoodsDonStockService;
 import lombok.RequiredArgsConstructor;
@@ -20,9 +15,10 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author chan
@@ -41,6 +37,12 @@ public class GoodsDonStockServiceImpl implements GoodsDonStockService {
 
     private final GoodsSkuStockRelateMapper skuStockRelateMapper;
 
+    private final GoodsSkuStockRelateChangeRecordMapper relateChangeRecordMapper;
+
+    private static final Sequence SEQUENCE = new Sequence(0);
+
+    private final List<String> ADD_OPERATE = List.of("put", "refund");
+
     @Transactional(rollbackFor = Throwable.class)
     @Override
     public void upStockRelate(Long stockId, Long orderId, String status) {
@@ -52,6 +54,10 @@ public class GoodsDonStockServiceImpl implements GoodsDonStockService {
                 orderDonStock.setStatus("refund");
                 orderDonStockMapper.updateById(orderDonStock);
                 GoodsDonStockRecord putRecord = stockRecordMapper.selectById(orderDonStock.getRecordId());
+                //发货库存操作已撤销
+                if (putRecord.getIsUndo()) {
+                    return;
+                }
 
                 GoodsDonStock stock = stockMapper.selectById(putRecord.getStockId());
                 //新增库存记录
@@ -81,6 +87,7 @@ public class GoodsDonStockServiceImpl implements GoodsDonStockService {
                     .eq(GoodsDonStockRecord::getStockId, stockId)
                     .eq(GoodsDonStockRecord::getType, "put")
                     .gt(GoodsDonStockRecord::getAvailable, 0)
+                    .eq(GoodsDonStockRecord::getIsUndo, false)
                     .orderByAsc(GoodsDonStockRecord::getCreatedTime)
                     .last(" limit 1")
             );
@@ -98,7 +105,7 @@ public class GoodsDonStockServiceImpl implements GoodsDonStockService {
             GoodsDonStock stock = stockMapper.selectById(putRecord.getStockId());
             //新增库存记录
             GoodsDonStockRecord record = new GoodsDonStockRecord();
-            record.setNum(-1);
+            record.setNum(1);
             record.setStockId(stockId);
             record.setThenTotal(stock.getTotal());
             record.setType("transport");
@@ -145,12 +152,13 @@ public class GoodsDonStockServiceImpl implements GoodsDonStockService {
         GoodsDonStock goodsDonStock = stockMapper.selectById(stock.getId());
         GoodsDonStockRecord putRecord = stockRecordMapper.selectOne(
                 Wrappers.lambdaQuery(GoodsDonStockRecord.class)
-                        .eq(GoodsDonStockRecord::getStockId,stock.getId())
-                        .eq(GoodsDonStockRecord::getType,"put")
-                        .gt(GoodsDonStockRecord::getAvailable,0)
+                        .eq(GoodsDonStockRecord::getStockId, stock.getId())
+                        .eq(GoodsDonStockRecord::getType, "put")
+                        .gt(GoodsDonStockRecord::getAvailable, 0)
+                        .eq(GoodsDonStockRecord::getIsUndo, false)
                         .orderByAsc(GoodsDonStockRecord::getId)
                         .last(" limit 1")
-                );
+        );
         if(putRecord == null){
             throw BusinessRuntimeException.getInstance("没有库存>0的批次");
         }
@@ -256,4 +264,147 @@ public class GoodsDonStockServiceImpl implements GoodsDonStockService {
         stockMapper.deleteById(stockId);
         skuStockRelateMapper.delete(Wrappers.lambdaQuery(GoodsSkuStockRelate.class).eq(GoodsSkuStockRelate::getStockId,stockId));
     }
+
+    @Override
+    @Transactional(rollbackFor = Throwable.class)
+    public void updateBindGoods(GoodsDonStock stock) {
+        GoodsDonStock dbStock = stockMapper.selectById(stock.getId());
+        if (dbStock == null) {
+            throw BusinessRuntimeException.getInstance("库存不存在");
+        }
+        if (StrUtil.isNotBlank(stock.getTitle())) {
+            dbStock.setTitle(stock.getTitle());
+            stockMapper.updateById(dbStock);
+        }
+        List<GoodsSkuStockRelate> dbStockRelateList = skuStockRelateMapper.selectList(Wrappers.lambdaQuery(GoodsSkuStockRelate.class)
+                .eq(GoodsSkuStockRelate::getStockId, stock.getId()));
+
+        Map<Long, List<GoodsSkuStockRelate>> dbSkuMap = dbStockRelateList.stream().collect(Collectors.groupingBy(GoodsSkuStockRelate::getSkuId));
+
+        List<GoodsSkuStockRelate> relateList = stock.getRelateList();
+        Map<Long, List<GoodsSkuStockRelate>> skuMap = relateList.stream().collect(Collectors.groupingBy(GoodsSkuStockRelate::getSkuId));
+
+        List<GoodsSkuStockRelate> insertList = new ArrayList<>();
+        List<GoodsSkuStockRelate> deleteList = new ArrayList<>();
+
+        //目前的
+        relateList.forEach(relate->{
+            List<GoodsSkuStockRelate> stockRelates = dbSkuMap.get(relate.getSkuId());
+            if (CollUtil.isEmpty(stockRelates)) {
+                insertList.add(relate);
+            }
+        });
+
+        dbStockRelateList.forEach(data -> {
+            List<GoodsSkuStockRelate> stockRelates = skuMap.get(data.getSkuId());
+            if (CollUtil.isEmpty(stockRelates)) {
+                deleteList.add(data);
+            }
+        });
+
+        Long uniformId = SEQUENCE.nextId();
+        String operator = stock.getOperator();
+
+        insertList.forEach(insert->{
+            insert.setStockId(stock.getId());
+            skuStockRelateMapper.insert(insert);
+
+            saveChangeRelateRecord(insert, "insert", uniformId, operator);
+        });
+
+        List<Long> deleteRelateIds = new ArrayList<>();
+        deleteList.forEach(delete->{
+            saveChangeRelateRecord(delete, "delete", uniformId, operator);
+
+            deleteRelateIds.add(delete.getId());
+        });
+
+        if (CollUtil.isNotEmpty(deleteRelateIds)) {
+            skuStockRelateMapper.deleteBatchIds(deleteRelateIds);
+        }
+    }
+
+    public void saveChangeRelateRecord(GoodsSkuStockRelate skuStockRelate, String type, Long uniformId, String operator) {
+        GoodsSkuStockRelateChangeRecord changeRecord = new GoodsSkuStockRelateChangeRecord();
+        BeanUtil.copyProperties(skuStockRelate, changeRecord);
+        changeRecord.setType(type);
+        changeRecord.setUniformId(uniformId);
+        changeRecord.setOperator(operator);
+        relateChangeRecordMapper.insert(changeRecord);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Throwable.class)
+    public void undoChange(Long recordId) {
+        GoodsDonStockRecord goodsDonStockRecord = stockRecordMapper.selectById(recordId);
+        if (goodsDonStockRecord == null) {
+            throw BusinessRuntimeException.getInstance("该库存变更记录不存在");
+        }
+        //撤销
+        Long stockId = goodsDonStockRecord.getStockId();
+        //目前可用
+        Integer num = goodsDonStockRecord.getAvailable();
+        String type = goodsDonStockRecord.getType();
+        //扣减库存回滚操作 数量为正时 置为负数
+        if (!ADD_OPERATE.contains(type)) {
+            //回滚扣除操作时
+            num = goodsDonStockRecord.getNum();
+            if (num > 0) {
+                num = -num;
+            }
+        }
+        handleUndoChange(type, goodsDonStockRecord.getId(), stockId, num);
+    }
+
+    /**
+     * @param stockRecordId 库存存储记录id
+     * @param stockId       库存id
+     * @param num           库存数量
+     */
+    public void handleUndoChange(String type, Long stockRecordId, Long stockId, Integer num) {
+        GoodsDonStock goodsDonStock = stockMapper.selectById(stockId);
+        if (ADD_OPERATE.contains(type) && goodsDonStock.getTotal() <= 0) {
+            throw BusinessRuntimeException.getInstance("当前商品库存为0,不可撤销该增加库存操作");
+        }
+        int update = stockRecordMapper.update(null, Wrappers.lambdaUpdate(GoodsDonStockRecord.class)
+                .set(GoodsDonStockRecord::getIsUndo, true)
+                .set(num > 0, GoodsDonStockRecord::getAvailable, 0)
+                .eq(GoodsDonStockRecord::getId, stockRecordId)
+                .eq(GoodsDonStockRecord::getIsUndo, false));
+
+        if (update > 0) {
+            //回滚扣减库存操作
+            if (num < 0) {
+                String recordType = "put";
+                Boolean isUndo = false;
+                GoodsDonStockRecord record = stockRecordMapper.selectUndoRecord(stockId, isUndo, recordType);
+                if (record == null) {
+                    isUndo = true;
+                    record = stockRecordMapper.selectUndoRecord(stockId, isUndo, recordType);
+                }
+                if (record != null) {
+                    Integer available = record.getAvailable();
+                    //回滚新增库存的时候的可用数
+                    update = stockRecordMapper.update(null, Wrappers.lambdaUpdate(GoodsDonStockRecord.class)
+                            .set(GoodsDonStockRecord::getAvailable, available - num)
+                            .set(GoodsDonStockRecord::getIsUndo, false)
+                            .eq(GoodsDonStockRecord::getId, record.getId())
+                            .eq(GoodsDonStockRecord::getAvailable, available));
+                    if (update == 0) {
+                        throw BusinessRuntimeException.getInstance("系统繁忙,请重试...");
+                    }
+                }
+            }
+
+            //恢复对应储存的库存
+            update = stockMapper.update(null, Wrappers.lambdaUpdate(GoodsDonStock.class)
+                    .set(GoodsDonStock::getTotal, goodsDonStock.getTotal() - num)
+                    .set(GoodsDonStock::getStock, goodsDonStock.getStock() - num)
+                    .eq(GoodsDonStock::getId, stockId)
+                    .eq(GoodsDonStock::getTotal, goodsDonStock.getTotal()));
+            if (update == 0) {
+                throw BusinessRuntimeException.getInstance("系统繁忙,请重试...");
+            }
+        }
+    }
 }

+ 6 - 4
netflix-web/src/main/java/com/cyksj/web/controller/manage/statistics/StatisticsDataController.java

@@ -362,7 +362,8 @@ public class StatisticsDataController {
 		goodsDonStocks.forEach((stock)->{
 			List<GoodsDonStockRecord> goodsDonStockRecords = stockRecordMapper.selectList(Wrappers.lambdaQuery(GoodsDonStockRecord.class)
 					.eq(GoodsDonStockRecord::getStockId, stock.getId())
-					.ge(startTime != 0 , GoodsDonStockRecord::getCreatedTime, DateTime.of(startTime).toString())
+					.eq(GoodsDonStockRecord::getIsUndo, false)
+					.ge(startTime != 0, GoodsDonStockRecord::getCreatedTime, DateTime.of(startTime).toString())
 					.le(endTime != 0, GoodsDonStockRecord::getCreatedTime, DateTime.of(endTime).toString())
 			);
 			Map<String, List<GoodsDonStockRecord>> typeRecordsMap = goodsDonStockRecords.stream().collect(Collectors.groupingBy(GoodsDonStockRecord::getType));
@@ -375,7 +376,7 @@ public class StatisticsDataController {
 				statisticsStockView.setThenTotal(sum);
 				statisticsStockView.setThenPrice(price);
 			}
-			statisticsStockView.setUnavailable(stock.getUnavailable());
+//			statisticsStockView.setUnavailable(stock.getUnavailable());
 			statisticsStockView.setTitle(stock.getTitle());
 			typeRecordsMap.forEach((type,records)->{
 				int sum = records.stream().mapToInt(GoodsDonStockRecord::getNum).sum();
@@ -397,7 +398,8 @@ public class StatisticsDataController {
 		goodsDonStocks.forEach((stock)->{
 			List<GoodsDonStockRecord> goodsDonStockRecords = stockRecordMapper.selectList(Wrappers.lambdaQuery(GoodsDonStockRecord.class)
 					.eq(GoodsDonStockRecord::getStockId, stock.getId())
-					.ge(startTime != 0 , GoodsDonStockRecord::getCreatedTime, DateTime.of(startTime).toString())
+					.eq(GoodsDonStockRecord::getIsUndo, false)
+					.ge(startTime != 0, GoodsDonStockRecord::getCreatedTime, DateTime.of(startTime).toString())
 					.le(endTime != 0, GoodsDonStockRecord::getCreatedTime, DateTime.of(endTime).toString())
 			);
 			Map<String, List<GoodsDonStockRecord>> typeRecordsMap = goodsDonStockRecords.stream().collect(Collectors.groupingBy(GoodsDonStockRecord::getType));
@@ -410,7 +412,7 @@ public class StatisticsDataController {
 				statisticsStockView.setThenTotal(sum);
 				statisticsStockView.setThenPrice(price);
 			}
-			statisticsStockView.setUnavailable(stock.getUnavailable());
+//			statisticsStockView.setUnavailable(stock.getUnavailable());
 			statisticsStockView.setTitle(stock.getTitle());
 			typeRecordsMap.forEach((type,records)->{
 				int sum = records.stream().mapToInt(GoodsDonStockRecord::getNum).sum();

+ 45 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/stock/StockController.java

@@ -1,12 +1,18 @@
 package com.cyksj.web.controller.manage.stock;
 
+import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.Log;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.BusinessType;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.manage.cms.CmsUserMapper;
+import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
+import com.cyksj.model.entity.CmsUser;
 import com.cyksj.model.entity.GoodsDonStock;
 import com.cyksj.model.entity.GoodsDonStockRecord;
+import com.cyksj.model.entity.GoodsSkuStockRelate;
 import com.cyksj.model.request.StockUpReq;
 import com.cyksj.service.mange.stock.GoodsDonStockService;
 import com.ejlchina.searcher.BeanSearcher;
@@ -36,9 +42,17 @@ public class StockController {
 
     private final GoodsDonStockService stockService;
 
+    private final CmsUserMapper cmsUserMapper;
+
+    private final GoodsSkuStockRelateMapper skuStockRelateMapper;
+
     @GetMapping
     public Result<SearchResult<GoodsDonStock>> get(){
         SearchResult<GoodsDonStock> search = beanSearcher.search(GoodsDonStock.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+        search.getDataList().forEach(data->{
+            data.setRelateList(skuStockRelateMapper.selectList(Wrappers.lambdaQuery(GoodsSkuStockRelate.class)
+                    .eq(GoodsSkuStockRelate::getStockId, data.getId())));
+        });
         return GatewayResponse.SUCCESS.newBuilder().toResult(search);
     }
 
@@ -71,10 +85,21 @@ public class StockController {
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
+    /**
+     * 撤销库存变动操作
+     */
+    @PutMapping("/undo/change/{recordId}")
+    public Result<String> undoChangeSku(@PathVariable Long recordId) {
+        stockService.undoChange(recordId);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+
     /**
      * 编辑不可用
      */
     @PutMapping("/put/unavailable")
+    @Deprecated
     public Result<String> upUnavailable(@RequestBody StockUpReq stock){
         if(StringUtils.isBlank(stock.getRemark())){
             throw BusinessRuntimeException.getInstance("请填写备注");
@@ -87,6 +112,7 @@ public class StockController {
      * 编辑已刷机
      */
     @PutMapping("/put/upgrade")
+    @Deprecated
     public Result<String> upgrade(@RequestBody StockUpReq stock){
         stockService.upgrade(stock);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
@@ -107,6 +133,25 @@ public class StockController {
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
+    /**
+     * 编辑库存商品绑定实物商品
+     */
+    @PutMapping("/update/bindGoods")
+    public Result<String> updateBindGoods(@RequestBody GoodsDonStock stock) {
+        long adminId = StpUtil.getLoginIdAsLong();
+        Long id = stock.getId();
+        if (id == null) {
+            throw BusinessRuntimeException.getInstance("库存id不存在");
+        }
+        if (stock.getRelateList().size() == 0) {
+            throw BusinessRuntimeException.getInstance("缺少关联商品");
+        }
+        CmsUser cmsUser = cmsUserMapper.selectById(adminId);
+        stock.setOperator(cmsUser.getNickname());
+        stockService.updateBindGoods(stock);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
     /*
     库存明细
     ------------------------------------------------------------------