From 0e7e839d0e873e98c117599b51060216e535eb17 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Sat, 26 Apr 2025 13:38:34 +0800 Subject: [PATCH] =?UTF-8?q?opt:=20=E5=A5=97=E8=BD=B4=E6=97=B6=E6=97=A0?= =?UTF-8?q?=E8=BD=B4=E5=B9=B2=E6=89=B0=20feat:=20=E9=A5=B5=E6=96=99?= =?UTF-8?q?=E4=B8=8B=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IBstIvtCutpointivtService.java | 2 + .../dao/mapper/BstIvtCutpointivtMapper.java | 2 + .../dao/mapper/BstIvtCutpointivtMapper.xml | 27 +- .../impl/BstIvtCutpointivtServiceImpl.java | 5 + .../service/IBstIvtStockingivtService.java | 5 +- .../impl/BstIvtStockingivtServiceImpl.java | 15 +- .../pda/controller/SlitterPdaController.java | 75 +++--- .../slitter/auto/AutoCallAirShaftTask.java | 78 ++++-- .../tasks/slitter/service/SlitterService.java | 7 + .../service/impl/SlitterServiceImpl.java | 230 +++++++++++++++++- 10 files changed, 383 insertions(+), 63 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java index c8c0566d6..b8a9f1ba3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java @@ -134,4 +134,6 @@ public interface IBstIvtCutpointivtService extends IService { List getPintByAgvCodesByPointTypeAndArea(String area, List types); List getNBJCanUsePoint(String type, String pointStatus, String area, String sort); + + List getNBJAreaNotTaskPointByStatus(String type, String pointStatus, String area, String sort); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java index fc638ef7a..c76e8d84b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java @@ -27,4 +27,6 @@ public interface BstIvtCutpointivtMapper extends BaseMapper { List getAreaNotTaskPointByStatusNotCheckPickUpCompleted(String type, String pointStatus, String area, String sort); List getNBJCanUsePoint(String type, String pointStatus, String area, String sort); + + List getNBJAreaNotTaskPointByStatus(String type, String pointStatus, String area, String sort); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml index 9125362a6..48da58699 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml @@ -15,8 +15,8 @@ WHERE t.task_status '071' AND t.task_status ]]> '07' AND t.is_delete = '0' AND (t.point_code1 = bic.point_code OR t.point_code2 = bic.point_code - OR t.point_code1 = bic.truss_point_code1 oR t.point_code2 = bic.truss_point_code1 - OR t.point_code1 = bic.truss_point_code2 oR t.point_code2 = bic.truss_point_code2) + OR t.point_code1 = bic.truss_point_code1 OR t.point_code2 = bic.truss_point_code1 + OR t.point_code1 = bic.truss_point_code2 OR t.point_code2 = bic.truss_point_code2) ) ORDER BY bic.sort_seq ASC @@ -165,4 +165,27 @@ ORDER BY bic.sort_seq DESC + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java index 377b679f6..a17a2519e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java @@ -158,4 +158,9 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl getNBJCanUsePoint(String type, String pointStatus, String area, String sort) { return bstIvtCutpointivtMapper.getNBJCanUsePoint(type, pointStatus, area, sort); } + + @Override + public List getNBJAreaNotTaskPointByStatus(String type, String pointStatus, String area, String sort) { + return bstIvtCutpointivtMapper.getNBJAreaNotTaskPointByStatus(type, pointStatus, area, sort); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java index 9728cba50..55d688fe6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/IBstIvtStockingivtService.java @@ -1,15 +1,14 @@ package org.nl.b_lms.bst.ivt.stockingivt.service; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; +import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; import org.nl.b_lms.bst.ivt.stockingivt.service.dto.ShowStockVo; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto; import org.nl.common.domain.query.PageQuery; -import com.baomidou.mybatisplus.extension.service.IService; -import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; import java.util.List; import java.util.Map; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java index 2b760d5ab..a8c88c889 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java @@ -3,7 +3,6 @@ package org.nl.b_lms.bst.ivt.stockingivt.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -12,18 +11,17 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.bst.ivt.papervehicle.service.IMdPbPapervehicleService; import org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle; +import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService; +import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; +import org.nl.b_lms.bst.ivt.stockingivt.service.dao.mapper.BstIvtStockingivtMapper; import org.nl.b_lms.bst.ivt.stockingivt.service.dto.ShowStockVo; import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; -import org.nl.modules.common.exception.BadRequestException; import org.nl.common.domain.query.PageQuery; import org.nl.common.utils.SecurityUtils; -import org.nl.b_lms.bst.ivt.stockingivt.service.IBstIvtStockingivtService; -import org.nl.b_lms.bst.ivt.stockingivt.service.dao.mapper.BstIvtStockingivtMapper; -import org.nl.b_lms.bst.ivt.stockingivt.service.dao.BstIvtStockingivt; -import org.nl.modules.wql.WQL; +import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.basedata.master.service.MaterialbaseService; import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; import org.nl.wms.ext.acs.service.WmsToAcsService; @@ -32,7 +30,10 @@ import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * @author lyd diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java index 85ec42d52..58303962a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java @@ -24,100 +24,100 @@ import org.springframework.web.bind.annotation.RestController; public class SlitterPdaController { @Autowired - private SlitterService slitterDevices; + private SlitterService slitterService; @PostMapping("/slitterDevices") @Log("获取分切设备") @SaIgnore public ResponseEntity slitterDevices(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.slitterDevices(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.slitterDevices(param), HttpStatus.OK); } @PostMapping("/downRolls") @Log("下卷") @SaIgnore public ResponseEntity downRolls(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.downRolls(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.downRolls(param), HttpStatus.OK); } @PostMapping("/downRolls2") @Log("下卷2") @SaIgnore public ResponseEntity downRolls2(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.downRolls2(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.downRolls2(param), HttpStatus.OK); } @PostMapping("/downRollsCheck") @Log("下卷2提示确认") @SaIgnore public ResponseEntity downRollsCheck(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.downRollsCheck(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.downRollsCheck(param), HttpStatus.OK); } @PostMapping("/moveVehicle") @Log("搬运废箔斗") @SaIgnore public ResponseEntity moveVehicle(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.moveVehicle(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.moveVehicle(param), HttpStatus.OK); } @PostMapping("/getShaftPoint") @Log("获取套拔轴下拉框数据") @SaIgnore public ResponseEntity getShaftPoint() { - return new ResponseEntity<>(slitterDevices.getShaftPoint(), HttpStatus.OK); + return new ResponseEntity<>(slitterService.getShaftPoint(), HttpStatus.OK); } @PostMapping("/doInitShaftPoint") @Log("初始化套拔轴点位") @SaIgnore public ResponseEntity doInitShaftPoint(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doInitShaftPoint(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doInitShaftPoint(param), HttpStatus.OK); } @PostMapping("/cutIn") @Log("分切母卷上料") @SaIgnore public ResponseEntity cutIn(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.cutIn(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.cutIn(param), HttpStatus.OK); } @PostMapping("/sendSubVolumeToNBJ") @Log("分切缓存到内包间任务") @SaIgnore public ResponseEntity sendSubVolumeToNBJ(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.pdaSendSubVolumeToNBJ(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.pdaSendSubVolumeToNBJ(param), HttpStatus.OK); } @PostMapping("/markingFoilSlittingToCache") @Log("标箔分切下料AGV任务") @SaIgnore public ResponseEntity markingFoilSlittingToCache(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.markingFoilSlittingToCache(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.markingFoilSlittingToCache(param), HttpStatus.OK); } @PostMapping("/getCutCacheAgvPoints") @Log("获取分切暂存位AGV点位下拉框数据") @SaIgnore public ResponseEntity getCutCacheAgvPoints(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.getCutCacheAgvPoints(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.getCutCacheAgvPoints(param), HttpStatus.OK); } @PostMapping("/toCleanCutCacheInventory") @Log("清理分切缓存") @SaIgnore public ResponseEntity toCleanCutCacheInventory(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.toCleanCutCacheInventory(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.toCleanCutCacheInventory(param), HttpStatus.OK); } @PostMapping("/toSubvolumeBinding") @Log("子卷绑定") @SaIgnore public ResponseEntity toSubvolumeBinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.toSubvolumeBinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.toSubvolumeBinding(param), HttpStatus.OK); } @PostMapping("/shaftMaintenanceInventory") @Log("气胀轴库维护库存") @SaIgnore public ResponseEntity shaftMaintenanceInventory(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.shaftMaintenanceInventory(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.shaftMaintenanceInventory(param), HttpStatus.OK); } @@ -125,116 +125,123 @@ public class SlitterPdaController { @Log("气胀轴绑定") @SaIgnore public ResponseEntity toShaftBinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.toShaftBinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.toShaftBinding(param), HttpStatus.OK); } @PostMapping("/querySlitterSubVolumeInfo") @Log("查询分切机上的子卷信息") @SaIgnore public ResponseEntity querySlitterSubVolumeInfo(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.querySlitterSubVolumeInfo(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.querySlitterSubVolumeInfo(param), HttpStatus.OK); } @PostMapping("/bindSlitterSubVolumeInfo") @Log("绑定分切机上的子卷信息") @SaIgnore public ResponseEntity bindSlitterSubVolumeInfo(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.bindSlitterSubVolumeInfo(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.bindSlitterSubVolumeInfo(param), HttpStatus.OK); } @PostMapping("/unBindSlitterSubVolumeInfo") @Log("接绑分切机上的子卷信息") @SaIgnore public ResponseEntity unBindSlitterSubVolumeInfo(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.unBindSlitterSubVolumeInfo(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.unBindSlitterSubVolumeInfo(param), HttpStatus.OK); } @PostMapping("/querySlitterDeviceSubVolumeInfos") @Log("查询手持查询设备对应的子卷数据") @SaIgnore public ResponseEntity querySlitterDeviceSubVolumeInfos(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.querySlitterDeviceSubVolumeInfos(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.querySlitterDeviceSubVolumeInfos(param), HttpStatus.OK); } @PostMapping("/queryCacheDownSubVolumeInfos") @Log("手持查询暂存位置的子卷数据") @SaIgnore public ResponseEntity queryCacheDownSubVolumeInfos(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.queryCacheDownSubVolumeInfos(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.queryCacheDownSubVolumeInfos(param), HttpStatus.OK); } @PostMapping("/doStockAreaBinding") @Log("手持备货区绑定") @SaIgnore public ResponseEntity doStockAreaBinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doStockAreaBinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doStockAreaBinding(param), HttpStatus.OK); } @PostMapping("/doStockAreaUnbinding") @Log("手持备货区解除绑定") @SaIgnore public ResponseEntity doStockAreaUnbinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doStockAreaUnbinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doStockAreaUnbinding(param), HttpStatus.OK); } @PostMapping("/doSubRollWeightBinding") @Log("手持子卷重量绑定") @SaIgnore public ResponseEntity doSubRollWeightBinding(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doSubRollWeightBinding(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doSubRollWeightBinding(param), HttpStatus.OK); } @PostMapping("/doSubRollWeightBindingTip") @Log("手持子卷重量绑定提示") @SaIgnore public ResponseEntity doSubRollWeightBindingTip(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doSubRollWeightBindingTip(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doSubRollWeightBindingTip(param), HttpStatus.OK); } @PostMapping("/doUpShaftToSlitter") @Log("手持分切机上气胀轴") @SaIgnore public ResponseEntity doUpShaftToSlitter(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doUpShaftToSlitter(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doUpShaftToSlitter(param), HttpStatus.OK); } @PostMapping("/doUpShaftToSlitterByDevice") @Log("手持分切机上气胀轴2") @SaIgnore public ResponseEntity doUpShaftToSlitterByDevice(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doUpShaftToSlitterByDevice(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doUpShaftToSlitterByDevice(param), HttpStatus.OK); } @PostMapping("/doUpShaftToSlitterByDeviceTip") @Log("手持分切机上气胀轴提示") @SaIgnore public ResponseEntity doUpShaftToSlitterByDeviceTip(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.doUpShaftToSlitterByDeviceTip(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.doUpShaftToSlitterByDeviceTip(param), HttpStatus.OK); } @PostMapping("/getUpShaftTip") @Log("手持分切机上气胀轴-查询信息") @SaIgnore public ResponseEntity getUpShaftTip(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.getUpShaftTip(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.getUpShaftTip(param), HttpStatus.OK); } @PostMapping("/forcedFeedShaft") @Log("强制送轴") @SaIgnore public ResponseEntity forcedFeedShaft(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.forcedFeedShaft(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.forcedFeedShaft(param), HttpStatus.OK); } @PostMapping("/showManualView") @Log("送轴情况") @SaIgnore public ResponseEntity showManualView(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.showManualView(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.showManualView(param), HttpStatus.OK); } @PostMapping("/urgentPlan") @Log("加急送轴") @SaIgnore public ResponseEntity urgentPlan(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.urgentPlan(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.urgentPlan(param), HttpStatus.OK); } @PostMapping("/rollCacheManage") @Log("母卷暂存架子管理") @SaIgnore public ResponseEntity rollCacheManage(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.rollCacheManage(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.rollCacheManage(param), HttpStatus.OK); } @PostMapping("/rollCacheManageTip") @Log("母卷暂存架子管理提示") @SaIgnore public ResponseEntity rollCacheManageTip(@RequestBody JSONObject param) { - return new ResponseEntity<>(slitterDevices.rollCacheManageTip(param), HttpStatus.OK); + return new ResponseEntity<>(slitterService.rollCacheManageTip(param), HttpStatus.OK); + } + + @PostMapping("/downBait") + @Log("饵料下卷") + @SaIgnore + public ResponseEntity downBait(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(slitterService.downBait(whereJson), HttpStatus.OK); } } 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 bb9c8fb74..608ded95e 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 @@ -95,9 +95,6 @@ public class AutoCallAirShaftTask { public final static String TZ_DAY = "TZ_DAY"; public String stepStr = ""; - private static final DateTimeFormatter TIME_FORMATTER = - DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - /** * hint: 目前只是考虑了上区域 * 执行套轴和拔轴任务的逻辑处理。 @@ -209,12 +206,15 @@ public class AutoCallAirShaftTask { // 获取一个分切计划的Dto。如果是6寸,可以直接使用、如果是3寸,需要判断当前位置是否满足 // todo: 需要校验分切设备是在对应的区域中 SlitterPlanDistinctDto planDto = plans.stream() - .filter(planD -> "6".equals(planD.getQzz_size()) || - ("3".equals(planD.getQzz_size()) && specification.equals(planD.getQzz_generation()))) + .filter(planD -> ("6".equals(planD.getQzz_size()) || + ("3".equals(planD.getQzz_size()) && specification.equals(planD.getQzz_generation()))) && + havaEmptyShaft(planD, empty)) .findFirst() .orElse(null); if (planDto == null) { - log.warn("过滤3/6寸和代数输出结果为空,跳过此次套轴。此时点位对应代数:{}", specification); + log.warn("过滤3/6寸和代数输出结果为空,跳过此次套轴,直接拔轴。此时点位对应代数:{}", specification); + // 如果不需要套轴,就只做拔轴 + makePullShaft(empty, specification); return; } log.info("此时获取的分切计划dto: {}", planDto); @@ -251,11 +251,6 @@ public class AutoCallAirShaftTask { if (qzzPoint.size() == 0) { stepStr += ",16"; //若套轴暂存位没有相同规格的气胀轴,直接去气胀轴库找即可 - // 要先判断AGV任务,才能去呼叫出轴 -// if (!toCallAgvMovePaperTube(needPlans, location, empty)) { -// log.error("呼叫AGV失败-穿拔轴{}不进行套轴,跳过!", empty.getPoint_code()); -// return; -// } // 调用ACS滚条气涨轴下来 if (!toAcsOutShaft(qzzSize,location, empty)) { log.error("呼叫出轴失败-穿拔轴{}不进行套轴,跳过!", empty.getPoint_code()); @@ -324,10 +319,6 @@ public class AutoCallAirShaftTask { param.put("qzz_size", needPlan.getQzz_size()); // 所需的纸管规格 SlitterTaskUtil.putNeedPaperSpec(param, needPlans); -// if (!toCallAgvMovePaperTube(needPlans, location, empty)) { -// log.error("呼叫AGV失败-穿拔轴{}不进行套轴,跳过!", empty.getPoint_code()); -// return; -// } // 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划 saveCutPlanMessage(empty, needPlans, qzzSize); // 设置是否套轴:1:正常套轴,2:待定(到后面还会申请套轴) @@ -358,6 +349,62 @@ public class AutoCallAirShaftTask { stepStr += ",97"; } + /** + * 判断是不是有空位置 + * @param planD + * @return + */ + public boolean havaEmptyShaft(SlitterPlanDistinctDto planD, BstIvtShafttubeivt empty) { + String qzzSize = planD.getQzz_size(); + String qzzGeneration = planD.getQzz_generation(); + String location = empty.getPoint_location(); + // 需要区分上下 + List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize ,empty.getPoint_code(), location); + if (shafttubeivts.size() == 0) { + log.error("气胀轴库找不到[" + qzzSize + "]规格的气涨轴位"); + return false; + } + // 气涨轴库 + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + // 判断气胀轴是否有轴 + JSONArray device_rows = new JSONArray(); + JSONObject device_obj = new JSONObject(); + device_rows.add(device_obj); + device_obj.put("device_code", shafttubeivt.getPoint_code()); + // todo: 暂时都是B1 + device_obj.put("product_area", "B1"); + JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); + if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { + log.error("获取气胀轴库信息失败"); + return false; + } + boolean judgment1 = true; + boolean judgment2 = true; + JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); + if (data2.getInteger("qty") == 0) { + log.warn("气胀轴库【" + shafttubeivt.getPoint_code() + "】没有气胀轴。"); + judgment1 = false; + } + // 获取气涨轴缓存没有任务的点位 + List qzzCache = bstIvtShafttubeivtService.getNotTaskShaftCache(qzzSize, + shafttubeivt.getQzz_generation(), location); + if (qzzCache.size() == 0) { + log.warn("未找到气胀轴密集库气涨轴规格「" + qzzSize + "」的暂存位"); + judgment2 = false; + } + // 从套轴对接位获取相同气涨轴大小 + // update: 不需要(同标箔或者锂电分开) + // todo: 需要校验区域0/1 + stepStr += ",15"; + List qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, qzzGeneration); + log.info("查找可以拔轴的点位数:{}", qzzPoint.size()); + if (!judgment1 && !judgment2 && qzzPoint.size() == 0) { + log.warn("都没有气胀轴"); + return false; + } + return true; + } + /** * 设置是否套轴 * @@ -678,6 +725,7 @@ public class AutoCallAirShaftTask { throw new BadRequestException("气涨轴[" + qzzNo + "]对应的分切计划不存在!"); } PdmBiSlittingproductionplan plan = list.get(0); + // todo: 考虑是否有空位(如果气涨轴库和气胀轴暂存架都没有空位,则退出)【暂时不考虑】 List collect = list.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()); JSONObject param = new JSONObject(); param.put("point_code1", pointCode1); 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 8600417a0..0df996b0d 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 @@ -348,4 +348,11 @@ public interface SlitterService { * @return */ JSONObject downRollsCheck(JSONObject param); + + /** + * 饵料下卷 + * @param param + * @return + */ + JSONObject downBait(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 5c8df0226..36487aced 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 @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -42,10 +43,12 @@ import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.CallPlanViewVO; import org.nl.b_lms.sch.tasks.slitter.service.SlitterService; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; +import org.nl.common.enums.NoticeTypeEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; import org.nl.wms.ext.acs.service.WmsToAcsService; @@ -120,6 +123,8 @@ public class SlitterServiceImpl implements SlitterService { private IpdmBiSubpackagerelationService subpackagerelationService; @Autowired private UpShaftTrussTask upShaftTrussTask; + @Autowired + private ISysNoticeService noticeService; @Override @@ -343,7 +348,9 @@ public class SlitterServiceImpl implements SlitterService { } if (ObjectUtil.isEmpty(cutPoint)) { // 获取一个空位 (上下区域) - List emptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus( +// List emptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus( +// "1", "1", startPoint.getPoint_location(), "1"); + List emptyNotTaskPoint = bcutpointivtService.getNBJAreaNotTaskPointByStatus( "1", "1", startPoint.getPoint_location(), "1"); if (emptyNotTaskPoint.size() == 0) { throw new BadRequestException("找不到可用套轴对接位!"); @@ -909,8 +916,20 @@ public class SlitterServiceImpl implements SlitterService { .eq("row_num", param.getString("row_num")) .eq("qty", "0"); boolean remove = papervehicleService.remove(deleteWrapper); + // todo: 如果qty=0,创建AGV送空任务,(新的task_type)、后期优化可以新增诺宝取货完成提前释放货位,任务状态变成071 +// if (remove) { // hint: 错误 +// // 证明删除成功,创建任务搬走 +// // 查找一个没有任务的空位 +// List list = stockingivtService.getEmptyPointNotTask(device.getPoint_location(), "0"); +// if (list.size() == 0) { +// noticeService.createNotice("管芯抓取备货区找不到空位置搬运", +// "管芯抓取点位[" + device.getPoint_name() + "]无法从备货区找到空位", +// NoticeTypeEnum.EXCEPTION.getCode()); +// return res; +// } +// BstIvtStockingivt stockingivt = list.get(0); +// } } - // todo: 如果qty=0,创建AGV送空任务,(新的task_type)、后期优化可以新增诺宝取货完成提前释放货位,任务状态变成071 return res; } @@ -2334,4 +2353,211 @@ public class SlitterServiceImpl implements SlitterService { res.put("flag", "1"); return res; } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject downBait(JSONObject param) { + log.info("饵料下卷:{}", param); + // param: area, device_code, point_code, left_spec, right_spec + String area = param.getString("area"); + String point_code = param.getString("point_code"); + String up_or_down = param.getString("up_or_down"); + String left_spec = param.getString("left_spec_value"); + String right_spec = param.getString("right_spec_value"); + String left_spec_value = param.getString("left_spec"); + String right_spec_value = param.getString("right_spec"); + int num = ObjectUtil.isNotEmpty(left_spec) && ObjectUtil.isNotEmpty(right_spec) ? 2 : 1; + if (!area.startsWith("B")) { + throw new BadRequestException("仅限于二期使用"); + } + //查询该点位对应的机台编号 + StIvtCutpointivt cutDevice = cutpointivtService.getPintByUpOrDownCode(point_code, false); +// JSONObject cut_ivt = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("up_point_code ='" + point_code + "' OR down_point_code ='" + point_code + "'").uniqueResult(0); + String device_code = cutDevice.getExt_code(); + if (ObjectUtil.isEmpty(cutDevice)) { + throw new BadRequestException("未查询到对应的分切机!"); + } + // 判断是否存在任务 + List tasks = taskService.checkHaveTask("1".equals(up_or_down) ? cutDevice.getUp_point_code() : cutDevice.getDown_point_code()); + if (tasks.size() > 0) { + throw new BadRequestException("该点位已经创建过任务"); + } + List plans = new ArrayList<>(); + String qzzNo = device_code.substring(0, 2) + + device_code.substring(device_code.length() - 2) + + TaskUtils.getDateTime("yyMMddHHmmss") + "-饵料"; + String code = "饵料" + TaskUtils.getDateTime("yyMMddHHmmss"); + // 创建饵料计划 + for (int i = 0; i < num; i++) { + String containerName = area + code + "-" + i; + PdmBiSlittingproductionplan plan = new PdmBiSlittingproductionplan(); + plan.setWorkorder_id(IdUtil.getSnowflake(1,1).nextIdStr()); + // 公共部分插入 + plan.setOrder_type("1"); + plan.setContainer_name(containerName); + plan.setProduct_name("220890200000001"); + plan.setDescription("虚拟卷"); + plan.setParent_container_name(code); + plan.setRestruct_container_name(""); + plan.setWare_house("1"); + plan.setResource_name(device_code); + plan.setSplit_group("A"); + plan.setManufacture_sort("P1"); + plan.setMfg_order_name("-"); + plan.setManufacture_date(DateUtil.format(DateUtil.date(), "yyyy-MM-dd")); + plan.setSplit_breadth(new BigDecimal("999")); + plan.setSplit_height(new BigDecimal("999")); + plan.setSplit_weight(new BigDecimal("999")); + plan.setStart_time(DateUtil.now()); + plan.setEnd_time(""); + plan.setStatus("01"); + plan.setIs_parent_ok("0"); + plan.setIs_child_tz_ok("0"); + plan.setIs_child_ps_ok("0"); + plan.setPaper_weight("0"); + plan.setQzzno(""); + plan.setIs_delete("0"); + plan.setSale_order_name("-"); + plan.setIs_call("0"); + plan.setIs_paper_ok("1"); + plan.setFRP_model(""); + plan.setFRP_material(""); + plan.setFRP_description(""); + plan.setPaper_tube_model(""); + plan.setPaper_tube_material(""); + plan.setPaper_tube_description(""); + plan.setQzzno(qzzNo); + plan.setLevel("5"); + // 区分位置创建 + if (i == 0 && ObjectUtil.isNotEmpty(left_spec) && "1".equals(up_or_down)) { + // 上左 + plan.setPaper_tube_or_FRP(left_spec_value.startsWith("48") ? "1" : "2"); + String[] split = left_spec.split("\\|"); + plan.setQzz_size(String.valueOf(split[2].charAt(0))); + if ("1".equals(plan.getPaper_tube_or_FRP())) { + plan.setPaper_tube_material(left_spec_value); + plan.setPaper_tube_model(left_spec); + plan.setPaper_tube_description(left_spec); + } else { + plan.setFRP_material(left_spec_value); + plan.setFRP_model(left_spec); + plan.setFRP_description(left_spec); + } + if (left_spec.contains("3英寸") || left_spec.contains("3.12英寸")) { + plan.setQzz_generation("4"); + } else { + plan.setQzz_generation("5"); + } + plan.setUp_or_down("1"); + plan.setLeft_or_right("1"); + } + if (i == 1 && ObjectUtil.isNotEmpty(right_spec) && "1".equals(up_or_down)) { + // 上右 + plan.setPaper_tube_or_FRP(right_spec_value.startsWith("48") ? "1" : "2"); + String[] split = right_spec.split("\\|"); + plan.setQzz_size(String.valueOf(split[2].charAt(0))); + if ("1".equals(plan.getPaper_tube_or_FRP())) { + plan.setPaper_tube_material(right_spec_value); + plan.setPaper_tube_model(right_spec); + plan.setPaper_tube_description(right_spec); + } else { + plan.setFRP_material(right_spec_value); + plan.setFRP_model(right_spec); + plan.setFRP_description(right_spec); + } + plan.setUp_or_down("1"); + plan.setLeft_or_right("2"); + if (right_spec.contains("3英寸") || right_spec.contains("3.12英寸")) { + plan.setQzz_generation("4"); + } else { + plan.setQzz_generation("5"); + } + } + if (i == 0 && ObjectUtil.isNotEmpty(left_spec) && "2".equals(up_or_down)) { + // 下左 + plan.setPaper_tube_or_FRP(left_spec_value.startsWith("48") ? "1" : "2"); + String[] split = left_spec.split("\\|"); + plan.setQzz_size(String.valueOf(split[2].charAt(0))); + if ("1".equals(plan.getPaper_tube_or_FRP())) { + plan.setPaper_tube_material(left_spec_value); + plan.setPaper_tube_model(left_spec); + plan.setPaper_tube_description(left_spec); + } else { + plan.setFRP_material(left_spec_value); + plan.setFRP_model(left_spec); + plan.setFRP_description(left_spec); + } + plan.setUp_or_down("2"); + plan.setLeft_or_right("1"); + if (left_spec.contains("3英寸") || left_spec.contains("3.12英寸")) { + plan.setQzz_generation("4"); + } else { + plan.setQzz_generation("5"); + } + } + if (i == 1 && ObjectUtil.isNotEmpty(right_spec) && "2".equals(up_or_down)) { + // 下右 + plan.setPaper_tube_or_FRP(right_spec_value.startsWith("48") ? "1" : "2"); + String[] split = right_spec.split("\\|"); + plan.setQzz_size(String.valueOf(split[2].charAt(0))); + if ("1".equals(plan.getPaper_tube_or_FRP())) { + plan.setPaper_tube_material(right_spec_value); + plan.setPaper_tube_model(right_spec); + plan.setPaper_tube_description(right_spec); + } else { + plan.setFRP_material(right_spec_value); + plan.setFRP_model(right_spec); + plan.setFRP_description(right_spec); + } + plan.setUp_or_down("2"); + plan.setLeft_or_right("2"); + if (right_spec.contains("3英寸") || right_spec.contains("3.12英寸")) { + plan.setQzz_generation("4"); + } else { + plan.setQzz_generation("5"); + } + } + plans.add(plan); + } + // 校验设备对应的分切暂存架子是不是可用切无数据无任务。 + BstIvtCutpointivt cutCacheShelf = bcutpointivtService.getOne(new LambdaQueryWrapper() + .eq(BstIvtCutpointivt::getProduct_area, cutDevice.getProduct_area()) + .eq(BstIvtCutpointivt::getPlan, cutDevice.getPoint_code()) + .eq(BstIvtCutpointivt::getIs_used, SlitterConstant.SLITTER_YES)); + if (ObjectUtil.isEmpty(cutCacheShelf)) { + throw new BadRequestException("分切机{" + cutDevice.getPoint_code() + "}对应的分切架子不存在!"); + } + if (!SlitterConstant.SLITTER_YES.equals(cutCacheShelf.getPoint_status())) { + throw new BadRequestException("架子[" + cutCacheShelf.getPoint_code() + "]上有货!"); + } + // 判断任务 + List taskList = taskService.checkHaveTask(cutCacheShelf.getPoint_code()); + if (taskList.size() > 0) { + throw new BadRequestException("分切架子存在任务!"); + } + // 创建任务 + JSONObject taskParam = new JSONObject(); + List containers = plans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()); + taskParam.put("containers", containers); + taskParam.put("point_code1", "1".equals(up_or_down) + ? cutDevice.getUp_point_code() : cutDevice.getDown_point_code()); + taskParam.put("point_code2", "1".equals(up_or_down) + ? cutCacheShelf.getTruss_point_code1() : cutCacheShelf.getTruss_point_code2()); + taskParam.put("truss_type", "1"); + taskParam.put("empty_site", "0"); + taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("分切机下料桁架任务")); + taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + // 分切计划修改状态 05 -> 06 + plans.forEach(plan -> { + plan.setStatus("06"); + TaskUtils.updateOptMessageBySlitterPlan(plan); + }); + slittingproductionplanService.saveBatch(plans); + // 创建任务 + slitterDownTrussTask.createTask(taskParam); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "饵料下卷成功!"); + return res; + } }