From 14d3321b68632ddbbbafe248730b08ae99877828 Mon Sep 17 00:00:00 2001 From: lsymicc Date: Mon, 30 Mar 2026 14:00:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=BE=91=E8=AE=BE=E5=A4=87=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=92=8C=E5=87=BA=E5=85=A5=E5=BA=93=E8=B0=83=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/api/service/IApiService.java | 5 + .../api/service/impl/ApiServiceImpl.java | 21 ++- .../service/impl/RequestLogServiceImpl.java | 2 +- .../service/IBasCargoSpaceService.java | 9 ++ .../impl/BasCargoSpaceServiceImpl.java | 17 +++ .../java/com/ruoyi/common/ConvException.java | 30 ++++ .../ddj/controller/MsgDdjController.java | 11 ++ .../ruoyi/device/ssj/domain/DeviceSsj.java | 3 + .../com/ruoyi/job/mapper/MydoJobMapper.java | 8 ++ .../ruoyi/job/service/IMydoJobService.java | 2 + .../job/service/impl/MydoJobServiceImpl.java | 44 +++++- .../schedule/plcRead/ssj/PlcSsjRead.java | 130 +++++++++--------- .../schedule/scheduleTask/ddj/DdjThread.java | 3 + .../scheduleTask/ssj/PortConvThread.java | 118 +++++++++++----- .../src/main/resources/application.yml | 6 +- .../mapper/device/DeviceSsjMapper.xml | 30 ++-- .../resources/mapper/job/MydoJobMapper.xml | 4 + ruoyi-ui/src/views/device/ddj/index.vue | 103 ++++---------- 18 files changed, 347 insertions(+), 199 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/common/ConvException.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiService.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiService.java index 2c1ee54..aea9724 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiService.java @@ -143,6 +143,11 @@ public interface IApiService */ public AjaxResult createInMydoJob(Map param); + /** + * 入库请求作业异常反馈(扫码失败、外形、称重等异常) + */ + public AjaxResult createInMydoJobException(Map param); + public AjaxResult selectMydoJobByNoTrayCode(Map param); AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java index 54bcc53..07bbff9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java @@ -431,6 +431,22 @@ public class ApiServiceImpl implements IApiService { } } + /** + * 入库请求作业异常反馈(扫码失败、外形、称重等异常) + * @param param + * @return + */ + @Override + public AjaxResult createInMydoJobException(Map param) { + RequestLog requestLog = requestLogService.getRequestLog(WMS_STOCKIN_MYDOJOB, "入库异常反馈", JSONUtil.toJsonStr(param)); + if ("1".equals(requestLog.getIsSuccessful())) { + InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class); + return AjaxResult.success(bean.getData()); + } else { + return AjaxResult.error(); + } + } + @Override public AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob) { @@ -440,9 +456,10 @@ public class ApiServiceImpl implements IApiService { job.setTaskNo(receiveOutJob.getTaskNo()); List tasks = mydoJobService.selectMydoJobList(job); + //校验:任务已存在 if (tasks.size() != 0) { - log.info("【请求异常】wms下发出库任务失败,该任务已存在,任务号:{}", receiveOutJob.getTaskNo()); - return AjaxResult.error("【请求异常】wms下发出库任务失败,该任务已存在,任务号:" + receiveOutJob.getTaskNo()); + log.info("【请求异常】wms下发出库任务失败,该任务已存在,单号:{},任务号:{}", receiveOutJob.getJobId(), receiveOutJob.getTaskNo()); + return AjaxResult.error("【请求异常】wms下发出库任务失败,该任务已存在,单号:" + receiveOutJob.getJobId() + ",任务号:" + receiveOutJob.getTaskNo()); } //生成出库作业 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/RequestLogServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/RequestLogServiceImpl.java index 94c1a3c..4d2b5c2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/RequestLogServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/RequestLogServiceImpl.java @@ -157,7 +157,7 @@ public class RequestLogServiceImpl implements IRequestLogService } @Override - public RequestLog getRequestLog2(String url, String endPoint,String param) { + public RequestLog getRequestLog2(String url, String endPoint, String param) { RequestLog requestLog = new RequestLog(); Date requestTime = new Date(); requestLog.setRequestTime(DateUtil.format(requestTime, "yyyy-MM-dd HH:mm:ss")); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java index 3f0e9c3..f6f5469 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java @@ -60,4 +60,13 @@ public interface IBasCargoSpaceService public int deleteBasCargoSpaceByCargoSpaceId(String cargoSpaceId); BasCargoSpace selectBasCargoSpaceByWmsCargoSpaceId(String cargoSpaceId); + + + /** + * 清空【出库无货】的异常库存 - 重置为空货位状态 + * @param cargoSpaceId + * @return + */ + public int resetCargoSpaceByStockoutException(String cargoSpaceId); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java index b1be140..38ae3fa 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java @@ -95,4 +95,21 @@ public class BasCargoSpaceServiceImpl implements IBasCargoSpaceService public BasCargoSpace selectBasCargoSpaceByWmsCargoSpaceId(String cargoSpaceId) { return basCargoSpaceMapper.selectBasCargoSpaceByWmsCargoSpaceId(cargoSpaceId); } + + /** + * 清空【出库无货】的异常库存 + * @param cargoSpaceId + * @return + */ + @Override + public int resetCargoSpaceByStockoutException(String cargoSpaceId){ + //清空该异常货位库存信息 + BasCargoSpace cargoSpace = new BasCargoSpace(); + cargoSpace.setTrayCode(""); + cargoSpace.setStatus("1"); + cargoSpace.setCargoSpaceId(cargoSpaceId); + return basCargoSpaceMapper.updateBasCargoSpace(cargoSpace); + } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/ConvException.java b/ruoyi-admin/src/main/java/com/ruoyi/common/ConvException.java new file mode 100644 index 0000000..f6f535b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/ConvException.java @@ -0,0 +1,30 @@ +package com.ruoyi.common; + +/** + * 输送机报警 + */ +public class ConvException { + + /** + * 外形检测异常 + */ + public static final int CHECK_SIZE_EXCEPTION = 0; + + + /** + * 超重 + */ + public static final int CHECK_OVERWEIGHT_EXCEPTION = 1; + + /** + * 扫码异常 + */ + public static final int CHECK_BARCODE_EXCEPTION = 2; + + /** + * 输送机非自动 + */ + public static final int CHECK_MODE_EXCEPTION = 3; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/ddj/controller/MsgDdjController.java b/ruoyi-admin/src/main/java/com/ruoyi/device/ddj/controller/MsgDdjController.java index 072ad84..24f24f3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/ddj/controller/MsgDdjController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/ddj/controller/MsgDdjController.java @@ -101,4 +101,15 @@ public class MsgDdjController extends BaseController { return toAjax(msgDdjService.deleteMsgDdjByIds(ids)); } + + + @GetMapping("/getStackerStatus/{id}") + public MsgDdj getStackerStatus(@PathVariable Long id){ + if (id == 1) { + return msgDdjService.selectMsgDdjById(id); + }else{ + return null; + } + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/DeviceSsj.java b/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/DeviceSsj.java index 3a0018f..5653c6f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/DeviceSsj.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/DeviceSsj.java @@ -74,6 +74,9 @@ public class DeviceSsj extends BaseEntity @Excel(name = "任务号") private int taskNo; + /** + * 输送机报警 + */ @Excel(name = "异常") private int exception; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mapper/MydoJobMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mapper/MydoJobMapper.java index 565e82f..6bc749a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mapper/MydoJobMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mapper/MydoJobMapper.java @@ -58,6 +58,14 @@ public interface MydoJobMapper */ public int deleteMydoJobByJobId(String jobId); + /** + * 删除作业信息 + * + * @param taskNo 任务号主键 + * @return 结果 + */ + public int deleteMydoJobByTaskNo(String taskNo); + /** * 批量删除作业信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java b/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java index eaef339..7e32f3b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java @@ -88,6 +88,8 @@ public interface IMydoJobService AjaxResult OuthandFinish(String[] jobIds); + public AjaxResult ManuelTaskFinish(String[] taskNos); + List getInJobByEntranceId(String exitId); MydoJob selectMydoJobByExitId(String exitId); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java index f14f235..fbcfabd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java @@ -133,7 +133,7 @@ public class MydoJobServiceImpl implements IMydoJobService map.put("v_rwh", rwh); map.put("v_ddj_id", id); mydoJobMapper.InvalidMydoJob(map); - if (Convert.toInt(map.get("v_result"))==10){ + if (Convert.toInt(map.get("v_result")) == 10){ return true; }else { throw new RuntimeException(map.get("v_result").toString()); @@ -170,11 +170,18 @@ public class MydoJobServiceImpl implements IMydoJobService return mydoJobMapper.selectMydoJobByEntranceList1(entranceId); } + /** + * 手动处理同一【作业单号】的作业 + * 如果【jobid】和【taskno】是一对多的情况,使用上一个方法手动完成作业会导致整个【jobid】单据完成回传 + * @param jobIds + * @return + */ @Override public AjaxResult OuthandFinish(String[] jobIds) { + //获取所有符合【任务单号】的作业 for (String jobId : jobIds) { mydoJobMapper.insertHistory(jobId); - MydoJob mydoJob = mydoJobMapper.selectMydoJobByJobId(jobId); + MydoJob mydoJob = mydoJobMapper.selectMydoJobByJobId(jobId); JobCallBack jobCallBack = new JobCallBack(); long jobIdNum = Long.parseLong(mydoJob.getInOrOut()); if (jobIdNum > 20){ @@ -192,6 +199,39 @@ public class MydoJobServiceImpl implements IMydoJobService return AjaxResult.success("操作成功"); } + /** + * 手动处理指定批量【任务号】的作业 + * @param taskNos + * @return + */ + @Override + public AjaxResult ManuelTaskFinish(String[] taskNos) { + //todo 需要确定【jobid】是否由wms下发 + // 如果【jobid】和【taskno】是一对多的情况,使用上一个方法手动完成作业会导致整个【jobid】单据完成回传 + // 如果【jobid】和【taskno】是一对一的情况,则直接使用方法手动完成即可 + //获取所有符合【任务号】的作业 + for (String taskNo : taskNos) { + MydoJob mydoJob = mydoJobMapper.selectMydoJobByTaskNo(taskNo); + mydoJobMapper.insertHistory(mydoJob.getInOrOut()); + JobCallBack jobCallBack = new JobCallBack(); + long jobIdNum = Long.parseLong(mydoJob.getInOrOut()); + if (jobIdNum > 20) { + jobCallBack.setType("2"); + } else { + jobCallBack.setType("1"); + } + jobCallBack.setMydojobId(mydoJob.getJobId()); + jobCallBack.setStatus("0"); + jobCallBack.setTaskNo(Convert.toLong(taskNo)); + jobCallBack.setCreateTime(new Date()); + jobCallBack.setSpare1("0"); + jobCallBackService.insertJobCallBack(jobCallBack); + mydoJobMapper.deleteMydoJobByTaskNo(taskNo); + } + + return AjaxResult.success("操作成功"); + } + @Override public List getInJobByEntranceId(String exitId) { return mydoJobMapper.getInJobByEntranceId(exitId); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java index 3cefc7d..a72a741 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java @@ -137,71 +137,71 @@ public class PlcSsjRead implements Runnable { * * @param ssjDevice */ -// private void readPlcSmSsj(DeviceSsj ssjDevice) { -// OperateResultExOne read2 = readWriteNet.Read(ssjDevice.getPlcDbReadAddress(), Short.parseShort("30")); -// String ddsx1 = "0"; -// if (read2.IsSuccess) { -// ddsx1 = SoftBasic.ByteToHexString(read2.Content); -// ssjDevice.setDw(ParseUtil.optInt(0, ddsx1)); -// ssjDevice.setKx(ParseUtil.optInt(2, ddsx1)); -// ssjDevice.setTaskNo(ParseUtil.optDInt(4, ddsx1)); -// ssjDevice.setSszt(ParseUtil.optInt(8, ddsx1)); -// ssjDevice.setRkqq(ParseUtil.optInt(10, ddsx1)); -// ssjDevice.setTraySize(ParseUtil.optInt(12, ddsx1)); -// ssjDevice.setInOrOut(ParseUtil.optInt(24, ddsx1)); -// ssjDevice.setException(ParseUtil.optInt(28, ddsx1)); -// -// String trayCodeReadAddress=""; -// String allot=""; -// switch (ssjDevice.getDeviceCode()){ -// case "G1005": -// trayCodeReadAddress = "DB503.0"; -// allot = "DB802.24"; -// break; -// case "L2004": -// trayCodeReadAddress = "DB503.600"; -// break; -// case "L2006": -// trayCodeReadAddress = "DB503.800"; -// break; -// case "L1001": -// trayCodeReadAddress = "DB503.200"; -// allot = "DB802.0"; -// break; -// case "L1003": -// trayCodeReadAddress = "DB503.400"; -// allot = "DB802.12"; -// break; -// } -// -// if(!"".equals(allot)){ -// OperateResultExOne agvSsj = readWriteNet.Read(allot, Short.parseShort("2")); -// if (agvSsj.IsSuccess){ -// //去除bytes中 -// ddsx1 = SoftBasic.ByteToHexString(agvSsj.Content); -// ssjDevice.setAllowPut(ParseUtil.optInt(0, ddsx1)); -// } -// } -// -// OperateResultExOne agvSsjTask = readWriteNet.Read("DB501.280", Short.parseShort("16")); -// String ddsx2 = "0"; -// if (agvSsjTask.IsSuccess) { -// ddsx2 = SoftBasic.ByteToHexString(agvSsjTask.Content); -// if("L1001".equals(ssjDevice.getDeviceCode())){ -// ssjDevice.setTaskNo2(ParseUtil.optDInt(0, ddsx2)); -// } -// if("L1003".equals(ssjDevice.getDeviceCode())){ -// ssjDevice.setTaskNo2(ParseUtil.optDInt(4, ddsx2)); -// } -// if("L2004".equals(ssjDevice.getDeviceCode())){ -// ssjDevice.setTaskNo2(ParseUtil.optDInt(8, ddsx2)); -// } -// if("L2006".equals(ssjDevice.getDeviceCode())){ -// ssjDevice.setTaskNo2(ParseUtil.optDInt(12, ddsx2)); -// } -// } -// } -// } + private void readPlcSmSsj(DeviceSsj ssjDevice) { + OperateResultExOne read2 = readWriteNet.Read(ssjDevice.getPlcDbReadAddress(), Short.parseShort("30")); + String ddsx1 = "0"; + if (read2.IsSuccess) { + ddsx1 = SoftBasic.ByteToHexString(read2.Content); + ssjDevice.setDw(ParseUtil.optInt(0, ddsx1)); + ssjDevice.setKx(ParseUtil.optInt(2, ddsx1)); + ssjDevice.setTaskNo(ParseUtil.optDInt(4, ddsx1)); + ssjDevice.setSszt(ParseUtil.optInt(8, ddsx1)); + ssjDevice.setRkqq(ParseUtil.optInt(10, ddsx1)); + ssjDevice.setTraySize(ParseUtil.optInt(12, ddsx1)); + ssjDevice.setInOrOut(ParseUtil.optInt(24, ddsx1)); + ssjDevice.setException(ParseUtil.optInt(28, ddsx1)); + + String trayCodeReadAddress=""; + String allot=""; + switch (ssjDevice.getDeviceCode()){ + case "G1005": + trayCodeReadAddress = "DB503.0"; + allot = "DB802.24"; + break; + case "L2004": + trayCodeReadAddress = "DB503.600"; + break; + case "L2006": + trayCodeReadAddress = "DB503.800"; + break; + case "L1001": + trayCodeReadAddress = "DB503.200"; + allot = "DB802.0"; + break; + case "L1003": + trayCodeReadAddress = "DB503.400"; + allot = "DB802.12"; + break; + } + + if(!"".equals(allot)){ + OperateResultExOne agvSsj = readWriteNet.Read(allot, Short.parseShort("2")); + if (agvSsj.IsSuccess){ + //去除bytes中 + ddsx1 = SoftBasic.ByteToHexString(agvSsj.Content); + ssjDevice.setAllowPut(ParseUtil.optInt(0, ddsx1)); + } + } + + OperateResultExOne agvSsjTask = readWriteNet.Read("DB501.280", Short.parseShort("16")); + String ddsx2 = "0"; + if (agvSsjTask.IsSuccess) { + ddsx2 = SoftBasic.ByteToHexString(agvSsjTask.Content); + if("L1001".equals(ssjDevice.getDeviceCode())){ + ssjDevice.setTaskNo2(ParseUtil.optDInt(0, ddsx2)); + } + if("L1003".equals(ssjDevice.getDeviceCode())){ + ssjDevice.setTaskNo2(ParseUtil.optDInt(4, ddsx2)); + } + if("L2004".equals(ssjDevice.getDeviceCode())){ + ssjDevice.setTaskNo2(ParseUtil.optDInt(8, ddsx2)); + } + if("L2006".equals(ssjDevice.getDeviceCode())){ + ssjDevice.setTaskNo2(ParseUtil.optDInt(12, ddsx2)); + } + } + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/DdjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/DdjThread.java index fc2f3a0..4c40aad 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/DdjThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/DdjThread.java @@ -192,6 +192,9 @@ public class DdjThread implements Runnable { if (ajaxResult.isSuccess()) { //作废作业 InvalidMydoJob(rwh, ddj.getId()); + + //重置【取货无货】的出库异常货位库存信息 + basCargoSpaceService.resetCargoSpaceByStockoutException(mydoJob.getCargoSpaceId()); } } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/PortConvThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/PortConvThread.java index d6c2f15..f6897e1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/PortConvThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/PortConvThread.java @@ -5,6 +5,9 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.ruoyi.api.service.IApiService; +import com.ruoyi.bas.cargospace.domain.BasCargoSpace; +import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; +import com.ruoyi.common.ConvException; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.device.ssj.domain.DeviceSsj; @@ -37,6 +40,7 @@ public class PortConvThread implements Runnable { private IAgvQueueService agvQueueService; private IMydoJobService mydoJobService; private IJobCallBackService jobCallBackService; + private IBasCargoSpaceService cargoSpaceService; public boolean isRun = true; @@ -92,38 +96,86 @@ public class PortConvThread implements Runnable { //---------------------------入库模式--------------------------- case 1: //---------------------------入口取输送机(叉车取放货位置)--------------------------- - //【不空闲】、【输送到位】、【条码不为空】 - if (inSsjDevice.getKx() != 1 && inSsjDevice.getDw() == 1 && inSsjDevice.getTrayCode() != "") { - - //todo 外形校验 - - - //todo 称重校验 - - - //todo 条码校验 异常入库退回 - + //输送机【非空闲】、【输送到位】、【条码不为空】、有【入库请求】 + if (inSsjDevice.getKx() != 1 && inSsjDevice.getDw() == 1) { + AjaxResult ajaxResult; //请求参数 - //todo 核对请求wms接口参数数量 HashMap paramMap = new HashMap<>(); - //托盘条码 - paramMap.put("trayCode", inSsjDevice.getTrayCode()); + paramMap.put("trayCode", inSsjDevice.getTrayCode());//托盘条码 int height = inSsjDevice.getHeight(); int weight = inSsjDevice.getWeight(); - //重量 - paramMap.put("weight", weight); - //高度 - paramMap.put("height", height); - paramMap.put("errorInfo", null); + paramMap.put("weight", weight);//重量 + paramMap.put("height", height);//高度 + + //入库口异常校验 + switch (inSsjDevice.getException()) { + + //外形检测异常 + case ConvException.CHECK_SIZE_EXCEPTION: + paramMap.put("errorInfo", "外形检测异常-货物超高"); + ajaxResult = apiService.createInMydoJobException(paramMap); + if (ajaxResult.isSuccess()) { + //向输送机下发退回 + int i = writeToSsj(inSsjDevice.getPlcDbWriteAddress(), "99", 99, 1); + } + return; + + //超重检测 + case ConvException.CHECK_OVERWEIGHT_EXCEPTION: + paramMap.put("errorInfo", "外形检测异常-货物超重"); + ajaxResult = apiService.createInMydoJobException(paramMap); + if (ajaxResult.isSuccess()) { + //向输送机下发退回 + int i = writeToSsj(inSsjDevice.getPlcDbWriteAddress(), "99", 99, 1); + } + return; + + //扫码异常 + case ConvException.CHECK_BARCODE_EXCEPTION: + if (inSsjDevice.getTrayCode() == "") { + paramMap.put("errorInfo", "条码扫描失败:扫描结果为空"); + ajaxResult = apiService.createInMydoJobException(paramMap); + }else{ + //条码格式校验 + paramMap.put("errorInfo", "条码扫描异常:格式错误"); + ajaxResult = apiService.createInMydoJobException(paramMap); + } + if (ajaxResult.isSuccess()) { + //向输送机下发退回 + int i = writeToSsj(inSsjDevice.getPlcDbWriteAddress(), "99", 99, 1); + } + return; + } + + //校验:有【入库请求】再请求获取wcs任务 + if (inSsjDevice.getRkqq() != 1) { + return; + } + + //校验:当前条码任务已存在 + MydoJob job = new MydoJob(); + job.setTrayCode(inSsjDevice.getTrayCode()); + if (mydoJobService.selectMydoJobList(job).size() > 0) { + log.warn("【生成wcs任务异常】该托盘号已有作业,托盘条码:{}",inSsjDevice.getTrayCode()); + return; + } + + //校验:当前条码已有库存 + BasCargoSpace cargoSpace = new BasCargoSpace(); + cargoSpace.setTrayCode(inSsjDevice.getTrayCode()); + if (cargoSpaceService.selectBasCargoSpaceList(cargoSpace).size() > 0) { + log.warn("【生成wcs任务异常】该托盘号已有库存,托盘条码:{}",inSsjDevice.getTrayCode()); + return; + } //请求生成wcs任务 - AjaxResult ajaxResult = apiService.createInMydoJob(paramMap); + ajaxResult = apiService.createInMydoJob(paramMap); if (ajaxResult.isSuccess()) { //获取wms下发的任务号和分配货位 MydoJob mydoJob = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class); - //todo wms分配的货位(排列层)校验 + //todo 校验wms分配的货位(排列层)是否合法 if (mydoJob.getCargoSpaceId() == null) { log.info("【请求参数异常】分配货位:null,托盘条码:{}",inSsjDevice.getTrayCode()); return; @@ -140,19 +192,21 @@ public class PortConvThread implements Runnable { mydoJob.setPriority(Long.valueOf(10)); //拿到正常作业,插到wcs作业表,下发给输送机任务号,覆盖任务号 - mydoJobService.insertMydoJob(mydoJob); - - log.info("请求生成wcs作业成功,wms下发任务单号:{}, 任务号:{},托盘条码:{},分配货位:{}", mydoJob.getJobId(), mydoJob.getTaskNo(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId()); - - //向输送机下发任务号 - int i = writeToSsj(inSsjDevice.getPlcDbWriteAddress(), mydoJob.getTaskNo(), Integer.parseInt(mydoJob.getTraySize()), 1); - if (i == 1) { - //写入成功则更新执行阶段 - mydoJob.setExecutionPhase(TASK_EP_LINE_SSJ); - mydoJobService.updateMydoJob(mydoJob); - log.info("G1004入口输送机下发任务号成功:{}", mydoJob.getTaskNo()); + if (mydoJobService.insertMydoJob(mydoJob) == 1) { + log.info("请求生成wcs作业成功,wms下发任务单号:{}, 任务号:{},托盘条码:{},分配货位:{}", mydoJob.getJobId(), mydoJob.getTaskNo(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId()); + }else{ + //向输送机下发任务号 + int i = writeToSsj(inSsjDevice.getPlcDbWriteAddress(), mydoJob.getTaskNo(), Integer.parseInt(mydoJob.getTraySize()), 1); + if (i == 1) { + //写入成功则更新执行阶段 + mydoJob.setExecutionPhase(TASK_EP_LINE_SSJ); + mydoJobService.updateMydoJob(mydoJob); + log.info("G1004入口输送机下发任务号成功:{}", mydoJob.getTaskNo()); + } } + }else{ + //请求生成wcs任务失败 //todo 向输送机下发退回 int i = writeToSsj(inSsjDevice.getPlcDbWriteAddress(), "99", 99, 1); diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 8449bb9..dd6d7c6 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -66,10 +66,10 @@ spring: # 热部署开关 enabled: true # redis 配置 - redis: + spring.redis: # 地址 -# host: 192.168.58.10 - host: 172.16.4.12 + host: 127.0.0.1 +# host: 172.16.4.12 # 端口,默认为6379 port: 6379 # 数据库索引 diff --git a/ruoyi-admin/src/main/resources/mapper/device/DeviceSsjMapper.xml b/ruoyi-admin/src/main/resources/mapper/device/DeviceSsjMapper.xml index 768ae52..216cb33 100644 --- a/ruoyi-admin/src/main/resources/mapper/device/DeviceSsjMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/device/DeviceSsjMapper.xml @@ -36,21 +36,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml index 45735f4..8570fd0 100644 --- a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml @@ -206,6 +206,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" delete from mydo_job_wcs where job_id = #{jobId} + + delete from mydo_job_wcs where task_no = #{taskNo} + + delete from mydo_job_wcs where job_id in diff --git a/ruoyi-ui/src/views/device/ddj/index.vue b/ruoyi-ui/src/views/device/ddj/index.vue index 09f7e2b..858e2a8 100644 --- a/ruoyi-ui/src/views/device/ddj/index.vue +++ b/ruoyi-ui/src/views/device/ddj/index.vue @@ -9,10 +9,10 @@
堆垛机监控 - 总计: 6 台 + 总计: 1 台
- + @@ -49,63 +49,22 @@ -
二层
+
输送线
- - + +
- 产线输送机 - {{ table1Data.length }}台 -
- - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
-
- 入出库口输送机 + 入出库输送机 {{ table2Data.length }}台
+