|
|
@ -73,18 +73,17 @@ public class ForewarningTask { |
|
|
|
/** |
|
|
|
* 预警数据生成 |
|
|
|
* <p> |
|
|
|
* 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<StIvtForewarningconfig> configList = forewarningconfigService.list(new LambdaQueryWrapper<StIvtForewarningconfig>() |
|
|
@ -102,8 +101,8 @@ public class ForewarningTask { |
|
|
|
.eq(StIvtForewarningmaterial::getIs_delete, false) |
|
|
|
.in(StIvtForewarningmaterial::getConfig_id, configStringList)); |
|
|
|
|
|
|
|
List<String> materialIdList = materialList.stream().map(StIvtForewarningmaterial::getMaterial_id).collect(Collectors.toList()); |
|
|
|
List<String> storCodeList = configList.stream().map(StIvtForewarningconfig::getStor_code).collect(Collectors.toList()); |
|
|
|
Set<String> materialIdList = materialList.stream().map(StIvtForewarningmaterial::getMaterial_id).collect(Collectors.toSet()); |
|
|
|
Set<String> storCodeList = configList.stream().map(StIvtForewarningconfig::getStor_code).collect(Collectors.toSet()); |
|
|
|
// 查询库存信息
|
|
|
|
Map<String, Object> queryMap = new HashMap(); |
|
|
|
queryMap.put("stor_code_list", storCodeList); |
|
|
@ -117,21 +116,31 @@ public class ForewarningTask { |
|
|
|
//3. 通过st_ivt_forewarningconfig表的id字段,匹配上st_ivt_forewarningmaterial表的config_id字段,获取对应的物料
|
|
|
|
List<StIvtForewarningmaterial> configMaterialList = materialList.stream(). |
|
|
|
filter(a -> config.getId().equals(a.getConfig_id())).collect(Collectors.toList()); |
|
|
|
|
|
|
|
// 按照struct_code对mdPbStoragevehicleextDtos进行分组
|
|
|
|
Map<String, List<MdPbStoragevehicleextDto>> structCodeGroupMap = mdPbStoragevehicleextDtos.stream() |
|
|
|
.filter(a->config.getStor_code().equals(a.getStor_code())) |
|
|
|
.collect(Collectors.groupingBy(MdPbStoragevehicleextDto::getStruct_code)); |
|
|
|
|
|
|
|
// 4. 循环,判断每条数据下的对应物料的安全库存数量、入库时间(以组盘时间为准)
|
|
|
|
for (StIvtForewarningmaterial material : configMaterialList) { |
|
|
|
|
|
|
|
// 遍历structCodeGroupMap,获取每个struct_code下的mdPbStoragevehicleextDtos
|
|
|
|
for (Map.Entry<String, List<MdPbStoragevehicleextDto>> entry : structCodeGroupMap.entrySet()) { |
|
|
|
List<MdPbStoragevehicleextDto> mdPbStoragevehicleextDtoStructs = entry.getValue(); |
|
|
|
|
|
|
|
|
|
|
|
// 计算安全库存数量
|
|
|
|
BigDecimal totalQty = mdPbStoragevehicleextDtos.stream() |
|
|
|
BigDecimal totalQty = mdPbStoragevehicleextDtoStructs.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); |
|
|
|
|
|
|
|
|
|
|
|
// 计算最早的组盘时间
|
|
|
|
LocalDateTime earliestPlate = null; |
|
|
|
try { |
|
|
|
earliestPlate = mdPbStoragevehicleextDtos.stream() |
|
|
|
earliestPlate = mdPbStoragevehicleextDtoStructs.stream() |
|
|
|
.filter(a -> config.getStor_code().equals(a.getStor_code()) |
|
|
|
&& material.getMaterial_id().equals(a.getMaterial_id())) |
|
|
|
.map(a -> { |
|
|
@ -160,16 +169,21 @@ public class ForewarningTask { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 5. 分别生成st_ivt_safetyforewarning(安全库存数量超期) 和 st_ivt_overdueforewarning(安全库存天数超期)
|
|
|
|
// 安全库存数量超期
|
|
|
|
if (config.getSafe_qty() != null && totalQty.compareTo(config.getSafe_qty()) > 0) { |
|
|
|
// 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.setSafe_qty(config.getSafe_qty()); |
|
|
|
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"); |
|
|
@ -177,7 +191,7 @@ public class ForewarningTask { |
|
|
|
stIvtSafetyforewarningService.save(safety); |
|
|
|
} |
|
|
|
|
|
|
|
// 安全库存天数超期
|
|
|
|
// 超期天数超期
|
|
|
|
|
|
|
|
if (config.getSafe_days() != null && daysDiff.compareTo(config.getSafe_days()) > 0) { |
|
|
|
// 将 earliestPlate 转化成 yyyy-MM-dd HH:mm:ss 的String 类型
|
|
|
@ -191,13 +205,17 @@ public class ForewarningTask { |
|
|
|
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); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|