diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/PdmBiSlittingproductionplan.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/PdmBiSlittingproductionplan.java index dfcee287e..c42ccf802 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/PdmBiSlittingproductionplan.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/PdmBiSlittingproductionplan.java @@ -155,4 +155,6 @@ public class PdmBiSlittingproductionplan implements Serializable { /** 子卷等级*/ private String level; + /** 子卷重量 */ + private String weight; } 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 f0c88a883..95fb37714 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 @@ -32,6 +32,7 @@ import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum; import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper; import org.nl.b_lms.sch.tasks.slitter.service.SlitterService; +import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.ext.acs.service.WmsToAcsService; @@ -48,8 +49,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; /** - * @description 服务接口 * @author lyd + * @description 服务接口 * @date 2024-02-26 **/ @Slf4j @@ -98,14 +99,23 @@ public class SlitterServiceImpl implements SlitterService { throw new BadRequestException("设备:{ " + deviceCode + " }对应的气胀轴尺寸不批对" + ",需要气胀轴尺寸:{ " + point.getQzz_size() + " },实际尺寸:{ " + size + " }"); } + // point.getTube_code1() 编码 , getTube_name1() : 纸制筒管|纸管|6英寸|1300 or 纸制筒管|纸管|3英寸|12|650 res.put("device_code", deviceCode); res.put("data", con); con.put("left", point.getTube_code1()); - con.put("left_size", ObjectUtil.isNotEmpty(point.getTube_name1()) + con.put("leftSize", ObjectUtil.isNotEmpty(point.getTube_name1()) ? point.getTube_name1().split("\\|")[2].charAt(0) : ""); + con.put("leftSpec", ObjectUtil.isNotEmpty(point.getTube_code1()) + ? SlitterTaskUtil.getComposePaperTubeInformation(point.getTube_name1(), + point.getTube_code1().startsWith("4") ? "1" : "2") + : ""); con.put("right", point.getTube_code2()); - con.put("right_size", ObjectUtil.isNotEmpty(point.getTube_name2()) + con.put("rightSize", ObjectUtil.isNotEmpty(point.getTube_name2()) ? point.getTube_name2().split("\\|")[2].charAt(0) : ""); + con.put("rightSpec", ObjectUtil.isNotEmpty(point.getTube_code2()) + ? SlitterTaskUtil.getComposePaperTubeInformation(point.getTube_name1(), + point.getTube_code2().startsWith("4") ? "1" : "2") + : ""); con.put("number", ObjectUtil.isNotEmpty(point.getTube_code1()) && ObjectUtil.isNotEmpty(point.getTube_code2()) ? "2" : "1"); res.put("code", HttpStatus.HTTP_OK); @@ -133,6 +143,7 @@ public class SlitterServiceImpl implements SlitterService { @SneakyThrows @Override public JSONObject acsRequestShaftPluckTube(JSONObject param) { + // 反馈拔轴机构上的纸管信息 // 参数:设备号,type,插拔轴位,qzzSize JSONObject res = new JSONObject(); String deviceCode = param.getString("device_code"); @@ -150,16 +161,8 @@ public class SlitterServiceImpl implements SlitterService { JSONObject r = new JSONObject(); res.put("data", r); r.put("device_code", deviceCode); - for (PdmBiSlittingproductionplan plan : plans) { - String s = String.valueOf(SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP()) - ? plan.getPaper_tube_model().split("\\|")[2].charAt(0) - : plan.getFRP_model().split("\\|")[2].charAt(0)); - if (SlitterConstant.SLITTER_SUB_VOLUME_LEFT.equals(plan.getLeft_or_right())) { - r.put("left_size", s); - } else { - r.put("right_size", s); - } - } + SlitterTaskUtil.putCurrentPaperSpec(r, plans); + r.put("pullCount", plans.size()); res.put("code", HttpStatus.HTTP_OK); res.put("message", "请求成功"); return res; @@ -229,7 +232,7 @@ public class SlitterServiceImpl implements SlitterService { try { if (tryLockPoint) { // 分切计划设置套轴完成 - String qzzNo = IdUtil.getSnowflake(1,1).nextIdStr(); + String qzzNo = IdUtil.getSnowflake(1, 1).nextIdStr(); plans.forEach(plan -> { plan.setIs_child_tz_ok(SlitterConstant.SLITTER_YES); plan.setQzzno(qzzNo); @@ -495,7 +498,7 @@ public class SlitterServiceImpl implements SlitterService { String now = DateUtil.now(); // 记录数据库 BstIvtScalehistory history = new BstIvtScalehistory(); - history.setHistory_id(IdUtil.getSnowflake(1,1).nextIdStr()); + history.setHistory_id(IdUtil.getSnowflake(1, 1).nextIdStr()); history.setScale_code(scaleEquipment.getScale_code()); history.setDevice_code(scaleEquipment.getDevice_code()); history.setCurrent_weight(currentWeight); @@ -565,7 +568,7 @@ public class SlitterServiceImpl implements SlitterService { plan = plans.stream().filter(p -> SlitterConstant.SLITTER_SUB_VOLUME_RIGHT.equals(p.getLeft_or_right())).findFirst().orElse(null); } if (plan == null) { - log.error("设备{}, 找不到气胀轴编码{}对应的分切计划!参数:{}",deviceCode, qzzNo, param); + log.error("设备{}, 找不到气胀轴编码{}对应的分切计划!参数:{}", deviceCode, qzzNo, param); throw new BadRequestException("找不到气胀轴编码{ " + qzzNo + " }的分切计划!"); } // 查找终点 todo: 如何确认是废箔还是成品 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 73984237f..550d3e2fb 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 @@ -1,6 +1,7 @@ package org.nl.b_lms.sch.tasks.slitter.util; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; @@ -33,6 +34,32 @@ public class SlitterTaskUtil { } else { tubeDescription = plan.getFRP_description(); } + // 材质 + return getComposePaperTubeInformation(tubeDescription, plan.getPaper_tube_or_FRP()); + } + + /** + * 获取组成信息 + * @param tubeDescription 纸管信息 + * @param paperOrFrp 材质(1纸管,2FRP管) + * @return 长*外径*内径*壁厚*重量*材质(1纸管,2FRP管) + */ + public static String getComposePaperTubeInformation(String tubeDescription, String paperOrFrp) { + if (ObjectUtil.isEmpty(tubeDescription)) { + return ""; + } + return getComposePaperTubeInformation(tubeDescription) + "*" + paperOrFrp; + } + + /** + * 获取组成信息 + * @param tubeDescription 纸管信息 + * @return 长*外径*内径*壁厚*重量 + */ + public static String getComposePaperTubeInformation(String tubeDescription) { + if (ObjectUtil.isEmpty(tubeDescription)) { + return ""; + } // 解析描述数组 String[] tubeArray = tubeDescription.split("\\|"); // 定义尺寸与长度 @@ -61,9 +88,6 @@ public class SlitterTaskUtil { sb.append("*"); // 重量 sb.append(0); - sb.append("*"); - // 材质 - sb.append(plan.getPaper_tube_or_FRP()); return sb.toString(); } @@ -73,6 +97,7 @@ public class SlitterTaskUtil { * @param needPlans 所需的分切计划 */ public static void putNeedPaperSpec(JSONObject param, List needPlans) { + // 纸制筒管|纸管|6英寸|1300 or 纸制筒管|纸管|3英寸|12|650 for (PdmBiSlittingproductionplan plan : needPlans) { if (SlitterConstant.SLITTER_SUB_VOLUME_LEFT.equals(plan.getLeft_or_right())) { if (SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP())) { diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.java index 5d4ede481..80f80093f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.java @@ -61,7 +61,7 @@ public class SysQuartzJobServiceImpl extends ServiceImpl { i.ge(SysQuartzLog::getCreate_time, criteria.getCreate_time().get(0)) .le(SysQuartzLog::getCreate_time, criteria.getCreate_time().get(1)); - }); + }).orderByDesc(SysQuartzLog::getCreate_time); IPage pages = new Page<>(page.getPage() + 1, page.getSize()); quartzLogMapper.selectPage(pages, lam); return pages; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index a9ab0816a..9ad4e6acd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -183,4 +183,18 @@ public class AcsToWmsController { public ResponseEntity slitterApply(@RequestBody JSONObject param) { return new ResponseEntity<>(acsToWmsService.slitterApply(param), HttpStatus.OK); } + + @PostMapping("/sendSubVolumeApply") + @Log(value = "二期内包间送子卷请求", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) + @SaIgnore + public ResponseEntity sendSubVolumeApply(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.sendSubVolumeApply(param), HttpStatus.OK); + } + + @PostMapping("/feedbackSubVolumeWeightApply") + @Log(value = "二期ACS反馈子卷重量", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) + @SaIgnore + public ResponseEntity feedbackSubVolumeWeightApply(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.feedbackSubVolumeWeightApply(param), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index 59e8ea10a..e218bcb78 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -174,4 +174,18 @@ public interface AcsToWmsService { * @return / */ JSONObject slitterApply(JSONObject param); + + /** + * 二期内包间送子卷请求 + * @param param / + * @return / + */ + JSONObject sendSubVolumeApply(JSONObject param); + + /** + * 二期ACS反馈子卷重量 + * @param param / + * @return / + */ + JSONObject feedbackSubVolumeWeightApply(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index c3db03f3f..c29b3fce6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -6,8 +6,10 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.google.common.collect.Interner; import com.google.common.collect.Interners; import lombok.RequiredArgsConstructor; @@ -15,6 +17,8 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -130,6 +134,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private final SlitterService slitterService; + private final IPdmBiSlittingproductionplanService slittingproductionplanService; + /** * task_id:任务标识 @@ -2104,4 +2110,46 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return res; } + @SneakyThrows + @Override + public JSONObject sendSubVolumeApply(JSONObject param) { + log.info("slitterApply请求参数:---------------------------------------------{}", param); + JSONObject res = new JSONObject(); + String deviceCode = param.getString("device_code"); + RLock lock = redissonClient.getLock(deviceCode); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + res = slitterService.acsSendSubVolume(param); + } else { + log.error("sendSubVolumeApply系统繁忙,参数:---------------------------------------------{}", param); + throw new BadRequestException("系统繁忙,请稍后再试!"); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + return res; + } + + @Override + public JSONObject feedbackSubVolumeWeightApply(JSONObject param) { + JSONObject res = new JSONObject(); + String subVolume = param.getString("sub_volume"); + String weight = param.getString("weight1"); + LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + updateWrapper.set(PdmBiSlittingproductionplan::getWeight, weight) + .eq(PdmBiSlittingproductionplan::getContainer_name, subVolume); + boolean update = slittingproductionplanService.update(updateWrapper); + if (update) { + res.put("code", cn.hutool.http.HttpStatus.HTTP_OK); + res.put("message", "更新成功!"); + } else { + res.put("code", cn.hutool.http.HttpStatus.HTTP_BAD_REQUEST); + res.put("message", "更新失败!"); + } + return res; + } + } diff --git a/lms/nladmin-ui/src/views/b_lms/bst/ivt/cutpointivt/index.vue b/lms/nladmin-ui/src/views/b_lms/bst/ivt/cutpointivt/index.vue index 4550fdf1f..9e88ece1b 100644 --- a/lms/nladmin-ui/src/views/b_lms/bst/ivt/cutpointivt/index.vue +++ b/lms/nladmin-ui/src/views/b_lms/bst/ivt/cutpointivt/index.vue @@ -133,6 +133,21 @@ /> + + + + + + + + - - -