Browse Source

Merge remote-tracking branch 'origin/master'

qt5107 2 năm trước cách đây
mục cha
commit
1b70bf1f78

+ 2 - 1
hx-common/common-tool/src/main/java/com/fjhx/base/Condition.java

@@ -11,6 +11,7 @@ import com.fjhx.utils.PageUtil;
 import org.springblade.core.log.exception.ServiceException;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -161,7 +162,7 @@ public class Condition extends HashMap<String, Object> {
      * 获取List
      */
     public <T> List<T> getArray(String str, Class<T> clazz) {
-        return JSONObject.parseArray(this.getStr(str), clazz, ParserConfig.global);
+        return ObjectUtil.defaultIfNull(JSONObject.parseArray(this.getStr(str), clazz, ParserConfig.global), new ArrayList<>());
     }
 
     public Date getDate(String str) {

+ 3 - 1
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/product/ProductSpuVo.java

@@ -4,6 +4,8 @@ import com.fjhx.entity.product.ProductSpu;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 /**
  * @author ${author}
  * @since 2022-11-25
@@ -12,6 +14,6 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 public class ProductSpuVo extends ProductSpu {
 
-    private Long productIdList;
+    private List<Long> productIdList;
 
 }

+ 46 - 27
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackPlanServiceImpl.java

@@ -36,6 +36,13 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
 
     private static final Object obj = new Object();
 
+    private static final List<String> materialNameList = Arrays.asList(
+            "黑色 170克100%精梳棉",
+            "灰色 170克100%精梳棉",
+            "空白鼠标垫+密锁边",
+            "法兰绒"
+    );
+
     @Autowired
     private StockBackPlanDetailsService stockBackPlanDetailsService;
 
@@ -81,6 +88,10 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
                 // 排班时间
                 String planDate = item.get("planDate").toString();
 
+                if (materialNameList.contains(material)) {
+                    return;
+                }
+
                 // 喷印人员工号添加领料记录标记
                 addOrEditFlagMap(flagMap, distributor, plantotalsquare, planDate, material, newDate);
 
@@ -242,8 +253,9 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
                 .in("swd.StockChangeType", 20, 23)
                 .eq("uu.IsDelete", 0)
                 .in("uu.DepartmentID", "A007", "A012", "A017")
-                .likeRight("m.Code", "01.")
-                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+//                .likeRight("m.Code", "01.")
+//                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                .ne("m.CategoryCode", "99.999.")
                 .isNotNull("uu.JobNo"));
 
         for (Map<String, Object> map : pickingList) {
@@ -302,8 +314,9 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
                 .in("swd.StockChangeType", 20, 23)
                 .eq("uu.IsDelete", 0)
                 .eq("uu.DepartmentID", "A008")
-                .likeRight("m.Code", "01.")
-                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+//                .likeRight("m.Code", "01.")
+//                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                .ne("m.CategoryCode", "99.999.")
                 .isNotNull("uu.JobNo"));
 
         for (Map<String, Object> map : pickingList) {
@@ -363,12 +376,14 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
      */
     private void returnWarehouse(Date beginDate, Map<String, StockBackPlanDetails> stockBackPlanMap) {
         List<Map<String, Object>> backList = baseMapper.getReturnWarehouse(Wrappers.query()
-                .ge("sb.operation_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
-                .eq("uu.IsDelete", 0)
-                .in("uu.DepartmentID", "A007", "A012", "A017")
-                .isNotNull("uu.JobNo")
-                .likeRight("m.Code", "01.")
-                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                        .ge("sb.operation_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
+                        .eq("uu.IsDelete", 0)
+                        .in("uu.DepartmentID", "A007", "A012", "A017")
+                        .isNotNull("uu.JobNo")
+                        .ne("m.CategoryCode", "99.999.")
+//                .likeRight("m.Code", "01.")
+//                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+
         );
 
         for (Map<String, Object> map : backList) {
@@ -421,12 +436,13 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
 
     private void returnWarehouseA008(Date beginDate, Map<String, StockBackPlanDetails> stockBackPlanMap) {
         List<Map<String, Object>> backList = baseMapper.getReturnWarehouse(Wrappers.query()
-                .ge("sb.operation_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
-                .eq("uu.IsDelete", 0)
-                .eq("uu.DepartmentID", "A008")
-                .isNotNull("uu.JobNo")
-                .likeRight("m.Code", "01.")
-                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                        .ge("sb.operation_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
+                        .eq("uu.IsDelete", 0)
+                        .eq("uu.DepartmentID", "A008")
+                        .isNotNull("uu.JobNo")
+                        .ne("m.CategoryCode", "99.999.")
+//                .likeRight("m.Code", "01.")
+//                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
         );
 
         for (Map<String, Object> map : backList) {
@@ -483,9 +499,10 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
      */
     private void correct(Date beginDate, Map<String, StockBackPlanDetails> stockBackPlanMap) {
         List<Map<String, Object>> correctList = baseMapper.getCorrect(Wrappers.query()
-                .gt("sbc.correct_time", DateUtil.format(beginDate, "yyyy-MM-dd 00:00:00"))
-                .isNotNull("uu.JobNo")
-                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                        .gt("sbc.correct_time", DateUtil.format(beginDate, "yyyy-MM-dd 00:00:00"))
+                        .isNotNull("uu.JobNo")
+//                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                        .ne("m.CategoryCode", "99.999.")
         );
         for (Map<String, Object> map : correctList) {
             // 出库时间
@@ -515,10 +532,11 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
      */
     private void transferIn(Date beginDate, Map<String, StockBackPlanDetails> stockBackPlanMap) {
         List<Map<String, Object>> transferPickingList = baseMapper.getTransferPickingList(Wrappers.query()
-                .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 00:00:00"))
-                .eq("st.status", StatusConstant.YES)
-                .eq("st.del_flag", 0)
-                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                        .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 00:00:00"))
+                        .eq("st.status", StatusConstant.YES)
+                        .eq("st.del_flag", 0)
+//                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                        .ne("m.CategoryCode", "99.999.")
         );
 
         for (Map<String, Object> map : transferPickingList) {
@@ -577,10 +595,11 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
     private void transferOut(Date beginDate, Map<String, StockBackPlanDetails> stockBackPlanMap) {
 
         List<Map<String, Object>> transferBackList = baseMapper.getTransferBackList(Wrappers.query()
-                .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
-                .eq("st.status", StatusConstant.YES)
-                .eq("st.del_flag", 0)
-                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                        .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
+                        .eq("st.status", StatusConstant.YES)
+                        .eq("st.del_flag", 0)
+//                .notIn("m.Code", "01.002.0045", "01.002.0124", "01.002.0381", "01.002.0383")
+                        .ne("m.CategoryCode", "99.999.")
         );
 
         for (Map<String, Object> map : transferBackList) {

+ 28 - 3
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockCheckrecordServiceImpl.java

@@ -15,6 +15,7 @@ import com.fjhx.stock.service.StockCheckrecordService;
 import com.fjhx.stock.service.StockCheckrecorddetailService;
 import com.fjhx.stock.service.StockDetailService;
 import com.fjhx.stock.service.StockTagService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -33,6 +34,7 @@ import java.util.stream.Collectors;
  * @since 2022-12-05
  */
 @Service
+@Slf4j
 public class StockCheckrecordServiceImpl extends ServiceImpl<StockCheckrecordMapper, StockCheckrecord> implements StockCheckrecordService {
 
     /**
@@ -58,7 +60,7 @@ public class StockCheckrecordServiceImpl extends ServiceImpl<StockCheckrecordMap
         data.put("instructions", instructions);
         // 开启rfid扫描type
         data.put("type", "2");
-        // 盘点
+        // 盘点业务类型
         data.put("businessType", "3");
         // 盘点仓库id  一楼仓库'c185883dba22478cb593d33f6b66cc53' 四楼仓库'0b8f584250bb4b40b72d641ce4849d15'
         data.put("stockHouseId", stockHouseId);
@@ -82,6 +84,7 @@ public class StockCheckrecordServiceImpl extends ServiceImpl<StockCheckrecordMap
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void checkEnd(String instructions, String stockHouseId) {
+        Date date = new Date();
 
         JSONObject data = new JSONObject();
         // 盘点指令
@@ -91,9 +94,31 @@ public class StockCheckrecordServiceImpl extends ServiceImpl<StockCheckrecordMap
         // 关闭扫描
         WebSocketServer.sendInfo(WebSocketEventListener.WEB_STOCK_PROGRAM, WebSocketEventListener.OPERATING_UPPER_COMPUTER, data);
 
+        // 盘点到的rfid
         List<String> rfidList = map.remove(stockHouseId);
 
-        Date date = new Date();
+        ArrayList<String> copyRfidList = new ArrayList<>(rfidList);
+        List<String> excludeRfidCodeList = new ArrayList<>();
+
+        if (rfidList.size() > 0) {
+            List<Map<String, Object>> list = stockDetailService.listMaps(Wrappers.<StockDetail>query()
+                    .ge("ExpiredDt", date)
+                    .select("RfidCode rfidCode")
+            );
+
+            excludeRfidCodeList = list.stream().map(item -> Convert.toStr(item.get("rfidCode"))).collect(Collectors.toList());
+
+            for (Map<String, Object> map : list) {
+                rfidList.remove(Convert.toStr(map.get("rfidCode")));
+            }
+        }
+
+        log.error("\r\n盘点结束:\r\n扫描仓库:{}\r\n扫描到的rfid:{},\r\n排除的rfid:{},\r\n排除之后的rfid:{}",
+                stockHouseId.equals("c185883dba22478cb593d33f6b66cc53") ? "一楼仓库" : "四楼仓库",
+                JSONObject.toJSONString(copyRfidList),
+                JSONObject.toJSONString(excludeRfidCodeList),
+                rfidList
+        );
 
         // 添加盘点记录
         StockCheckrecord stockCheckrecord = new StockCheckrecord();
@@ -110,7 +135,6 @@ public class StockCheckrecordServiceImpl extends ServiceImpl<StockCheckrecordMap
 
         String recordId = stockCheckrecord.getId();
 
-
         // 获取所有在库物料
         List<Map<String, Object>> stockList = stockDetailService.listMaps(Wrappers.<StockDetail>query()
                 .select(
@@ -119,6 +143,7 @@ public class StockCheckrecordServiceImpl extends ServiceImpl<StockCheckrecordMap
                         "sum(Quantity) quantity" // 库存数量
                 )
                 .eq("StockHouseId", stockHouseId) // 对应仓库id
+                .lt("ExpiredDt", date) // 排除确认在库的标签
                 .eq("IsDelete", "0") // 未删除
                 .groupBy("MaterialCode") // 物料编码分组
         );

+ 20 - 20
hx-service/storage/src/main/java/com/fjhx/task/controller/ScheduleTaskController.java

@@ -3,7 +3,9 @@ package com.fjhx.task.controller;
 import com.fjhx.stock.service.StockBackPlanService;
 import com.fjhx.stock.service.StockCheckrecordService;
 import com.fjhx.task.service.ScheduleTaskService;
+import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.launch.BladeApplication;
+import org.springblade.core.tool.utils.ThreadUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableScheduling;
@@ -11,6 +13,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 
 @Configuration
 @EnableScheduling
+@Slf4j
 public class ScheduleTaskController {
 
     @Autowired
@@ -71,26 +74,23 @@ public class ScheduleTaskController {
     /**
      * 盘点
      */
-//    @Scheduled(cron = "0 0 1 * * ?")
-//    @PostConstruct
-    private void checkStart() {
-        if (BladeApplication.isLocalDev()) {
-            return;
-        }
-
-        stockCheckrecordService.checkStart("check1", "c185883dba22478cb593d33f6b66cc53");
-        stockCheckrecordService.checkStart("check4", "0b8f584250bb4b40b72d641ce4849d15");
-    }
+////    @Scheduled(cron = "0 0 1 * * ?")
+//    @Scheduled(cron = "0 50 12 * * ?")
+////    @PostConstruct
+//    private void checkStart() {
+////        if (BladeApplication.isLocalDev()) {
+////            return;
+////        }
+//        log.error("开始扫描");
+//
+//        stockCheckrecordService.checkStart("check1", "c185883dba22478cb593d33f6b66cc53");
+//        stockCheckrecordService.checkStart("check4", "0b8f584250bb4b40b72d641ce4849d15");
+//
+//        ThreadUtil.sleep(1000 * 60 * 5);
+//
+//        stockCheckrecordService.checkEnd("check1", "c185883dba22478cb593d33f6b66cc53");
+//        stockCheckrecordService.checkEnd("check4", "0b8f584250bb4b40b72d641ce4849d15");
+//    }
 
-    //    @Scheduled(cron = "0 10 1 * * ?")
-    //    @PostConstruct
-    private void checkEnd() {
-        if (BladeApplication.isLocalDev()) {
-            return;
-        }
-
-        stockCheckrecordService.checkEnd("check1", "c185883dba22478cb593d33f6b66cc53");
-        stockCheckrecordService.checkEnd("check4", "0b8f584250bb4b40b72d641ce4849d15");
-    }
 
 }

+ 29 - 4
hx-service/storage/src/main/java/com/fjhx/u/controller/UUserController.java

@@ -1,12 +1,11 @@
 package com.fjhx.u.controller;
 
+import com.fjhx.stock.service.StockCheckrecordService;
 import com.fjhx.u.service.UUserService;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.ThreadUtil;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
@@ -26,6 +25,32 @@ public class UUserController {
     @Autowired
     private UUserService uUserService;
 
+    @Autowired
+    private StockCheckrecordService stockCheckrecordService;
+
+    @GetMapping("/test")
+    public R test(@RequestParam("sleep") Integer sleep) {
+        new Thread(() -> {
+            stockCheckrecordService.checkStart("check1", "c185883dba22478cb593d33f6b66cc53");
+            ThreadUtil.sleep(1000L * 60 * sleep);
+            stockCheckrecordService.checkEnd("check1", "c185883dba22478cb593d33f6b66cc53");
+        }).start();
+
+        return R.success();
+    }
+
+    @GetMapping("/test4")
+    public R test4(@RequestParam("sleep") Integer sleep) {
+        new Thread(() -> {
+            stockCheckrecordService.checkStart("check4", "0b8f584250bb4b40b72d641ce4849d15");
+            ThreadUtil.sleep(1000L * 60 * sleep);
+            stockCheckrecordService.checkEnd("check4", "0b8f584250bb4b40b72d641ce4849d15");
+        }).start();
+
+        return R.success();
+    }
+
+
 //    @PostMapping("/page")
 //    public R page(@RequestBody Map<String, Object> condition){
 //        Page<UUser> result = uUserService.getPage(condition);

+ 3 - 3
hx-service/victoriatourist/src/main/java/com/fjhx/controller/product/ProductSpuController.java

@@ -1,10 +1,10 @@
 package com.fjhx.controller.product;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.springblade.core.tool.api.R;
 import com.fjhx.entity.product.ProductSpu;
 import com.fjhx.params.product.ProductSpuVo;
 import com.fjhx.service.product.ProductSpuService;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -41,13 +41,13 @@ public class ProductSpuController {
     }
 
     @PostMapping("/edit")
-    public R edit(@RequestBody ProductSpuVo productSpuVo){
+    public R edit(@RequestBody ProductSpuVo productSpuVo) {
         productSpuService.edit(productSpuVo);
         return R.success();
     }
 
     @PostMapping("/delete")
-    public R delete(@RequestBody ProductSpuVo productSpuVo){
+    public R delete(@RequestBody ProductSpuVo productSpuVo) {
         productSpuService.delete(productSpuVo);
         return R.success();
     }

+ 2 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/service/product/ProductSpuService.java

@@ -1,6 +1,7 @@
 package com.fjhx.service.product;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
 import com.fjhx.entity.product.ProductSpu;
 import com.fjhx.params.product.ProductSpuVo;
 import com.fjhx.base.BaseService;
@@ -25,4 +26,5 @@ public interface ProductSpuService extends BaseService<ProductSpu> {
 
     void delete(ProductSpuVo productSpuVo);
 
+
 }

+ 1 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/service/product/impl/ProductInfoServiceImpl.java

@@ -68,6 +68,7 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
                 .le(ProductInfo::getJdPurchasePrice, condition.get("jdPurchasePriceMax"))
                 .eq(ProductInfo::getCombination)
                 .eq(ProductInfo::getProductSpuId)
+                .ne(ProductInfo::getProductSpuId, condition.get("excludeProductSpuId"))
                 .periodTime(ProductInfo::getClearancePeriod)
                 .func(ObjectUtil.isNotEmpty(condition.get("lifeCycle")), q -> {
                     Integer lifeCycle = Convert.toInt(condition.get("lifeCycle"));

+ 38 - 1
hx-service/victoriatourist/src/main/java/com/fjhx/service/product/impl/ProductSpuServiceImpl.java

@@ -1,16 +1,23 @@
 package com.fjhx.service.product.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.BaseEntity;
+import com.fjhx.entity.product.ProductInfo;
 import com.fjhx.entity.product.ProductSpu;
 import com.fjhx.mapper.product.ProductSpuMapper;
 import com.fjhx.params.product.ProductSpuVo;
+import com.fjhx.service.product.ProductInfoService;
 import com.fjhx.service.product.ProductSpuService;
 import com.fjhx.uitl.code.CodeEnum;
+import com.fjhx.utils.Assert;
 import com.fjhx.utils.wrapperUtil.IWrapper;
 import com.fjhx.utils.wrapperUtil.KeywordData;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -24,6 +31,9 @@ import java.util.Map;
 @Service
 public class ProductSpuServiceImpl extends ServiceImpl<ProductSpuMapper, ProductSpu> implements ProductSpuService {
 
+    @Autowired
+    private ProductInfoService productInfoService;
+
     @Override
     public Page<ProductSpu> getPage(Map<String, Object> condition) {
         IWrapper<ProductSpu> wrapper = IWrapper.getWrapper(condition);
@@ -38,17 +48,44 @@ public class ProductSpuServiceImpl extends ServiceImpl<ProductSpuMapper, Product
             productSpuVo.setCode(CodeEnum.SPU.getCode());
             save(productSpuVo);
         }
+        resetBindingProduct(productSpuVo.getId(), productSpuVo.getProductIdList());
     }
 
     @Override
     public void edit(ProductSpuVo productSpuVo) {
         updateById(productSpuVo);
+        resetBindingProduct(productSpuVo.getId(), productSpuVo.getProductIdList());
     }
 
     @Override
     public void delete(ProductSpuVo productSpuVo) {
-        // TODO 产品正在使用此spu不让删除
+        long count = productInfoService.count(q -> q
+                .eq(ProductInfo::getProductSpuId, productSpuVo.getId()));
+        Assert.eqZero(count, "此spu已关联产品,无法删除");
+
         removeById(productSpuVo.getId());
     }
 
+
+    private void resetBindingProduct(Long spuId, List<Long> productIdList) {
+
+        Assert.notEmpty(spuId, "spuId不能为空");
+
+        // 移除spu不属于产品id列表的产品的绑定
+        productInfoService.update(q -> q
+                .eq(ProductInfo::getProductSpuId, spuId)
+                .notIn(ObjectUtil.isNotEmpty(productIdList), BaseEntity::getId, productIdList)
+                .set(ProductInfo::getProductSpuId, null)
+        );
+
+        // 添加sup与产品绑定
+        if (ObjectUtil.isNotEmpty(productIdList)) {
+            productInfoService.update(q -> q
+                    .in(BaseEntity::getId, productIdList)
+                    .set(ProductInfo::getProductSpuId, spuId)
+            );
+        }
+
+    }
+
 }