diff --git a/lms/nladmin-system/doc/套轴点位日志记录实时看板.html b/lms/nladmin-system/doc/套轴点位日志记录实时看板.html index 80ff8e885..4b9f52d8b 100644 --- a/lms/nladmin-system/doc/套轴点位日志记录实时看板.html +++ b/lms/nladmin-system/doc/套轴点位日志记录实时看板.html @@ -141,6 +141,13 @@ .timeout-row-warning td { color: #f8d7da !important; } + .timeout-row-error { + background: #1dec12 !important; + color: #f8d7da; + } + .timeout-row-error td { + color: #0b0505 !important; + } @@ -346,6 +353,15 @@ if (item.is_paper_ok === '2') { tzText = '已套轴'; } + if (item.is_paper_ok === '3') { + tzText = '正在套轴'; + } + if (item.is_paper_ok === '4') { + tzText = '已下发套轴'; + } + if (item.is_paper_ok === '99') { + tzText = '套轴异常'; + } row.insertCell().textContent = tzText || 'N/A'; // 检查start_time是否超过2小时,并设置行样式 if (item.start_time) { @@ -355,6 +371,9 @@ row.classList.add('timeout-row-warning'); // 应用于整行 } } + if (item.is_paper_ok === '99') { + row.classList.add('timeout-row-error'); + } }); } else { const row = tableBody.insertRow(); diff --git a/lms/nladmin-system/doc/套轴点位日志记录实时看板v2.html b/lms/nladmin-system/doc/套轴点位日志记录实时看板v2.html new file mode 100644 index 000000000..63d52457b --- /dev/null +++ b/lms/nladmin-system/doc/套轴点位日志记录实时看板v2.html @@ -0,0 +1,507 @@ + + + + + + 套轴点位日志记录实时看板 + + + +

套轴点位日志记录实时看板

+
+
+

B_CBJ01

+ +
+
+ +
+
+
+

B_CBJ02

+ +
+
+ +
+
+
+ + +
+

套轴监控系统实时数据

+ + + + + + + + + + + + + + + + + + +
设备子卷号轴位置气胀轴尺寸气胀轴代数气胀轴状态呼叫时间管芯规格套轴标记一键恢复
+
+ + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java index e6187a042..0d9a8a338 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java @@ -164,6 +164,7 @@ public class AutoCallAirShaftTask extends Prun { .anyMatch(prefix -> p.getResource_name().startsWith(prefix)) && checkComputationPoint(p, empty) && checkHasTask(p)) .collect(Collectors.toList()); + log.info("SQL查询后过滤区域、是否有套过轴的数据:{}", plans); if (plans.size() == 0) { stepErrorInfo.add("找不到需要套轴的信息,只做拔轴。"); // 如果不需要套轴,就只做拔轴 @@ -173,7 +174,7 @@ public class AutoCallAirShaftTask extends Prun { // 过滤相比当前时间大于1小时 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime cutoffTime = LocalDateTime.now().minusHours(1); - List filteredList = planAll.stream() + List filteredList = plans.stream() .filter(p -> { try { LocalDateTime startTime = LocalDateTime.parse(p.getStart_time(), formatter); @@ -183,7 +184,6 @@ public class AutoCallAirShaftTask extends Prun { } }) .collect(Collectors.toList()); - List filterCheckPlans = null; if (filteredList.size() > 0) { log.info("过滤时间之后的数据:{}", filteredList); // 获取当前三个位置的所有管芯信息 @@ -193,18 +193,13 @@ public class AutoCallAirShaftTask extends Prun { .map(MdPbPapervehicle::getMaterial_code) .distinct() .collect(Collectors.toList()); - // 获取所有dto中的分切计划信息 - List parents = filteredList.stream() - .map(SlitterPlanDistinctDto::getParent_container_name) - .distinct() - .collect(Collectors.toList()); - List checkPlans = slittingproductionplanService.list(new LambdaQueryWrapper() - .in(PdmBiSlittingproductionplan::getParent_container_name, parents) - .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) - .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); - filterCheckPlans = checkPlans.stream() - .filter(p -> tubeCodes.contains("1".equals(p.getPaper_tube_or_FRP()) ? p.getPaper_tube_material() : p.getFRP_material())) - .collect(Collectors.toList()); + if (tubeCodes.size() > 0) { + // 获取所有dto中的分切计划信息 + List filteredListT = getSlitterPlanByTubesDtos(filteredList, papers, tubeCodes); + if (CollectionUtil.isNotEmpty(filteredListT)) { + plans = filteredListT; + } + } } } log.info("获取过滤后的分切计划数据:{}", JSON.toJSONString(plans)); @@ -291,10 +286,6 @@ public class AutoCallAirShaftTask extends Prun { .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); } - // 如果过滤出来的需要套轴的信息,则直接获取 - if (CollectionUtil.isNotEmpty(filterCheckPlans)) { - needPlans = filterCheckPlans; - } log.info("通过dto获取的分切计划:{}", needPlans); // 获取其中一条 PdmBiSlittingproductionplan needPlan = needPlans.get(0); @@ -417,6 +408,42 @@ public class AutoCallAirShaftTask extends Prun { stepStr += ",97"; } + public List getSlitterPlanByTubesDtos(List filteredList + , List papers + , List tubeCodes) { + List filteredListT; + filteredListT = filteredList.stream().filter(dto -> { + List checkPlans = slittingproductionplanService.list(new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getResource_name, dto.getResource_name()) + .eq(PdmBiSlittingproductionplan::getParent_container_name, dto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getUp_or_down, dto.getUp_or_down()) + .eq(PdmBiSlittingproductionplan::getSplit_group, dto.getSplit_group()) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) + .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); + if (checkPlans.size() == 0) { + // 可能是改切,所以换成restruct_container_name来使用 + checkPlans = slittingproductionplanService.list(new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getResource_name, dto.getResource_name()) + .eq(PdmBiSlittingproductionplan::getRestruct_container_name, dto.getParent_container_name()) + .eq(PdmBiSlittingproductionplan::getUp_or_down, dto.getUp_or_down()) + .eq(PdmBiSlittingproductionplan::getSplit_group, dto.getSplit_group()) + .eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO) + .eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES)); + } + if (CollectionUtil.isEmpty(checkPlans)) { + return false; + } + List needTubes = checkPlans.stream().map(p -> { + if ("1".equals(p.getPaper_tube_or_FRP())) { + return p.getPaper_tube_material(); + } + return p.getFRP_material(); + }).distinct().collect(Collectors.toList()); + return SlitterTaskUtil.containsAllTubes(tubeCodes, needTubes, papers); + }).collect(Collectors.toList()); + return filteredListT; + } + /** * 判断是不是有空位置 * @param planD diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/controller/SlitterController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/controller/SlitterController.java index e7dae7e2d..d2113a883 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/controller/SlitterController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/controller/SlitterController.java @@ -52,4 +52,11 @@ public class SlitterController { public ResponseEntity tzTaskINfo(@RequestBody JSONObject entity){ return new ResponseEntity<>(slitterService.tzTaskINfo(entity), HttpStatus.OK); } + @PostMapping("/recover") + @Log("恢复计划") + @SaIgnore + public ResponseEntity recover(@RequestBody JSONObject entity){ + slitterService.recover(entity); + return new ResponseEntity<>( HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml index ff89f5cdc..055ef1974 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml @@ -200,7 +200,8 @@ p.is_paper_ok, MIN(p.start_time) AS start_time, IF(p.paper_tube_or_FRP = '1', p.paper_tube_description, p.FRP_description) AS tube, - MIN(p.`status`) AS `status` + MIN(p.`status`) AS `status`, + MAX(p.qzzno) AS qzzno FROM `pdm_bi_slittingproductionplan` p WHERE p.`status` '09' AND p.is_delete = '0' diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/CallPlanViewVO.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/CallPlanViewVO.java index d784ecdbb..acfa1d738 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/CallPlanViewVO.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/dto/CallPlanViewVO.java @@ -46,4 +46,5 @@ public class CallPlanViewVO implements Serializable { private String qzz_generation; private String start_time; private String is_paper_ok; + private String qzzno; } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java index 6299cce06..6da234696 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.CallPlanViewVO; +import org.springframework.http.ResponseEntity; import java.util.List; @@ -371,4 +372,6 @@ public interface SlitterService { JSONObject cutCacheInventory(JSONObject param); JSONObject tzTaskINfo(JSONObject entity); + + void recover(JSONObject param); } 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 190e911bd..23c0e7c93 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 @@ -45,7 +45,6 @@ import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.RedisUtils; -import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; @@ -2323,11 +2322,38 @@ public class SlitterServiceImpl implements SlitterService { @Override public List showManualView(JSONObject param) { + // 获取穿拔轴点位数据 + List shaftPoints = shafttubeivtService.getAllByPointType("2", true); Param useXn = paramService.findByCode(USE_XN); + List callPlanViewVOS; if (ObjectUtil.isNotEmpty(useXn) && "1".equals(useXn.getValue())) { - return slitterMapper.showManualView(); + callPlanViewVOS = slitterMapper.showManualView(); + } else { + callPlanViewVOS = slitterMapper.showManualViewNoXn(); } - return slitterMapper.showManualViewNoXn(); + for (CallPlanViewVO callPlanViewVO : callPlanViewVOS) { + if ("2".equals(callPlanViewVO.getIs_paper_ok())) { + // 已下发 + callPlanViewVO.setIs_paper_ok("4"); + for (BstIvtShafttubeivt shaftPoint : shaftPoints) { + if (shaftPoint.getContainer_name1().equals(callPlanViewVO.getContainer_name()) + || shaftPoint.getContainer_name2().equals(callPlanViewVO.getContainer_name())) { + // 正在套轴 + callPlanViewVO.setIs_paper_ok("3"); + break; + } + } + if (!"3".equals(callPlanViewVO.getIs_paper_ok()) && ObjectUtil.isNotEmpty(callPlanViewVO.getQzzno())) { + // 已套轴 + callPlanViewVO.setIs_paper_ok("2"); + } + if (!"3".equals(callPlanViewVO.getIs_paper_ok()) + && ObjectUtil.isEmpty(callPlanViewVO.getQzzno())) { + callPlanViewVO.setIs_paper_ok("99"); + } + } + } + return callPlanViewVOS; } @Override @@ -2818,6 +2844,23 @@ public class SlitterServiceImpl implements SlitterService { return res; } + @Override + public void recover(JSONObject param) { + // container_name + String containerName = param.getString("container_name"); + List shaftPoints = shafttubeivtService.getAllByPointType("2", true); + for (BstIvtShafttubeivt shaftPoint : shaftPoints) { + if (shaftPoint.getContainer_name1().equals(containerName) + || shaftPoint.getContainer_name2().equals(containerName)) { + throw new BadRequestException("请使用手持并且与电气初始化"); + } + } + LambdaUpdateWrapper lam = new LambdaUpdateWrapper<>(); + lam.set(PdmBiSlittingproductionplan::getIs_paper_ok, "1") + .eq(PdmBiSlittingproductionplan::getContainer_name, containerName); + slittingproductionplanService.update(lam); + } + public List getRedisListValue(String key) { List stepTipLogs = (List) redisUtils.get(key); if (CollectionUtil.isEmpty(stepTipLogs)) { 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 72cd2ff49..da7282b36 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 @@ -12,10 +12,7 @@ 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; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -529,4 +526,32 @@ public class SlitterTaskUtil { } log.info("分切下卷计划位置校验通过!"); } + + /** + * 判断管芯行家对接位是否有所需的管芯、并且数量是符合的。 + * @param tubeCodes + * @param needTubes + * @param papers + * @return + */ + public static boolean containsAllTubes(List tubeCodes, List needTubes, List papers) { + Set tubeSet = new HashSet<>(tubeCodes); + for (String tube : needTubes) { + if (!tubeSet.contains(tube)) { + return false; + } + } + int num = 0; + for (String needTube : needTubes) { + for (MdPbPapervehicle paper : papers) { + if (needTube.equals(paper.getMaterial_code())) { + num += paper.getQty().intValue(); + } + } + if (num == 0) { + return false; + } + } + return true; + } }