diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownTrussTask.java index aa91ef545..929d732c8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownTrussTask.java @@ -16,6 +16,7 @@ import org.nl.b_lms.sch.point.dao.StIvtCutpointivt; import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; @@ -111,17 +112,22 @@ public class SlitterDownTrussTask extends AbstractAcsTask { log.info("起点数据:{}", point1); log.info("终点数据:{}", point2); // 更新分切计划 - // 下来的分切计划状态:06 -> 09 - PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan(); - p.setStatus("09"); - p.setEnd_time(DateUtil.now()); - TaskUtils.updateOptMessageBySlitterPlan(p); + // 下来的分切计划状态:06 -> 09, 设置重量 List downQzzNos = Stream.of(tmpUpQzzNo, tmpDownQzzNo) .filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList()); log.info("即将下卷的上下轴的气胀轴编码数据:{}", downQzzNos); - slittingproductionplanService.update(p, new LambdaQueryWrapper() - .in(PdmBiSlittingproductionplan::getQzzno, downQzzNos)); + List downPlans = slittingproductionplanService.getByQzzNos(downQzzNos); + SlitterTaskUtil.setPaperWeightStr(point1.getRemark(), downPlans); + downPlans.forEach(downPlan -> { + downPlan.setStatus("09"); + downPlan.setEnd_time(DateUtil.now()); + TaskUtils.updateOptMessageBySlitterPlan(downPlan); + }); + slittingproductionplanService.updateBatchById(downPlans); + // 设置完了就清空 + point1.setRemark(""); // 上去的分切计划状态:04 -> 05 + PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan(); p.setStatus("05"); p.setEnd_time(""); List upQzzNos = Stream.of(point2.getQzz_no1(), point2.getQzz_no2()) @@ -130,6 +136,8 @@ public class SlitterDownTrussTask extends AbstractAcsTask { if (upQzzNos.size() > 0) { List plans = slittingproductionplanService.getByQzzNos(upQzzNos); PdmBiSlittingproductionplan pp = plans.get(0); + // 需要把重量记录到分切机上 + point1.setRemark(SlitterTaskUtil.getPaperWeightStr(plans)); if (pp.getContainer_name().contains("虚拟")) { // 如果是虚拟卷,需要执行删除标记,并且清空数据 // 将分切计划删除,设备禁用 @@ -142,7 +150,6 @@ public class SlitterDownTrussTask extends AbstractAcsTask { }); slittingproductionplanService.updateBatchById(plans); // 设备禁用 - point1.setIs_used("0"); point1.setUp_qzzno(""); point1.setDown_qzzno(""); } else { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/UpShaftTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/UpShaftTrussTask.java index 4226e685a..a8b0c3e37 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/UpShaftTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/UpShaftTrussTask.java @@ -15,6 +15,7 @@ import org.nl.b_lms.sch.point.dao.StIvtCutpointivt; import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; @@ -112,6 +113,7 @@ public class UpShaftTrussTask extends AbstractAcsTask { .filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList()); List plans = slittingproductionplanService.getByQzzNos(collect); PdmBiSlittingproductionplan pp = plans.get(0); + String weightStr = SlitterTaskUtil.getPaperWeightStr(plans); if (pp.getContainer_name().contains("虚拟")) { // 如果是虚拟卷,需要执行删除标记,并且清空数据 // 将分切计划删除,设备禁用 @@ -124,7 +126,6 @@ public class UpShaftTrussTask extends AbstractAcsTask { }); slittingproductionplanService.updateBatchById(plans); // 设备禁用 - point2.setIs_used("0"); point2.setUp_qzzno(""); point2.setDown_qzzno(""); } else { @@ -134,6 +135,7 @@ public class UpShaftTrussTask extends AbstractAcsTask { slittingproductionplanService.update(p, new LambdaQueryWrapper() .in(PdmBiSlittingproductionplan::getQzzno, collect)); } + point2.setRemark(weightStr); cutpointivtService.updateById(point2); point1.setQzz_no1(""); point1.setQzz_no2(""); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index 948367fe2..d965952d2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -514,19 +514,19 @@ public class SlitterServiceImpl implements SlitterService { String area = device.getProduct_area(); // 获取当前分切机的下一组分切计划(最多四条分切计划) // hint: 获取到的分切可能是不同组的但具有一定时间顺序 - List timePlans = slittingproductionplanService.list( - new LambdaQueryWrapper() - .eq(PdmBiSlittingproductionplan::getResource_name, device.getExt_code()) - .eq(PdmBiSlittingproductionplan::getStatus, "03") - .eq(PdmBiSlittingproductionplan::getIs_delete, "0") - .orderByAsc(PdmBiSlittingproductionplan::getUpdate_time)); - log.info("获取下一组分切计划(可能存在脏数据):{}", timePlans); +// List timePlans = slittingproductionplanService.list( +// new LambdaQueryWrapper() +// .eq(PdmBiSlittingproductionplan::getResource_name, actualDeviceCode) +// .eq(PdmBiSlittingproductionplan::getStatus, "03") +// .eq(PdmBiSlittingproductionplan::getIs_delete, "0") +// .orderByAsc(PdmBiSlittingproductionplan::getUpdate_time)); +// log.info("获取下一组分切计划(可能存在脏数据):{}", timePlans); // 寻找备好轴的对接点位 - List cutPointList = slitterMapper.getReadyShaftPoint(device.getExt_code()); + List cutPointList = slitterMapper.getReadyShaftPoint(actualDeviceCode); // 任务参数 JSONObject taskParam = new JSONObject(); taskParam.put("containers", containers); - if (timePlans.size() == 0 || cutPointList.size() == 0) { + if (cutPointList.size() == 0) { // 如果没有下一组的分切计划,就只做下卷任务(判断下单/下双) // 获取分切对接位没任务的空位置 List emptyPoints = slitterMapper.getEmptyCutPointNotTask(area, @@ -580,19 +580,16 @@ public class SlitterServiceImpl implements SlitterService { } } } - PdmBiSlittingproductionplan tmpPlan = timePlans.get(0); - // hint: 以第一条为准,过滤和第一条同组同母卷的分切计划 - List nextPlans = timePlans.stream() - .filter(plan -> plan.getParent_container_name().equals(tmpPlan.getParent_container_name()) - && plan.getRestruct_container_name().equals(tmpPlan.getRestruct_container_name()) - && plan.getSplit_group().equals(tmpPlan.getSplit_group())) + // 找到该分切计划的点位 + BstIvtCutpointivt newCutPoint = cutPointList.get(0); + List qzznos = Stream.of(newCutPoint.getQzz_no1(), newCutPoint.getQzz_no2()).filter(ObjectUtil::isNotEmpty) .collect(Collectors.toList()); + // hint: 以第一条为准,过滤和第一条同组同母卷的分切计划 + List nextPlans = slittingproductionplanService.getByQzzNos(qzznos); log.info("获取下一趟分切计划数据:{}", nextPlans); // 筛选上下轴各一条 PdmBiSlittingproductionplan nextUpPlan = nextPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).findFirst().orElse(null); PdmBiSlittingproductionplan nextDownPlan = nextPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).findFirst().orElse(null); - // 找到该分切计划的点位 - BstIvtCutpointivt newCutPoint = cutPointList.get(0); String binaryExpress = TaskUtils.binaryConvertExpress(currentUpPlan, currentDownPlan, nextUpPlan, nextDownPlan); switch (binaryExpress) { case "00": diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java index 502dd496f..1e7be5bc3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtil.java @@ -9,6 +9,8 @@ import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingprodu import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.modules.common.exception.BadRequestException; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -308,4 +310,103 @@ public class SlitterTaskUtil { String[] split = paperStr.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); return split[split.length - 1]; } + + /** + * 设置重量 + * @param plans 分切计划 + * @return 0,0,0,0 + */ + public static void setPaperWeightStr(String weightStr, List plans) { + // 1. 校验输入格式 + String[] parts = weightStr.split(","); + if (parts.length != 4) { + // 没有数据则不修改 + return; + } + + // 2. 遍历四个位置 + for (int index = 0; index < 4; index++) { + // 解析重量值(自动四舍五入到两位小数) + String strValue = parts[index]; + BigDecimal value; + try { + value = new BigDecimal(strValue).setScale(2, RoundingMode.HALF_UP); + } catch (NumberFormatException e) { + continue; // 跳过无效数值 + } + + // 3. 根据索引确定位置规则 + String expectedUp, expectedLeft; + switch (index) { + case 0: // 上左 + expectedUp = "1"; + expectedLeft = "1"; + break; + case 1: // 上右 + expectedUp = "1"; + expectedLeft = "2"; + break; + case 2: // 下左 + expectedUp = "2"; + expectedLeft = "1"; + break; + case 3: // 下右 + expectedUp = "2"; + expectedLeft = "2"; + break; + default: + throw new IllegalStateException("非法索引: " + index); + } + + // 4. 在集合中查找匹配项并更新 + for (PdmBiSlittingproductionplan plan : plans) { + if (expectedUp.equals(plan.getUp_or_down()) && + expectedLeft.equals(plan.getLeft_or_right())) { + plan.setPaper_weight(value.toString()); + break; // 找到后跳出循环 + } + } + } + } + + /** + * 获取重量 + * @param plans 分切计划 + * @return 0,0,0,0 + */ + public static String getPaperWeightStr(List plans) { + String[] weights = new String[4]; + Arrays.fill(weights, "0"); + + for (PdmBiSlittingproductionplan plan : plans) { + // 1. 获取重量并四舍五入 + String weightStr = plan.getPaper_weight(); + BigDecimal weight; + try { + weight = new BigDecimal(weightStr); + } catch (Exception e) { + continue; + } + BigDecimal rounded = weight.setScale(2, RoundingMode.HALF_UP); + + // 2. 根据位置确定数组索引 + String upDown = plan.getUp_or_down(); + String leftRight = plan.getLeft_or_right(); + int index = -1; + + if ("1".equals(upDown)) { + index = ("1".equals(leftRight)) ? 0 : 1; + } else { + index = ("1".equals(leftRight)) ? 2 : 3; + } + + // 3. 更新对应位置的重量(格式化为两位小数) + if (index >= 0 && index < 4) { + weights[index] = rounded.toString(); + } + } + + // 4. 拼接结果字符串 + return String.join(",", weights); + } }