diff --git a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java index c90489a..5631460 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java @@ -97,7 +97,7 @@ public class PlcEventTask { @Autowired PlcInit plcInit; - // @Scheduled(fixedDelay = 8000) + @Scheduled(fixedDelay = 8000) public void init() { //查询需要连接的PLC,初始化连接对象 List plcList = iWcsPlcConnectService.selectWcsPlcConnectList(new WcsPlcConnect().setIsActive("1")); @@ -107,11 +107,11 @@ public class PlcEventTask { } for (WcsPlcConnectVo conn : plcList) { - if (conn.getPlcIp().contains("1.20")){ + if (conn.getPlcIp().contains("155.180")){ plcTask(plcInit.getPlcOperate_stk(), conn, conn.getPointTables()); } - if (conn.getPlcIp().contains("1.10")){ + if (conn.getPlcIp().contains("155.170")){ plcTask(plcInit.getPlcOperate_dps(), conn, conn.getPointTables()); } } @@ -119,7 +119,7 @@ public class PlcEventTask { //输送线心跳 - // @Scheduled(fixedDelay = 4000) + @Scheduled(fixedDelay = 4000) public void writePlcheartbeatDps(){ //根据连接的plcId获取属性 PlcOperate plcOperate = plcInit.getPlcOperate_dps(); @@ -147,7 +147,7 @@ public class PlcEventTask { } } //堆垛机心跳 - // @Scheduled(fixedDelay = 4000) + @Scheduled(fixedDelay = 4000) public void writePlcheartbeatStk(){ //根据连接的plcId获取属性 PlcOperate plcOperate = plcInit.getPlcOperate_stk(); @@ -332,7 +332,7 @@ public class PlcEventTask { String twoAllotAddress = "", twoAllotTaskId = "", twoAllotTaskIdVt = ""; String autoAddress = ""; - Long taskId = 0L; + //货物高度wms的值 String cargoHeight =""; //托盘条码地址 @@ -420,6 +420,7 @@ public class PlcEventTask { // 电柜状态是否是自动,如果是自动则继续流程 if (pointMap.containsKey(autoAddress) && Boolean.valueOf(pointMap.get(autoAddress).toString())) { + Long taskIdOne = 0L; //1楼是否请求分配 if (pointMap.containsKey(oneAllotAddress) && Boolean.valueOf(pointMap.get(oneAllotAddress).toString())) { //请求入库分配时,判断是否有正在执行的出库任务,如果有则返回 @@ -430,18 +431,19 @@ public class PlcEventTask { } //读取托盘条码内容 - String barcodeValue = pointMap.get(onePalletAddress).toString(); + String barcodeValueOne = pointMap.get(onePalletAddress).toString(); + log.info("1楼请求入库时,读取的条码内容:"+barcodeValueOne); //根据托盘条码返回正在执行的任务号 - Result orderResult = iBusinOutInPlanService.getOrderNoByContainerCode(barcodeValue, "in"); - log.info("根据条码获取的任务信息:"+orderResult.getData()); + Result orderResult = iBusinOutInPlanService.getOrderNoByContainerCode(barcodeValueOne, "in"); + log.info("1根据条码获取的任务信息:"+orderResult.getData()); if (Result.isOk(orderResult)) { PlanOrderLocationVo data = orderResult.getData(); - taskId = data.getOrderNo(); + taskIdOne = data.getOrderNo(); cargoHeight = data.getType();//获取托盘或模具类型 } else { redisTemplate.opsForValue().set(RedisConstant.redisPutInExeMsg+orderResult.getMsg(),orderResult.getMsg()); - log.info("获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValue); + log.info("获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValueOne); //回填任务号 Map writeMap = new HashMap<>(1); writeMap.put(oneWcsErrExitVT, 1); @@ -454,15 +456,15 @@ public class PlcEventTask { log.info("1楼获取单号入库失败,写入点位失败{}",allMap); } } - log.info("1楼入库分配任务ID:"+taskId + "条码号:"+ barcodeValue); + log.info("1楼入库分配任务ID:"+taskIdOne + "条码号:"+ barcodeValueOne); log.info("1楼入库分配货位类型:"+cargoHeight); - String redisBarcode = String.valueOf(redisTemplate.opsForValue().get(RedisConstant.redisContainer+taskId)); + String redisBarcodeOne = String.valueOf(redisTemplate.opsForValue().get(RedisConstant.redisContainer+taskIdOne)); //根据扫码的托盘,判断是否已经下任务了 - if (taskId != 0L && !redisBarcode.equals(barcodeValue)) { + if (taskIdOne != 0L && redisBarcodeOne !=null && !redisBarcodeOne.equals(barcodeValueOne)) { //回填任务号 Map writeMap = new HashMap<>(1); - writeMap.put(oneAllotTaskIdVt, taskId); + writeMap.put(oneAllotTaskIdVt, taskIdOne); Map allMap = new HashMap<>(1); allMap.put(oneAllotTaskId, writeMap); @@ -478,17 +480,17 @@ public class PlcEventTask { Boolean taskBoolean = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allMap)); if (taskBoolean) { //分配任务成功时,记录已下发入库任务,不可在下发出库或入库任务 - redisTemplate.opsForValue().set(RedisConstant.redisTaskIn,taskId); + redisTemplate.opsForValue().set(RedisConstant.redisTaskIn,taskIdOne); //更改入库计划为1 - iBusinOutInPlanService.updPlanStatus(taskId, PlanStatusEnum.DOING.getValue()); + iBusinOutInPlanService.updPlanStatus(taskIdOne, PlanStatusEnum.DOING.getValue()); } //改为入库ID - redisTemplate.opsForValue().set(RedisConstant.redisContainer, taskId, 10, TimeUnit.SECONDS); - + redisTemplate.opsForValue().set(RedisConstant.redisContainer, taskIdOne, 10, TimeUnit.SECONDS); } } //2楼是否请求分配 if (pointMap.containsKey(twoAllotAddress) && Boolean.valueOf(pointMap.get(twoAllotAddress).toString())) { + Long taskIdTwo=0L; //请求入库分配时,判断是否有正在执行的出库任务,如果有则返回 Object taskOutId = redisTemplate.opsForValue().get(RedisConstant.redisTaskOut); if (taskOutId !=null){ @@ -496,17 +498,18 @@ public class PlcEventTask { return; } //读取托盘条码内容 - String barcodeValue = pointMap.get(twoPalletAddress).toString(); + String barcodeValueTwo = pointMap.get(twoPalletAddress).toString(); + log.info("1楼请求入库时,读取的条码内容:"+barcodeValueTwo); //根据托盘条码返回正在执行的任务号 - Result orderResult = iBusinOutInPlanService.getOrderNoByContainerCode(barcodeValue, "in"); + Result orderResult = iBusinOutInPlanService.getOrderNoByContainerCode(barcodeValueTwo, "in"); log.info("2楼根据条码获取的任务信息:"+orderResult.getData()); if (Result.isOk(orderResult)) { PlanOrderLocationVo data = orderResult.getData(); - taskId = data.getOrderNo(); + taskIdTwo = data.getOrderNo(); cargoHeight = data.getType();//获取托盘或模具类型 }else { redisTemplate.opsForValue().set(RedisConstant.redisPutInExeMsg+orderResult.getMsg(),orderResult.getMsg()); - log.info("2楼获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValue); + log.info("2楼获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValueTwo); //回填任务号 Map writeMap = new HashMap<>(1); writeMap.put(twoWcsErrExitVT, 1); @@ -519,15 +522,15 @@ public class PlcEventTask { log.info("2楼获取单号入库失败,写入点位失败{}",allMap); } } - log.info("2楼入库分配任务ID:"+taskId + "条码号:"+ barcodeValue); + log.info("2楼入库分配任务ID:"+taskIdTwo + "条码号:"+ barcodeValueTwo); log.info("2楼入库分配货位类型:"+cargoHeight); - String redisBarcode = String.valueOf(redisTemplate.opsForValue().get(RedisConstant.redisContainer+taskId)); + String redisBarcodeTwo = String.valueOf(redisTemplate.opsForValue().get(RedisConstant.redisContainer+taskIdTwo)); //根据扫码的托盘,判断是否已经下任务了 - if (taskId != 0L && !redisBarcode.equals(barcodeValue)) { + if (taskIdTwo != 0L && redisBarcodeTwo!=null && !redisBarcodeTwo.equals(barcodeValueTwo)) { //回填任务号 Map writeMap = new HashMap<>(1); - writeMap.put(twoAllotTaskIdVt, taskId); + writeMap.put(twoAllotTaskIdVt, taskIdTwo); Map allMap = new HashMap<>(1); allMap.put(twoAllotTaskId, writeMap); @@ -544,13 +547,12 @@ public class PlcEventTask { Boolean taskBoolean = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allMap)); if (taskBoolean) { //分配任务成功时,记录已下发入库任务,不可在下发出库任务 - redisTemplate.opsForValue().set(RedisConstant.redisTaskIn,taskId); + redisTemplate.opsForValue().set(RedisConstant.redisTaskIn,taskIdTwo); //更改入库计划为1 - iBusinOutInPlanService.updPlanStatus(taskId, PlanStatusEnum.DOING.getValue()); + iBusinOutInPlanService.updPlanStatus(taskIdTwo, PlanStatusEnum.DOING.getValue()); } //改为入库ID - redisTemplate.opsForValue().set(RedisConstant.redisContainer, taskId, 10, TimeUnit.SECONDS); - + redisTemplate.opsForValue().set(RedisConstant.redisContainer, taskIdTwo, 10, TimeUnit.SECONDS); } } //获取1楼入库失败的内容 @@ -586,25 +588,25 @@ public class PlcEventTask { } log.info("1楼入库失败原因:"+failedReasonValue); //读取失败任务号 - Long failedTaskIdValue = Long.valueOf(pointMap.get(oneAllotTaskId).toString()); + Long failedTaskIdValueOne = Long.valueOf(pointMap.get(oneAllotTaskId).toString()); //根据回填入库失败原因 UpdPlanErrorBo updPlanErrorBo = new UpdPlanErrorBo(); updPlanErrorBo.setErrorMsg(failedReasonValue); - updPlanErrorBo.setOrderNo(failedTaskIdValue); + updPlanErrorBo.setOrderNo(failedTaskIdValueOne); iBusinOutInPlanService.updErrMsg(updPlanErrorBo); - String redisFailedTaskIdValue = String.valueOf(redisTemplate.opsForValue().get(RedisConstant.redisDPSFailedTaskIdOne)); + String redisFailedTaskIdValueOne = String.valueOf(redisTemplate.opsForValue().get(RedisConstant.redisDPSFailedTaskIdOne)); - log.info("1楼入库失败redis任务ID:"+redisFailedTaskIdValue); - log.info("1楼入库失败PLC任务ID:"+failedTaskIdValue); + log.info("1楼入库失败redis任务ID:"+redisFailedTaskIdValueOne); + log.info("1楼入库失败PLC任务ID:"+failedTaskIdValueOne); //入库失败,更改入库状态为0 - if (failedTaskIdValue != 0L && !redisFailedTaskIdValue.equals(failedTaskIdValue)) { - redisTemplate.opsForValue().set(RedisConstant.redisDPSFailedTaskIdOne, failedTaskIdValue); + if (failedTaskIdValueOne != 0L && !redisFailedTaskIdValueOne.equals(failedTaskIdValueOne)) { + redisTemplate.opsForValue().set(RedisConstant.redisDPSFailedTaskIdOne, failedTaskIdValueOne); //更改入库计划3,取消 - iBusinOutInPlanService.updPlanStatus(failedTaskIdValue, PlanStatusEnum.CANCEL.getValue()); + iBusinOutInPlanService.updPlanStatus(failedTaskIdValueOne, PlanStatusEnum.CANCEL.getValue()); //清理预占库存 - iBusinOutInPlanService.updateSysStockByPlanOrderNo(failedTaskIdValue.toString()); + iBusinOutInPlanService.updateSysStockByPlanOrderNo(failedTaskIdValueOne.toString()); } } @@ -642,51 +644,51 @@ public class PlcEventTask { } log.info("2楼入库失败原因:"+failedReasonValue); //读取失败任务号 - Long failedTaskIdValue = Long.valueOf(pointMap.get(twoAllotTaskId).toString()); + Long failedTaskIdValueTwo = Long.valueOf(pointMap.get(twoAllotTaskId).toString()); //根据回填入库失败原因 UpdPlanErrorBo updPlanErrorBo = new UpdPlanErrorBo(); updPlanErrorBo.setErrorMsg(failedReasonValue); - updPlanErrorBo.setOrderNo(failedTaskIdValue); + updPlanErrorBo.setOrderNo(failedTaskIdValueTwo); iBusinOutInPlanService.updErrMsg(updPlanErrorBo); - String redisFailedTaskIdValue = String.valueOf(redisTemplate.opsForValue().get(RedisConstant.redisDPSFailedTaskIdTwo)); + String redisFailedTaskIdValueTwo = String.valueOf(redisTemplate.opsForValue().get(RedisConstant.redisDPSFailedTaskIdTwo)); - log.info("2楼入库失败redis任务ID:"+redisFailedTaskIdValue); - log.info("2楼入库失败PLC任务ID:"+failedTaskIdValue); + log.info("2楼入库失败redis任务ID:"+redisFailedTaskIdValueTwo); + log.info("2楼入库失败PLC任务ID:"+failedTaskIdValueTwo); //入库失败,更改入库状态为0 - if (failedTaskIdValue != 0L && !redisFailedTaskIdValue.equals(failedTaskIdValue)) { - redisTemplate.opsForValue().set(RedisConstant.redisDPSFailedTaskIdTwo, failedTaskIdValue); + if (failedTaskIdValueTwo != 0L && !redisFailedTaskIdValueTwo.equals(failedTaskIdValueTwo)) { + redisTemplate.opsForValue().set(RedisConstant.redisDPSFailedTaskIdTwo, failedTaskIdValueTwo); //更改入库计划3,取消 - iBusinOutInPlanService.updPlanStatus(failedTaskIdValue, PlanStatusEnum.CANCEL.getValue()); + iBusinOutInPlanService.updPlanStatus(failedTaskIdValueTwo, PlanStatusEnum.CANCEL.getValue()); //清理预占库存 - iBusinOutInPlanService.updateSysStockByPlanOrderNo(failedTaskIdValue.toString()); + iBusinOutInPlanService.updateSysStockByPlanOrderNo(failedTaskIdValueTwo.toString()); } } //1楼是否请求入库: if (pointMap.containsKey(oneReqPutin) && Boolean.valueOf(pointMap.get(oneReqPutin).toString())) { //请求入库,给堆垛机下发命令 - taskId = Long.valueOf((String) pointMap.get(oneReqPutInTaskId)); + Long oneTaskId= Long.valueOf((String) pointMap.get(oneReqPutInTaskId)); //从redis中验证是否已经下发任务 - Long redisTaskId = (Long) redisTemplate.opsForValue().get(RedisConstant.redisReqWare + taskId); - if (taskId.equals(redisTaskId)) { + Long redisTaskId = (Long) redisTemplate.opsForValue().get(RedisConstant.redisReqWare + oneTaskId); + if (oneTaskId.equals(redisTaskId)) { return; } //执行dps任务,给堆垛机下发命令 - dpsTask(taskId,1) ; + dpsTask(oneTaskId,1) ; } //2楼是否请求入库 if (pointMap.containsKey(twoReqPutin) && Boolean.valueOf(pointMap.get(twoReqPutin).toString())) { //请求入库,给堆垛机下发命令 - taskId = Long.valueOf((String) pointMap.get(twoReqPutInTaskId)); + Long twotaskId = Long.valueOf((String) pointMap.get(twoReqPutInTaskId)); //从redis中验证是否已经下发任务 - Long redisTaskId = (Long) redisTemplate.opsForValue().get(RedisConstant.redisReqWare + taskId); - if (taskId.equals(redisTaskId)) { + Long redisTaskId = (Long) redisTemplate.opsForValue().get(RedisConstant.redisReqWare + twotaskId); + if (twotaskId.equals(redisTaskId)) { return; } //执行dps任务,给堆垛机下发命令 - dpsTask(taskId,2) ; + dpsTask(twotaskId,2) ; } } }catch (Exception e){ diff --git a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java index 6f31c26..300d297 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java @@ -32,7 +32,7 @@ public class PlcInit { RedisTemplate redisTemplate; private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); - // @PostConstruct + @PostConstruct public void init(){ log.info("初始化连接对象"); executorService.scheduleWithFixedDelay( @@ -50,7 +50,7 @@ public class PlcInit { for (WcsPlcConnectVo conn : plcList) { redisTemplate.opsForValue().set(RedisConstant.redisPlcConnect+conn.getDevCode(),conn); PlcHelper plc = new PlcHelper(conn.getPlcType(), conn.getPlcIp(), conn.getPlcFactory(), conn.getPort()); - if (conn.getPlcIp().contains("1.20")){ + if (conn.getPlcIp().contains("155.180")){ plcOperate_stk = plc.getAutomation(); OperateResult connect = plcOperate_stk.connect(); if (connect.IsSuccess){ @@ -60,7 +60,7 @@ public class PlcInit { } } - if (conn.getPlcIp().contains("1.10")){ + if (conn.getPlcIp().contains("155.170")){ plcOperate_dps = plc.getAutomation(); OperateResult connect = plcOperate_dps.connect(); if (connect.IsSuccess){ @@ -73,10 +73,10 @@ public class PlcInit { } private void reconnect(){ if (!plcOperate_dps.isConnectd()){ - // connect(); + //connect(); } if (!plcOperate_stk.isConnectd()){ - // connect(); + //connect(); } } @@ -90,10 +90,10 @@ public class PlcInit { public PlcOperate getPlcOperateByIp(String plcIp){ - if (plcIp.contains("1.20")){ + if (plcIp.contains("155.180")){ return plcOperate_stk; } - if (plcIp.contains("1.10")){ + if (plcIp.contains("155.170")){ return plcOperate_dps; } return null; diff --git a/shkj-wms/src/main/java/com/shkj/wms/service/impl/BusinOutInPlanServiceImpl.java b/shkj-wms/src/main/java/com/shkj/wms/service/impl/BusinOutInPlanServiceImpl.java index 13bc5b4..acaeaf4 100644 --- a/shkj-wms/src/main/java/com/shkj/wms/service/impl/BusinOutInPlanServiceImpl.java +++ b/shkj-wms/src/main/java/com/shkj/wms/service/impl/BusinOutInPlanServiceImpl.java @@ -1,5 +1,6 @@ package com.shkj.wms.service.impl; +import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.lock.LockInfo; import com.baomidou.lock.LockTemplate; @@ -12,6 +13,7 @@ import com.shkj.common.core.redis.RedisCache; import com.shkj.common.utils.DateUtils; import com.shkj.common.utils.SecurityUtils; import com.shkj.common.utils.StringUtils; +import com.shkj.common.utils.bean.BeanUtils; import com.shkj.system.service.ISysParameterService; import com.shkj.wms.bo.*; import com.shkj.wms.constants.ParameterConstants; @@ -68,12 +70,6 @@ public class BusinOutInPlanServiceImpl extends ServiceImpl moldBarcodeList = bo.getMoldBarcodeList(); if (moldBarcodeList.size() != moldBarcodeList.stream().distinct().collect(Collectors.toList()).size()) { return Result.err().msg("模具存在重复"); } - List baseMoldBarcodeList = baseMoldService.queryByMoldBarcodeList(moldBarcodeList); if (CollectionUtils.isEmpty(baseMoldBarcodeList)) { return Result.err().msg("条码不存在,请重新扫描"); @@ -357,8 +350,20 @@ public class BusinOutInPlanServiceImpl extends ServiceImpl sysStockDetails = sysStockDetailService.getByContainerId(containerId); + if (sysStockDetails !=null && sysStockDetails.size()>0){ + for (SysStockDetail sysStockDetail : sysStockDetails) { + sysStockDetail.setOutQty(new BigDecimal("-1")); + sysStockDetailService.updateById(sysStockDetail); + } + } + sysStockDetailService.updateBatchById(sysStockDetails); + Long orderNo = IntIdUtil.generateIntId(); //新增呼叫空托盘单据,BusinOutInPlan BusinOutInPlan businOutInPlan = initCallPlan(containerId, containerCode, orderNo,bo.getModlQty()); @@ -386,7 +391,6 @@ public class BusinOutInPlanServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SysThirdExceptionRequest::getStatus, ThirdApiStatusEnum.fail.getValue()); diff --git a/shkj-wms/src/main/resources/mapper/wms/BaseContainerMapper.xml b/shkj-wms/src/main/resources/mapper/wms/BaseContainerMapper.xml index a1feb3e..0bfe3e3 100644 --- a/shkj-wms/src/main/resources/mapper/wms/BaseContainerMapper.xml +++ b/shkj-wms/src/main/resources/mapper/wms/BaseContainerMapper.xml @@ -135,7 +135,8 @@