调度修改

This commit is contained in:
liuhanqing
2026-01-16 11:17:31 +08:00
parent 93bbc9dde3
commit 82a596c2b7
20 changed files with 874 additions and 210 deletions

View File

@@ -66,7 +66,7 @@ public class ScheduleThread {
private void scheduleInit() {
MonitoringThread monitoringThread = new MonitoringThread();
monitoringCustomThread = new CustomThread<MonitoringThread>(new Thread(monitoringThread), monitoringThread);
Ddj4Thread ddj4Thread = new Ddj4Thread(plcDdj4ReadCustomThread.runnable);
Ddj4Thread ddj4Thread = new Ddj4Thread(plcDdj4ReadCustomThread.runnable,plcSsjReadCustomThread.runnable);
ddj4CustomThread = new CustomThread<>(new Thread(ddj4Thread), ddj4Thread);
/*Ddj2Thread ddj2Thread = new Ddj2Thread();
ddj2CustomThread = new CustomThread<>(new Thread(ddj2Thread), ddj2Thread);
@@ -177,6 +177,7 @@ public class ScheduleThread {
plcDdj2ReadCustomThread.runnable.isRun = false;
plcDdj3ReadCustomThread.runnable.isRun = false;
plcDdj4ReadCustomThread.runnable.isRun = false;
plcDdj4ReadCustomThread.thread.interrupt();
plcDdj5ReadCustomThread.runnable.isRun = false;
plcDdj6ReadCustomThread.runnable.isRun = false;
plcReadInit();
@@ -189,13 +190,8 @@ public class ScheduleThread {
public void stopAllThread2() {
monitoringCustomThread.runnable.isRun = false;
monitoringCustomThread.thread.interrupt();
ddj1CustomThread.runnable.isRun = false;
ddj1CustomThread.thread.interrupt();
/*ddj2CustomThread.runnable.isRun = false;
ddj3CustomThread.runnable.isRun = false;
ddj4CustomThread.runnable.isRun = false;
ddj5CustomThread.runnable.isRun = false;
ddj6CustomThread.runnable.isRun = false;*/
ddj4CustomThread.thread.interrupt();
scheduleInit();
isRun2 = false;
}

View File

@@ -74,9 +74,8 @@ public class PlcDdjRead extends Thread {
msgDdj.setXtxh(ParseUtil.optInt(26, ddsx));
msgDdj.setHeight(ParseUtil.optInt(40, ddsx));
String trayCode = ParseUtil.optString(32, 8, ddsx);
if (! "11111111".equals(trayCode) && !"NoRead00".equals(trayCode)){
msgDdj.setTrayCode(trayCode);
}
msgDdj.setTrayCode(trayCode);
}
}

View File

@@ -235,6 +235,14 @@ public class PlcSsjRead implements Runnable {
return PlcSsjRead.WriteToSSJ(address, bytes);
}
public int writeToSsJ(String address, byte[] data) {
int a = 0;
if (readWriteNet != null) {
a = HslRead.WriteResultRender(readWriteNet.Write(address, data), address);
}
return a;
}

View File

