| 
					
				 | 
			
			
				@@ -0,0 +1,97 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.gree.mall.manager.schedule; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.core.collection.CollectionUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gree.mall.manager.plus.entity.GoodsMaterialStorage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gree.mall.manager.plus.entity.GoodsSpec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gree.mall.manager.plus.entity.GoodsStorageWarningRecord; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gree.mall.manager.plus.service.GoodsMaterialStorageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gree.mall.manager.plus.service.GoodsSpecService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gree.mall.manager.plus.service.GoodsStorageWarningRecordService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.scheduling.annotation.Scheduled; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Component; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.annotation.Resource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Objects; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@ConditionalOnProperty(name = "schedule.enable", havingValue = "true", matchIfMissing = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class GoodsStockWarningSchedule { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GoodsSpecService goodsSpecService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GoodsMaterialStorageService goodsMaterialStorageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GoodsStorageWarningRecordService goodsStorageWarningRecordService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 库存预警生成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Scheduled(fixedDelay = 300  * 1000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void task(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 找出预警数大于0的商品规格 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        final List<GoodsSpec> goodsSpecList = goodsSpecService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .gt(GoodsSpec::getStockWarningNum, 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .list(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtil.isEmpty(goodsSpecList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (GoodsSpec goodsSpec : goodsSpecList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 根据物料id找物料仓库少于等于预警数的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            final List<GoodsMaterialStorage> storageList = goodsMaterialStorageService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(GoodsMaterialStorage::getGoodsMaterialId, goodsSpec.getGoodsCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .le(GoodsMaterialStorage::getStockQty, goodsSpec.getStockWarningNum()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .list(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtil.isNotEmpty(storageList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 查找到物料仓库少于等于预警数的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<GoodsStorageWarningRecord> recordList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (GoodsMaterialStorage storage : storageList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 检查是否存在预警记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    GoodsStorageWarningRecord warningRecord = goodsStorageWarningRecordService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .eq(GoodsStorageWarningRecord::getGoodsMaterialId, storage.getGoodsMaterialId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .one(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (Objects.isNull(warningRecord)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 记录为空插入新记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        GoodsStorageWarningRecord record = new GoodsStorageWarningRecord(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        record.setCompanyWechatId(goodsSpec.getCompanyWechatId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setCompanyName(goodsSpec.getCompanyName()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setGoodsId(goodsSpec.getGoodsId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setGoodsSpecId(goodsSpec.getGoodsSpecId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setGoodsMaterialId(goodsSpec.getGoodsCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setName(goodsSpec.getName()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setSpecValue(goodsSpec.getSpecValue()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setStorageId(storage.getStorageId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setStorageName(storage.getStorageName()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setWarningQty(goodsSpec.getStockWarningNum()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setStockQty(storage.getStockQty()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        recordList.add(record); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        warningRecord.setWarningQty(goodsSpec.getStockWarningNum()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .setStockQty(storage.getStockQty()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        recordList.add(warningRecord); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                goodsStorageWarningRecordService.saveOrUpdateBatch(recordList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 未找到物料仓库少于等于预警数的数据, 执行删除对应物料id记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                goodsStorageWarningRecordService.lambdaUpdate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(GoodsStorageWarningRecord::getGoodsMaterialId, goodsSpec.getGoodsCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .remove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |