diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/ForewarningTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/ForewarningTask.java
index 2699264..5c3dcfb 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/ForewarningTask.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/ForewarningTask.java
@@ -73,41 +73,40 @@ public class ForewarningTask {
/**
* 预警数据生成
*
- * 1、删除st_ivt_overdueforewarning、st_ivt_safetyforewarning表中的全部数据
- * 2、查询st_ivt_forewarningconfig,获取正在启用的、未删除的配置
- * 3、通过st_ivt_forewarningconfig表的id字段,匹配上st_ivt_forewarningmaterial表的config_id字段,获取对应的物料。赋值给
+ * 1、查询st_ivt_forewarningconfig,获取正在启用的、未删除的配置
+ * 2、通过st_ivt_forewarningconfig表的id字段,匹配上st_ivt_forewarningmaterial表的config_id字段,获取对应的物料。赋值给
* StIvtForewarningconfigDto的tableData
- * 4、循环,判断每条数据下的对应物料的安全库存数量、入库时间(以组盘时间为准)
+ * 3、循环,判断每条数据下的对应物料的安全库存数量、入库时间(以组盘时间为准)
* 其中库存表:md_pb_groupplate,实体类:GroupPlate,组盘时间create_time,物料编码id material_id
- * 5、 分别生成st_ivt_safetyforewarning(安全库存数量超期) 和 st_ivt_overdueforewarning(安全库存天数超期) ,插入到对应数据库中
+ * 4、 分别生成st_ivt_safetyforewarning(安全库存数量超期) 和 st_ivt_overdueforewarning(超期天数超期) ,插入到对应数据库中
*/
private void runTask() {
// 1. 删除st_ivt_overdueforewarning、st_ivt_safetyforewarning表中的全部数据
- stIvtOverdueforewarningService.deleteAllNoParam();
- stIvtSafetyforewarningService.deleteAllNoParam();
+ // stIvtOverdueforewarningService.deleteAllNoParam();
+ // stIvtSafetyforewarningService.deleteAllNoParam();
// 2. 查询st_ivt_forewarningconfig,获取正在启用的、未删除的配置
List configList = forewarningconfigService.list(new LambdaQueryWrapper()
- .eq(StIvtForewarningconfig::getIs_active,true)
- .eq(StIvtForewarningconfig::getIs_delete,false));
+ .eq(StIvtForewarningconfig::getIs_active, true)
+ .eq(StIvtForewarningconfig::getIs_delete, false));
if (CollectionUtil.isEmpty(configList)) {
return;
}
- List configStringList =configList.stream().map(StIvtForewarningconfig::getId).collect(Collectors.toList());
+ List configStringList = configList.stream().map(StIvtForewarningconfig::getId).collect(Collectors.toList());
// 获取配置文件下的所有物料
List materialList = stIvtForewarningmaterialService.list(new LambdaQueryWrapper()
- .eq(StIvtForewarningmaterial::getIs_active,true)
- .eq(StIvtForewarningmaterial::getIs_delete,false)
- .in(StIvtForewarningmaterial::getConfig_id,configStringList));
+ .eq(StIvtForewarningmaterial::getIs_active, true)
+ .eq(StIvtForewarningmaterial::getIs_delete, false)
+ .in(StIvtForewarningmaterial::getConfig_id, configStringList));
- List materialIdList = materialList.stream().map(StIvtForewarningmaterial::getMaterial_id).collect(Collectors.toList());
- List storCodeList = configList.stream().map(StIvtForewarningconfig::getStor_code).collect(Collectors.toList());
+ Set materialIdList = materialList.stream().map(StIvtForewarningmaterial::getMaterial_id).collect(Collectors.toSet());
+ Set storCodeList = configList.stream().map(StIvtForewarningconfig::getStor_code).collect(Collectors.toSet());
// 查询库存信息
- Map queryMap = new HashMap();
- queryMap.put("stor_code_list",storCodeList);
- queryMap.put("material_id_list",materialIdList);
+ Map queryMap = new HashMap();
+ queryMap.put("stor_code_list", storCodeList);
+ queryMap.put("material_id_list", materialIdList);
List mdPbStoragevehicleextDtos = mdPbStoragevehicleextMapper.queryAll(queryMap);
if (CollectionUtil.isEmpty(mdPbStoragevehicleextDtos)) {
return;
@@ -116,88 +115,107 @@ public class ForewarningTask {
for (StIvtForewarningconfig config : configList) {
//3. 通过st_ivt_forewarningconfig表的id字段,匹配上st_ivt_forewarningmaterial表的config_id字段,获取对应的物料
List configMaterialList = materialList.stream().
- filter(a->config.getId().equals(a.getConfig_id())).collect(Collectors.toList());
+ filter(a -> config.getId().equals(a.getConfig_id())).collect(Collectors.toList());
+
+ // 按照struct_code对mdPbStoragevehicleextDtos进行分组
+ Map> structCodeGroupMap = mdPbStoragevehicleextDtos.stream()
+ .filter(a->config.getStor_code().equals(a.getStor_code()))
+ .collect(Collectors.groupingBy(MdPbStoragevehicleextDto::getStruct_code));
+
// 4. 循环,判断每条数据下的对应物料的安全库存数量、入库时间(以组盘时间为准)
for (StIvtForewarningmaterial material : configMaterialList) {
- // 计算安全库存数量
- BigDecimal totalQty = mdPbStoragevehicleextDtos.stream()
- .filter(a -> config.getStor_code().equals(a.getStor_code())
- && material.getMaterial_id().equals(a.getMaterial_id()))
- .map(MdPbStoragevehicleextDto::getQty)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 遍历structCodeGroupMap,获取每个struct_code下的mdPbStoragevehicleextDtos
+ for (Map.Entry> entry : structCodeGroupMap.entrySet()) {
+ List mdPbStoragevehicleextDtoStructs = entry.getValue();
- // 计算最早的组盘时间
- LocalDateTime earliestPlate = null;
- try {
- earliestPlate = mdPbStoragevehicleextDtos.stream()
+ // 计算安全库存数量
+ BigDecimal totalQty = mdPbStoragevehicleextDtoStructs.stream()
.filter(a -> config.getStor_code().equals(a.getStor_code())
&& material.getMaterial_id().equals(a.getMaterial_id()))
- .map(a -> {
- try {
- String createTimeStr = a.getCreate_time();
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- return LocalDateTime.parse(createTimeStr, formatter);
- } catch (Exception ex) {
- // 解析失败,返回null
- return null;
- }
- })
- .filter(Objects::nonNull)
- .min(LocalDateTime::compareTo)
- .orElse(null);
- } catch (Exception ex) {
- // 处理整体异常
- earliestPlate = null;
- }
- // 计算 earliestPlate 与当前时间的天数差,返回int类型
- BigDecimal daysDiff = BigDecimal.ZERO;
- if (earliestPlate != null) {
- long millis = java.time.Duration.between(earliestPlate, LocalDateTime.now()).toMillis();
- daysDiff = new BigDecimal(millis)
- .divide(new BigDecimal(1000 * 60 * 60 * 24), 4, BigDecimal.ROUND_HALF_UP);
- }
-
-
-
- // 5. 分别生成st_ivt_safetyforewarning(安全库存数量超期) 和 st_ivt_overdueforewarning(安全库存天数超期)
- // 安全库存数量超期
- if (config.getSafe_qty() != null && totalQty.compareTo(config.getSafe_qty()) > 0) {
- StIvtSafetyforewarning safety = new StIvtSafetyforewarning();
- safety.setId(IdUtil.getSnowflake(1, 1).nextIdStr());
- safety.setConfig_id(config.getId());
- safety.setMaterial_code(material.getMaterial_code());
- safety.setMaterial_name(material.getMaterial_name());
- safety.setSafe_qty(config.getSafe_qty());
- safety.setStor_code(config.getStor_code());
- safety.setCurrent_qty(totalQty);
- safety.setCreate_name("JOB");
- safety.setCreate_time(DateUtil.now());
- stIvtSafetyforewarningService.save(safety);
+ .map(MdPbStoragevehicleextDto::getQty)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 计算最早的组盘时间
+ LocalDateTime earliestPlate = null;
+ try {
+ earliestPlate = mdPbStoragevehicleextDtoStructs.stream()
+ .filter(a -> config.getStor_code().equals(a.getStor_code())
+ && material.getMaterial_id().equals(a.getMaterial_id()))
+ .map(a -> {
+ try {
+ String createTimeStr = a.getCreate_time();
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ return LocalDateTime.parse(createTimeStr, formatter);
+ } catch (Exception ex) {
+ // 解析失败,返回null
+ return null;
+ }
+ })
+ .filter(Objects::nonNull)
+ .min(LocalDateTime::compareTo)
+ .orElse(null);
+ } catch (Exception ex) {
+ // 处理整体异常
+ earliestPlate = null;
+ }
+ // 计算 earliestPlate 与当前时间的天数差,返回int类型
+ BigDecimal daysDiff = BigDecimal.ZERO;
+ if (earliestPlate != null) {
+ long millis = java.time.Duration.between(earliestPlate, LocalDateTime.now()).toMillis();
+ daysDiff = new BigDecimal(millis)
+ .divide(new BigDecimal(1000 * 60 * 60 * 24), 4, BigDecimal.ROUND_HALF_UP);
+ }
+
+
+ // 5. 分别生成st_ivt_safetyforewarning(安全库存数量超期) 和 st_ivt_overdueforewarning(超期天数超期)
+ // 安全库存数量超限
+ if ((config.getSafe_qty_lower_limit() != null && totalQty.compareTo(config.getSafe_qty_lower_limit()) < 0)
+ || (config.getSafe_qty_upper_limit() != null && totalQty.compareTo(config.getSafe_qty_upper_limit()) > 0)) {
+ StIvtSafetyforewarning safety = new StIvtSafetyforewarning();
+ safety.setId(IdUtil.getSnowflake(1, 1).nextIdStr());
+ safety.setConfig_id(config.getId());
+ safety.setMaterial_code(material.getMaterial_code());
+ safety.setMaterial_name(material.getMaterial_name());
+ safety.setSect_code(mdPbStoragevehicleextDtoStructs.get(0).getSect_code());
+ safety.setSect_name(mdPbStoragevehicleextDtoStructs.get(0).getSect_name());
+ safety.setStruct_code(mdPbStoragevehicleextDtoStructs.get(0).getStruct_code());
+ safety.setStruct_name(mdPbStoragevehicleextDtoStructs.get(0).getStruct_name());
+ safety.setSafe_qty_lower_limit(config.getSafe_qty_lower_limit());
+ safety.setSafe_qty_upper_limit(config.getSafe_qty_upper_limit());
+ safety.setStor_code(config.getStor_code());
+ safety.setCurrent_qty(totalQty);
+ safety.setCreate_name("JOB");
+ safety.setCreate_time(DateUtil.now());
+ stIvtSafetyforewarningService.save(safety);
+ }
+
+ // 超期天数超期
+
+ if (config.getSafe_days() != null && daysDiff.compareTo(config.getSafe_days()) > 0) {
+ // 将 earliestPlate 转化成 yyyy-MM-dd HH:mm:ss 的String 类型
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ String earliestPlateStr = earliestPlate.format(formatter);
+
+ StIvtOverdueforewarning overdue = new StIvtOverdueforewarning();
+ overdue.setId(IdUtil.getSnowflake(1, 1).nextIdStr());
+ overdue.setConfig_id(config.getId());
+ overdue.setMaterial_code(material.getMaterial_code());
+ overdue.setMaterial_name(material.getMaterial_name());
+ overdue.setOverdue_days(daysDiff);
+ overdue.setStor_code(config.getStor_code());
+ overdue.setSect_code(mdPbStoragevehicleextDtoStructs.get(0).getSect_code());
+ overdue.setSect_name(mdPbStoragevehicleextDtoStructs.get(0).getSect_name());
+ overdue.setStruct_code(mdPbStoragevehicleextDtoStructs.get(0).getStruct_code());
+ overdue.setStruct_name(mdPbStoragevehicleextDtoStructs.get(0).getStruct_name());
+ overdue.setSafe_days(config.getSafe_days());
+ overdue.setInsert_time(earliestPlateStr);
+ overdue.setCreate_name("JOB");
+ overdue.setCreate_time(DateUtil.now());
+ stIvtOverdueforewarningService.save(overdue);
+ }
}
-
- // 安全库存天数超期
-
- if (config.getSafe_days() != null && daysDiff.compareTo(config.getSafe_days())>0) {
- // 将 earliestPlate 转化成 yyyy-MM-dd HH:mm:ss 的String 类型
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- String earliestPlateStr = earliestPlate.format(formatter);
-
- StIvtOverdueforewarning overdue = new StIvtOverdueforewarning();
- overdue.setId(IdUtil.getSnowflake(1, 1).nextIdStr());
- overdue.setConfig_id(config.getId());
- overdue.setMaterial_code(material.getMaterial_code());
- overdue.setMaterial_name(material.getMaterial_name());
- overdue.setOverdue_days(daysDiff);
- overdue.setStor_code(config.getStor_code());
- overdue.setSafe_days(config.getSafe_days());
- overdue.setInsert_time(earliestPlateStr);
- overdue.setCreate_name("JOB");
- overdue.setCreate_time(DateUtil.now());
- stIvtOverdueforewarningService.save(overdue);
- }
-
}
}
}
diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/controller/StIvtOverdueforewarningController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/controller/StIvtOverdueforewarningController.java
index f4d35b7..a554c02 100644
--- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/controller/StIvtOverdueforewarningController.java
+++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/controller/StIvtOverdueforewarningController.java
@@ -56,4 +56,12 @@ public class StIvtOverdueforewarningController {
stIvtOverdueforewarningService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
+
+ @Log("将预警信息设置为已读")
+ //@SaCheckPermission("stIvtOverdueforewarning:del")
+ @PostMapping("/read")
+ public ResponseEntity