@@ -12,6 +12,7 @@ import com.ruoyi.api.service.IApiService;
import com.ruoyi.bas.cargospace.domain.BasCargoSpace;
import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.domain.SendData;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.device.ddj.domain.MsgDdj;
import com.ruoyi.device.ddj.service.IMsgDdjService;
@@ -46,19 +47,21 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
private IBasCargoSpaceService basCargoSpaceService;
public Map<String, List<Integer>> roadwayMap = new HashMap<>();
private PlcDdjRead plcDdjRead;
private PlcSsjRead plcSsjRead;
public Map<String,String> czRoadwayMap = new HashMap<>();
public Map<String, String> czRoadwayMap = new HashMap<>();
public BaseDdjThread(PlcDdjRead plcDdjRead) {
public BaseDdjThread(PlcDdjRead plcDdjRead,PlcSsjRead plcSsjRead) {
this.plcDdjRead = plcDdjRead;
this.plcSsjRead = plcSsjRead;
}
public Map<String,Integer> roadwayRollback = new HashMap<>();
public Map<String, Integer> roadwayRollback = new HashMap<>();
public boolean isRun = true;
@Override
public abstract HashMap<String, Object> getParamMap(String trayCode,Integer height,double weight);
public abstract HashMap<String, Object> getParamMap(String trayCode, Integer height, double weight);
@Override
@@ -87,6 +90,7 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
generateInBoundPickQueue(msgDdj);
generateInBoundLoadQueue(msgDdj);
generateOutBoundQueue(msgDdj);
setOutSsjStatus(msgDdj);
ddjTask(msgDdj);
}
} else {
@@ -107,89 +111,104 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
}
private void setOutSsjStatus(MsgDdj msgDdj) {
Long rwh = msgDdj.getRwh();
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(rwh, msgDdj.getId());
if (ddjDeviceExecutionQueue !=null && ddjDeviceExecutionQueue.getDdjxf().equals("1") && (ddjDeviceExecutionQueue.getRwlx().equals(DDJ_RWLX_3)||ddjDeviceExecutionQueue.getRwlx().equals(DDJ_RWLX_4))){
DeviceSsj deviceSsj = PlcSsjRead.deviceSsjMap.get(ddjDeviceExecutionQueue.getSpare2());
SendData by1 = new SendData(Tools.INT,1);
byte[] sendData = Tools.sendData(by1);
plcSsjRead.writeToSsJ(deviceSsj.getPlcDbWriteAddress(),sendData);
}//else if (ddjDeviceExecutionQueue !=null){
// DeviceSsj deviceSsj = PlcSsjRead.deviceSsjMap.get(ddjDeviceExecutionQueue.getSpare2());
// SendData by1 = new SendData(Tools.INT,0);
// byte[] sendData = Tools.sendData(by1);
// plcSsjRead.writeToSsJ(deviceSsj.getPlcDbWriteAddress(),sendData);
// }
}
/**
* 创建出库队列
*/
private void generateOutBoundQueue(MsgDdj ddj) {
List<MydoJob> outJobList = mydoJobService.selectMydoJobList(getOutJobParam());
if (CollUtil.isNotEmpty(outJobList)) {
for (MydoJob outJob : outJobList) {
String exitId = outJob.getExitId();
MydoJob outJob = outJobList.get(0);
String exitId = outJob.getExitId();
String outSsj = "";
switch (exitId) {
case "1":
List<DeviceSsj> outSsj1 = getDeviceSsjs("outSsj1");
if (outSsj1.stream().allMatch(ssj -> ssj.getKx() == 1 && ssj.getTaskNo() ==0 && ddj.getHczt()==0 && ddj.getSbzt()==0)) {
outSsj = outSsj1.get(0).getDeviceCode();
int ssjJobCount = ddjDeviceExecutionQueueService.selectOutJobCount(getOtherOutDdjQueue(outSsj));
if (StrUtil.isNotEmpty(outSsj) && ssjJobCount==0){
break;
}
String outSsj = "";
switch (exitId) {
case "1":
List<DeviceSsj> outSsj1 = getDeviceSsjs("outSsj1");
if (outSsj1.stream().allMatch(ssj -> ssj.getKx() == 1 && ssj.getTaskNo() == 0 && ddj.getHczt() == 0 && ddj.getSbzt() == 0)) {
outSsj = outSsj1.get(0).getDeviceCode();
int ssjJobCount = ddjDeviceExecutionQueueService.selectOutJobCount(getOtherOutDdjQueue(outSsj));
if (StrUtil.isNotEmpty(outSsj) && ssjJobCount == 0) {
break;
}
List<DeviceSsj> outSsj2 = getDeviceSsjs("outSsj2");
if (outSsj2.stream().allMatch(ssj -> ssj.getKx() == 1 && ssj.getTaskNo() ==0&& ddj.getHczt()==0 && ddj.getSbzt()==0)) {
outSsj = outSsj2.get(0).getDeviceCode();
int ssjJobCount = ddjDeviceExecutionQueueService.selectOutJobCount(getOtherOutDdjQueue(outSsj));
if (StrUtil.isNotEmpty(outSsj) && ssjJobCount==0){
break;
}
}
break;
case "2":
List<DeviceSsj> outSsj3 = getDeviceSsjs("outSsj3");
if (outSsj3.stream().allMatch(ssj -> ssj.getKx() == 1 && ssj.getTaskNo() ==0&& ddj.getHczt()==0 && ddj.getSbzt()==0)) {
outSsj = outSsj3.get(0).getDeviceCode();
int ssjJobCount = ddjDeviceExecutionQueueService.selectOutJobCount(getOtherOutDdjQueue(outSsj));
if (StrUtil.isNotEmpty(outSsj) && ssjJobCount==0){
break;
}
}
List<DeviceSsj> outSsj4 = getDeviceSsjs("outSsj4");
if (outSsj4.stream().allMatch(ssj -> ssj.getKx() == 1 && ssj.getTaskNo() ==0&& ddj.getHczt()==0 && ddj.getSbzt()==0)) {
outSsj = outSsj4.get(0).getDeviceCode();
int ssjJobCount = ddjDeviceExecutionQueueService.selectOutJobCount(getOtherOutDdjQueue(outSsj));
if (StrUtil.isNotEmpty(outSsj) && ssjJobCount==0){
break;
}
}
break;
default:
log.error("出库任务出口错误");
continue;
}
if ("0".equals(outJob.getExecutionPhase()) && StrUtil.isNotEmpty(outSsj)) {
DdjDeviceExecutionQueue ddjQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(Convert.toLong(outJob.getTaskNo()), ddj.getId());
//查询这个站点是否存在任务
if (ObjUtil.isNull(ddjQueue) ) {
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue();
ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID());
ddjDeviceExecutionQueue.setRwh(Convert.toLong(outJob.getTaskNo()));
ddjDeviceExecutionQueue.setDevName(ddj.getName());
ddjDeviceExecutionQueue.setDevId(ddj.getId());
ddjDeviceExecutionQueue.setRwzt(0);
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(outJob.getCargoSpaceId());
ddjDeviceExecutionQueue.setYph(basCargoSpace.getThePlatoon());
ddjDeviceExecutionQueue.setYlh(basCargoSpace.getTheColumn());
ddjDeviceExecutionQueue.setYch(basCargoSpace.getTheFloor());
List<Integer> integers = roadwayMap.get(outSsj);
ddjDeviceExecutionQueue.setMbph(integers.get(0));
ddjDeviceExecutionQueue.setMblh(integers.get(1));
ddjDeviceExecutionQueue.setMbch(integers.get(2));
ddjDeviceExecutionQueue.setDdjxf("0");
ddjDeviceExecutionQueue.setMlfs(5);
ddjDeviceExecutionQueue.setScsj(DateUtil.formatDateTime(DateUtil.date()));
ddjDeviceExecutionQueue.setRwlx(DDJ_RWLX_3);
ddjDeviceExecutionQueueService.insertDdjDeviceExecutionQueue(ddjDeviceExecutionQueue);
outJob.setStatus("3");
outJob.setStartTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
outJob.setExecutionPhase(TASK_EP_DDJ);
mydoJobService.updateMydoJob(outJob);
} else {
log.info("任务已存在 rwh{}", outJob.getTaskNo());
}
List<DeviceSsj> outSsj2 = getDeviceSsjs("outSsj2");
if (outSsj2.stream().allMatch(ssj -> ssj.getKx() == 1 && ssj.getTaskNo() == 0 && ddj.getHczt() == 0 && ddj.getSbzt() == 0)) {
outSsj = outSsj2.get(0).getDeviceCode();
int ssjJobCount = ddjDeviceExecutionQueueService.selectOutJobCount(getOtherOutDdjQueue(outSsj));
if (StrUtil.isNotEmpty(outSsj) && ssjJobCount == 0) {
break;
}
}
break;
case "2":
List<DeviceSsj> outSsj3 = getDeviceSsjs("outSsj3");
if (outSsj3.stream().allMatch(ssj -> ssj.getKx() == 1 && ssj.getTaskNo() == 0 && ddj.getYxxf() == 1 && ddj.getHczt() == 0 && ddj.getSbzt() == 0)) {
outSsj = outSsj3.get(0).getDeviceCode();
int ssjJobCount = ddjDeviceExecutionQueueService.selectOutJobCount(getOtherOutDdjQueue(outSsj));
if (StrUtil.isNotEmpty(outSsj) && ssjJobCount == 0) {
break;
}
}
List<DeviceSsj> outSsj4 = getDeviceSsjs("outSsj4");
if (outSsj4.stream().allMatch(ssj -> ssj.getKx() == 1 && ssj.getTaskNo() == 0 && ddj.getYxxf() == 1 && ddj.getHczt() == 0 && ddj.getSbzt() == 0)) {
outSsj = outSsj4.get(0).getDeviceCode();
int ssjJobCount = ddjDeviceExecutionQueueService.selectOutJobCount(getOtherOutDdjQueue(outSsj));
if (StrUtil.isNotEmpty(outSsj) && ssjJobCount == 0) {
break;
}
}
break;
default:
log.error("出库任务出口错误");
}
if ("0".equals(outJob.getExecutionPhase()) && StrUtil.isNotEmpty(outSsj)) {
DdjDeviceExecutionQueue ddjQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(Convert.toLong(outJob.getTaskNo()), ddj.getId());
//查询这个站点是否存在任务
if (ObjUtil.isNull(ddjQueue)) {
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue();
ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID());
ddjDeviceExecutionQueue.setRwh(Convert.toLong(outJob.getTaskNo()));
ddjDeviceExecutionQueue.setDevName(ddj.getName());
ddjDeviceExecutionQueue.setDevId(ddj.getId());
ddjDeviceExecutionQueue.setRwzt(0);
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(outJob.getCargoSpaceId());
ddjDeviceExecutionQueue.setYph(basCargoSpace.getThePlatoon());
ddjDeviceExecutionQueue.setYlh(basCargoSpace.getTheColumn());
ddjDeviceExecutionQueue.setYch(basCargoSpace.getTheFloor());
List<Integer> integers = roadwayMap.get(outSsj);
ddjDeviceExecutionQueue.setMbph(integers.get(0));
ddjDeviceExecutionQueue.setMblh(integers.get(1));
ddjDeviceExecutionQueue.setMbch(integers.get(2));
ddjDeviceExecutionQueue.setDdjxf("0");
ddjDeviceExecutionQueue.setMlfs(5);
ddjDeviceExecutionQueue.setScsj(DateUtil.formatDateTime(DateUtil.date()));
ddjDeviceExecutionQueue.setRwlx(DDJ_RWLX_3);
ddjDeviceExecutionQueueService.insertDdjDeviceExecutionQueue(ddjDeviceExecutionQueue);
outJob.setStatus("3");
outJob.setStartTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
outJob.setExecutionPhase(TASK_EP_DDJ);
mydoJobService.updateMydoJob(outJob);
} else {
log.info("任务已存在 rwh{}", outJob.getTaskNo());
}
}
}
@@ -212,106 +231,113 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
* 创建入库放货队列
*/
private void generateInBoundLoadQueue(MsgDdj ddj) {
if (ddj.getCzfs() == 5 && ddj.getSbzt() == 0 && ddj.getHczt()==1 && ddj.getYxxf() == 1 && ddj.getHeight()>0) {
if (ddj.getCzfs() == 5 && ddj.getSbzt() == 0 && ddj.getHczt() == 1 && ddj.getYxxf() == 1 && ddj.getHeight() > 0) {
//允许下发 联机 有货待机
if (ddj.getTrayCode() != null && StrUtil.isNotEmpty(ddj.getTrayCode().trim()) && !ddj.getTrayCode().equals("00000000")) {
MydoJob param = new MydoJob();
param.setTrayCode(ddj.getTrayCode());
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(param);
MydoJob inJob = null;
if (CollUtil.isEmpty(mydoJobs)) {
//获取 重量spare3
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(ddj.getRwh(), ddj.getId());
if (ObjUtil.isNotNull(ddjDeviceExecutionQueue)){
//请求wms获取任务 并生成队列
AjaxResult result = apiService.selectMydoJobByTrayCodeAndEntranceId(getParamMap(ddj.getTrayCode(),Convert.toInt(ddj.getHeight()),Convert.toDouble(ddjDeviceExecutionQueue.getSpare3())));
if (result.isSuccess()) {
inJob = BeanUtil.toBean(result.get("data"), MydoJob.class);
inJob.setStatus(TASK_STATUS_CREATE);
inJob.setExecutionPhase(TASK_EP_ROADWAY_SSJ);
inJob.setRoadwayId(Convert.toStr(ddj.getId()));
inJob.setFaultFlag("0");
mydoJobService.insertMydoJob(inJob);
} else {
createRollbackQueue(ddj,2);
log.error(result.get("msg").toString());
if (ddj.getTrayCode() != null && StrUtil.isNotEmpty(ddj.getTrayCode().trim())) {
if ("11111111".equals(ddj.getTrayCode()) || "NoRead00".equalsIgnoreCase(ddj.getTrayCode())){
createRollbackQueue(ddj, 1);
}else if (!"00000000".equals(ddj.getTrayCode())){
String trayCode = ddj.getTrayCode();
trayCode = trayCode.substring(trayCode.length()-4);
MydoJob param = new MydoJob();
param.setTrayCode(trayCode);
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(param);
MydoJob inJob = null;
if (CollUtil.isEmpty(mydoJobs)) {
//获取 重量spare3
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(ddj.getRwh(), ddj.getId());
if (ObjUtil.isNotNull(ddjDeviceExecutionQueue)) {
//请求wms获取任务 并生成队列
AjaxResult result = apiService.selectMydoJobByTrayCodeAndEntranceId(getParamMap(trayCode, Convert.toInt(ddj.getHeight()), Convert.toDouble(ddjDeviceExecutionQueue.getSpare3())));
if (result.isSuccess()) {
inJob = BeanUtil.toBean(result.get("data"), MydoJob.class);
inJob.setStatus(TASK_STATUS_CREATE);
inJob.setExecutionPhase(TASK_EP_ROADWAY_SSJ);
inJob.setRoadwayId(Convert.toStr(ddj.getId()));
inJob.setFaultFlag("0");
mydoJobService.insertMydoJob(inJob);
} else {
createRollbackQueue(ddj, 2);
log.error(result.get("msg").toString());
}
}
} else {
inJob = mydoJobs.get(0);
}
} else {
inJob = mydoJobs.get(0);
}
if (ObjUtil.isNotNull(inJob) && inJob.getExecutionPhase().equals(TASK_EP_ROADWAY_SSJ)) {
DdjDeviceExecutionQueue ddjQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(Convert.toLong(inJob.getTaskNo()), ddj.getId());
if (ObjUtil.isNull(ddjQueue)) {
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(inJob.getCargoSpaceId());
if (ObjUtil.isNotNull(basCargoSpace)) {
ddjTaskFinish(ddj.getRwh(), ddj.getId(), 2);
if (ObjUtil.isNotNull(inJob) && inJob.getExecutionPhase().equals(TASK_EP_ROADWAY_SSJ)) {
DdjDeviceExecutionQueue ddjQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(Convert.toLong(inJob.getTaskNo()), ddj.getId());
if (ObjUtil.isNull(ddjQueue)) {
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(inJob.getCargoSpaceId());
if (ObjUtil.isNotNull(basCargoSpace)) {
ddjTaskFinish(ddj.getRwh(), ddj.getId(),2);
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue();
ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID());
ddjDeviceExecutionQueue.setRwh(Convert.toLong(inJob.getTaskNo()));
ddjDeviceExecutionQueue.setDevName(ddj.getName());
ddjDeviceExecutionQueue.setDevId(ddj.getId());
ddjDeviceExecutionQueue.setRwzt(0);
ddjDeviceExecutionQueue.setYph(1);
ddjDeviceExecutionQueue.setYlh(1);
ddjDeviceExecutionQueue.setYch(1);
ddjDeviceExecutionQueue.setMbph(Convert.toInt(basCargoSpace.getThePlatoon()));
ddjDeviceExecutionQueue.setMblh(Convert.toInt(basCargoSpace.getTheColumn()));
ddjDeviceExecutionQueue.setMbch(Convert.toInt(basCargoSpace.getTheFloor()));
ddjDeviceExecutionQueue.setDdjxf("0");
ddjDeviceExecutionQueue.setMlfs(5);
ddjDeviceExecutionQueue.setScsj(DateUtil.formatDateTime(DateUtil.date()));
ddjDeviceExecutionQueue.setRwlx(DDJ_RWLX_2);
ddjDeviceExecutionQueueService.insertDdjDeviceExecutionQueue(ddjDeviceExecutionQueue);
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue();
ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID());
ddjDeviceExecutionQueue.setRwh(Convert.toLong(inJob.getTaskNo()));
ddjDeviceExecutionQueue.setDevName(ddj.getName());
ddjDeviceExecutionQueue.setDevId(ddj.getId());
ddjDeviceExecutionQueue.setRwzt(0);
ddjDeviceExecutionQueue.setYph(1);
ddjDeviceExecutionQueue.setYlh(1);
ddjDeviceExecutionQueue.setYch(1);
ddjDeviceExecutionQueue.setMbph(Convert.toInt(basCargoSpace.getThePlatoon()));
ddjDeviceExecutionQueue.setMblh(Convert.toInt(basCargoSpace.getTheColumn()));
ddjDeviceExecutionQueue.setMbch(Convert.toInt(basCargoSpace.getTheFloor()));
ddjDeviceExecutionQueue.setDdjxf("0");
ddjDeviceExecutionQueue.setMlfs(5);
ddjDeviceExecutionQueue.setScsj(DateUtil.formatDateTime(DateUtil.date()));
ddjDeviceExecutionQueue.setRwlx(DDJ_RWLX_2);
ddjDeviceExecutionQueueService.insertDdjDeviceExecutionQueue(ddjDeviceExecutionQueue);
inJob.setStatus("3");
inJob.setStartTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
inJob.setExecutionPhase(TASK_EP_DDJ);
mydoJobService.updateMydoJob(inJob);
}else {
log.error("货位不存在 basCargoSpace{}",inJob.getCargoSpaceId());
inJob.setStatus("3");
inJob.setStartTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
inJob.setExecutionPhase(TASK_EP_DDJ);
mydoJobService.updateMydoJob(inJob);
} else {
log.error("货位不存在 basCargoSpace{}", inJob.getCargoSpaceId());
}
} else {
log.info("任务已存在 rwh{}", inJob.getTaskNo());
}
} else {
log.info("任务已存在 rwh{}", inJob.getTaskNo());
}
}
} else {
createRollbackQueue(ddj,1);
createRollbackQueue(ddj, 1);
}
}
}
private void createRollbackQueue(MsgDdj ddj,int type) {
private void createRollbackQueue(MsgDdj ddj, int type) {
DdjDeviceExecutionQueue pickQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(ddj.getRwh(), ddj.getId());
if (pickQueue != null){
if (pickQueue != null) {
Integer mbph = pickQueue.getYph();
Integer mblh = pickQueue.getYlh();
Integer mbch = pickQueue.getYch();
String road = "";
for (String roadway : roadwayMap.keySet()) {
List<Integer> integers = roadwayMap.get(roadway);
if (integers.get(0).equals(mbph) && integers.get(1).equals(mblh) && integers.get(2).equals(mbch)){
if (integers.get(0).equals(mbph) && integers.get(1).equals(mblh) && integers.get(2).equals(mbch)) {
road = roadway;
break;
}
}
if (!roadwayRollback.containsKey(road)){
log.error("未找到回滚任务号 p:{} l:{} c:{}",mbph,mblh,mbch);
if (!roadwayRollback.containsKey(road)) {
log.error("未找到回滚任务号 p:{} l:{} c:{}", mbph, mblh, mbch);
return;
}
DeviceSsj roadWay = PlcSsjRead.deviceSsjMap.get(road);
if (roadWay.getKx()==1){
if (roadWay.getKx() == 1) {
long rwh = roadwayRollback.get(road);
log.info("扫码失败,放回原位 排:{} 列:{} 层:{} 任务号:{}", mbph, mblh, mbch, rwh);
DdjDeviceExecutionQueue ddjQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(rwh, ddj.getId());
if (ObjUtil.isNull(ddjQueue)) {
ddjTaskFinish(ddj.getRwh(), ddj.getId(),2);
ddjTaskFinish(ddj.getRwh(), ddj.getId(), 2);
if (type == 2){
rwh = rwh+100;
if (type == 2) {
rwh = rwh + 100;
}
@@ -335,8 +361,8 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
}
}
}else {
log.error("未找到回滚任务号 rwh{}",ddj.getRwh());
} else {
log.error("未找到回滚任务号 rwh{}", ddj.getRwh());
}
}
@@ -350,13 +376,14 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
for (DeviceSsj ssj : roadSsjList) {
int taskNo = ssj.getTaskNo();
int rkqq = ssj.getRkqq();
if (taskNo > 0 && rkqq == 1) {
if (taskNo > 0 && rkqq == 1) {
//todo 连接称重 并保存数据
String czDeviceIpPort = czRoadwayMap.get(ssj.getDeviceCode());
String[] split = czDeviceIpPort.split(":");
String weight = CheckWeight.sendWeight(split[0], Convert.toInt(split[1]));
Double aDouble = Convert.toDouble(weight);
DdjDeviceExecutionQueue ddjQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(Convert.toLong(ssj.getTaskNo()), ddj.getId());
if (ObjUtil.isNull(ddjQueue) ) {
if (ObjUtil.isNull(ddjQueue) && aDouble > 0) {
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue();
ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID());
ddjDeviceExecutionQueue.setRwh(Convert.toLong(ssj.getTaskNo()));
@@ -393,15 +420,15 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
Long rwh = ddj.getRwh();
//完成作业
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(rwh, ddj.getId());
if (ObjUtil.isNotNull(ddjDeviceExecutionQueue)){
if (ddjDeviceExecutionQueue.getRwlx()==2 || ddjDeviceExecutionQueue.getRwlx()==3 ){
if (ObjUtil.isNotNull(ddjDeviceExecutionQueue)) {
if (ddjDeviceExecutionQueue.getRwlx() == 2 || ddjDeviceExecutionQueue.getRwlx() == 3) {
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh);
if (ObjUtil.isNotNull(mydoJob)){
if (ObjUtil.isNotNull(mydoJob)) {
//回传完成信号
ddjTaskFinish(rwh, ddj.getId(),1);
ddjTaskFinish(rwh, ddj.getId(), 1);
}
}else if (ddjDeviceExecutionQueue.getRwlx() == 4){
ddjTaskFinish(rwh, ddj.getId(),2);
} else if (ddjDeviceExecutionQueue.getRwlx() == 4) {
ddjTaskFinish(rwh, ddj.getId(), 2);
}
}
}
@@ -497,12 +524,12 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
}
}
//正常下发
if (ddj.getYxxf() == 1 && ddj.getCzfs() == 5 ) {
if (ddj.getYxxf() == 1 && ddj.getCzfs() == 5) {
DdjDeviceExecutionQueue ddjDeviceExecutionRunningQueueParam = new DdjDeviceExecutionQueue();
ddjDeviceExecutionRunningQueueParam.setDdjxf("1");
List<DdjDeviceExecutionQueue> ddjDeviceExecutionQueues1 = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueList(ddjDeviceExecutionRunningQueueParam);
if (CollUtil.isNotEmpty(ddjDeviceExecutionQueues1)){
if (CollUtil.isNotEmpty(ddjDeviceExecutionQueues1)) {
log.info("正在执行任务 {}", ddjDeviceExecutionQueues1.get(0).getRwh());
return;
}
@@ -576,8 +603,8 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
* @param rwh 作业单号
* @param id 作业单id
*/
private void ddjTaskFinish(Long rwh, Integer id,Integer type) {
mydoJobService.ddjTaskFinish(rwh, id,type);
private void ddjTaskFinish(Long rwh, Integer id, Integer type) {
mydoJobService.ddjTaskFinish(rwh, id, type);
}
@@ -601,4 +628,11 @@ public abstract class BaseDdjThread implements Runnable, DdjThreadInterface {
byte[] sendData = Tools.sendDataToDevice(taskNo, null, yph, ylh, ych, mbph, mblh, mbch, mlfs, xfwc, jym);
return plcDdjRead.WriteToDDJ("DB61.0", sendData);
}
public static void main(String[] args) {
String a = "00001234";
String b = "004567";
System.out.println(a.substring(a.length()-4));
System.out.println(b.substring(b.length()-4));
}
}

View File

@@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import static com.ruoyi.common.Constant.ROADWAY_ID_01;
import static com.ruoyi.common.Constant.WAREHOUSE_01;
@@ -22,49 +23,55 @@ public class Ddj1Thread extends BaseDdjThread {
public volatile boolean isRun = true;
public Ddj1Thread(PlcDdjRead plcDdjRead) {
super(plcDdjRead);
public Ddj1Thread(PlcDdjRead plcDdjRead,PlcSsjRead plcSsjRead) {
super(plcDdjRead,plcSsjRead);
}
@Override
public void init() {
/*super.init();
super.init();
ddjCodeList = new HashMap<>();
ssjList = new HashMap<>();
ArrayList<MsgDdj> ddjCodes = new ArrayList<>();
ddjCodes.add(PlcDdjRead.deviceDdjMap.get("ddj1"));
ArrayList<String> ddjCodes = new ArrayList<>();
ddjCodes.add("ddj1");
ddjCodeList.put("ddj", ddjCodes);
ArrayList<DeviceSsj> roadSsjList = new ArrayList<>();
roadSsjList.add(PlcSsjRead.deviceSsjMap.get("L2001"));
roadSsjList.add(PlcSsjRead.deviceSsjMap.get("L2002"));
roadSsjList.add(PlcSsjRead.deviceSsjMap.get("L2007"));
roadSsjList.add(PlcSsjRead.deviceSsjMap.get("L2008"));
ArrayList<String> roadSsjList = new ArrayList<>();
roadSsjList.add("L2001");
roadSsjList.add("L2002");
roadSsjList.add("L2007");
roadSsjList.add("L2008");
ssjList.put("roadSsjList", roadSsjList);
ArrayList<DeviceSsj> outSsj1 = new ArrayList<>();
outSsj1.add(PlcSsjRead.deviceSsjMap.get("L2001"));
ArrayList<String> outSsj1 = new ArrayList<>();
outSsj1.add("L2001");
ssjList.put("outSsj1", outSsj1);
ArrayList<DeviceSsj> outSsj2 = new ArrayList<>();
outSsj2.add(PlcSsjRead.deviceSsjMap.get("L2002"));
ArrayList<String> outSsj2 = new ArrayList<>();
outSsj2.add("L2002");
ssjList.put("outSsj2", outSsj2);
ArrayList<DeviceSsj> outSsj3 = new ArrayList<>();
outSsj3.add(PlcSsjRead.deviceSsjMap.get("L2007"));
ArrayList<String> outSsj3 = new ArrayList<>();
outSsj3.add("L2007");
ssjList.put("outSsj3", outSsj3);
ArrayList<DeviceSsj> outSsj4 = new ArrayList<>();
outSsj4.add(PlcSsjRead.deviceSsjMap.get("L2008"));
ArrayList<String> outSsj4 = new ArrayList<>();
outSsj4.add("L2008");
ssjList.put("outSsj4", outSsj4);
//初始化巷道口 排 列 层
roadwayMap.put("L2001", Arrays.asList(1, 0, 1));
roadwayMap.put("L2002", Arrays.asList(2, 0, 1));
roadwayMap.put("L2007", Arrays.asList(1, 22, 1));
roadwayMap.put("L2008", Arrays.asList(2, 22, 1));
roadwayMap.put("L2007", Arrays.asList(1, 20, 1));
roadwayMap.put("L2008", Arrays.asList(2, 20, 1));
roadwayRollback.put("L2001", 80);
roadwayRollback.put("L2002", 81);
roadwayRollback.put("L2007", 82);
roadwayRollback.put("L2008", 83);
//初始化称重设备连接ip port
czRoadwayMap.put("L2001", "172.19.50.72:4001");
czRoadwayMap.put("L2002", "172.19.50.72:4001");
czRoadwayMap.put("L2007", "172.19.50.73:4001");
czRoadwayMap.put("L2008", "172.19.50.74:4001");
log.info("Ddj1Thread init");*/
log.info("Ddj1Thread init");
}
@@ -90,7 +97,13 @@ public class Ddj1Thread extends BaseDdjThread {
@Override
public DdjDeviceExecutionQueue getOtherOutDdjQueue(String exitSsj) {
return null;
List<Integer> integers = roadwayMap.get(exitSsj);
DdjDeviceExecutionQueue param = new DdjDeviceExecutionQueue();
param.setDevId(1);
param.setMbph(integers.get(0));
param.setMblh(integers.get(1));
param.setMbch(integers.get(2));
return param;
}

View File

@@ -19,8 +19,8 @@ import static com.ruoyi.common.Constant.*;
@Slf4j
public class Ddj2Thread extends BaseDdjThread {
public Ddj2Thread(PlcDdjRead plcDdjRead) {
super(plcDdjRead);
public Ddj2Thread(PlcDdjRead plcDdjRead,PlcSsjRead plcSsjRead) {
super(plcDdjRead,plcSsjRead);
}
@Override

View File

@@ -19,8 +19,8 @@ import static com.ruoyi.common.Constant.*;
@Slf4j
public class Ddj3Thread extends BaseDdjThread {
public Ddj3Thread(PlcDdjRead plcDdjRead) {
super(plcDdjRead);
public Ddj3Thread(PlcDdjRead plcDdjRead,PlcSsjRead plcSsjRead) {
super(plcDdjRead,plcSsjRead);
}
@Override

View File

@@ -20,8 +20,8 @@ import static com.ruoyi.common.Constant.*;
@Slf4j
public class Ddj4Thread extends BaseDdjThread {
public Ddj4Thread(PlcDdjRead plcDdjRead) {
super(plcDdjRead);
public Ddj4Thread(PlcDdjRead plcDdjRead,PlcSsjRead plcSsjRead) {
super(plcDdjRead,plcSsjRead);
}
@Override
@@ -51,8 +51,8 @@ public class Ddj4Thread extends BaseDdjThread {
roadwayRollback.put("L1002", 93);
//初始化称重设备连接ip port
czRoadwayMap.put("L1001", "192.168.57.101:4001");
czRoadwayMap.put("L1002", "192.168.57.101:4001");
czRoadwayMap.put("L1001", "172.19.40.203:4001");
czRoadwayMap.put("L1002", "172.19.40.202:4001");
log.info("Ddj4Thread init");
}

View File

@@ -19,8 +19,8 @@ import static com.ruoyi.common.Constant.*;
@Slf4j
public class Ddj5Thread extends BaseDdjThread {
public Ddj5Thread(PlcDdjRead plcDdjRead) {
super(plcDdjRead);
public Ddj5Thread(PlcDdjRead plcDdjRead,PlcSsjRead plcSsjRead) {
super(plcDdjRead,plcSsjRead);
}
@Override

View File

@@ -19,8 +19,8 @@ import static com.ruoyi.common.Constant.*;
@Slf4j
public class Ddj6Thread extends BaseDdjThread {
public Ddj6Thread(PlcDdjRead plcDdjRead) {
super(plcDdjRead);
public Ddj6Thread(PlcDdjRead plcDdjRead,PlcSsjRead plcSsjRead) {
super(plcDdjRead,plcSsjRead);
}
@Override

View File

@@ -1,6 +1,13 @@
package com.ruoyi.schedule.scheduleTask.monit;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.ruoyi.bas.fault.domain.BasFaultRecord;
import com.ruoyi.bas.fault.service.IBasFaultRecordService;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.device.ddj.domain.MsgDdj;
import com.ruoyi.device.ddj.service.IMsgDdjService;
import com.ruoyi.device.ssj.domain.DeviceSsj;
import com.ruoyi.device.ssj.service.IDeviceSsjService;
@@ -8,6 +15,9 @@ import com.ruoyi.schedule.plcRead.ddj.PlcDdjRead;
import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.List;
/**
* 监控线程
*/
@@ -18,11 +28,13 @@ public class MonitoringThread implements Runnable {
private IDeviceSsjService deviceSsjService;
private IMsgDdjService msgDdjService;
private IBasFaultRecordService basFaultRecordService;
public void init() {
deviceSsjService = SpringUtils.getBean(IDeviceSsjService.class);
msgDdjService = SpringUtils.getBean(IMsgDdjService.class);
basFaultRecordService = SpringUtils.getBean(IBasFaultRecordService.class);
}
@Override
@@ -35,7 +47,38 @@ public class MonitoringThread implements Runnable {
deviceSsjService.updateDeviceSsj(deviceSsj);
}
for (String ddjCode : PlcDdjRead.deviceDdjMap.keySet()) {
msgDdjService.updateMsgDdj(PlcDdjRead.deviceDdjMap.get(ddjCode));
MsgDdj msgDdj = PlcDdjRead.deviceDdjMap.get(ddjCode);
msgDdjService.updateMsgDdj(msgDdj);
if (msgDdj.getSbzt() > 1000) {
//查询记录,添加故障开始时间
BasFaultRecord param = new BasFaultRecord();
param.setTaskNo(Convert.toStr(msgDdj.getRwh()));
param.setDeviceId(Convert.toStr(msgDdj.getId()));
List<BasFaultRecord> basFaultRecords = basFaultRecordService.selectBasFaultRecordList(param);
if (CollUtil.isEmpty(basFaultRecords)){
BasFaultRecord record = new BasFaultRecord();
record.setId(IdUtil.simpleUUID());
record.setDeviceId(Convert.toStr(msgDdj.getId()));
record.setDeviceName(msgDdj.getName());
record.setDeviceType("ddj");
record.setTaskNo(Convert.toStr(msgDdj.getRwh()));
record.setStartTime(DateUtil.formatDateTime(new Date()));
record.setFault(Convert.toStr(msgDdj.getSbzt()));
basFaultRecordService.insertBasFaultRecord(record);
}
}
if (msgDdj.getSbzt() < 1000 && msgDdj.getCzfs()==5){
//查询记录 更新故障结束时间
BasFaultRecord param = new BasFaultRecord();
param.setTaskNo(Convert.toStr(msgDdj.getRwh()));
param.setDeviceId(Convert.toStr(msgDdj.getId()));
List<BasFaultRecord> basFaultRecords = basFaultRecordService.selectBasFaultRecordList(param);
if (CollUtil.isNotEmpty(basFaultRecords)){
BasFaultRecord record = basFaultRecords.get(0);
record.setFinishTime(DateUtil.formatDateTime(new Date()));
basFaultRecordService.updateBasFaultRecord(record);
}
}
}
Thread.sleep(1500);
} catch (Exception e) {

View File

@@ -1,5 +1,7 @@
package com.ruoyi.schedule.util;
import cn.hutool.core.convert.Convert;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
@@ -48,8 +50,11 @@ public class CheckWeight {
}
public static void main(String[] args) {
CheckWeight checkWeight = new CheckWeight();
System.out.println(checkWeight.sendWeight("192.168.56.101", 4001));
/*CheckWeight checkWeight = new CheckWeight();
System.out.println(checkWeight.sendWeight("172.19.40.203", 4001));
System.out.println(checkWeight.sendWeight("172.19.40.202", 4001));*/
Double aDouble = Convert.toDouble("-000019");
System.out.println(aDouble);
}
}