|
@@ -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();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|