空托出库调整,记录状态,不可以继续呼叫

main
judy 1 year ago
parent a494b2cc7f
commit 54991fe8fe
  1. 116
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java
  2. 14
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java
  3. 34
      shkj-wms/src/main/java/com/shkj/wms/service/impl/BusinOutInPlanServiceImpl.java
  4. 2
      shkj-wms/src/main/java/com/shkj/wms/service/impl/SysThirdExceptionRequestServiceImpl.java
  5. 3
      shkj-wms/src/main/resources/mapper/wms/BaseContainerMapper.xml

@ -97,7 +97,7 @@ public class PlcEventTask {
@Autowired @Autowired
PlcInit plcInit; PlcInit plcInit;
// @Scheduled(fixedDelay = 8000) @Scheduled(fixedDelay = 8000)
public void init() { public void init() {
//查询需要连接的PLC,初始化连接对象 //查询需要连接的PLC,初始化连接对象
List<WcsPlcConnectVo> plcList = iWcsPlcConnectService.selectWcsPlcConnectList(new WcsPlcConnect().setIsActive("1")); List<WcsPlcConnectVo> plcList = iWcsPlcConnectService.selectWcsPlcConnectList(new WcsPlcConnect().setIsActive("1"));
@ -107,11 +107,11 @@ public class PlcEventTask {
} }
for (WcsPlcConnectVo conn : plcList) { for (WcsPlcConnectVo conn : plcList) {
if (conn.getPlcIp().contains("1.20")){ if (conn.getPlcIp().contains("155.180")){
plcTask(plcInit.getPlcOperate_stk(), conn, conn.getPointTables()); 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()); plcTask(plcInit.getPlcOperate_dps(), conn, conn.getPointTables());
} }
} }
@ -119,7 +119,7 @@ public class PlcEventTask {
//输送线心跳 //输送线心跳
// @Scheduled(fixedDelay = 4000) @Scheduled(fixedDelay = 4000)
public void writePlcheartbeatDps(){ public void writePlcheartbeatDps(){
//根据连接的plcId获取属性 //根据连接的plcId获取属性
PlcOperate plcOperate = plcInit.getPlcOperate_dps(); PlcOperate plcOperate = plcInit.getPlcOperate_dps();
@ -147,7 +147,7 @@ public class PlcEventTask {
} }
} }
//堆垛机心跳 //堆垛机心跳
// @Scheduled(fixedDelay = 4000) @Scheduled(fixedDelay = 4000)
public void writePlcheartbeatStk(){ public void writePlcheartbeatStk(){
//根据连接的plcId获取属性 //根据连接的plcId获取属性
PlcOperate plcOperate = plcInit.getPlcOperate_stk(); PlcOperate plcOperate = plcInit.getPlcOperate_stk();
@ -332,7 +332,7 @@ public class PlcEventTask {
String twoAllotAddress = "", twoAllotTaskId = "", twoAllotTaskIdVt = ""; String twoAllotAddress = "", twoAllotTaskId = "", twoAllotTaskIdVt = "";
String autoAddress = ""; String autoAddress = "";
Long taskId = 0L;
//货物高度wms的值 //货物高度wms的值
String cargoHeight =""; String cargoHeight ="";
//托盘条码地址 //托盘条码地址
@ -420,6 +420,7 @@ public class PlcEventTask {
// 电柜状态是否是自动,如果是自动则继续流程 // 电柜状态是否是自动,如果是自动则继续流程
if (pointMap.containsKey(autoAddress) && Boolean.valueOf(pointMap.get(autoAddress).toString())) { if (pointMap.containsKey(autoAddress) && Boolean.valueOf(pointMap.get(autoAddress).toString())) {
Long taskIdOne = 0L;
//1楼是否请求分配 //1楼是否请求分配
if (pointMap.containsKey(oneAllotAddress) && Boolean.valueOf(pointMap.get(oneAllotAddress).toString())) { 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<PlanOrderLocationVo> orderResult = iBusinOutInPlanService.getOrderNoByContainerCode(barcodeValue, "in"); Result<PlanOrderLocationVo> orderResult = iBusinOutInPlanService.getOrderNoByContainerCode(barcodeValueOne, "in");
log.info("根据条码获取的任务信息:"+orderResult.getData()); log.info("1根据条码获取的任务信息:"+orderResult.getData());
if (Result.isOk(orderResult)) { if (Result.isOk(orderResult)) {
PlanOrderLocationVo data = orderResult.getData(); PlanOrderLocationVo data = orderResult.getData();
taskId = data.getOrderNo(); taskIdOne = data.getOrderNo();
cargoHeight = data.getType();//获取托盘或模具类型 cargoHeight = data.getType();//获取托盘或模具类型
} }
else { else {
redisTemplate.opsForValue().set(RedisConstant.redisPutInExeMsg+orderResult.getMsg(),orderResult.getMsg()); redisTemplate.opsForValue().set(RedisConstant.redisPutInExeMsg+orderResult.getMsg(),orderResult.getMsg());
log.info("获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValue); log.info("获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValueOne);
//回填任务号 //回填任务号
Map<String, Integer> writeMap = new HashMap<>(1); Map<String, Integer> writeMap = new HashMap<>(1);
writeMap.put(oneWcsErrExitVT, 1); writeMap.put(oneWcsErrExitVT, 1);
@ -454,15 +456,15 @@ public class PlcEventTask {
log.info("1楼获取单号入库失败,写入点位失败{}",allMap); log.info("1楼获取单号入库失败,写入点位失败{}",allMap);
} }
} }
log.info("1楼入库分配任务ID:"+taskId + "条码号:"+ barcodeValue); log.info("1楼入库分配任务ID:"+taskIdOne + "条码号:"+ barcodeValueOne);
log.info("1楼入库分配货位类型:"+cargoHeight); 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<String, Long> writeMap = new HashMap<>(1); Map<String, Long> writeMap = new HashMap<>(1);
writeMap.put(oneAllotTaskIdVt, taskId); writeMap.put(oneAllotTaskIdVt, taskIdOne);
Map<String, Object> allMap = new HashMap<>(1); Map<String, Object> allMap = new HashMap<>(1);
allMap.put(oneAllotTaskId, writeMap); allMap.put(oneAllotTaskId, writeMap);
@ -478,17 +480,17 @@ public class PlcEventTask {
Boolean taskBoolean = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allMap)); Boolean taskBoolean = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allMap));
if (taskBoolean) { if (taskBoolean) {
//分配任务成功时,记录已下发入库任务,不可在下发出库或入库任务 //分配任务成功时,记录已下发入库任务,不可在下发出库或入库任务
redisTemplate.opsForValue().set(RedisConstant.redisTaskIn,taskId); redisTemplate.opsForValue().set(RedisConstant.redisTaskIn,taskIdOne);
//更改入库计划为1 //更改入库计划为1
iBusinOutInPlanService.updPlanStatus(taskId, PlanStatusEnum.DOING.getValue()); iBusinOutInPlanService.updPlanStatus(taskIdOne, PlanStatusEnum.DOING.getValue());
} }
//改为入库ID //改为入库ID
redisTemplate.opsForValue().set(RedisConstant.redisContainer, taskId, 10, TimeUnit.SECONDS); redisTemplate.opsForValue().set(RedisConstant.redisContainer, taskIdOne, 10, TimeUnit.SECONDS);
} }
} }
//2楼是否请求分配 //2楼是否请求分配
if (pointMap.containsKey(twoAllotAddress) && Boolean.valueOf(pointMap.get(twoAllotAddress).toString())) { if (pointMap.containsKey(twoAllotAddress) && Boolean.valueOf(pointMap.get(twoAllotAddress).toString())) {
Long taskIdTwo=0L;
//请求入库分配时,判断是否有正在执行的出库任务,如果有则返回 //请求入库分配时,判断是否有正在执行的出库任务,如果有则返回
Object taskOutId = redisTemplate.opsForValue().get(RedisConstant.redisTaskOut); Object taskOutId = redisTemplate.opsForValue().get(RedisConstant.redisTaskOut);
if (taskOutId !=null){ if (taskOutId !=null){
@ -496,17 +498,18 @@ public class PlcEventTask {
return; return;
} }
//读取托盘条码内容 //读取托盘条码内容
String barcodeValue = pointMap.get(twoPalletAddress).toString(); String barcodeValueTwo = pointMap.get(twoPalletAddress).toString();
log.info("1楼请求入库时,读取的条码内容:"+barcodeValueTwo);
//根据托盘条码返回正在执行的任务号 //根据托盘条码返回正在执行的任务号
Result<PlanOrderLocationVo> orderResult = iBusinOutInPlanService.getOrderNoByContainerCode(barcodeValue, "in"); Result<PlanOrderLocationVo> orderResult = iBusinOutInPlanService.getOrderNoByContainerCode(barcodeValueTwo, "in");
log.info("2楼根据条码获取的任务信息:"+orderResult.getData()); log.info("2楼根据条码获取的任务信息:"+orderResult.getData());
if (Result.isOk(orderResult)) { if (Result.isOk(orderResult)) {
PlanOrderLocationVo data = orderResult.getData(); PlanOrderLocationVo data = orderResult.getData();
taskId = data.getOrderNo(); taskIdTwo = data.getOrderNo();
cargoHeight = data.getType();//获取托盘或模具类型 cargoHeight = data.getType();//获取托盘或模具类型
}else { }else {
redisTemplate.opsForValue().set(RedisConstant.redisPutInExeMsg+orderResult.getMsg(),orderResult.getMsg()); redisTemplate.opsForValue().set(RedisConstant.redisPutInExeMsg+orderResult.getMsg(),orderResult.getMsg());
log.info("2楼获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValue); log.info("2楼获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValueTwo);
//回填任务号 //回填任务号
Map<String, Integer> writeMap = new HashMap<>(1); Map<String, Integer> writeMap = new HashMap<>(1);
writeMap.put(twoWcsErrExitVT, 1); writeMap.put(twoWcsErrExitVT, 1);
@ -519,15 +522,15 @@ public class PlcEventTask {
log.info("2楼获取单号入库失败,写入点位失败{}",allMap); log.info("2楼获取单号入库失败,写入点位失败{}",allMap);
} }
} }
log.info("2楼入库分配任务ID:"+taskId + "条码号:"+ barcodeValue); log.info("2楼入库分配任务ID:"+taskIdTwo + "条码号:"+ barcodeValueTwo);
log.info("2楼入库分配货位类型:"+cargoHeight); 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<String, Long> writeMap = new HashMap<>(1); Map<String, Long> writeMap = new HashMap<>(1);
writeMap.put(twoAllotTaskIdVt, taskId); writeMap.put(twoAllotTaskIdVt, taskIdTwo);
Map<String, Object> allMap = new HashMap<>(1); Map<String, Object> allMap = new HashMap<>(1);
allMap.put(twoAllotTaskId, writeMap); allMap.put(twoAllotTaskId, writeMap);
@ -544,13 +547,12 @@ public class PlcEventTask {
Boolean taskBoolean = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allMap)); Boolean taskBoolean = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allMap));
if (taskBoolean) { if (taskBoolean) {
//分配任务成功时,记录已下发入库任务,不可在下发出库任务 //分配任务成功时,记录已下发入库任务,不可在下发出库任务
redisTemplate.opsForValue().set(RedisConstant.redisTaskIn,taskId); redisTemplate.opsForValue().set(RedisConstant.redisTaskIn,taskIdTwo);
//更改入库计划为1 //更改入库计划为1
iBusinOutInPlanService.updPlanStatus(taskId, PlanStatusEnum.DOING.getValue()); iBusinOutInPlanService.updPlanStatus(taskIdTwo, PlanStatusEnum.DOING.getValue());
} }
//改为入库ID //改为入库ID
redisTemplate.opsForValue().set(RedisConstant.redisContainer, taskId, 10, TimeUnit.SECONDS); redisTemplate.opsForValue().set(RedisConstant.redisContainer, taskIdTwo, 10, TimeUnit.SECONDS);
} }
} }
//获取1楼入库失败的内容 //获取1楼入库失败的内容
@ -586,25 +588,25 @@ public class PlcEventTask {
} }
log.info("1楼入库失败原因:"+failedReasonValue); 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 updPlanErrorBo = new UpdPlanErrorBo();
updPlanErrorBo.setErrorMsg(failedReasonValue); updPlanErrorBo.setErrorMsg(failedReasonValue);
updPlanErrorBo.setOrderNo(failedTaskIdValue); updPlanErrorBo.setOrderNo(failedTaskIdValueOne);
iBusinOutInPlanService.updErrMsg(updPlanErrorBo); 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楼入库失败redis任务ID:"+redisFailedTaskIdValueOne);
log.info("1楼入库失败PLC任务ID:"+failedTaskIdValue); log.info("1楼入库失败PLC任务ID:"+failedTaskIdValueOne);
//入库失败,更改入库状态为0 //入库失败,更改入库状态为0
if (failedTaskIdValue != 0L && !redisFailedTaskIdValue.equals(failedTaskIdValue)) { if (failedTaskIdValueOne != 0L && !redisFailedTaskIdValueOne.equals(failedTaskIdValueOne)) {
redisTemplate.opsForValue().set(RedisConstant.redisDPSFailedTaskIdOne, failedTaskIdValue); redisTemplate.opsForValue().set(RedisConstant.redisDPSFailedTaskIdOne, failedTaskIdValueOne);
//更改入库计划3,取消 //更改入库计划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); 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 updPlanErrorBo = new UpdPlanErrorBo();
updPlanErrorBo.setErrorMsg(failedReasonValue); updPlanErrorBo.setErrorMsg(failedReasonValue);
updPlanErrorBo.setOrderNo(failedTaskIdValue); updPlanErrorBo.setOrderNo(failedTaskIdValueTwo);
iBusinOutInPlanService.updErrMsg(updPlanErrorBo); 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楼入库失败redis任务ID:"+redisFailedTaskIdValueTwo);
log.info("2楼入库失败PLC任务ID:"+failedTaskIdValue); log.info("2楼入库失败PLC任务ID:"+failedTaskIdValueTwo);
//入库失败,更改入库状态为0 //入库失败,更改入库状态为0
if (failedTaskIdValue != 0L && !redisFailedTaskIdValue.equals(failedTaskIdValue)) { if (failedTaskIdValueTwo != 0L && !redisFailedTaskIdValueTwo.equals(failedTaskIdValueTwo)) {
redisTemplate.opsForValue().set(RedisConstant.redisDPSFailedTaskIdTwo, failedTaskIdValue); redisTemplate.opsForValue().set(RedisConstant.redisDPSFailedTaskIdTwo, failedTaskIdValueTwo);
//更改入库计划3,取消 //更改入库计划3,取消
iBusinOutInPlanService.updPlanStatus(failedTaskIdValue, PlanStatusEnum.CANCEL.getValue()); iBusinOutInPlanService.updPlanStatus(failedTaskIdValueTwo, PlanStatusEnum.CANCEL.getValue());
//清理预占库存 //清理预占库存
iBusinOutInPlanService.updateSysStockByPlanOrderNo(failedTaskIdValue.toString()); iBusinOutInPlanService.updateSysStockByPlanOrderNo(failedTaskIdValueTwo.toString());
} }
} }
//1楼是否请求入库: //1楼是否请求入库:
if (pointMap.containsKey(oneReqPutin) && Boolean.valueOf(pointMap.get(oneReqPutin).toString())) { 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中验证是否已经下发任务 //从redis中验证是否已经下发任务
Long redisTaskId = (Long) redisTemplate.opsForValue().get(RedisConstant.redisReqWare + taskId); Long redisTaskId = (Long) redisTemplate.opsForValue().get(RedisConstant.redisReqWare + oneTaskId);
if (taskId.equals(redisTaskId)) { if (oneTaskId.equals(redisTaskId)) {
return; return;
} }
//执行dps任务,给堆垛机下发命令 //执行dps任务,给堆垛机下发命令
dpsTask(taskId,1) ; dpsTask(oneTaskId,1) ;
} }
//2楼是否请求入库 //2楼是否请求入库
if (pointMap.containsKey(twoReqPutin) && Boolean.valueOf(pointMap.get(twoReqPutin).toString())) { 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中验证是否已经下发任务 //从redis中验证是否已经下发任务
Long redisTaskId = (Long) redisTemplate.opsForValue().get(RedisConstant.redisReqWare + taskId); Long redisTaskId = (Long) redisTemplate.opsForValue().get(RedisConstant.redisReqWare + twotaskId);
if (taskId.equals(redisTaskId)) { if (twotaskId.equals(redisTaskId)) {
return; return;
} }
//执行dps任务,给堆垛机下发命令 //执行dps任务,给堆垛机下发命令
dpsTask(taskId,2) ; dpsTask(twotaskId,2) ;
} }
} }
}catch (Exception e){ }catch (Exception e){

@ -32,7 +32,7 @@ public class PlcInit {
RedisTemplate redisTemplate; RedisTemplate redisTemplate;
private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
// @PostConstruct @PostConstruct
public void init(){ public void init(){
log.info("初始化连接对象"); log.info("初始化连接对象");
executorService.scheduleWithFixedDelay( executorService.scheduleWithFixedDelay(
@ -50,7 +50,7 @@ public class PlcInit {
for (WcsPlcConnectVo conn : plcList) { for (WcsPlcConnectVo conn : plcList) {
redisTemplate.opsForValue().set(RedisConstant.redisPlcConnect+conn.getDevCode(),conn); redisTemplate.opsForValue().set(RedisConstant.redisPlcConnect+conn.getDevCode(),conn);
PlcHelper plc = new PlcHelper(conn.getPlcType(), conn.getPlcIp(), conn.getPlcFactory(), conn.getPort()); 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(); plcOperate_stk = plc.getAutomation();
OperateResult connect = plcOperate_stk.connect(); OperateResult connect = plcOperate_stk.connect();
if (connect.IsSuccess){ 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(); plcOperate_dps = plc.getAutomation();
OperateResult connect = plcOperate_dps.connect(); OperateResult connect = plcOperate_dps.connect();
if (connect.IsSuccess){ if (connect.IsSuccess){
@ -73,10 +73,10 @@ public class PlcInit {
} }
private void reconnect(){ private void reconnect(){
if (!plcOperate_dps.isConnectd()){ if (!plcOperate_dps.isConnectd()){
// connect(); //connect();
} }
if (!plcOperate_stk.isConnectd()){ if (!plcOperate_stk.isConnectd()){
// connect(); //connect();
} }
} }
@ -90,10 +90,10 @@ public class PlcInit {
public PlcOperate getPlcOperateByIp(String plcIp){ public PlcOperate getPlcOperateByIp(String plcIp){
if (plcIp.contains("1.20")){ if (plcIp.contains("155.180")){
return plcOperate_stk; return plcOperate_stk;
} }
if (plcIp.contains("1.10")){ if (plcIp.contains("155.170")){
return plcOperate_dps; return plcOperate_dps;
} }
return null; return null;

@ -1,5 +1,6 @@
package com.shkj.wms.service.impl; package com.shkj.wms.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.lock.LockInfo; import com.baomidou.lock.LockInfo;
import com.baomidou.lock.LockTemplate; 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.DateUtils;
import com.shkj.common.utils.SecurityUtils; import com.shkj.common.utils.SecurityUtils;
import com.shkj.common.utils.StringUtils; import com.shkj.common.utils.StringUtils;
import com.shkj.common.utils.bean.BeanUtils;
import com.shkj.system.service.ISysParameterService; import com.shkj.system.service.ISysParameterService;
import com.shkj.wms.bo.*; import com.shkj.wms.bo.*;
import com.shkj.wms.constants.ParameterConstants; import com.shkj.wms.constants.ParameterConstants;
@ -68,12 +70,6 @@ public class BusinOutInPlanServiceImpl extends ServiceImpl<BusinOutInPlanMapper,
@Autowired @Autowired
private WmsCallWcsUtil wmsCallWcsUtil; private WmsCallWcsUtil wmsCallWcsUtil;
@Autowired
private IBaseMoldBarcodeService baseMoldBarcodeService;
@Autowired
private IBasRuleService basRuleService;
@Autowired @Autowired
private IBusinStockInvService iBusinStockInvService; private IBusinStockInvService iBusinStockInvService;
@ -145,22 +141,19 @@ public class BusinOutInPlanServiceImpl extends ServiceImpl<BusinOutInPlanMapper,
String containerType = container.getContainerType(); String containerType = container.getContainerType();
String moldType = bo.getMoldType(); String moldType = bo.getMoldType();
/* if (!containerType.equals(moldType)){ if (!containerType.equals(moldType)){
return Result.err().msg("模具类型同托盘类型不匹配"); return Result.err().msg("模具类型同托盘类型不匹配");
}*/ }
//模具类型是高模具,不能放到托盘类型是低托盘类型的托盘上 //模具类型是高模具,不能放到托盘类型是低托盘类型的托盘上
if (moldType.equals("3") && containerType.equals("6")){ /*if (moldType.equals("3") && containerType.equals("6")){
return Result.err().msg("高模具不能放入低模具托盘"); return Result.err().msg("高模具不能放入低模具托盘");
} }*/
List<String> moldBarcodeList = bo.getMoldBarcodeList(); List<String> moldBarcodeList = bo.getMoldBarcodeList();
if (moldBarcodeList.size() != moldBarcodeList.stream().distinct().collect(Collectors.toList()).size()) { if (moldBarcodeList.size() != moldBarcodeList.stream().distinct().collect(Collectors.toList()).size()) {
return Result.err().msg("模具存在重复"); return Result.err().msg("模具存在重复");
} }
List<BaseMold> baseMoldBarcodeList = baseMoldService.queryByMoldBarcodeList(moldBarcodeList); List<BaseMold> baseMoldBarcodeList = baseMoldService.queryByMoldBarcodeList(moldBarcodeList);
if (CollectionUtils.isEmpty(baseMoldBarcodeList)) { if (CollectionUtils.isEmpty(baseMoldBarcodeList)) {
return Result.err().msg("条码不存在,请重新扫描"); return Result.err().msg("条码不存在,请重新扫描");
@ -357,8 +350,20 @@ public class BusinOutInPlanServiceImpl extends ServiceImpl<BusinOutInPlanMapper,
return Result.err().msg("没有可容纳所需数量的托盘:"+bo.getModlQty()); return Result.err().msg("没有可容纳所需数量的托盘:"+bo.getModlQty());
} }
String containerCode = vo.getContainerCode(); String containerCode = vo.getContainerCode();
Long containerId = vo.getContainerId(); Long containerId = vo.getContainerId();
//更新货位库存状态为预占
List<SysStockDetail> 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(); Long orderNo = IntIdUtil.generateIntId();
//新增呼叫空托盘单据,BusinOutInPlan //新增呼叫空托盘单据,BusinOutInPlan
BusinOutInPlan businOutInPlan = initCallPlan(containerId, containerCode, orderNo,bo.getModlQty()); BusinOutInPlan businOutInPlan = initCallPlan(containerId, containerCode, orderNo,bo.getModlQty());
@ -386,7 +391,6 @@ public class BusinOutInPlanServiceImpl extends ServiceImpl<BusinOutInPlanMapper,
BaseContainer baseContainer = baseContainerService.getById(containerId); BaseContainer baseContainer = baseContainerService.getById(containerId);
baseContainer.setStatus(ContainerStausEnum.CALL.getValue()); baseContainer.setStatus(ContainerStausEnum.CALL.getValue());
return baseContainerService.updateById(baseContainer)?Result.ok():Result.err(); return baseContainerService.updateById(baseContainer)?Result.ok():Result.err();
} }

@ -193,7 +193,7 @@ public class SysThirdExceptionRequestServiceImpl extends ServiceImpl<SysThirdExc
* 做任务 定时任务 * 做任务 定时任务
*/ */
@Override @Override
// @Scheduled(fixedDelay = 10000) @Scheduled(fixedDelay = 10000)
public void doTask() { public void doTask() {
LambdaQueryWrapper<SysThirdExceptionRequest> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysThirdExceptionRequest> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysThirdExceptionRequest::getStatus, ThirdApiStatusEnum.fail.getValue()); wrapper.eq(SysThirdExceptionRequest::getStatus, ThirdApiStatusEnum.fail.getValue());

@ -135,7 +135,8 @@
<select id="getContainerNoInv" resultType="com.shkj.wms.vo.BaseContainerVo"> <select id="getContainerNoInv" resultType="com.shkj.wms.vo.BaseContainerVo">
select distinct select distinct
a.container_code,b.container_name from sys_stock_detail a a.container_code,b.container_name from sys_stock_detail a
inner join base_container b on a.container_code=b.container_code where ifnull(mold_no,'')='' inner join base_container b on a.container_code=b.container_code
where ifnull(mold_no,'')='' and out_qty=0
</select> </select>

Loading…
Cancel
Save