|
@@ -145,9 +145,9 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
private ConfigMqttMapper configMqttMapper;
|
|
|
@Autowired
|
|
|
private IBilletRulerConfigService billetRulerConfigService;
|
|
|
+ @Autowired
|
|
|
+ private BilletAssemblyNumberMapper billetAssemblyNumberMapper;
|
|
|
|
|
|
- private static final Random RANDOM = ThreadLocalRandom.current();
|
|
|
- private static final AtomicInteger COUNTER = new AtomicInteger(0);
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -1374,12 +1374,12 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
|
|
|
String brandNum = String.format("billet:basic:info:brand:num:%s", billetBasicInfoAdd.getCcmNo()); // 牌号
|
|
|
String brandNumStr = !oConvertUtils.getString(redisTemplate.opsForValue().get(brandNum)).isEmpty() ? oConvertUtils.getString(redisTemplate.opsForValue().get(brandNum)) : "";
|
|
|
-
|
|
|
+ String result = "";
|
|
|
if (billetBasicInfoAdd.getAddType() == 1){
|
|
|
// 处理整炉补录钢坯逻辑
|
|
|
- completeHeatsHandle(billetBasicInfoAdd, brandNumStr);
|
|
|
+ result = completeHeatsHandle(billetBasicInfoAdd, brandNumStr);
|
|
|
}
|
|
|
- return "整炉补录成功!";
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1555,7 +1555,7 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
int start = i;
|
|
|
int end = Math.min(i + 4, maxProcessed);
|
|
|
// 生成组批号(优化:直接生成随机数,避免雪花算法开销)
|
|
|
- String assemblyNumber = generateUniqueAssemblyNumber(billetBasicInfoAdd.getHeatNo());
|
|
|
+ String assemblyNumber = generateUniqueAssemblyNumber(billetBasicInfoAdd.getCcmNo(), billetBasicInfoAdd.getHeatNo());
|
|
|
// 为当前分组的4条记录设置相同组批号,并添加到更新列表
|
|
|
List<BilletBasicInfo> batch = finalBilletBasicInfoList.subList(start, end);
|
|
|
batch.forEach(item -> item.setAssemblyNumber(assemblyNumber));
|
|
@@ -1618,17 +1618,17 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
Integer strandNo = item.getStrandNo();
|
|
|
Integer length = item.getLength();
|
|
|
Integer addSum = item.getAddSum();
|
|
|
- if (strandNo == 1){
|
|
|
+ if (strandNo == 1 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getOneStrandNoSum())){
|
|
|
oneStrandRemainSum = billetBasicInfoAdd.getOneStrandNoSum() - addSum;
|
|
|
- }else if (strandNo == 2){
|
|
|
+ }else if (strandNo == 2 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getTwoStrandNoSum())){
|
|
|
twoStrandRemainSum = billetBasicInfoAdd.getTwoStrandNoSum() - addSum;
|
|
|
- }else if (strandNo == 3){
|
|
|
+ }else if (strandNo == 3 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getThreeStrandNoSum())){
|
|
|
threeStrandRemainSum = billetBasicInfoAdd.getThreeStrandNoSum() - addSum;
|
|
|
- }else if (strandNo == 4){
|
|
|
+ }else if (strandNo == 4 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getFourStrandNoSum())){
|
|
|
fourStrandRemainSum = billetBasicInfoAdd.getFourStrandNoSum() - addSum;
|
|
|
- }else if (strandNo == 5){
|
|
|
+ }else if (strandNo == 5 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getFiveStrandNoSum())){
|
|
|
fiveStrandRemainSum = billetBasicInfoAdd.getFiveStrandNoSum() - addSum;
|
|
|
- }else if (strandNo == 6){
|
|
|
+ }else if (strandNo == 6 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getSixStrandNoSum())){
|
|
|
sixStrandRemainSum = billetBasicInfoAdd.getSixStrandNoSum() - addSum;
|
|
|
}
|
|
|
// 根据 addSum 生成对应数量的 BilletBasicInfo 对象
|
|
@@ -1701,9 +1701,15 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
}
|
|
|
log.info("结束处理每流剩余:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
|
|
|
- List<BilletBasicInfo> finalBilletBasicInfoList = updateBilletBasicInfoAndSave(result);
|
|
|
+ result.addAll(rollClubOneResultList);
|
|
|
|
|
|
- billetBasicInfoService.saveOrUpdateBatch(finalBilletBasicInfoList);
|
|
|
+ List<BilletBasicInfo> finalBilletBasicInfoListSort = updateBilletBasicInfoAndSave(result);
|
|
|
+
|
|
|
+ billetBasicInfoService.saveOrUpdateBatch(finalBilletBasicInfoListSort);
|
|
|
+
|
|
|
+ List<BilletBasicInfo> finalBilletBasicInfoList = finalBilletBasicInfoListSort.stream()
|
|
|
+ .filter(x -> !Objects.equals(x.getBelongTable(), "roll_club_one"))
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
log.info("开始整炉去除棒一组批更新处理:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
if (oConvertUtils.listIsNotEmpty(finalBilletBasicInfoList) && finalBilletBasicInfoList.size() >= 4) {
|
|
@@ -1715,7 +1721,7 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
int start = i;
|
|
|
int end = Math.min(i + 4, maxProcessed);
|
|
|
// 生成组批号(优化:直接生成随机数,避免雪花算法开销)
|
|
|
- String assemblyNumber = generateUniqueAssemblyNumber(billetBasicInfoAdd.getHeatNo());
|
|
|
+ String assemblyNumber = generateUniqueAssemblyNumber(billetBasicInfoAdd.getCcmNo(), billetBasicInfoAdd.getHeatNo());
|
|
|
// 为当前分组的4条记录设置相同组批号,并添加到更新列表
|
|
|
List<BilletBasicInfo> batch = finalBilletBasicInfoList.subList(start, end);
|
|
|
batch.forEach(item -> item.setAssemblyNumber(assemblyNumber));
|
|
@@ -1726,13 +1732,13 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
log.info("结束整炉去除棒一组批更新处理:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
|
|
|
// 去棒一的和组批的合计钢坯实绩信息
|
|
|
- finalBilletBasicInfoList.addAll(rollClubOneResultList);
|
|
|
+// finalBilletBasicInfoList.addAll(rollClubOneResultList);
|
|
|
|
|
|
// 更新炉次传递单中的总数和坯重
|
|
|
- double totalBilletWeight = finalBilletBasicInfoList.stream()
|
|
|
+ double totalBilletWeight = finalBilletBasicInfoListSort.stream()
|
|
|
.mapToDouble(BilletBasicInfo::getBilletWeight)
|
|
|
.sum();
|
|
|
- billetHotsend.setAmountTotal(finalBilletBasicInfoList.size());
|
|
|
+ billetHotsend.setAmountTotal(finalBilletBasicInfoListSort.size());
|
|
|
billetHotsend.setBlankOutput(totalBilletWeight);
|
|
|
|
|
|
if (oConvertUtils.listIsNotEmpty(rollClubOneResultList) && rollClubOneResultList.size() > 0){
|
|
@@ -1743,7 +1749,7 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
|
|
|
// 更新炉次实绩中的总数和坯重
|
|
|
heatsActuals.setBlankOutput(totalBilletWeight);
|
|
|
- heatsActuals.setBilletSum(finalBilletBasicInfoList.size());
|
|
|
+ heatsActuals.setBilletSum(finalBilletBasicInfoListSort.size());
|
|
|
log.info("炉次实绩更新:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
heatsActualsService.updateById(heatsActuals);
|
|
|
}
|
|
@@ -1757,8 +1763,8 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
*/
|
|
|
private void saveRollClubOneInfo(List<BilletBasicInfo> billetBasicInfoList, BilletBasicInfoAdd billetBasicInfoAdd) {
|
|
|
// 对 resultList 中的元素按 Strandno 分组后重新赋值 StrandnoIndex
|
|
|
- log.info("整炉去棒一的钢坯总数:{}", billetBasicInfoList.size());
|
|
|
- billetBasicInfoService.saveOrUpdateBatch(billetBasicInfoList);
|
|
|
+// log.info("整炉去棒一的钢坯总数:{}", billetBasicInfoList.size());
|
|
|
+// billetBasicInfoService.saveOrUpdateBatch(billetBasicInfoList);
|
|
|
|
|
|
// 更新炉次传递单中的总数和坯重
|
|
|
double rollClubOneWeight = billetBasicInfoList.stream()
|
|
@@ -1875,14 +1881,11 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
* @return 坯号
|
|
|
*/
|
|
|
private String generateUniqueBilletNo(Integer ccmNo, String heatNo) {
|
|
|
- // 获取当前时间戳的后4位(毫秒级精度)
|
|
|
- long timestampPart = System.currentTimeMillis() % 10000;
|
|
|
-
|
|
|
- // 使用原子计数器确保同一毫秒内的唯一性
|
|
|
- int counterPart = COUNTER.getAndIncrement() % 1000; // 0-999循环
|
|
|
-
|
|
|
- // 拼接:heatNo + ccmNo + 时间戳后4位 + 3位计数器
|
|
|
- return heatNo + ccmNo + String.format("%04d", timestampPart) + String.format("%03d", counterPart);
|
|
|
+ String billetNo;
|
|
|
+ do {
|
|
|
+ billetNo = heatNo + String.format("%04d", (int)(Math.random() * 10000));
|
|
|
+ } while (billetBasicInfoService.exists(new QueryWrapper<BilletBasicInfo>().eq("billet_no", billetNo). eq("ccm_no", ccmNo)));
|
|
|
+ return billetNo;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1890,12 +1893,15 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
|
|
|
*
|
|
|
* @return 坯号
|
|
|
*/
|
|
|
- private String generateUniqueAssemblyNumber(String heatNo) {
|
|
|
-
|
|
|
- long snowflakeId = IdWorker.getId();
|
|
|
-
|
|
|
- int randomPart = (int) (snowflakeId % 900 + 100);
|
|
|
-
|
|
|
- return heatNo + String.format("%07d", randomPart);
|
|
|
+ private String generateUniqueAssemblyNumber(String ccmNo, String heatNo) {
|
|
|
+ String assembly_number;
|
|
|
+ do {
|
|
|
+ assembly_number = heatNo + String.format("%07d", (int)(Math.random() * 10000000));
|
|
|
+ } while (billetAssemblyNumberMapper.exists(
|
|
|
+ new QueryWrapper<BilletAssemblyNumber>()
|
|
|
+ .eq("assembly_number", assembly_number)
|
|
|
+ .eq("ccm_no", ccmNo))
|
|
|
+ );
|
|
|
+ return assembly_number;
|
|
|
}
|
|
|
}
|