|
@@ -1,6 +1,8 @@
|
|
|
package org.jeecg.modules.billet.rollClubOne.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -8,11 +10,26 @@ import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.jeecg.common.util.DateUtils;
|
|
|
import org.jeecg.common.util.oConvertUtils;
|
|
|
+import org.jeecg.modules.actualControl.billetActual.billetActual.entity.BilletBasicInfo;
|
|
|
+import org.jeecg.modules.actualControl.billetActual.billetActual.entity.BilletBasicInfoAdd;
|
|
|
+import org.jeecg.modules.actualControl.billetActual.billetActual.entity.BilletRulerConfig;
|
|
|
+import org.jeecg.modules.actualControl.billetActual.billetActual.entity.RollClubOneInfo;
|
|
|
+import org.jeecg.modules.actualControl.billetActual.billetActual.service.IBilletBasicInfoService;
|
|
|
+import org.jeecg.modules.actualControl.billetActual.billetActual.service.IBilletRulerConfigService;
|
|
|
+import org.jeecg.modules.actualControl.billetActual.billetAssemblyNumber.entity.BilletAssemblyNumber;
|
|
|
+import org.jeecg.modules.actualControl.billetActual.billetAssemblyNumber.mapper.BilletAssemblyNumberMapper;
|
|
|
+import org.jeecg.modules.actualControl.heatsActuals.entity.HeatsActuals;
|
|
|
+import org.jeecg.modules.actualControl.heatsActuals.service.IHeatsActualsService;
|
|
|
+import org.jeecg.modules.billet.billetHotsend.entity.BilletHotsend;
|
|
|
+import org.jeecg.modules.billet.billetHotsend.mapper.BilletHotsendBaseMapper;
|
|
|
import org.jeecg.modules.billet.billetHotsendChangeShift.entity.BilletHotsendChangeShift;
|
|
|
import org.jeecg.modules.billet.billetHotsendChangeShift.service.IBilletHotsendChangeShiftService;
|
|
|
+import org.jeecg.modules.billet.rollClubOne.entity.RollClubOne;
|
|
|
import org.jeecg.modules.billet.rollClubOne.entity.RollClubOneDetails;
|
|
|
import org.jeecg.modules.billet.rollClubOne.mapper.RollClubOneDetailsMapper;
|
|
|
+import org.jeecg.modules.billet.rollClubOne.mapper.RollClubOneMapper;
|
|
|
import org.jeecg.modules.billet.rollClubOne.service.IRollClubOneDetailsService;
|
|
|
+import org.jeecg.modules.billet.rollClubOne.service.IRollClubOneService;
|
|
|
import org.jeecg.modules.billet.storageBill.dto.RollDetailQueryDTO;
|
|
|
import org.jeecg.modules.billet.storageBill.mapper.StorageBillMapper;
|
|
|
import org.jeecg.modules.billet.storageBill.vo.RollOnDutyDataVo;
|
|
@@ -28,7 +45,9 @@ import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.IntStream;
|
|
|
|
|
|
/**
|
|
|
* @Description: 棒一明细信息
|
|
@@ -50,6 +69,25 @@ public class RollClubOneDetailsServiceImpl extends ServiceImpl<RollClubOneDetail
|
|
|
@Autowired
|
|
|
private StorageBillMapper storageBillMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IHeatsActualsService heatsActualsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BilletHotsendBaseMapper billetHotsendBaseMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IBilletBasicInfoService billetBasicInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IBilletRulerConfigService billetRulerConfigService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BilletAssemblyNumberMapper billetAssemblyNumberMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RollClubOneMapper rollClubOneMapper;
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public RollOnDutyDataVo queryOnDutyRecord(String ccmNo) {
|
|
|
RollOnDutyDataVo rollOnDutyVo = new RollOnDutyDataVo();
|
|
@@ -353,6 +391,384 @@ public class RollClubOneDetailsServiceImpl extends ServiceImpl<RollClubOneDetail
|
|
|
}
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
+ public String addBilletBasicHandle(BilletBasicInfoAdd billetBasicInfoAdd) {
|
|
|
+
|
|
|
+ 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 = "";
|
|
|
+ // 处理整炉补录钢坯逻辑
|
|
|
+ result = completeHeatsHandle(billetBasicInfoAdd, brandNumStr);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 整炉添加逻辑处理
|
|
|
+ *
|
|
|
+ * @param billetBasicInfoAdd
|
|
|
+ */
|
|
|
+ private String completeHeatsHandle(BilletBasicInfoAdd billetBasicInfoAdd, String brandNumStr) {
|
|
|
+
|
|
|
+ LambdaQueryWrapper<HeatsActuals> queryWrapper1 = new LambdaQueryWrapper<HeatsActuals>()
|
|
|
+ .eq(HeatsActuals::getHeatsCode, billetBasicInfoAdd.getHeatNo())
|
|
|
+ .orderByDesc(HeatsActuals::getCreateTime).last("limit 1");
|
|
|
+ HeatsActuals actualsCheck = heatsActualsService.getOne(queryWrapper1);
|
|
|
+ if (actualsCheck != null) {
|
|
|
+ return "炉次实绩中炉号重复,补录失败!";
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询基础信息
|
|
|
+ LambdaQueryWrapper<HeatsActuals> queryWrapper = new LambdaQueryWrapper<HeatsActuals>()
|
|
|
+ .eq(HeatsActuals::getCasterCode, billetBasicInfoAdd.getCcmNo())
|
|
|
+ .orderByDesc(HeatsActuals::getCreateTime).last("limit 1");
|
|
|
+ HeatsActuals actuals = heatsActualsService.getOne(queryWrapper);
|
|
|
+
|
|
|
+ HeatsActuals heatsActuals = new HeatsActuals();
|
|
|
+ BeanUtils.copyProperties(actuals, heatsActuals);
|
|
|
+
|
|
|
+ try {
|
|
|
+ heatsActuals.setId(String.valueOf(IdWorker.getId()));
|
|
|
+ heatsActuals.setHeatsCode(billetBasicInfoAdd.getHeatNo());
|
|
|
+ heatsActuals.setShift(billetBasicInfoAdd.getShift());
|
|
|
+ heatsActuals.setShiftGroup(billetBasicInfoAdd.getShiftGroup());
|
|
|
+ //根据最新一炉的炉次信息计算 空包重量核算
|
|
|
+ if (heatsActuals.getMoltenSteelWeight() > 0 && heatsActuals.getFullLadleWeight() > 0) { // 如果钢水重量存在核算
|
|
|
+ heatsActuals.setEmptyLadleWeight(heatsActuals.getFullLadleWeight() - heatsActuals.getMoltenSteelWeight());
|
|
|
+ }
|
|
|
+ // 整理添加总支数
|
|
|
+ heatsActuals.setBilletSum(0);
|
|
|
+ heatsActuals.setBlankOutput(0.0d);
|
|
|
+ heatsActuals.setCreateTime(new Date());
|
|
|
+ heatsActuals.setUpdateTime(new Date());
|
|
|
+ heatsActualsService.save(heatsActuals);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("整炉补坯保存炉次实绩数据出现异常", e);
|
|
|
+ throw new RuntimeException("整炉补坯保存炉次实绩数据出现失败!", e);
|
|
|
+ }
|
|
|
+ log.info("1炉次实绩插入:" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+ //新增炉次传递单
|
|
|
+ BilletHotsend billetHotsend = new BilletHotsend();
|
|
|
+ billetHotsend.setId(String.valueOf(IdWorker.getId()));
|
|
|
+ billetHotsend.setCcmNo(billetBasicInfoAdd.getCcmNo()); // 铸机号
|
|
|
+ billetHotsend.setHeatNo(billetBasicInfoAdd.getHeatNo()); // 炉号
|
|
|
+ billetHotsend.setShiftGroup(billetBasicInfoAdd.getShiftGroup()); // 班组
|
|
|
+ billetHotsend.setShift(billetBasicInfoAdd.getShift()); // 班别
|
|
|
+ billetHotsend.setSteel(heatsActuals.getGrade()); // 钢种
|
|
|
+ billetHotsend.setSpec(heatsActuals.getSpec()); // 规格
|
|
|
+
|
|
|
+ billetHotsend.setBrandNum(brandNumStr);
|
|
|
+ billetHotsend.setAmountTotal(heatsActuals.getBilletSum()); // 支数
|
|
|
+ billetHotsend.setBlankOutput(0.0d); // 出批量
|
|
|
+ billetHotsend.setDecideWeight(0.0d); // 定重
|
|
|
+ billetHotsend.setWasteBlankOutput(0.0);
|
|
|
+ billetHotsend.setCreateTime(new Date());
|
|
|
+ billetHotsend.setUpdateTime(new Date());
|
|
|
+ billetHotsendBaseMapper.insert(billetHotsend);
|
|
|
+ log.info("2炉次传递单插入:" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+ LambdaQueryWrapper<BilletBasicInfo> queryWrapperB = new LambdaQueryWrapper<BilletBasicInfo>()
|
|
|
+ .eq(BilletBasicInfo::getCcmNo, billetBasicInfoAdd.getCcmNo())
|
|
|
+ .orderByDesc(BilletBasicInfo::getCreateTime).last("limit 1");
|
|
|
+ BilletBasicInfo billetInfo = billetBasicInfoService.getOne(queryWrapperB);
|
|
|
+
|
|
|
+ BilletBasicInfo billetBasicInfo = new BilletBasicInfo();
|
|
|
+ BeanUtils.copyProperties(billetInfo, billetBasicInfo);
|
|
|
+ // 去棒一数据补录
|
|
|
+
|
|
|
+ int oneStrandRemainSum = 0;
|
|
|
+ int twoStrandRemainSum = 0;
|
|
|
+ int threeStrandRemainSum = 0;
|
|
|
+ int fourStrandRemainSum = 0;
|
|
|
+ int fiveStrandRemainSum = 0;
|
|
|
+ int sixStrandRemainSum = 0;
|
|
|
+
|
|
|
+ // 有去组批的,有去棒一的(混合情况) 1、先处理去棒一的数据 2、在减掉棒一的数量,剩余的进行组批
|
|
|
+ List<BilletBasicInfo> rollClubOneResultList = new ArrayList<>();
|
|
|
+ // 添加棒一明细
|
|
|
+ List<RollClubOneInfo> rollClubOneList = billetBasicInfoAdd.getRollClubOneList();
|
|
|
+
|
|
|
+ // 提取所有需要查询的长度
|
|
|
+ Set<Integer> lengthSet = new HashSet<>();
|
|
|
+ for (RollClubOneInfo item : rollClubOneList) {
|
|
|
+ if (item != null && item.getLength() != null) {
|
|
|
+ lengthSet.add(item.getLength());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 预查询所有长度对应的定尺规则,避免循环中重复查询
|
|
|
+ Map<Integer, BilletRulerConfig> rulerConfigMap = new HashMap<>();
|
|
|
+ if (!lengthSet.isEmpty()) {
|
|
|
+ LambdaQueryWrapper<BilletRulerConfig> queryWrapperRC = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapperRC.in(BilletRulerConfig::getLength, lengthSet);
|
|
|
+ List<BilletRulerConfig> configList = billetRulerConfigService.list(queryWrapperRC);
|
|
|
+ for (BilletRulerConfig config : configList) {
|
|
|
+ rulerConfigMap.put(config.getLength(), config);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("开始去棒一数据组装:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+ // 遍历 RollClubOneInfo 列表
|
|
|
+ for (RollClubOneInfo item : rollClubOneList) {
|
|
|
+ Integer strandNo = item.getStrandNo();
|
|
|
+ Integer length = item.getLength();
|
|
|
+ Integer addSum = item.getAddSum();
|
|
|
+ if (strandNo == 1 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getOneStrandNoSum())) {
|
|
|
+ oneStrandRemainSum = billetBasicInfoAdd.getOneStrandNoSum() - addSum;
|
|
|
+ } else if (strandNo == 2 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getTwoStrandNoSum())) {
|
|
|
+ twoStrandRemainSum = billetBasicInfoAdd.getTwoStrandNoSum() - addSum;
|
|
|
+ } else if (strandNo == 3 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getThreeStrandNoSum())) {
|
|
|
+ threeStrandRemainSum = billetBasicInfoAdd.getThreeStrandNoSum() - addSum;
|
|
|
+ } else if (strandNo == 4 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getFourStrandNoSum())) {
|
|
|
+ fourStrandRemainSum = billetBasicInfoAdd.getFourStrandNoSum() - addSum;
|
|
|
+ } else if (strandNo == 5 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getFiveStrandNoSum())) {
|
|
|
+ fiveStrandRemainSum = billetBasicInfoAdd.getFiveStrandNoSum() - addSum;
|
|
|
+ } else if (strandNo == 6 && oConvertUtils.isNotEmpty(billetBasicInfoAdd.getSixStrandNoSum())) {
|
|
|
+ sixStrandRemainSum = billetBasicInfoAdd.getSixStrandNoSum() - addSum;
|
|
|
+ }
|
|
|
+ // 根据 addSum 生成对应数量的 BilletBasicInfo 对象
|
|
|
+ for (int i = 0; i < addSum; i++) {
|
|
|
+ BilletBasicInfo billet = new BilletBasicInfo();
|
|
|
+ BeanUtils.copyProperties(billetBasicInfo, billet);
|
|
|
+ billet.setStrandNo(strandNo);
|
|
|
+ billet.setLength(length);
|
|
|
+ // 设置其他必要属性
|
|
|
+ billet.setId(String.valueOf(IdWorker.getId()));
|
|
|
+ billet.setHeatNo(billetBasicInfoAdd.getHeatNo());
|
|
|
+ String billetNo = generateUniqueBilletNo(Integer.valueOf(billetBasicInfoAdd.getCcmNo()), billetBasicInfoAdd.getHeatNo());
|
|
|
+ billet.setBilletNo(billetNo);
|
|
|
+ billet.setCreateTime(new Date());
|
|
|
+ billet.setUpdateTime(new Date());
|
|
|
+ billet.setAssemblyNumber(null);
|
|
|
+ billet.setBelongTable("roll_club_one");
|
|
|
+ billet.setBhtcId("1");
|
|
|
+ // 优化:从预查询的映射表中获取定尺规则,避免重复查询数据库
|
|
|
+ BilletRulerConfig billetRulerConfig = rulerConfigMap.get(length);
|
|
|
+ Double weight = billetRulerConfig != null ? billetRulerConfig.getWeight() : billetBasicInfo.getWeight();
|
|
|
+ billet.setWeight(weight);
|
|
|
+ billet.setBilletWeight(weight);
|
|
|
+ rollClubOneResultList.add(billet);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("结束去棒一数据组装:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+ if (oConvertUtils.listIsNotEmpty(rollClubOneResultList)) {
|
|
|
+ log.info("开始整炉去棒一明细处理:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+ // 去棒一明细处理
|
|
|
+ saveRollClubOneInfo(rollClubOneResultList, billetBasicInfoAdd);
|
|
|
+ log.info("结束整炉去棒一明细处理:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("开始处理每流剩余:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+ List<BilletBasicInfo> result = new ArrayList<>();
|
|
|
+ if (oneStrandRemainSum > 0) {
|
|
|
+ List<BilletBasicInfo> billetBasicInfoList = saveBilletBasicInfoList(billetBasicInfo, billetBasicInfoAdd, oneStrandRemainSum, 1, billetBasicInfoAdd.getOneLength());
|
|
|
+ result.addAll(billetBasicInfoList);
|
|
|
+ }
|
|
|
+ if (twoStrandRemainSum > 0) {
|
|
|
+ List<BilletBasicInfo> billetBasicInfoList = saveBilletBasicInfoList(billetBasicInfo, billetBasicInfoAdd, twoStrandRemainSum, 2, billetBasicInfoAdd.getTwoLength());
|
|
|
+ result.addAll(billetBasicInfoList);
|
|
|
+ }
|
|
|
+ if (threeStrandRemainSum > 0) {
|
|
|
+ List<BilletBasicInfo> billetBasicInfoList = saveBilletBasicInfoList(billetBasicInfo, billetBasicInfoAdd, threeStrandRemainSum, 3, billetBasicInfoAdd.getThreeLength());
|
|
|
+ result.addAll(billetBasicInfoList);
|
|
|
+ }
|
|
|
+ if (fourStrandRemainSum > 0) {
|
|
|
+ List<BilletBasicInfo> billetBasicInfoList = saveBilletBasicInfoList(billetBasicInfo, billetBasicInfoAdd, fourStrandRemainSum, 4, billetBasicInfoAdd.getFourLength());
|
|
|
+ result.addAll(billetBasicInfoList);
|
|
|
+ }
|
|
|
+ if (fiveStrandRemainSum > 0) {
|
|
|
+ List<BilletBasicInfo> billetBasicInfoList = saveBilletBasicInfoList(billetBasicInfo, billetBasicInfoAdd, fiveStrandRemainSum, 5, billetBasicInfoAdd.getFiveLength());
|
|
|
+ result.addAll(billetBasicInfoList);
|
|
|
+ }
|
|
|
+ if (sixStrandRemainSum > 0) {
|
|
|
+ List<BilletBasicInfo> billetBasicInfoList = saveBilletBasicInfoList(billetBasicInfo, billetBasicInfoAdd, sixStrandRemainSum, 6, billetBasicInfoAdd.getSixLength());
|
|
|
+ result.addAll(billetBasicInfoList);
|
|
|
+ }
|
|
|
+ log.info("结束处理每流剩余:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+
|
|
|
+ result.addAll(rollClubOneResultList);
|
|
|
+
|
|
|
+ List<BilletBasicInfo> finalBilletBasicInfoListSort = updateBilletBasicInfoAndSave(result);
|
|
|
+
|
|
|
+ billetBasicInfoService.saveOrUpdateBatch(finalBilletBasicInfoListSort);
|
|
|
+
|
|
|
+ log.info("开始整炉去除棒一组批更新处理:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+
|
|
|
+
|
|
|
+ // 更新炉次传递单中的总数和坯重
|
|
|
+ double totalBilletWeight = finalBilletBasicInfoListSort.stream()
|
|
|
+ .mapToDouble(BilletBasicInfo::getBilletWeight)
|
|
|
+ .sum();
|
|
|
+ billetHotsend.setAmountTotal(finalBilletBasicInfoListSort.size());
|
|
|
+ billetHotsend.setBlankOutput(totalBilletWeight);
|
|
|
+
|
|
|
+ if (oConvertUtils.listIsNotEmpty(rollClubOneResultList) && rollClubOneResultList.size() > 0) {
|
|
|
+ billetHotsend.setRollcluboneNum(rollClubOneResultList.size());
|
|
|
+ }
|
|
|
+ log.info("炉次传递单更新:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+ billetHotsendBaseMapper.updateById(billetHotsend);
|
|
|
+
|
|
|
+ // 更新炉次实绩中的总数和坯重
|
|
|
+ heatsActuals.setBlankOutput(totalBilletWeight);
|
|
|
+ heatsActuals.setBilletSum(finalBilletBasicInfoListSort.size());
|
|
|
+ log.info("炉次实绩更新:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
|
|
|
+ heatsActualsService.updateById(heatsActuals);
|
|
|
+
|
|
|
+ return "整炉补录成功!";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 整炉处理
|
|
|
+ *
|
|
|
+ * @param billetBasicInfo
|
|
|
+ * @param billetBasicInfoAdd
|
|
|
+ * @param addSum
|
|
|
+ * @param strandNo
|
|
|
+ * @param length
|
|
|
+ */
|
|
|
+ private List<BilletBasicInfo> saveBilletBasicInfoList(BilletBasicInfo billetBasicInfo, BilletBasicInfoAdd billetBasicInfoAdd, int addSum, int strandNo, int length) {
|
|
|
+ List<BilletBasicInfo> resultList = new ArrayList<>();
|
|
|
+
|
|
|
+ // 批量查询定尺规则
|
|
|
+ LambdaQueryWrapper<BilletRulerConfig> queryWrapper = new LambdaQueryWrapper<BilletRulerConfig>().eq(BilletRulerConfig::getLength, billetBasicInfo.getLength());
|
|
|
+ List<BilletRulerConfig> billetRulerConfigs = billetRulerConfigService.list(queryWrapper);
|
|
|
+ Map<Integer, BilletRulerConfig> rulerConfigMap = billetRulerConfigs.stream()
|
|
|
+ .collect(Collectors.toMap(BilletRulerConfig::getLength, Function.identity()));
|
|
|
+
|
|
|
+ // 根据 addSum 生成对应数量的 BilletBasicInfo 对象
|
|
|
+ for (int i = 0; i < addSum; i++) {
|
|
|
+ BilletBasicInfo billet = new BilletBasicInfo();
|
|
|
+ BeanUtils.copyProperties(billetBasicInfo, billet);
|
|
|
+ billet.setStrandNo(strandNo);
|
|
|
+ billet.setLength(length);
|
|
|
+ // 设置其他必要属性
|
|
|
+ billet.setId(String.valueOf(IdWorker.getId()));
|
|
|
+ billet.setHeatNo(billetBasicInfoAdd.getHeatNo());
|
|
|
+ String billetNo = generateUniqueBilletNo(Integer.valueOf(billetBasicInfoAdd.getCcmNo()), billetBasicInfoAdd.getHeatNo());
|
|
|
+ billet.setBilletNo(billetNo);
|
|
|
+ billet.setCreateTime(new Date());
|
|
|
+ billet.setUpdateTime(new Date());
|
|
|
+ billet.setAssemblyNumber(null);
|
|
|
+ billet.setBelongTable(null);
|
|
|
+ billet.setBhtcId(null);
|
|
|
+
|
|
|
+ // 获取定尺规则
|
|
|
+ BilletRulerConfig billetRulerConfig = rulerConfigMap.get(billetBasicInfo.getLength());
|
|
|
+ Double weight = Optional.ofNullable(billetRulerConfig)
|
|
|
+ .map(BilletRulerConfig::getWeight)
|
|
|
+ .orElse(billetBasicInfo.getWeight());
|
|
|
+
|
|
|
+ billet.setWeight(weight);
|
|
|
+ billet.setBilletWeight(weight);
|
|
|
+ resultList.add(billet);
|
|
|
+ }
|
|
|
+ return resultList;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成唯一的坯号
|
|
|
+ *
|
|
|
+ * @return 坯号
|
|
|
+ */
|
|
|
+ private String generateUniqueBilletNo(Integer ccmNo, String heatNo) {
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成唯一的组坯号
|
|
|
+ *
|
|
|
+ * @return 坯号
|
|
|
+ */
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理流内顺序号、和炉内顺序号
|
|
|
+ *
|
|
|
+ * @param resultList
|
|
|
+ */
|
|
|
+ public List<BilletBasicInfo> updateBilletBasicInfoAndSave(List<BilletBasicInfo> resultList) {
|
|
|
+ if (oConvertUtils.listIsEmpty(resultList)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ Map<Integer, List<BilletBasicInfo>> strandNoGroupMap = resultList.stream()
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getStrandNo));
|
|
|
+ // 并行处理每个分组(可选优化,适用于多核CPU和大量分组)
|
|
|
+ strandNoGroupMap.values().parallelStream().forEach(groupList -> {
|
|
|
+ for (int i = 0; i < groupList.size(); i++) {
|
|
|
+ groupList.get(i).setStrandnoIndex(i + 1); // 流内顺序号从1开始
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 设置炉内顺序号(全局顺序)
|
|
|
+ IntStream.range(0, resultList.size()).forEach(i -> resultList.get(i).setHeatnoIndex(i + 1));
|
|
|
+ return resultList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 整理补录,去棒一钢坯,炉内顺序号、流号处理,轧钢棒一、棒一明细保存
|
|
|
+ *
|
|
|
+ * @param billetBasicInfoList
|
|
|
+ * @param billetBasicInfoAdd
|
|
|
+ */
|
|
|
+ private void saveRollClubOneInfo(List<BilletBasicInfo> billetBasicInfoList, BilletBasicInfoAdd billetBasicInfoAdd) {
|
|
|
+ // 对 resultList 中的元素按 Strandno 分组后重新赋值 StrandnoIndex
|
|
|
+ // 更新炉次传递单中的总数和坯重
|
|
|
+ double rollClubOneWeight = billetBasicInfoList.stream()
|
|
|
+ .mapToDouble(BilletBasicInfo::getBilletWeight)
|
|
|
+ .sum();
|
|
|
+
|
|
|
+ RollClubOne rollClubOne = new RollClubOne();
|
|
|
+ rollClubOne.setId(String.valueOf(IdWorker.getId()));
|
|
|
+ rollClubOne.setCcmNo(billetBasicInfoAdd.getCcmNo());
|
|
|
+ rollClubOne.setHeatNo(billetBasicInfoAdd.getHeatNo());
|
|
|
+ rollClubOne.setShiftGroup(billetBasicInfoAdd.getShiftGroup());
|
|
|
+ rollClubOne.setShift(billetBasicInfoAdd.getShift());
|
|
|
+ rollClubOne.setBlankOutput(rollClubOneWeight);
|
|
|
+ rollClubOne.setSize(String.valueOf(billetBasicInfoList.stream().findFirst().orElse(null).getLength())); //定尺
|
|
|
+ rollClubOne.setSteel(String.valueOf(billetBasicInfoList.stream().findFirst().orElse(null).getGrade())); //钢种
|
|
|
+ rollClubOne.setSpec(String.valueOf(billetBasicInfoList.stream().findFirst().orElse(null).getSpec())); //规格
|
|
|
+ rollClubOne.setBlankOutput(billetBasicInfoList.stream().mapToDouble(BilletBasicInfo::getBilletWeight).sum());//出坯量总和
|
|
|
+ rollClubOne.setCreateDate(new Date());
|
|
|
+ rollClubOne.setCreateTime(new Date());
|
|
|
+ rollClubOneMapper.insert(rollClubOne);
|
|
|
+
|
|
|
+ // 保存棒一明细信息
|
|
|
+ List<RollClubOneDetails> rollClubOneDetailsList = new ArrayList<>();
|
|
|
+ billetBasicInfoList.forEach(x -> {
|
|
|
+ RollClubOneDetails rollClubOneDetails = new RollClubOneDetails();
|
|
|
+ BeanUtils.copyProperties(x, rollClubOneDetails);
|
|
|
+ rollClubOneDetails.setId(String.valueOf(IdWorker.getId()));
|
|
|
+ rollClubOneDetails.setCcmNo(billetBasicInfoAdd.getCcmNo());
|
|
|
+ rollClubOneDetails.setShift(billetBasicInfoAdd.getShift());
|
|
|
+ rollClubOneDetails.setStartNum(0);
|
|
|
+ rollClubOneDetails.setEndNum(1);
|
|
|
+ rollClubOneDetails.setShiftGroup(billetBasicInfoAdd.getShiftGroup());
|
|
|
+ rollClubOneDetails.setLicensePlate("辊道");
|
|
|
+ rollClubOneDetails.setSize(String.valueOf(x.getLength()));
|
|
|
+ rollClubOneDetails.setSteel(x.getGrade());
|
|
|
+ rollClubOneDetails.setCreateTime(new Date());
|
|
|
+ rollClubOneDetails.setBlankOutput(x.getBilletWeight());//出坯量
|
|
|
+ rollClubOneDetailsList.add(rollClubOneDetails);
|
|
|
+ });
|
|
|
+
|
|
|
+ for (RollClubOneDetails rollClubOneDetails : rollClubOneDetailsList) {
|
|
|
+ baseMapper.insert(rollClubOneDetails);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 从Redis中获取班组班别
|
|
|
*
|