|
@@ -1758,7 +1758,14 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
|
|
|
JSONObject result = new JSONObject();
|
|
|
List<String> skippedHeatNos = new ArrayList<>();
|
|
|
|
|
|
- // 根据 billetHotsendTypeConfigId 查询基础垛位信息
|
|
|
+ String ccmNo = addDTO.getCcmNo() == null || addDTO.getCcmNo().isEmpty() ? "5" : addDTO.getCcmNo();
|
|
|
+ String classShift = String.format("class:shift:%s", ccmNo);
|
|
|
+ String classShiftGroup = String.format("class:shift:group:%s", ccmNo);
|
|
|
+
|
|
|
+ String shift = oConvertUtils.getString(redisTemplate.opsForValue().get(classShift));
|
|
|
+ String shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(classShiftGroup));
|
|
|
+
|
|
|
+ // 查询基础垛位信息
|
|
|
BilletHotsendTypeConfig billetHotsendTypeConfig = billetHotsendTypeConfigService.getByParam(addDTO);
|
|
|
|
|
|
// 查询是否已存在打印记录
|
|
@@ -1792,7 +1799,6 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
|
|
|
int delta = currentCount;
|
|
|
|
|
|
if (alreadyPrinted) {
|
|
|
- // 汇总历史支数
|
|
|
int previousCount = existingPrints.stream()
|
|
|
.mapToInt(print -> {
|
|
|
try {
|
|
@@ -1821,7 +1827,6 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
- // 首次:支数必须为4的倍数
|
|
|
if (currentCount % 4 != 0) {
|
|
|
skippedHeatNos.add(heatNo + "(支数非4倍数)");
|
|
|
continue;
|
|
@@ -1860,10 +1865,7 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
|
|
|
List<StackingAndLoadingVehicles> selected = new ArrayList<>(vehicles.subList(0, processCount));
|
|
|
vehicles.subList(0, processCount).clear();
|
|
|
|
|
|
- // 执行堆垛逻辑
|
|
|
- handleStackDepartCommon(billetHotsend, selected, addDTO, billetHotsendTypeConfig, storageBill);
|
|
|
-
|
|
|
- // 每次处理完成后,扣减原始记录中的 stack_length 数量
|
|
|
+ // 查询原始记录
|
|
|
LambdaQueryWrapper<BilletOriginalProductRecord> recordWrapper = new LambdaQueryWrapper<>();
|
|
|
recordWrapper.eq(BilletOriginalProductRecord::getHeatNo, heatNo)
|
|
|
.eq(BilletOriginalProductRecord::getCcmNo, addDTO.getCcmNo())
|
|
@@ -1871,43 +1873,59 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
|
|
|
.last("limit 1");
|
|
|
|
|
|
BilletOriginalProductRecord originalRecord = billetOriginalProductRecordService.getOne(recordWrapper);
|
|
|
- if (originalRecord != null && StringUtils.isNotBlank(originalRecord.getStackLength())) {
|
|
|
- try {
|
|
|
- List<Map<String, Object>> stackList = JSON.parseObject(originalRecord.getStackLength(),
|
|
|
- new TypeReference<List<Map<String, Object>>>() {
|
|
|
- });
|
|
|
-
|
|
|
- // 找到匹配的 stackingLength 项进行扣减(定尺匹配)
|
|
|
- for (Map<String, Object> item : stackList) {
|
|
|
- Integer length = Integer.parseInt(item.get("stackingLength").toString());
|
|
|
- if (length != null && length.toString().equals(addDTO.getSize())) {
|
|
|
- Integer count = (Integer) item.get("stackingCount");
|
|
|
- if (count != null && count >= fetchCount * 4) {
|
|
|
- item.put("stackingCount", count - fetchCount * 4);
|
|
|
- } else {
|
|
|
- // 扣减超过当前数量,按0处理
|
|
|
- item.put("stackingCount", 0);
|
|
|
+
|
|
|
+ // 只有 shift 和 shiftGroup 与 redis 中一致时才处理
|
|
|
+ if (originalRecord != null
|
|
|
+ && StringUtils.equals(shift, originalRecord.getShift())
|
|
|
+ && StringUtils.equals(shiftGroup, originalRecord.getShiftGroup())
|
|
|
+ && isSameDay(originalRecord.getCreateTime(), new Date())) {
|
|
|
+
|
|
|
+ // 执行堆垛处理
|
|
|
+ handleStackDepartCommon(billetHotsend, selected, addDTO, billetHotsendTypeConfig, storageBill);
|
|
|
+
|
|
|
+ // 扣减 stackLength 中支数
|
|
|
+ if (StringUtils.isNotBlank(originalRecord.getStackLength())) {
|
|
|
+ try {
|
|
|
+ List<Map<String, Object>> stackList = JSON.parseObject(originalRecord.getStackLength(),
|
|
|
+ new TypeReference<List<Map<String, Object>>>() {
|
|
|
+ });
|
|
|
+
|
|
|
+ for (Map<String, Object> item : stackList) {
|
|
|
+ Integer length = Integer.parseInt(item.get("stackingLength").toString());
|
|
|
+ if (length != null && length.toString().equals(addDTO.getSize())) {
|
|
|
+ Integer count = (Integer) item.get("stackingCount");
|
|
|
+ if (count != null && count >= fetchCount * 4) {
|
|
|
+ item.put("stackingCount", count - fetchCount * 4);
|
|
|
+ } else {
|
|
|
+ item.put("stackingCount", 0);
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
- break;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- // 更新记录
|
|
|
- originalRecord.setStackLength(JSON.toJSONString(stackList));
|
|
|
- billetOriginalProductRecordService.updateById(originalRecord);
|
|
|
+ originalRecord.setStackLength(JSON.toJSONString(stackList));
|
|
|
+ billetOriginalProductRecordService.updateById(originalRecord);
|
|
|
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("解析 stack_length 出错", e);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("解析 stack_length 出错", e);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ } else {
|
|
|
+ skippedHeatNos.add(heatNo + "(班次或班组不一致,跳过处理)");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
result.put("success", "堆垛保存完成");
|
|
|
+ if (!skippedHeatNos.isEmpty()) {
|
|
|
+ result.put("skipped", skippedHeatNos);
|
|
|
+ }
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 堆垛保存、堆垛发车公共处理
|
|
|
*
|
|
@@ -1950,4 +1968,11 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
|
|
|
return stackingAndLoadingVehiclesList.stream().collect(Collectors.groupingBy(stackingAndLoadingVehicles -> stackingAndLoadingVehicles.getHeatNo() + "," + stackingAndLoadingVehicles.getShiftGroup() + "," + stackingAndLoadingVehicles.getShift()));
|
|
|
}
|
|
|
|
|
|
+ private boolean isSameDay(Date d1, Date d2) {
|
|
|
+ if (d1 == null || d2 == null) return false;
|
|
|
+ LocalDate date1 = d1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ LocalDate date2 = d2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ return date1.equals(date2);
|
|
|
+ }
|
|
|
+
|
|
|
}
|